软件企业提高产品质量的手段,已经不仅仅是通过软件测试人员(SQC)的努力,而是越来越多的按照“测试前行”的理念配合同行评审(Peer Review)来提高软件产品的质量。其目的是为了及早和高效地从软件工作产品中识别并消除缺陷。但很多企业都会遇到一个问题,大家觉得同行评审的效果没有达到预期的目的,有些时候只是一个形式主义。那么如何才能将同行评审这把利器发挥的更有效果,下面将和大家一起对其进行彻底的剖析。
一、同行评审Peer Review的起源
在CMMI中同行评审是作为VER(VERIFICATION)验证的一个SG(特殊目标)被定义出来的。了解CMMI的朋友都会注意到CMMI中有VER验证和VAL确认两个PA,很多人都会有疑问,为什么同行评审Peer Review是属于VER而不是VAL呢?
这可以从ISQTB对软件静态测试的定义来分析。静态测试是相对于动态测试而言的,静态测试是不动态执行程序代码而寻找程序中可能存在的错误或评估程序的过程。相对于动态测试而言,静态测试成本更低,效率更高。因为静态测试可以在软件开发生命周期的早期就发现缺陷和问题,从而减少返工的成本。
所以同行评审是软件测试领域的一种技术手段,只是大家以前没有注意而已,所以CMMI才将其放在VER验证的下面。
二、同行评审的类型
按照被评审的对象进行划分,可以分为对代码的走查和对各种工作产品(Work Product)的评审。这里工作产品的意思是指在软件开发生命周期中所产生的各种对象,包括各种文档、组件等。
代码走查依据的是每个公司颁布的编码规范等技术标准,可以通过事先制定好的检查表(CheckList)进行检查。
从同行评审的形式上可以分为正式评审和非正式评审。非正式评审更加灵活、更加简单,但其过程不够严谨,适合对较小的工作产品进行检查。本文主要针对技术文档的正式评审过程进行讲解。
三、同行评审的准备工作
首先要识别参与的人员,应该避免单一角色的人员参与评审。例如:对需求文档的评审应该保证所有项目关系人的参与,其中客户代表和软件测试人员的参与是至关重要的;概要设计和详细设计文档的评审,开发人员的参与也十分关键。
第二,评审工作是要被计划的。很多项目管理人员在制定项目计划时,往往只关注软件产品本身,而忽略了例如同行评审、周会等小的、周期性的事件和任务,这是WBS分解不完整的典型错误。项目经理应该认识到如果这些小的任务累加起来,所花费的工作量也是十分惊人的。
第三,制定同行评审准入条款。为了避免在评审会上才发现待评审的工作产品是未完成的,因此,需要制定相关的检查条件,由作者或第三方对其进行事先检查。例如:需求文档中是否存在遗漏的功能,需求文档的格式是否符合要求,需求文档中的UseCase是否正确等等。一般会推荐项目经理来检查待评审的工作产品,因为大多数的评审会是由项目经理主持的。
第四,明确同行评审的方法。因为在评审会上仁者见仁智者见智,为了避免无休止的争论,事先确定评审的方法就非常重要的。常用的方法有一票否决制,加权打分法。
第五,制定同行评审的准出条款。也就是说什么样的工作产品是符合需求的,什么样的工作产品是可以得到与会人员的认可并通过本次同行评审的。例如:待评审的工作产品不能存在严重级别为1~3的缺陷;待评审的产品必须覆盖所有的业务功能等等。只有提前定义了准出的原则,那么在评审会上就不会发生无休止的争论。
第六,对本次同行评审的方法、准入条款和准出条款进行评审。如果这些内容不能得到与会人员的广泛认可,那么与会人员就没有一个共同的起点和目标,评审效果将大打折扣。对于不同工作产品评审的方法、准入和准出的条款,一般在组织范围内会提前定义,项目组只要使用就好。
第七,与会人员事先熟读文档。在公司范围内要逐渐营造一种氛围,评审工作也是和开发、设计、测试同等重要的。同行评审是一个集体活动,谁忽略了同行评审就等于浪费自己和大家的时间,是对集体的不尊重。另外,项目组要预留足够的时间给大家看文档,这也就是为什么同行评审是需要被提前计划的原因。
第八,定义同行评审的准则。在评审会上做到有备而来,这一点也是同行评审的核心部分。既然是多人、多角色的参与评审,那么每个人的视角就会不同,如何提高评审的效率,就只能是所有人都使用相同的尺子进行检查,本次评审的准则就是尺子上的刻度。在组织范围内可以先对不同的工作产品制定通用的准则,但项目是具有独特性的,因此每个项目还要在此基础上添加个性化的内容。
项目组可以制定一个评审准备表的模板,用于收集所有与会人员个人对本次评审所需要讨论和关注的地方,也就是本项目个性化的准则。项目经理可以采用Delphi法对其进行收集。对收集后的内容进行汇总,就形成本次同行评审的准则。这个准则同样需要得到所有与会人员的共同认可。
第八,发通知给所有与会人员,确定开会的时间和地点,以及谁是本次同行评审的主持人,谁是本次会议的记录人。通常会比较推荐谁的工作产品谁记录的原则,因为开会的时间有限,记录的内容也都是简短精炼的,这样可以避免遗漏重要的信息。另外他人写的东西往往别人是看不懂的。
第九,确定评审的度量指标。这些度量指标是为了最后衡量评审的效果和效率,一般可以在组织范围内制定,评审会的主持人按照要求进行收集即可。
至此,同行评审的准备工作就完成了。虽然步骤十分多,但要做一次有效的、正式的同行评审,这些都是必须执行的。由此可见,高效的同行评审关键在于评审的准备工作是否到位。
四、进行同行评审
首先要明确同行评审的对象是工作产品,而不是该工作产品的作者。很多时候同行评审会就像批斗会那样给作者带来很大的压力,因此需要在公司范围内要营造一种良好的气氛。
同行评审会的焦点是本次评审的准则,也就是对所有与会人员提交上来评审准备表汇总后的内容。
同行评审会是针对问题进行讨论的,而不是业务或技术的培训会,更不是头脑风暴会,这是提高同行评审效率的关键。
评审会的主持人要注意控制会议的内容,使其始终围绕评审的准则开展讨论。并记录评审会所需要收集的度量数据,以便对本次评审的效果和效率进行客观的衡量。
在评审过程中,作者对准则上的问题进行逐一解答,并且将所发现的问题或缺陷进行记录。
最后同行评审会产生最终的结果,一般分为:通过、有条件通过和不通过三种情况。这个评审的结果是依据本次评审所采用的方法来确定的。达不到之前定义的本次评审的准出条款,那么本次评审就不能通过。如果绝大部分符合本次评审的准出条款,但又发现工作产品存在一定的缺陷,经过与会人员的讨论和确认,这些缺陷是可以被修复的,并且影响不大,那么本次评审可以有条件通过。但是这种情况下,主持人需要指派相应人员对发现的缺陷进行跟进,确保作者在会后对其进行修改,而且修改的结果符合要求。
五、分析同行评审的数据
为了对同行评审的效果和效率进行客观的评价,主持人依据提前定义的同行评审度量指标对评审会上的数据进行收集,并将度量的基础数据提交专人进行统计和分析。这个步骤是标准同行评审必不可少的环节。这也是今后如何提高同行评审效果和效率的依据。在定义度量指标时需要切记,不能将这些数据与工作产品作者的个人绩效进行挂钩,否则同行评审就变成其个人的批斗会。
至此一个标准的、正式的同行评审流程就结束了。可以看到要想将评审做好、做到位是不容易的。要想进一步提高同行评审的效果和效率,只按照以上步骤执行还不够。接下来为大家讲解一些同行评审的技巧。
六、同行评审的一般技巧
1、 同行评审不是批斗会,与会人员共同制定的评审准则应该在开会前给作者看看。这样做的原因有两个方面,第一:让作者放下负担参加评审,使本次评审彻底摆脱批斗会的可能。第二:作者可以提前准备解决方案,使评审更有针对性,进一步提高评审的效果和效率。
2、 在组织范围内应该建立一个例如TD那样的缺陷管理平台。同行评审发现所的问题和软件测试人员测试发现的Bug同属于软件的缺陷,因此同行评审发现的缺陷也需要纳入该平台进行管理。
3、 为了使同行评审更加有效,应该让不同角色的相关人员都参与进来。参与评审的人员不是越多越好,而是越有经验越好。要挑选有丰富工作经验的人,而不是有充足时间的人。
4、 同行评审的工作量很大,特别是准备阶段的工作量占了很大的比例。而准备阶段的工作量往往会被项目管理人员忽略,这就造成与会人员没有时间理解待评审的工作产品,这也是同行评审被形式化的主要原因。因此,我们才强调同行评审是要被计划的。
5、 针对不同的工作产品,评审准则在公司范围内可以预先定义一些通用的内容,这样可以降低评审准备阶段的工作量。
6、 同行评审要想作出效果,必须先争取高层的支持和理解。
七、如何进一步提高同行评审的效果
很多项目都会遇到同样的问题,评审流程很正规,评审准则等也事先进行了讨论和评审,与会人员也花了足够的时间理解待评审的工作产品。但在项目结束后经过质量的回溯,就会发现有些产品缺陷其实应该在评审会上就被发现,也就是说评审的效果还不是最佳的。如果遇到这种情况,还可以从以下两个方面来进一步提高。
首先,防止落入检查表的误区。同行评审的准则其实就是检查表中所要检查的内容。当人们使用检查表的时候,往往注意力就只集中于该表上所罗列的检查项,而这些检查项也往往集中与工作产品本身,而忽略了其他各种边界的情况。如果是升级某个系统,就要考虑新系统与原有系统之间的接口是否匹配;如果是新开发的项目,也要考虑客户原有数据如何导入的问题。总之可以将软件测试中边界值的理论从微观的函数或方法的级别扩展到更大的范畴。
同行评审的准则是汇总了与会人员填写评审准备表中的内容,因此,在评审准备表的模板中可以事先增加一些关于各种边界信息,提醒不同角色的与会人员,从不同角度对各种边界进行思考。
其次,工作产品的漏测率是与抽样率是成反比的。如何提高同行评审的抽样率呢?首先大家要知道同行评审所使用的抽样就是同行评审准则中记录的每个检查项。只要检查项覆盖面足够,那么同行评审自然就会有效果。如果评审主持人收集回来的评审准备表中反馈的内容太少,那就没有必要继续进行评审,因为这样的评审只能是走过场。
评审的主持人和作者可以先将工作产品的内容进行分解,与WBS的分解方法相同,然后再将与会人员的反馈对应到每个分解出来的待评审的功能点,以此来判断检查项的覆盖率是否足够。例如表1所示:
表1- xxx概要设计文档评审覆盖率分析表
待评审的功能点 | 功能完整性 | 技术复杂度 | 可维护性 | 产品性能 |
功能点A1 | X |
|
| X |
功能点A2 | X | X |
|
|
功能点A3 | X |
| X |
|
功能点A4 | X |
|
| X |
功能点B1 |
| X |
| X |
功能点B2 | X |
|
|
|
功能点B3 | X |
| X | X |
…….. |
|
|
|
|
|
|
|
|
|
通过一个类似这样表格,主持人就会发现有那些地方大家还没有考虑到,没有考虑到的地方可以在评审会上集中讨论,或者在同行评审的准备阶段让与会人员还需要继续提出建议。
八、 如何提高同行评审的效率
要提高同行评审的效率,首先就要知道以往评审的度量信息,通过对度量的数据进行分析,找到可以改进的关键点,这其实就是CMMI进行过程改进的方法。在之前已经提到同行评审准备阶段就需要明确收集相关度量的信息,本文将举些常用的例子给大家参考。
Ø 同行评审发现缺陷数量
有些时候与会人员为了应付评审,在填写评审准备表时只为了凑数量,而不注重质量,那么可以通过对本次评审发现问题的数量进行分类统计,如果某次评审发现的问题较少,那么有可能(只是有可能)是评审准备的工作没有做好。
Ø 同行评审ROI(投资回报率)
同行评审ROI是对评审效果的直接衡量。
投资回报率:在同行评审中就是所有与会人员花费在本次评审中的成本与本次评审所发现缺陷所具有的价值之间的比例。也就是每投入1块钱在同行评审上可以得到多少钱的回报。公式如下:
与会人员在本次评审所花费的时间UT=本次评审准备工作的时间+开会的时间+[ 如果会后某些人员还需要对缺陷进行跟进的时间 ]
与会人员在本次评审所花费的成本UA=该人员的单位小时成本 * UT
所有与会人员在本次评审总的花费PC(元)=UA1 + UA2 +UA3+……
公司可以通过一段时间的积累或讨论,按照不同工作产品、不同的严重程度来评估该缺陷如果没有被及时发现,那么其返工的成本为多少。例如:在对需求文档和设计文档进行评审时,发现同等级别严重程度的缺陷,其返工的成本是不同的,需求评审所发现的缺陷价值更高。
返工成本RC(元)=D1+D2+D3+……
同行评审ROI=返工成本RC / 所有与会人员在本次评审总的花费PC
在项目组内通过对同行评审ROI的度量可以看到每次评审的效果,如下图所示,详细设计的投资回报率是负数,但这并不能够确定本次评审的效果不好,也可能是该设计文档写的太完美了,造成与会人员发现不了问题。
Ø 同行评审抽样率
如表1所示,经过经工作产品的分解,统计该表格有多少检查项CI,有多少项是被覆盖的CC。
同行评审抽样率=被覆盖的检查项CC / 总检查项CI * 100%
如下图所示,本项目的覆盖率都达到70%以上,符合公司的要求。
这只是举了几个关于同行评审度量的例子,关于度量的理论,以及如何所制定的各种度量指标不是本文所要关注的内容。项目管理人员只需要通过度量分析的结果,关注有异常发生的点,并使用多个度量指标对其进行综合分析,找到问题的根源,才能发现在同行评审中存在的问题。
至此,整个软件同行评审的流程、方法和技巧都介绍完了。希望项目成员了解同行评审的重要性,以及如何才能将评审会开好并达到预期的目的。