1)测试的尽早介入:尽早在缺陷刚刚被引入的时候就发现和修复它们,可以有效地避免缺陷的雪崩效应和缺陷的成本放大效应;
2)基于风险的测试:确保将测试资源放在最关键的测试对象功能模块中,而不将有限的测试资源浪费在无关紧要的地方;
测试的尽早介入
软件开发生命周期中的每个开发阶段都会输出本阶段的工作产品。事实证明,一半以上的软件缺陷是在需求阶段引入的。图1显示了在不同阶段缺陷引入的分布情况。
图1 不同阶段缺陷引入的分布
测试的尽早介入表现在:在项目开发的早期,测试人员通过参与相关软件工作产品的评审,以达到尽早发现和修复缺陷的目的。测试人员的尽早介入,其主要优点表现在(也是软件测试的实践经验):
(1) 提高质量。缺陷存在放大效应(即缺陷的雪崩效应),简单的讲,在需求分析阶段引入10个缺陷,假如没有通过评审等静态测试手段发现和修复这些缺陷,那么在概要设计阶段就会变成15个,而在详细设计阶段可能就会变成25个(假设不同阶段的缺陷放大系数是1.5);假如在项目早期进行了静态测试,遗留的后续阶段的缺陷数目将可以大大降低,从而提高产品的质量;
(2) 降低成本。因为缺陷发现和修复的成本随着开发阶段的演进而快速的上升。假如在项目早期发现和修复缺陷,将可以大大的降低整个项目的成本;
(3) 提高测试的可预测性。
基于风险的测试
由于穷尽测试是不可能的,测试人员必须在测试资源、成本和质量之间实现平衡,也即需要妥协。但这并不意味着放弃测试,只是意味着不可能有足够的时间对测试对象的方方面面进行测试。如何选择测试的重点,使得风险处于可控的状态,这就是基于风险的测试需要考虑的问题。
基于风险的测试选择测试重点,经常考虑的一个因素就是产品中不同功能的使用频率。图2是IT项目中实际功能模块使用频率的分布。
图2 IT项目实际功能模块使用频率的分布
从图2中,我们可以发现:
(1) 软件产品的每个功能模块,对于客户而言并不是是同等重要的;
(2) 同样的,测试对象中的每个功能模块,对于测试而言也不应该是同等重要的,即测试的强度和优先级是应该区别对待的;
因此,将测试资源和测试时间花费在客户经常使用的系统功能模块上是合理的。因为系统中的某部分经常被使用,假如其中存在缺陷,那么该部分频繁使用将使得出现失效的可能性大大提高。
基于风险的测试选择测试重点,另外一个经常考虑的因素是系统中最可能出现错误的模块。为什么在某些模块中存在特别大的风险,对此可能有许多不同的理由,例如:可能是由于缺少经验的开发人员编写了复杂的代码块,或者时间压力太紧、开发资源不足等。对于测试而言,要紧的是看清其中的原因,并基于这些原因作出有实际根据的决定,也即测试重点的选择。