阅读更多

在《浪潮之巅》这本书中,吴军老师描述了在Google早期的工作方式,其中有一段是这么写的:我一般会在吃完晚饭后把代码修改的清单发给克雷格做代码审核,他一般晚上10点左右会回复我,给我修改意见,详细到某一行多了一个空格。吴军老师所描述的内容,其实就是软件开发过程中的同行评审流程。

最近,我参与了多个软件版本的维护工作,发现不同版本程序质量差别很大。究竟是什么原因造成的?细究之后才发现,程序质量高的项目组在最终提交版本之前,无一例外都做了一件事情,那就是同行评审。看来,同行评审真的是十分重要。



对于广大的软件公司来说,几乎在所有的软件项目中,都需要同行评审。一个人不管能力多强,看问题的角度总会受到限制,写出来的程序和文档等也不会是十全十美的。如果能够让懂行的同事给参阅一下,并提出他们认为正确的意见,那么势必会弥补单个开发人员思维的缺陷,并在一定程度上提高程序和产品的质量。

一、什么是同行评审?

同行评审(Peer Review)是一种结构化的正式评审,由生产者(作者)的同行,为识别异常和需要修改的部分而对工作产品进行的有组织、有计划的检查。

同行评审并不是对个人的工作不信任,其目的是尽早有效地消除软件产品中的异常。

二、为什么要做同行评审?

在学校的时候,老师教导我们要独立完成作业,因此,如果你在那个时候对别人的作业或在考试过程中进行“同行评审”,就是违规的。但软件开发是一项团队性的工作,需要大家协作来完成,所以,那种不愿意公开自己工作成果接受他人审阅的做法是行不通的。

为什么要做同行评审?

第一,凡是人皆有出错的时候,要保证你做出的东西错误尽量少,就需要他人对其进行评审。这就是所谓的“三个臭皮匠,顶个诸葛亮。”

第二,对于软件产品来说,缺陷发现得越早,纠正缺陷所需的费用就越少。因此,在软件的开发阶段,如果严格进行同行评审,那么后续流程中出现的错误就会很少,这也可以为公司节约纠错的成本。

第三,同行评审过程中发现的错误可作为案例传承下去,避免开发人员再次掉进同一个陷阱。“前事不忘,后事之师”,别人所犯的错误对自己有警示的作用。特别是对于新员工来说,经常参与同行评审,可减少试错的次数,也能够达到对新工作及早上手的目的。

三、同行评审的对象是什么?

在产品开发的各个阶段中,需要参与同行评审的对象包括:

  1. 概念阶段:产品需求说明书等。
  2. 计划阶段:系统方案、项目计划等。
  3. 开发阶段:详细设计、单元测试规程(方案)、集成测试规程(方案)、代码、数据库脚本等。一般而言,在开始编码之前,先要进行详细设计评审,以确保程序流程的正确性,减少后续修改带来的不良影响。
  4. 验证阶段:系统测试计划、系统测试规程(方案)等。

四、同行评审有哪几种类型?

同行评审的类型包括:审查、走查、单人复审和多人复审等。

五、什么是审查?审查的角色都有哪些?审查的步骤有哪些?有效评审的原则有哪些?

审查是同行评审的一种,在软件项目中占有重要地位。

1.审查的定义:审查(Inspection)是一种正规的同行评审,适用于重要性和重复性较高的软件产品。

2.审查的角色:包括主持人、讲解员、记录员、作者和审查员。一般说来,参与审查的有3到7人。各角色的分工如下:

  1. 主持人:需要具备领导技巧,负责管理审查过程,是审查流程中的关键角色。
  2. 作者:提供审查材料,并提供概要介绍;此外,作者也可以充当评审员。
  3. 记录员:按照主持人的示意记录产品和程序等的异常,在记录的同时要对异常进行分类。
  4. 讲解员:充分理解审查材料,并在讲解的同时加以解释。该角色不能由作者担当。
  5. 审查员:所有参与审查的人员都可以是审查员;主要负责理解被审材料、进行个人检查、做好准备并参加审查会议。

3.审查活动的步骤有7个,如下图所示:


 

4.有效评审的原则包括:

  1. 在预审期间要使用检查单,检查单用以记录发现的缺陷。
  2. 避免过度依赖检查单。
  3. 审查会议要限制在2小时之内,以避免长时间讨论而偏离了审查会议的主题。
  4. 审查的对象是产品而非生产者(作者),因此要避免对作者本人进行人身攻击。
  5. “磨刀不误砍柴工”,要给评审员提供足够的预审时间,一般以提前两天为佳。
  6. 如果有与会人员未准备好,则将会议延期;如果有人确实抽不出时间,则取消评审。

当然,以上有效评审的原则很难同时满足,各项目组要根据实际的情况来组织评审。

六、什么是代码评审?其目的是什么?

对于软件开发工程师来说,代码评审是不可缺少的一个环节,也是提高代码质量的一种有效的手段。

1.代码评审的定义:代码评审是一种正式的针对程序发起的一项同行评审活动,它由一组职责明确的主持人、作者、记录员、审查员等人员通过一系列明确定义的过程对代码进行静态检查来发现代码中的异常。

2.代码评审的目的:提早发现代码缺陷、去除缺陷,以降低开发成本并提高产品质量。

七、如何彻底地执行同行评审?

同行评审流程固然重要,但要彻底地执行下去,需要做到以下几点:

第一,公司要明确规定所有的软件开发项目必须走同行评审的流程,并定期抽查同行评审的执行情况。

第二,作者本人要持有开放心态,愿意分享自己的工作成果,并勇于承认自身的不足而加以改进。很多人都不大乐意被别人指出自身的问题,而同行评审的目的就是要发现问题,因此,这在一定程度上是对作者心态的考验。作者本人要明白是产品有缺陷,要对产品中的问题进行完善。

第三,评审人员要对事不对人,要懂得同行评审是为了发现产品的缺陷,而非人自身的问题。不要将同行评审活动变性为针对作者本人的人身攻击,这就有伤整个团队的凝聚力。同行评审的一个宗旨就是大家在一起学习,取长补短,共同提高。

第四,公司要对同行评审的结果进行总结,并以文档的形式保存起来,方便后期查阅。很多软件产品出现的问题都是相似的。在着手开发产品之前,如果能够了解前期类似产品中出现的问题,那么大家就可以少走很多弯路,工作效率和产品质量也在无形中得到了提高。

为了确保软件产品的质量,所有的工作成果(包括程序、文档、图形等)都应该接受同行评审。“三人行,则必有我师”,不管是老员工,还是新员工,都能够从同行评审中受益。

  • 大小: 57.9 KB
  • 大小: 13.7 KB
来自: CSDN
1
0
评论 共 1 条 请登录后发表评论
1 楼 JavaVsServlet 2014-09-22 13:39
这位仁兄,非常感谢你。说得很对,同行评审是一个有必要执行的步骤,避免项目因返工而带来成本、团队士气、团队凝聚力的直接影响。还有一个说得好,同行评审评审员应该对事、对作品提出问题及意见,而不能对人。时间把控也很重要,受教了。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • BLOG中显示你的MSN和QQ的状态

    BLOG中显示你的MSN和QQ的状态转自:gltankai的Blog个性化详解 http://blog.blogchina.com/article_46547.166388.html将以下代码粘贴到BLOG管理配置中静态新闻文本框中就可以了,保存页面,重新看看你的首页  MSN状态:            align="absmiddle" border="0" ALT="MSN On

  • 【畅言】提高软件产品质量的有效方法——同行评审

    那什么是同行评审?如何做呢? 在《浪潮之巅》这本书中,吴军老师描述了在Google早期的工作方式,其中有一段是这么写的:我一般会在吃完晚饭后把代码修改的清单发给克雷格做代码审核,他一般晚上10点左右...

  • 【代码评审】【畅言】提高软件产品质量的有效方法——同行评审

    在《浪潮之巅》这本书中...吴军老师所描述的内容,其实就是软件开发过程中的同行评审流程。 最近,我参与了多个软件版本的维护工作,发现不同版本程序质量差别很大。究竟是什么原因造成的?细究之后才发现,程序质量

  • 软件测试管理方法(十一)——软件评审

    0.基本概念 工作产品指软生命周期中各种产出物,包括各种文档、代码等。...③以更低成本、更高效地在软件开发生命周期的早期就发现问题,识别产品质量的隐患; ④确保该阶段的工作产品能够成为下阶段...

  • 产品经理学习总结(3)——测试用例的需求评审

    软件评审,IEEE定义为‘一种对软件元素所做的正式的、同行间的评审活动,其目的在于验证软件元素满足其规格说明,并能符合标准的要求’。CMMI中要求按照已文档化的规程在所选择的项目里程碑处(阶段成果物)进行正式...

  • 嵌入式开发:技巧和窍门——提高嵌入式软件代码质量的7个技巧

    对于开发人员来说,没有什么比试图维护和更新质量如此之差的代码更糟糕得了。...为了提高代码质量,这里有几个嵌入式开发人员可以遵循的技巧,并集成到自己的流程中,这将有助于提高他们的代码质量。...

  • 《软件质量保证与测试》第 11 章——软件质量保证 重点部分总结

    软件质量保证是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否...

  • CMMI再认识之“软件同行评审”

    来源:...     在软件开发过程中,同行评审是指由作者本人和他的一个或更多的同事对一个工作产品(文件、代码或其他)进行的审查,以评价其技术含量和质量。 目的 同行评审的目

  • 期末答案——软件测试和质量保障MOOC(华中科技大)第五期

    穷尽测试是一种非常有效的测试手段 B.静态测试不需要搭建测试环境 C.测试用例的基本组成包括:输入、预期输出和测试环境 D.测试用例能代表需求的小的测试单元 3‎以下描述中哪个

  • 软考笔记——9.软件工程

    软件需求:是指用户对系统在功能、行为、性能、设计约束等方面的期望。是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些...

  • 软件流程和管理(八):质量管理

    我们从两个广泛的角度来定义质量:终端用户的角度通常,终端用户通过与产品的互动来判断产品的质量。对用户来说,如果一个系统适合于目的,可靠,有合理的性能,易于学习和使用,并能帮助用户实现他们的目标,那么这...

  • 软件工程实践总结——在总结中成长

    思考个人在相关领域的经验和专长,以及是否对特定任务或技术有特别的兴趣,因为选择你擅长且感兴趣的工作,可以提高你的工作效率和质量。②沟通和合作能力:好的程序员不仅仅是技术能力强,还具备良好的沟通和合作...

  • PR VV 同行评审验证确认 用实例学CMMI V2.0

    如何提升(软件)交付质量 大家可先看看下面 Xerox 公司的缺陷统计数据 缺陷修复成本是越后越高,而且以倍数递增, 所以 软件工程有个重要原则,尽量第一次就把工作做好 (do it right the first time),...

  • 软件工程实践总结——程序员的自我修养

    软件工程实践总结

  • 软件工程实践总结——步履不停,行至尽头

    这是寒假作业博客个人技术总结——vue-quill-editor富文本插件的使用技术概述:Quill 是一款 API 驱动、功能强大的现代富文本编辑器。它具有易于拓展、各平台表现一致性等优点。Quill 是以可拓展性和定制化为理念...

  • 软件工程第三次作业——关于软件质量保障初探

    软件质量要保障用户以及利益相关者的需求,我们知道软件=程序+软件工程,由此可以得出软件的质量是由程序质量和软件工程质量构成的。程序的质量体现在软件外在功能的质量,软件工程的质量都体现在软件的开发过程,...

Global site tag (gtag.js) - Google Analytics