让你提前认识软件开发(47):同行评审

第3部分 软件研发工作总结

同行评审

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

吴军老师所描述的内容,其实就是软件开发中的同行评审流程

几乎在所有的软件项目中,都需要同行评审。一个人不管能力多强,看问题的角度总会受到限制,写出来的程序和文档等定不会是十全十美的。如果能够让懂行的同事给参阅一下,并提出他们认为正确的意见,那么势必会减少软件产品中的缺陷,取得个人难以达到的效果。因此,同行评审流程对于广大的软件工程师来说,是十分重要的,也是不可或缺的。

        1. 什么是同行评审?

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

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

         2. 为什么要做同行评审?

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

为什么要做同行评审呢?

第一,凡是人皆有出错的时候,要保证你做出的东西里面的错误尽量少,就需要他人对其进行评审。

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

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

        3. 同行评审有哪几种类型?

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

        4. 同行评审的对象是什么?

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

(1) 概念阶段:产品需求说明书等。

(2) 计划阶段:系统方案、项目计划等。

(3) 开发阶段:详细设计、单元测试规程(方案)、集成测试规程(方案)、代码、数据库脚本等。一般而言,在开始编码之前,先要进行详细设计评审,以确保程序的正确性,减少后续修改带来的不良影响。

(4) 验证阶段:系统测试计划、系统测试规程(方案)等。

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

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

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

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

1) 主持人:需要具备领导技巧,负责管理审查过程,是审查流程的关键角色。

2) 作者:提供审查材料,并提供概要介绍;此外,作者也可以充当评审员。

3) 记录员:按照主持人的示意记录产品和程序等的异常,在记录的同时要记录异常分类,并大声朗读记录下来的缺陷。

4) 讲解员:充分理解审查材料,并在讲解的同时加以解释。该角色不能由作者担当。

5) 审查员:所有参与审查的人员都可以是评审员;主要负责理解被审材料、进行个人检查、做好准备并参加审查会议。

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

(4) 有效评审的原则包括:

1) 在预审期间要使用检查单,以避免发现缺陷不知道记录在哪里的情况发生。

2) 避免过度依赖检查单。

3) 审查会议要限制在2小时之内,以避免长时间讨论而偏离了审查会议的主题。

4) 审查的对象是产品而非生产者(作者),因此要避免对作者本人进行人身攻击。

5) “磨刀不误砍柴工”,要给评审员提供足够的预审时间,一般以提前两天为佳。

6) 如果有与会人员未准备好,则将会议延期;如果有人确实抽不出时间,则取消评审。

        6. 什么是代码评审?其目的是什么?

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

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

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

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

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

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

第三,很重要的一点,公司要对同行评审的结果进行总结,并以文档的形式保存起来,方便后期查阅。很多软件产品出现的问题都是相似的,在着手开发产品之前,如果能够了解前期类似产品中出现的问题,那么可以少走很多弯路,节约了工作时间,提高了工作效率。

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

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

让你提前认识软件开发(47):同行评审,布布扣,bubuko.com

时间: 2024-10-11 12:18:55

让你提前认识软件开发(47):同行评审的相关文章

让你提前认识软件开发(46):首先是为人编写程序,其次才是计算机

第3部分 软件研发工作总结 首先是为人编写程序,其次才是计算机 "首先是为人编写程序,其次才是计算机",这是软件开发的基本要点,软件的生命周期贯穿于产品的开发.测试.生产.发布.用户使用.版本升级和后期维护等长期过程中,只有易读.易维护的软件代码才具有生命力. 在实际的软件开发过程中,可能是由于工作很忙的原因,很多开发人员只注重实现程序的基本功能,而忘记了编程规范,因此写出来的代码只能让计算机看懂,人要看懂很不容易.更有甚者,有些项目组为了赶进度,明确要求组员以实现产品功能为主,代码能

让你提前认识软件开发(40):既要写好代码,又要写好文档

第3部分 软件研发工作总结 既要写好代码,又要写好文档 对于软件相关行业,在学校或单位上,大家也许都已经注意到了,除了要编写的程序.绘制设计图之外,还有一个重要的工作便是写文档.为什么要写文档呢?因为我们要把自己做的东西展示出来,不光展示给同行看,可能还要展示给其他岗位上的工作人员看,甚至展示给用户看.如果我们只是会写程序,不会在文档中描述自己的想法,那么就真正的成为"码农"了. 工作也有一段时间了,我发现周围的同事,会写高质量文档的确实很少.李开复老师在<浪潮之巅>的序言

让你提前认识软件开发(22):shell脚本中的文件操作

第1部分 重新认识C语言 shell脚本中的文件操作 [文章摘要] 编写shell脚本时,经常会涉及到对文件的操作,比如从文件中读取一行数据.向文件追加一行数据等.完成文件读写操作的方法有很多,了解各种命令下文件操作的执行情况,有助于开发人员在不同使用场景下选择合适的命令. 本文以实际的shell脚本为例,介绍了对文件进行操作的不同方法,为相关开发工作提供了参考. [关键词] shell  文件操作  读写  效率 一.概述 在某些软件项目的需求文档中,要求程序一次性读或写的数据规模较大,可达1

让你提前认识软件开发(38):完成第一个新需求

第3部分 软件研发工作总结 完成第一个新需求 在入职后不久,我得到了第一个新任务:完成某个版本的一个新需求.所谓的"需求",就是用文档的形式告诉我们要做什么,要实现什么功能. 在得到需求文档之后,我仔仔细细地阅读了好几遍,发现有些地方自己并不是很明白.如果在自己都不是很确定的情况下修改代码,其后果是很严重的,项目经理曾经这样告诫我.我把自己的疑惑以邮件的形式发给了SE(系统工程师),让他把需求讲明白.在我们公司,SE负责写需求,他们要把用户想要实现的功能写成文档,然后让软件开发工程师来

让你提前认识软件开发(45):代码的第一印象

第3部分 软件研发工作总结 代码的第一印象 我们都很注重给别人的第一印象,也有很多书籍教我们怎样给别人留下一个美好印象的.确实,如果我们第一眼看到某个人,就觉得很不爽,那么一定会在心理上产生抵触,以后再见到他,会有一种疏远的感觉.也正因为如此,当今社会交往中的"面子工程"很重要,不管怎样,先撑足了自己的脸面再说. 代码也一样,也会给别人留下或好或差的印象.当我们看到优美的代码时,会有一种想继续研究下去的欲望,甚至会有一种觉得很享受的感觉.相反,当我们看到丑陋的代码时,就会咬牙切齿,因为

让你提前认识软件开发(44):如何解决软件故障?

第3部分 软件研发工作总结 如何解决软件故障? 在软件产品的运营维护阶段,软件工程师的一项重要工作就是解决软件的bug.在学校的时候,大家学完一门课程,然后考试通过就万事大吉了.但在实际的软件开发项目中,将软件成功交付给客户,只是"万里长征走完了第一步",后面还有大量的工作要做,例如:解决软件故障.新增功能.版本升级等.作为一名合格的软件工程师,一定要学会准确.迅速地解决软件出现的各种问题. 为什么解决软件问题的能力如此重要?因为软件项目的成功率不容乐观.国内某IT公司对本公司内软件项

让你提前认识软件开发(20):如何在C语言里面执行SQL语句?

[文章摘要] 在通信类软件中,程序经常需要与数据库打交道.为了实现诸如从数据库中获取数据.更新数据库表某字段.插入或删除某条数据等功能,就需要在C语言程序中构造一些SQL语句,并用函数来执行这些SQL语句. 本文介绍如何在C语言程序中构造并执行SQL语句,为相关软件开发工作的开展提供了参考. [关键词] SQL语句  C语言  程序  流程  开发 一.为什么要在C语言程序中执行SQL语句? 在C语言程序中执行SQL语句的原因有以下几个: (1) 程序需要获取数据库中某数据表的字段值,并对这些字

让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议

第2部分 数据库SQL语言 数据库存储过程中的重要表信息的保存及相关建议 1. 存储过程中的重要表信息的保存 在很多存储过程中,会涉及到对表数据的更新.插入或删除等,为了防止修改之后的表数据出现问题,同时方便追踪问题,一般会为一些重要的表建立一个对应的debug表.这个debug表中的字段要包括原表的所有字段,同时要增加操作时间.操作码和操作描述等字段信息. 例如,在某项目中,包括了如下一个重要的表tb_XXX: create table tb_XXX (      AAA           

让你提前认识软件开发(24):C语言的发展历史和主要特点

第1部分 重新认识C语言 C语言的发展历史和主要特点 作为一门众所周知的计算机编程语言,C语言是谁发明的呢?它是如何演进的?它有何特点?到底有多少人在使用它? 1. C语言之父 C语言是1972年由美国贝尔实验室的计算机科学家Dennis Ritchie(丹尼斯·里奇)设计发明的.因此,Dennis Ritchie被誉为"C语言之父"(他已于2011年10月9日去世,享年70岁).图1中的人物就是Dennis Ritchie. 图1 "C语言之父" Dennis R