一.组合测试的概念
1.组合测试(Combinatorial Test)
组合测试是一种测试用例生成方法。它将被测应用抽象为一个受到多个因素影响的系统,其中每个因素的取值是离散且有限的。
2.组合测试的思想基于多参数故障模型。
美国国家标准和技术研究院(NIST)研究浏览器、服务器软件、NASA 分布式数据库、医疗设备 4 类系统的错误检测率表明,67%的错误是由单参数测试发现的,2 路参数组合测试可以发现 93% 的缺陷,3 路参数组合测试可以发现 98% 的缺陷。在6参数组合,几乎可以达到了100%。在一般情况,4 路到 6 路组合已经满足大部分测试需求。
3.因素取值的组合划分不同强度:
两因素(Pairwise)组合测试要求生成一组测试用例集,能够覆盖任意两个因素的所有取值组合。 N因素(N-way,N>2)组合测试要求生成一组测试用例集,以覆盖任意 N 个因素的所有取值组合。
二.利用正交表实现组合测试
1.正交实验法思想:
从大量的实验数据中挑选适量的、有代表性的数据,合理地安排实验的一种科学实验设计方法。 它根据正交性从全部可能的实验数据中挑选出部分有代表性的数据进行实验,这些有代表性的数据具有“均匀分散,整齐可比”的特点
2.正交表特性
一个简单的正交表示例:四行、三列、每一列取值有两个:1和2。
a.每一列中,不同的数字出现的次数相等。
b.任意两列中数字排列方式齐全而且均衡:任何两列有序对共有4种:
<1,1>、<1,2>、<2,1>、<2,2>, 每种对数出现次数相等。
以上两点充分的体现了正交表的两大优越性,即“均匀分散性,整齐可比性”,这就是正交性。
1 | 1 | 1 |
1 | 2 | 2 |
2 | 1 | 2 |
2 | 2 | 1 |
3.正交表相关概念
因素 (Factors)。欲考察的变量称为因素(因子)。在软件测试中,指有多少个输入参数、变量或者配置。
水平 (Levels)。任何单个因素能够取得的值的个数。在软件测试中,指一个参数、变量或者配置允许取值的个数。
行数(Runs)。实验次数的多少,在测试中就是指多少个用例。
4.正交表示例:
最简单的正交含意如下:“L”代表正交表;L 下角的数字“4”表示有 4 横行,简称行,即要做四次试验;括号内的指数“3”表示有3 纵列,简称列,即最多允许安排的因素是3 个;括号内的数“2”表示表的主要部分只有2 种数字,即因素有两种水平1与2。
交互作用表 每一张正交表后都附有相应的交互作用表,它是专门用来安排交互作用试验。下表就是L9(2**3)表的交互作用表。
5.构造正交表
正交表的构造需要用到组合数学和概率学知识,而且如果正交表类型不同,则构造方法差异很大,甚至有些正交表其构造方法到目前还未解决。下面以正交表4-1为例,介绍一种L9[34]类型正交表的构造过程:
1)确定正交表的行和列
正交表4-1共有四个因素,每个因素有3个水平,共需安排9次试验。因此,正交表4-1是一个4列、9行的表。生成正交表的表头如表1-1所示。
表1-1
因素1 | 因素2 | 因素3 | 因素4 | |
试验一 | ||||
试验二 | ||||
试验三 | ||||
试验四 | ||||
试验五 | ||||
试验六 | ||||
试验七 | ||||
试验八 | ||||
试验九 |
2)确定正交表的内容
对每个因素的水平进行编号,分别为1、2、3,并将试验按照水平数3进行分组,即每三个试验为一组。
对于第一列:第一组试验中,全部使用因素1的第1个水平;第二组试验中,全部使用因素1的第2个水平;第三组试验中,全部使用因素1的第3个水平;
对于第二列:每一组试验中,都分别使用因素2的三个水平1、2、3;
对于第三列:每一组试验中,每一个水平编号的确定方法是基于1、2、3的某种排列组合方式
对于第四列:每一组试验中,每一个水平编号的确定方法也是基于1、2、3的某种排列组合方式
3)生成正交表。
将每因素的水平编号填入表中可得正交表如表2-1所示。
表2-1
因素1 | 因素2 | 因素3 | 因素4 | |
试验一 | 1 | 1 | 1 | 1 |
试验二 | 1 | 2 | 2 | 2 |
试验三 | 1 | 3 | 3 | 3 |
试验四 | 2 | 1 | 2 | 3 |
试验五 | 2 | 2 | 3 | 1 |
试验六 | 2 | 3 | 1 | 2 |
试验七 | 3 | 1 | 3 | 2 |
试验八 | 3 | 2 | 1 | 3 |
试验九 | 3 | 3 | 2 | 1 |
6.混合水平数正交表:
表中的各个因子数的水平数不同混合水平数正交表,表中的各个因子数的水平数不同
三.利用正交表实现组合测试
根据被测软件的规格说明书找出影响其功能实现的操作对象和外部因素,把它们当作因子; 把各个因子的不同取值当作状态,明确各个因子的水平数; 选择合适的正交表,把变量值映射到表中; 利用正交表进行各因子的状态组合,构造有效的测试输入数据集。
1、正交表如何构造、构造算法?
已经公开发布了一些构造好的正交表,可以从网络、书籍、相关软件等规范渠道获取。 在选择合适的正交表时,需要考虑因素(变量)的个数,因素水平(变量的取值)的个数,和正交表的行数。 如果因素数(变量个数)、水平数(变量值)都相符,那么直接套用符合需要的正交表即可。 若因素数(变量个数)、水平数(变量值)与现有能够查到的正交表不完全吻合,则需要找出能够包含该情况的正交表来使用。
若因子数和水平数与正交表不完全吻合,则找出包含该情况的正交表,具体需要满足: 正交表的列数不能小于因素数(变量个数); 正交表的水平数不能小于因素值(变量取值)的最大个数。 如果有多个符合条件的正交表,那么应选取行数最少的正交表。
四.例子
例1: word 中段落设置包含了换行设置共有三个选项,分别为:
(1)按中文习惯控制首尾字符
(2)允许西文在单词中间换行
(3)允许标点溢出边界
分析如下:分析因素数目和水平数目,该设置共有三个选项:允许中文习惯控制首尾字符、允许西文在单词中间换行、允许标点溢出边界,因素的个数为3。 每个选项都包含了选择和不选择两种情况,每个因素的的水平数(取值的个数)相同均为2。故 选择正交表: (1)表中的因数数目(列)大于等于3; (2)表中至少有三个因数的水平数大于等于 2; (3)行数取最少的一个。
依据上述原则,选择正交表。
将变量取值和实际含义进行映射: 可以得到最后的测试用例。
例2. 某系统有5个独立的参数配置变量(A,B, C,D,E) 变量A和B有两个取值(A1、A2)和(B1、B2) 变量C和D有三个取值(C1、 C2、C3和D1、D2、D3) 变量E有六个取值(E1、E2、E3、E4、E5、E6) 在现有正交表中,没有因素数、水平数都刚好符合的正交表。
分析:在选择正交表时,要求满足以下条件: 1、因子数>=5 (5个输入参数) 2、水平数: 有2个因子的水平数>=2 (参数A、B取值) 有2个因子的水平数>=3 (参数C、D取值) 有1个因子的水平数>=6 (参数E取值) 满足上面条件的正交表有两个和
: 应选取行数小的
然后进行变量映射。
有的变量的取值个数也小于这一正交表,此时需要把没有的取值,均匀的替换成有的取值。
最终的结果如图所示。
2、正交表存在如下问题:
不一定能够选择到满足条件的正交表; 正交表只能覆盖两个因素(变量)的全部组合,而在实际测试中测试人员可能希望部分参数之间实现更高强度的组合,如三个变量的全组合等。
四、组合测试的数学基础
设待测软件的参数个数为 n,其中每个参数经过前期处理后共包含ai个取值。 确定组合测试所使用的t-way组合覆盖准则。 t-way组合覆盖:任意t个参数间的所有可能取值组合 若t=2,称为成对组合覆盖或两两组合覆盖:对于任意两个参数,它们的任意一对取值至少被一个测试用例所覆盖; 若t=3,称为三三组合覆盖;... ... 覆盖强度越高,相应生成的组合测试用例集的缺陷检测能力越强,测试代价也越大。