评审是静态测试技术的重要组成部分,是对软件工作产品(包括代码)进行测试的一种方式,它应该在动态测试之前进行。评审通常是通过深入阅读和理解被检查文档来完成的。
评审包括管理评审、审查、技术评审、走查和非正式评审等不同的评审技术,具体的内容参见4.3节。根据IEEE
Std 1028-2008的定义,评审的通用过程由以下六个阶段组成。
- 计划阶段:选择评审员,分配角色;为更加正式的评审类型(例如:审查)规定评审的入口准则和出口准则;选择需要进行评审的文档或文档章节等。
- 预备会阶段:分发文档,向评审参与者解释评审的目标、过程和文档;核对入口准则(针对更正式的评审类型)。
- 个人准备阶段:在评审会议之前,每位评审参与者准备各自的评审工作,标注评审对象中可能的缺陷、问题和建议。
- 评审会议阶段:讨论评审员提交的问题列表,并形成会议纪要(针对更正式的评审类型)。会议参与者可以标识缺陷、提出处理缺陷的建议或对缺陷做出决定。
- 返工阶段:修复评审过程中发现的缺陷,通常由作者进行。
- 跟踪结果阶段:检查缺陷是否已解决,收集度量数据,并评估出口准则(针对更正式的评审类型)。
评审过程中需要不同角色人员的参与,他们在评审过程中的职责和作用是不一样的。评审中涉及的主要角色包括经理、主持人或组长、作者、评审员和记录员,其他可能牵涉的人员还包括决策者或者其他利益相关者、客户或者用户代表。另外一个可选的角色有时会出现在审查中,那就是宣读员,他在评审会议中给产品的某些部分进行宣读。
针对某个软件工作产品,可以采用多种评审类型,例如:首先进行技术评审,以决定在接下来的迭代开发中实现哪些功能;而对于其中所包含的具体功能,也许需要针对规格说明进行审查。
在软件开发生命周期早期,通过评审发现软件工作产品中的缺陷,其修复缺陷的成本会比在动态测试中才发现此类缺陷修复成本低得多(例如:由于需求不正确引起的缺陷)。评审的优点主要体现在以下五个方面。
1)提高质量
评审和动态测试都有共同的目标:发现缺陷,但它们在发现缺陷的方式和手段上有各自不同的优缺点。因此,在实际的测试过程中,需要将这两种手段结合起来,进行优势互补,从而更加有效地提高产品的质量。
评审相对于动态测试,可以比较容易实现较高的覆盖率。根据笔者在实际项目中的经验,评审可以发现产品中70%~80%的缺陷,而对于动态测试而言,发现的缺陷很难达到50%。图1是一个评审和动态测试集合的例子,显示了评审和动态测试相结合(假设评审和动态测试发现缺陷的有效性都是50%)是如何提高产品的质量的。
从图1可以看出,评审的引入可以大大提高产品质量:整个测试过程的缺陷发现率从原来的75%(150/200
= 75%)提高到了93.5%(187/200 = 93.5%)。但是,引入评审提高产品的质量是以增加项目成本和时间作为代价的,因此,在实际的项目测试过程中,需要平衡产品质量和进度、成本之间的关系,以实现项目的总体目标。
2)提高有效性
测试人员尽早介入项目是有效的测试基本原则之一。测试人员在软件开发生命周期的早期介入,可以尽早参与发现软件工作产品中的缺陷,从而节省时间和降低成本。因为在项目的早期发现缺陷,可以大大减少缺陷修复的时间和成本。
评审可以降低测试和开发的成本,因为在项目的早期发现和修复缺陷的成本比在测试执行阶段发现和修复缺陷的成本小得多。同时,有效的评审可以减少动态测试执行的时间。表1是统计得到的在不同阶段修复缺陷的成本比例。
表1 不同阶段缺陷修复的成本
阶段 |
缺陷修复成本 |
用户需求和分析 |
$1 |
概要设计 |
$2 |
详细设计 |
$5 |
编码和实现 |
$10 |
组件测试 |
$15 |
集成测试 |
$22 |
系统测试 |
$50 |
用户验收和使用 |
$100+ |
3)可预测性
动态测试是整个测试过程中最难预测和最难管理的活动之一,其原因主要表现在:
缺陷数目、缺陷修复时间以及缺陷相关信息的随机性和不确定性,导致计划和分配测试资源非常困难。
动态测试过程中发现的缺陷数目越多,测试就越难于管理。因此,动态测试活动发现缺陷数目的减少可以减轻测试的不可预测性,从而提高整体项目的预测性。
通过早期开展的评审活动,一方面可以尽早发现和修复软件产品中的缺陷,减少遗留到后续阶段的缺陷数目;另一方面,也可以根据评审活动中发现的缺陷数目和缺陷类型等数据,评估测试对象的质量和缺陷分布,从而减轻动态测试活动的不可控性和不可预测性。
4)培训目的
通过有效地评审,评审团队成员之间包括作者和评审人员之间,都相当于参加了一次培训,有助于在将来的项目中产生质量更好的文档。有效的文档评审过程也是一次相互学习的过程,因为评审过程、规则和实践等在评审团队成员之间进行了共享。同时,通过评审成员之间的分析和讨论,项目技术相关的知识和技能也可以在团队中进行传播。
5)缺陷预防
评审的重要目的之一是尽早发现软件工作产品中的缺陷,为将来的项目改进提供数据和经验,从而不断地改进开发过程、测试过程和评审过程等,在将来的项目中达到缺陷预防的目的,例如:通过评审过程中学习到的知识技能和经验,可以改进评审相关的检查表。
|