在《浪潮之巅》这本书中,吴军老师描述了在Google早期的工作方式,其中有一段是这么写的:我一般会在吃完晚饭后把代码修改的清单发给克雷格做代码审核,他一般晚上10点左右会回复我,给我修改意见,详细到某一行多了一个空格。吴军老师所描述的内容,其实就是软件开发过程中的同行评审流程。
最近,我参与了多个软件版本的维护工作,发现不同版本程序质量差别很大。究竟是什么原因造成的?细究之后才发现,程序质量高的项目组在最终提交版本之前,无一例外都做了一件事情,那就是同行评审。看来,同行评审真的是十分重要。
对于广大的软件公司来说,几乎在所有的软件项目中,都需要同行评审。一个人不管能力多强,看问题的角度总会受到限制,写出来的程序和文档等也不会是十全十美的。如果能够让懂行的同事给参阅一下,并提出他们认为正确的意见,那么势必会弥补单个开发人员思维的缺陷,并在一定程度上提高程序和产品的质量。
一、什么是同行评审?
同行评审(Peer Review)是一种结构化的正式评审,由生产者(作者)的同行,为识别异常和需要修改的部分而对工作产品进行的有组织、有计划的检查。
同行评审并不是对个人的工作不信任,其目的是尽早有效地消除软件产品中的异常。
二、为什么要做同行评审?
在学校的时候,老师教导我们要独立完成作业,因此,如果你在那个时候对别人的作业或在考试过程中进行“同行评审”,就是违规的。但软件开发是一项团队性的工作,需要大家协作来完成,所以,那种不愿意公开自己工作成果接受他人审阅的做法是行不通的。
为什么要做同行评审?
第一,凡是人皆有出错的时候,要保证你做出的东西错误尽量少,就需要他人对其进行评审。这就是所谓的“三个臭皮匠,顶个诸葛亮。”
第二,对于软件产品来说,缺陷发现得越早,纠正缺陷所需的费用就越少。因此,在软件的开发阶段,如果严格进行同行评审,那么后续流程中出现的错误就会很少,这也可以为公司节约纠错的成本。
第三,同行评审过程中发现的错误可作为案例传承下去,避免开发人员再次掉进同一个陷阱。“前事不忘,后事之师”,别人所犯的错误对自己有警示的作用。特别是对于新员工来说,经常参与同行评审,可减少试错的次数,也能够达到对新工作及早上手的目的。
三、同行评审的对象是什么?
在产品开发的各个阶段中,需要参与同行评审的对象包括:
四、同行评审有哪几种类型?
同行评审的类型包括:审查、走查、单人复审和多人复审等。
五、什么是审查?审查的角色都有哪些?审查的步骤有哪些?有效评审的原则有哪些?
审查是同行评审的一种,在软件项目中占有重要地位。
1.审查的定义:审查(Inspection)是一种正规的同行评审,适用于重要性和重复性较高的软件产品。
2.审查的角色:包括主持人、讲解员、记录员、作者和审查员。一般说来,参与审查的有3到7人。各角色的分工如下:
3.审查活动的步骤有7个,如下图所示:
4.有效评审的原则包括:
当然,以上有效评审的原则很难同时满足,各项目组要根据实际的情况来组织评审。
六、什么是代码评审?其目的是什么?
对于软件开发工程师来说,代码评审是不可缺少的一个环节,也是提高代码质量的一种有效的手段。
1.代码评审的定义:代码评审是一种正式的针对程序发起的一项同行评审活动,它由一组职责明确的主持人、作者、记录员、审查员等人员通过一系列明确定义的过程对代码进行静态检查来发现代码中的异常。
2.代码评审的目的:提早发现代码缺陷、去除缺陷,以降低开发成本并提高产品质量。
七、如何彻底地执行同行评审?
同行评审流程固然重要,但要彻底地执行下去,需要做到以下几点:
第一,公司要明确规定所有的软件开发项目必须走同行评审的流程,并定期抽查同行评审的执行情况。
第二,作者本人要持有开放心态,愿意分享自己的工作成果,并勇于承认自身的不足而加以改进。很多人都不大乐意被别人指出自身的问题,而同行评审的目的就是要发现问题,因此,这在一定程度上是对作者心态的考验。作者本人要明白是产品有缺陷,要对产品中的问题进行完善。
第三,评审人员要对事不对人,要懂得同行评审是为了发现产品的缺陷,而非人自身的问题。不要将同行评审活动变性为针对作者本人的人身攻击,这就有伤整个团队的凝聚力。同行评审的一个宗旨就是大家在一起学习,取长补短,共同提高。
第四,公司要对同行评审的结果进行总结,并以文档的形式保存起来,方便后期查阅。很多软件产品出现的问题都是相似的。在着手开发产品之前,如果能够了解前期类似产品中出现的问题,那么大家就可以少走很多弯路,工作效率和产品质量也在无形中得到了提高。
为了确保软件产品的质量,所有的工作成果(包括程序、文档、图形等)都应该接受同行评审。“三人行,则必有我师”,不管是老员工,还是新员工,都能够从同行评审中受益。
作者介绍:周兆熊,重庆潼南人。2009年7月毕业于海南大学通信工程专业,2012年4月毕业于南京邮电大学计算机应用技术专业,获工学硕士学位。现在中兴通讯股份有限公司重庆研发中心从事软件开发工作。微博:@周兆熊,微信:245924426。