下面的几个数据可以说明结对测试技术的有效性:
● 根据AT&T在对其基于局域网的邮件系统进行的测试中,应用结对测试技术得到的1000条测试用例比其原有的1500条测试用例多发现了20%的缺陷,而测试工作量却减少了50%。
● National Institute of Standards and Technology在一项对医疗设备测试所进行的15年追踪中发现,有98%的软件缺陷可以通过结对测试技术发现。
● 根据对Mozilla网页浏览器的缺陷分析显示,76%的缺陷可以通过结对测试技术发现。
具体的结对测试,可以通过不同的测试技术来得到,包括正交矩阵(Orthogonal Arrays)的方法、James Bach提供的Allpairs方法,也可以通过分类树方法。表1得到的测试用例是通过Allpairs方法实现的,详细的内容以及其他测试技术的实现方法,可以参考《软件测试设计》原著。
图1 使用Allpairs得到的测试数据
假如测试数据列表中的某个参数的取值以~开头,那么说明该参数取值已经有两两组合了。以~开头的参数取值,可以用该参数的任何其他取值来代替,而不会影响其两两组合的覆盖率。因此,可以将以~开头的参数取值,用更关键的或者经常使用的参数值来代替。同时,使用Allpairs得到的测试数据中,还罗列了所有的两两组合,并且统计了每个两两组合出现的次数,以及每个测试用例所包含的两两组合数。
从上面的结果可以看到:通过采用合适的测试技术,测试用例数目原来需要1296个,而目前只需要48个进行覆盖,测试用例数目减少了96%。前面已经提到了,结对测试可以发现所有的单失效模式和双失效模式的缺陷,而实践过程中,大部分的失效是单失效模式和双失效模式,多失效模式占的比例很少。因此,通过采用合适的结对测试,可以大大降低测试用例数目,减少测试工作量,同时可以实现较好的测试覆盖率,保证测试质量。