记得有两次被同学问,有很多个因子,每个因子又有多个值,这样的情况下,我们如何用最少的测试用例来满足最多的覆盖?当时我只是很含糊的说,试试正交试验法吧,但是没有具体的用例编写指导,因为我也没有实践过。
带着这个问题,又去找了些正交试验法的资料来看。
在说正交试验法前,先介绍两个概念:因子和水平。
因子:影响测试的元素,称为因子。
水平:每个元素的取值,称为水平。这里所说的取值,是对元素值进行等价类划分后的不同等价类。
所谓正交试验法,是指使用正交表来安排试验并进行数据分析的一种方法。按照正交表来安排试验,挑选的是有代表性的水平组合,所以试验点分布均匀,试验次数少,能反映全面的情况。
通常用 L行数(水平数因子数) 来表示。L表示正交表,行数表示采用该正交表的试验次数。
正交表的列为因子,行是试验次数,具备两个特点:
1.每列各个数字出现次数一样多。
2.任意两列组成的有序数对出现次数一样多。
正交表类型:
1.标准水平正交表“各个因子的水平相同。
2.混合水平正交表:各个因子的水平不相同
正交试验法,适用范围:
1.因子数大于等于3。
2.水平数大于等于2。
我们如何来正交试验法来设计测试用例呢?
1.分析因子数
2.分析因子的水平数
3.选择合适的正交表
4.根据正交表组合测试用例
5.补充正交表不包含,但又重要的用例
从上面的介绍可以看出采用正交试验法,需要注意的地方主要有两个:
1.因子和水平的确定。因子需要关注相互间的关系,水平则需要进行一个等价类分析。
2.正交表公式的选择。
其中,1又是正交表公式选择的一个基础。
那么我们如何来选择合适的正交表呢?
1.根据因子和水平数,计算出需要试验的次数;
2.从正交表公式中选择,取行数大于计算的次数,且行数最少的一个。
根据因子和水平数的不同,查找正交表公式时,可能碰到的情况:
- 因子数、水平数和正交表公式相同
直接采用匹配的正交表。
2.因子数不同
可以采用包含的方法,在正交表公式中找到包含该情况的公式,如果有N个符合条件的公式,那么选取行数最少的公式。
如5因子2水平的用例。正交表有L4(23)、L8(27)、L16(215),可以保证最小行数,可选择L8(27),多余的因子取值,在组成用例时,直接摒弃。
3.各因子水平数不同
可采用组合和包含的方式。
如一因子是4水平,3因子是3水平。可选用L16(45),水平数,取最大水平数,因子数包含总因子数。
下面我们来看个实例,用户登录,包括用户名、密码、校验码,各个元素的取值:
元素 | 元素取值 |
用户名 | 不填、填写错误信息、填写正确信息 |
密码 | 不填、填写错误信息、填写正确信息 |
校验码 | 不填、填写错误信息、填写正确信息 |
这是一个3因子3水平的例子,看看几种试验法的用例情况
全面试验法:试验次数为33=27,即取每个因子所有水平的组合。
简单试验法:试验次数为(3-1)*(3-1)+3 = 7。简单试验法的试验次数明显减少,但是缺点是次数数据分布不均匀,覆盖率不高。
正交试验法:试验次数要求不少于 3*(3-1)+1 = 7。
利用现有的正交表公式,可选用L9(34),试验次数为4*(3-1)+1 = 9。
所在列 | 1 | 2 | 3 | 4 |
因子 | 用户名 | 密码 | 校验码 | D |
1 | 不填 | 不填 | 不填 | - |
2 | 不填 | 填写错误信息 | 填写错误信息 | - |
3 | 不填 | 填写正确信息 | 填写正确信息 | - |
4 | 填写错误信息 | 不填 | 填写错误信息 | - |
5 | 填写错误信息 | 填写错误信息 | 填写正确信息 | - |
6 | 填写错误信息 | 填写正确信息 | 不填 | - |
7 | 填写正确信息 | 不填 | 填写正确信息 | - |
8 | 填写正确信息 | 填写错误信息 | 不填 | - |
9 | 填写正确信息 | 填写正确信息 | 填写错误信息 | - |
再补充一个用例:三个元素都填写正确的场景。
如果觉得当前的用例覆盖还是不够,则可以选择行数更多一点的正交表,如L18(37)。
所在列 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
因子 | 用户名 | 密码 | 校验码 | D | E | F | G |
1 | 不填 | 不填 | 不填 | - | - | - | - |
2 | 不填 | 填写错误 | 填写错误 | - | - | - | - |
3 | 不填 | 填写正确 | 填写正确 | - | - | - | - |
4 | 填写错误 | 不填 | 不填 | - | - | - | - |
5 | 填写错误 | 填写错误 | 填写错误 | - | - | - | - |
6 | 填写错误 | 填写正确 | 填写正确 | - | - | - | - |
7 | 填写正确 | 不填 | 填写错误 | - | - | - | - |
8 | 填写正确 | 填写错误 | 填写正确 | - | - | - | - |
9 | 填写正确 | 填写正确 | 不填 | - | - | - | - |
10 | 不填 | 不填 | 填写正确 | - | - | - | - |
11 | 不填 | 填写错误 | 不填 | - | - | - | - |
12 | 不填 | 填写正确 | 填写错误 | - | - | - | - |
13 | 填写错误 | 不填 | 填写错误 | - | - | - | - |
14 | 填写错误 | 填写错误 | 填写正确 | - | - | - | - |
15 | 填写错误 | 填写正确 | 不填 | - | - | - | - |
16 | 填写正确 | 不填 | 填写正确 | - | - | - | - |
17 | 填写正确 | 填写错误 | 不填 | - | - | - | - |
18 | 填写正确 | 填写正确 | 填写错误 | - | - | - | - |
补充一个用例:三个元素都填写正确的场景。
L18(37)对比L9(34),多了因子间交互关系的用例。一般的测试,权衡用例数量和测试覆盖率,我们是不考虑因子间的交互的,这也正是误差产生的来源。
从上面的试验次数,可以看出,正交试验法的优势是很明显的:用例数可控,节省了时间,用例具备一定的覆盖率。
正交表生成工具
正交表的生成,还是比较复杂的,可以借助现成的小工具,如:正交设计助手。
转载务必注明出处Taobao QA Team,原文地址:http://qa.taobao.com/?p=5874
2 条评论