在测试设计过程中,大家都会遇到很多变量进行组合的情况,对相互组合的两个或更多变量进行的测试活动就是组合测试,一般情况下都是使用组合测试法,但这种情况很多测试人员研究得不够深入。测试人员需要开发或了解组合测试法中使用到的工具,通过程序得到用例组合才更加合理和全面,如果不在测试中一起改变某些变量,就会遗漏由不同的变量组合而触发的错误。
首先介绍下组合测试法的定义,组合测试是一种测试用例生成方法。它将被测系统抽象出来的变量的取值进行组合并生成一组测试用例的过程,一般情况下,组合测试能够在保证错误遗漏率的前提下采用较少的测试用例测试系统。但是对于如何从全集合的变量组合中抽取出有效的测试用例,会有不同的方法,两因素(Pairwise)组合测试就是一种比较好的方法去挖掘出有效的测试用例组合。接下来介绍另外一种方法去自动生成较好的测试用例集,那就是全对偶测试法 (All Pairs)。这些组合测试方法也是高级测试工程师必须掌握的。
现在我们假设存在 3 个变量:V1、V2、V3,V1 变量存在 3 个值:A、B、C;V2 变量存在 2 个值:D、E;V3 变量存在 2 个值:F、G。按照组合测试法,可以组合出 3*2*2 = 12 种情况,也就是可以设计出 12 个测试用例。如果 3 个变量都存在 5 个不同的值的话,那就可以组合出 5*5*5 = 125 种情况,也就是需要设计出 125 个测试用例。测试专家 James Bach 使用全对偶测试法 (All Pairs) 将这 125 个测试用例压缩成 25 个测试用例,从理论上来覆盖变量组合的测试覆盖率,全对偶测试法有个基本的原则是每个变量的每个取值都要与至少一个用例中的每个其他变量的每个取值配对。
为了让业界测试人员更能方便的使用全对偶测试法产生的组合测试的测试用例,James Bach 使用 Perl 语言开发了一个 allpairs 工具,接下来通过讲解 allpairs 工具的使用方法来了解全对偶测试法 (All Pairs) 的实现原理和组合策略。本工具的下载地址: http://www.satisfice.com/tools/pairs.zip 。
假设我们有两个参数需要测试,比如操作系统,打印机,先列出每个参数的值:
操作系统:
Win 98
Win XP
Win 7
打印机:
HP 4050
HP 4100
为了测试所有的组合对 (pairings),测试用例包括如下情况:
用例
操作系统
打印机
1
Win 98
HP 4050
2
Win 98
HP 4100
3
Win XP
HP 4050
4
Win XP
HP 4100
5
Win 7
HP 4050
6
Win 7
HP 4100
在两个参数的情况下,所有的组合对 (pairings) 就是参数之间的所有组合情况。但是如果我们新增一个参数将会发生什么呢?
是否双面打印:
是
否
下面是 3 个参数进行组合的所有测试用例:
用例
操作系统
打印机
是否双面打印
1
Win 98
HP 4050
是
2
Win 98
HP 4100
是
3
Win XP
HP 4050
是
4
Win XP
HP 4100
是
5
Win 7
HP 4050
是
6
Win 7
HP 4100
是
7
Win 98
HP 4050
否
8
Win 98
HP 4100
否
9
Win XP
HP 4050
否
10
Win XP
HP 4100
否
11
Win 7
HP 4050
否
12
Win 7
HP 4100
否
对应三个参数的所有组合情况就是 12 个测试用例。但是我们需要的是在一组测试用例中能够保证至少一个用例中的每个其他变量的每个取值都配对过。这种情况就可以得到较少的测试用例,我们就可以得到 6 个测试用例。
用例
操作系统
打印机
是否双面打印
1
Win 98
HP 4050
是
2
Win 98
HP 4100
否
3
Win XP
HP 4050
否
4
Win XP
HP 4100
是
5
Win 7
HP 4050
是
6
Win 7
HP 4100
否
事实上,如果这三个参数中的某两个参数的值的任意不同的组合会触发一个 bug 的话,那表格上的那组测试用例也可以发现该 bug。当三个特殊的值组合在一起触发的某个 bug,那表格上的那组测试用例不一定能发现该 bug,但是至少我们覆盖了所有的全对偶 (all pairs)。
相对于所有组合情况来说,全对偶的测试覆盖率要容易很多。例如,如果你想测试 10 个参数且都有 26 个值的功能,所有组合情况将导致存在 141,167,095,653,376 个测试用例。而全对偶测试法就只要测试 1094 个测试用例就可以。
为了能较好的使用 allpairs 工具,测试人员需要在表格上列出所有的参数和参数值,一般可以使用 Excel 工具来表达:
操作系统
打印机
是否双面打印
Win 98
HP 4050
是
Win XP
HP 4100
否
Win 7
然后将这个 Excel 表格拷贝到一个 text 文件 (暂时命名为 vars.txt),在 Dos 平台上运行 Allpairs 程序,使用如下的命令:
ALLPAIRS VARS.TXT > TESTCASES.TXT
如果测试人员也安装了 Perl,也可以使用如下的命令:
PERL ALLPAIRS.PL VARS.TXT > TESTCASES.TXT
TESTCASES.TXT 文件里面的数据也适合拷贝到 Excel 文件中,类似于如下:
上图的第一部分是测试用例的集合,那个”pairrings”列说明的是全对偶方法找到的唯一 pairrings 的数量。
上图的第二部分是帮助测试人员了解全对偶方法的是怎么完成的。它列出了每个 pair,且显示了这个 pair 在测试用例列表中出现的次数,且列表出了每个 pair 出现的时候所对应的测试用例的用例号。
James Bach 也在《软件测试经验与教训》中详细的说明任何使用全对偶的测试方法进行组合测试。主要分三大步骤,第一个步骤是 从域划分开始,确定和压缩每个参数所取的值和个数;第二个步骤是 获得全单值,保证覆盖到每个变量的每个重要取值;第三个步骤是 获得全对偶,保证每个变量的每个取值都要与至少一个测试用例中的每个其他变量的每个取值配对。同时他还表示仅仅使用全对偶测试是有风险的,与全单值一样,测试人员可能知道被广泛应用的特定组合,或可能有麻烦的组合。
当然很多人会问是不是还有其他的工具来自动化生成组合的测试用例,由于全对偶测试法并不是一个最完美的解决办法,但在大部分情况下,对测试来说还是足够的。考虑 10 个参数且都有 10 个值的情况,全对偶测试 (All Pairs) 需要使用 177 个测试用例来覆盖组合测试情况。最有可能的最佳的用例个数是 100 到 177 之间,James 怀疑在 130 个测试用例左右。但是与成千上万的测试用例集合相比,177 个并不是特别差的情况。当然,对于使用全对偶测试 (All Pairs) 法产生的所有测试用例集合也可以是可运行的自动化脚本,由于参数和取值之间没有约束关系,所以产生的用例集合有规律,目前淘宝网技术质量部开发了相关的工具用于通过组合测试法生成页面自动化脚本,该脚本是 Ruby 语言编写,通过规则和参数化取值来准备数据,使用关键的 key 标识来组合自动化脚本的框架,有兴趣的同学可以一同研究。
一般在测试设计过程中,组合测试法不会单独使用,而是会与其他方法进行组合使用,大部分时候是和判定表和边界值组合使用,在关键性的高稳定要求的系统软件中,组合测试和边界测试的组合覆盖率尤其重要。这个组合测试策略在兼容性测试策略方案上也有很大的作用,在选择操作系统,浏览器版本,其他软件配置的兼容性测试上给出方向性的指导。
美国 Telcordia 技术公司有一个基于web 的工具,它产生的结果集要优于全对偶测试(All Pairs) 得到的结果集。例如,存在40 个参数且都有3 个值的情况,这个工具可以使用21 个测试用例来覆盖所有的pairs。全对偶测试(All Pairs) 则需要29 个测试用例才能达到同样的效果,但是这个工具是收费的,相比较免费的全对偶测试(All Pairs),测试人员可以自己做出选择。
当然,微软也会有相关的工具来构造组合测试用例,PICT 就是一个比较易用的工具。PICT(Pairwise Independent Combinatorial Testing tool)可以有效地按照两两测试的原理,进行测试用例设计。在使用PICT 时,需输入与测试用例相关的所有参数,以达到全面覆盖的效果。下载地址: http://download.csdn.net/source/3078728 。 使用过程中关键的是需要建立组合测试的模型,以便于用尽可能少的测试用例,覆盖尽可能多的影响因素,详细使用介绍如下: http://www.cnblogs.com/liangshi/archive/2010/07/25/1784666.html 。
评论