【1+X】正交实验法
想看更多内容请移步专栏
正交实验法
知识点
- 正交实验法介绍
- 正交实验法案例
简介
判定表法和因果图法均是考虑有多个输入条件,并且不同的输入条件的组合会得出不同的动作的情况,但他们不适合输入条件过多的情况。比如某学校有一个查询历年学生档案的程序,有 5 个查询条件,如下图所示。可以通过程序界面上查询条件中的其中一项或多项进行查询,然后把查询结果罗列出来。那么测试人员该如何对该查询功能点进行测试呢?
暂且不考虑每个文本框输入内容的限制,只考虑他们“填”或“不填”的组合条件查询的话,可以设计出 25=32 条测试用例,根据组合的原理,设计用例如下表所示。
序号 | 姓名 | 专业 | 年级 | 班级 | 户籍地 |
---|---|---|---|---|---|
1 | 不填 | 不填 | 不填 | 不填 | 不填 |
2 | 不填 | 不填 | 不填 | 不填 | 填 |
3 | 不填 | 不填 | 不填 | 填 | 不填 |
4 | 不填 | 不填 | 不填 | 填 | 填 |
5 | 不填 | 不填 | 填 | 不填 | 不填 |
6 | 不填 | 不填 | 填 | 不填 | 填 |
7 | 不填 | 不填 | 填 | 填 | 不填 |
8 | 不填 | 不填 | 填 | 填 | 填 |
9 | 不填 | 填 | 不填 | 不填 | 不填 |
10 | 不填 | 填 | 不填 | 不填 | 填 |
11 | 不填 | 填 | 不填 | 填 | 不填 |
12 | 不填 | 填 | 不填 | 填 | 填 |
13 | 不填 | 填 | 填 | 不填 | 不填 |
14 | 不填 | 填 | 填 | 不填 | 填 |
15 | 不填 | 填 | 填 | 填 | 不填 |
16 | 不填 | 填 | 填 | 填 | 填 |
17 | 填 | 不填 | 不填 | 不填 | 不填 |
18 | 填 | 不填 | 不填 | 不填 | 填 |
19 | 填 | 不填 | 填 | 填 | 不填 |
20 | 填 | 不填 | 不填 | 填 | 填 |
21 | 填 | 不填 | 填 | 不填 | 不填 |
22 | 填 | 不填 | 填 | 不填 | 填 |
23 | 填 | 不填 | 填 | 填 | 不填 |
24 | 填 | 不填 | 填 | 填 | 填 |
25 | 填 | 填 | 不填 | 不填 | 不填 |
26 | 填 | 填 | 不填 | 不填 | 填 |
27 | 填 | 填 | 不填 | 填 | 不填 |
28 | 填 | 填 | 不填 | 填 | 填 |
29 | 填 | 填 | 填 | 不填 | 不填 |
30 | 填 | 填 | 填 | 不填 | 填 |
31 | 填 | 填 | 填 | 填 | 不填 |
32 | 填 | 填 | 填 | 填 | 填 |
仅仅组合“填”或“不填”的组合测试,就有 32 条测试用例,测试用例太多了,投入和回报不相符。那如果随机取部分用例进行测试呢?测试时又没有把握,那些没有被测试到的组合该怎么办呢?那么作为测试人员,该怎么解决这种问题呢?这个时候就要使用到正交实验法,正交实验法设计测试用例是考虑用最少的用例来覆盖大量组合的情况。接下来一起来看一下什么是正交实验法。
正交实验法介绍
正交实验法是套用正交表来设计测试用例的方法。
那什么是正交表呢?古希腊是一个多民族的国家,国王在检阅臣民时要求每个方队中每行有一个民族代表,每列也要有一个民族的代表。数学家在设计方阵时,以每一个拉丁字母表示一个民族,所以设计的方阵称为拉丁方,正交表由此演化而来。正交表是通过运用数学理论在拉丁方和正交拉丁方的基础上,从大量的(实验)数据中挑选合适的、有代表性的条件组合构造而成的规格化表格。
正交实验法是一种基于正交表的、高效率、快速、经济的实验设计方法,它研究的“多因素多水平”的情况,然后套用正交表来随机地产生用例(用例之间没有主次之分),是一种提高测试覆盖率的简单易用的方法。
因素(Factor):在一项实验中,凡是被考查的变量就称为因素。
水平(Level):在实验范围内,因素被考查的值称为水平。
前文有提到,正交实验法是套用正交表来随机地产生用例的一种方法。一些测试新人容易陷入“研究如何得出正交表”的错误思维,在此提醒一下,正交表格是无数科学家的智慧凝聚而成,读者无需去深究正交表是如何得出的,我们在设计测试用例的时候直接去套用对应的表格即可。
查询正交表的方式有 2 种:
- 为方便读者使用,本书在附录 1 中列出了一些常用的正交表格。可通过附录查询适合的正交表。
- 通过链接查询:http://support.sas.com/techsup/technote/ts723_Designs.txt
正交表的表现形式可描述如下:
L 行数(水平数因素数)
行数(Runs):正交表中行的个数,也就是实验的次数,也指测试用例的个数。
因素数(Factors):指正交表中列的个数。
水平数(Levels):任何单个因素能够取得的值的最大个数。
如何选择正交表是一个关键问题。首先考虑因素的个数,其次考虑因素水平的个数,最后考虑正交表的行数,且选择符合条件的行数最少的一个正交表进行套用。笔者会通过案例详细讲解它的套用方法。
读者可能会有疑问,正交实验法是根据正交性从全面实验中挑选出部分有代表性的点进行实验,它的选择原理是什么呢?为什么这个表格可以代表所有的实验可能呢?主要是因为选择出来的这些有代表性的点具备了“均匀分散、齐整可比”的特点。
** 整齐可比性:** 在同一张正交表中,每个因素的每个水平出现的次数是完全相同的。由于在实验中每个因素的每个水平与其他因素的每个水平参与实验的几率是完全相同的,这就保证在各个水平中最大程度的排除了其他因素水平的干扰。因而,能最有效地进行比较和做出展望,容易找到好的实验条件。
均衡分散性: 在同一张正交表中,任意两列(两个因素)的水平搭配(横向形成的数字对)是完全相同的。这样就保证了实验条件均衡地分散在因素水平的完全组合之中,因而具有很强的代表性,容易得到好的实验条件。
以上特点充分体现了正交表的两大优越性,通俗地说,每个因素的每个水平与另一个因素的每个个水平都能够出现一次组合,这就是正交性。使用正交实验法设计测试用例的步骤如下:
- 确定有哪些因素?
- 确定每个因素有几个水平?
- 选择合适的正交表。
- 把变量的值映射到表中。
- 加上认为可疑且没有在表中出现的组合。
- 把每一行的各因素水平的组合作为一个测试用例
正交实验法案例
案例 1-学生信息查询
如本节开篇所示的程序“历年学生信息查询”界面,利用正交实验法对其设计测试用例。
【解析】:
确定表中的因素数。
共有 5 个因素:姓名、专业、年级、班级、户籍地。故因素数=5。
确定每个因素的水平数。
通过分析,以上 5 个因素的水平数均为“填”和“不填”。故水平数=2。
选择合适的正交表。
通过第 1 步和第 2 步的分析,正交表应该是 25,但经过查询附录 1,表格中接近的只有 L4(23)和 L8(27),那么我们只能选择 L8(27),因为如果选择列数少的表格会缺失部分因素的取值。但如果表格中列数数多于实际因素数,则把表格中多余的列简单粗暴地直接删除就可以了。L8(27)正交表如下表所示:
把变量的值映射到表中
因为程序中只有 5 个因素,只需要 5 列,所以直接删除第 6、7 列,然后把变量的值映射到表格中就得到了下表(1 为填,2 为不填)。
增加几条可疑测试用例,如下表所示:
综合第 4 步和第 5 步,共设计出 13 条测试用例,如下表所示:
用例编号 | 操作步骤描述 | 预期结果 |
---|---|---|
TC-001 | 姓名填写、专业填写、年级填写、班级填写、户籍地填写 | 正确显示查询结果 |
TC-002 | 姓名填写、专业填写、年级填写、班级不填、户籍地填写 | 正确显示查询结果 |
TC-003 | 姓名填写、专业不填、年级不填、班级填写、户籍地填写 | 正确显示查询结果 |
TC-004 | 姓名填写、专业不填、年级不填、班级不填、户籍地不填 | 正确显示查询结果 |
TC-005 | 姓名不填、专业填写、年级不填、班级填写、户籍地不填 | 正确显示查询结果 |
TC-006 | 姓名不填、专业填写、年级不填、班级不填、户籍地填写 | 正确显示查询结果 |
TC-007 | 姓名不填、专业不填、年级填写、班级填写、户籍地不填 | 正确显示查询结果 |
TC-008 | 姓名不填、专业不填、年级填写、班级不填、户籍地填写 | 正确显示查询结果 |
TC-009 | 姓名填写、专业不填、年级不填、班级不填、户籍地不填 | 正确显示查询结果 |
TC-010 | 姓名不填、专业填写、年级不填、班级不填、户籍地不填 | 正确显示查询结果 |
TC-011 | 姓名不填、专业不填、年级填写、班级不填、户籍地不填 | 正确显示查询结果 |
TC-012 | 姓名不填、专业不填、年级不填、班级填写、户籍地不填 | 正确显示查询结果 |
TC-013 | 姓名不填、专业不填、年级不填、班级不填、户籍地填写 | 正确显示查询结果 |
案例 2-打印功能
在正交实验法案例 1 中,每个因素的水平数都等于 2,是相等的,被称为等水平正交表。但正交表中各因素的水平数也可以不相等,这种被称为混合型正交表。
【题目】:有一个 PowerPoint 软件打印功能,功能描述如下:
打印效果:幻灯片加框、幻灯片不加框; 打印方式:单面打印、双面打印; 打印范围:全部、当前幻灯片、给定范围; 打印颜色:颜色、灰度、黑白; 打印内容:幻灯片、讲义、备注页、大纲视图、阅读视图、普通视图。 请用正交实验法设计测试用例。
【解析】:
确定表中的因素数。
本题中因素数有 5 个:打印效果、打印方式、打印范围、打印颜色、打印内容。故因素数=5。
确定表中的水平数。
本题中有 2 个因素有 2 个水平,有 2 个因素有 3 个水平,有 1 个因素有 6 个水平。
选择合适的正交表。
表中因素数>=5;表中至少有 2 个因素的水平数>=2;至少有另外 2 个因素的水平数>=3;至少有另外一个因素的水平数>=6;通过查询正交表,可知公式 L49(78)或者 L18(3661)比较接近题目。取行数较少的一个公式 L18(3661)得出正交表如下表 所示。
这个表并不完全符合我们的题目,需要改造成我们需要的表格。
- 因为题目中有 2 个元素只有 2 个水平,故把列号为 1 和 2 的 2 列中的水平数为 3 的值换成 1 或者 2;
- 题目中只有 5 个元素,故把列号为 5 和 6 的 2 列从表格中删除,变成 5 列表格。
映射变量的值到表格中,并加上可疑用例 n 条。
此题中笔者没有添加可疑用例,n=0。如下表 所示为 PowerPoint 幻灯片软件打印功能的映射表。
序号 | 打印效果 | 打印方式 | 打印颜色 | 打印范围 | 打印内容 |
---|---|---|---|---|---|
1 | 幻灯片加框 | 单面 | 颜色 | 全部 | 幻灯片 |
2 | 灯片加框 | 单面 | 灰度 | 当前幻灯片 | 讲义 |
3 | 灯片加框 | 双面 | 颜色 | 给定范围 | 备注页 |
4 | 灯片加框 | 双面 | 黑白 | 全部 | 大纲视图 |
5 | 灯片加框 | 单面 | 灰度 | 给定范围 | 阅读视图 |
6 | 灯片加框 | 双面 | 黑白 | 当前幻灯片 | 普通视图 |
7 | 灯片不加框 | 单面 | 颜色 | 给定范围 | 普通视图 |
8 | 灯片不加框 | 单面 | 黑白 | 全部 | 阅读视图 |
9 | 灯片不加框 | 双面 | 灰度 | 当前幻灯片 | 幻灯片 |
10 | 灯片不加框 | 双面 | 黑白 | 给定范围 | 讲义 |
11 | 灯片不加框 | 单面 | 颜色 | 当前幻灯片 | 大纲视图 |
12 | 灯片不加框 | 双面 | 灰度 | 全部 | 备注页 |
13 | 灯片加框 | 单面 | 灰度 | 给定范围 | 大纲视图 |
14 | 灯片不加框 | 单面 | 黑白 | 当前幻灯片 | 备注页 |
15 | 灯片加框 | 双面 | 颜色 | 当前幻灯片 | 阅读视图 |
16 | 灯片不加框 | 双面 | 灰度 | 全部 | 普通视图 |
17 | 灯片加框 | 单面 | 颜色 | 全部 | 讲义 |
18 | 灯片不加框 | 双面 | 黑白 | 给定范围 | 幻灯片 |
设计测试用例,如下表所示。
原本应该有 216 条组合用例,现在缩减到 18+n(n 是可疑用例的个数,此处 n=0),大大简化了测试用例的数量,并且保证了测试的有效性。以下列举其中一条测试用例的编写(测试用例 TC001),其他的用例读者自行编写即可。
小结
正交实验法能够使用最小的测试过程获得最大的测试覆盖率。正交实验法适用的场合和判定表(因果图)不一样。当一个界面中有多个控件,每个控件有多个取值,控件取值的组合数量很大,不可能(也没有必要)为每一种组合编写一条用例,要使用最少的组合进行测试,就适合运用正交排列法。判定表(因果图)也是考虑控件组合,但是组合数量较少(一般不会超过 20 种)。
使用正交实验法也有其局限性,因为目前常见的正交表数量有限,即使是已有的正交表,基本也都要求每个控件中取值个数(水平个数)相等,在实践中很难说遇到的全是这种情况。通过正交实验法的学习,我们更多的是学习到一种测试思想,也就是从所有组合集合中选取测试数据时,应该均匀的选取其中的组合作为测试用例,而不只是从某个局部选择数据。
附录 1 常用的正交表
(1)L4(2^3)
试验号\列号 | 1 | 2 | 3 |
---|---|---|---|
1 | 1 | 1 | 1 |
2 | 1 | 2 | 2 |
3 | 2 | 1 | 2 |
4 | 2 | 2 | 1 |
(2)L8(2^7)
试验号\列号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 1 | 1 | 2 | 2 | 2 | 2 |
3 | 1 | 2 | 2 | 1 | 1 | 2 | 2 |
4 | 1 | 2 | 2 | 2 | 2 | 1 | 1 |
5 | 2 | 1 | 2 | 1 | 2 | 1 | 2 |
6 | 2 | 1 | 2 | 2 | 1 | 2 | 1 |
7 | 2 | 2 | 1 | 1 | 2 | 2 | 1 |
8 | 2 | 2 | 1 | 2 | 1 | 1 | 2 |
(3)L12(2^11)
试验号\列号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 |
3 | 1 | 1 | 2 | 2 | 2 | 1 | 1 | 1 | 2 | 2 | 2 |
4 | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 2 | 1 | 1 | 2 |
5 | 1 | 2 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | 2 | 1 |
6 | 1 | 2 | 2 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | 1 |
7 | 2 | 1 | 2 | 2 | 1 | 1 | 2 | 2 | 1 | 2 | 1 |
8 | 2 | 1 | 2 | 1 | 2 | 2 | 2 | 1 | 1 | 1 | 2 |
9 | 2 | 1 | 1 | 2 | 2 | 2 | 1 | 2 | 2 | 1 | 1 |
10 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 2 |
11 | 2 | 2 | 1 | 2 | 1 | 2 | 1 | 1 | 1 | 2 | 2 |
12 | 2 | 2 | 1 | 1 | 2 | 1 | 2 | 1 | 2 | 2 | 1 |
(4)L9(3^4)
试验号\列号 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | 1 | 1 | 1 | 1 |
2 | 1 | 2 | 2 | 2 |
3 | 1 | 3 | 3 | 3 |
4 | 2 | 1 | 2 | 3 |
5 | 2 | 2 | 3 | 1 |
6 | 2 | 3 | 1 | 2 |
7 | 3 | 1 | 3 | 2 |
8 | 3 | 2 | 1 | 3 |
9 | 3 | 3 | 2 | 1 |
(5)L16(4^5)
试验号\列号 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 2 | 2 | 2 | 2 |
3 | 1 | 3 | 3 | 3 | 3 |
4 | 1 | 4 | 4 | 4 | 4 |
5 | 2 | 1 | 2 | 3 | 4 |
6 | 2 | 2 | 1 | 4 | 3 |
7 | 2 | 3 | 4 | 1 | 2 |
8 | 2 | 4 | 3 | 2 | 1 |
9 | 3 | 1 | 3 | 4 | 2 |
10 | 3 | 2 | 4 | 3 | 1 |
11 | 3 | 3 | 1 | 2 | 4 |
12 | 3 | 4 | 2 | 1 | 3 |
13 | 4 | 1 | 4 | 2 | 3 |
14 | 4 | 2 | 3 | 1 | 4 |
15 | 4 | 3 | 2 | 4 | 1 |
16 | 4 | 4 | 1 | 3 | 2 |
(6)L25(5^6)
试验号\列号 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 2 | 2 | 2 | 2 | 2 |
3 | 1 | 3 | 3 | 3 | 3 | 3 |
4 | 1 | 4 | 4 | 4 | 4 | 4 |
5 | 1 | 5 | 5 | 5 | 5 | 5 |
6 | 2 | 1 | 2 | 3 | 4 | 5 |
7 | 2 | 2 | 3 | 4 | 5 | 1 |
8 | 2 | 3 | 4 | 5 | 1 | 2 |
9 | 2 | 4 | 5 | 1 | 2 | 3 |
10 | 2 | 5 | 1 | 2 | 3 | 4 |
11 | 3 | 1 | 3 | 5 | 2 | 4 |
12 | 3 | 2 | 4 | 1 | 3 | 5 |
13 | 3 | 3 | 5 | 2 | 4 | 1 |
14 | 3 | 4 | 1 | 3 | 5 | 2 |
15 | 3 | 5 | 2 | 4 | 1 | 3 |
16 | 4 | 1 | 4 | 2 | 5 | 3 |
17 | 4 | 2 | 5 | 3 | 1 | 4 |
18 | 4 | 3 | 1 | 4 | 2 | 5 |
19 | 4 | 4 | 2 | 5 | 3 | 1 |
20 | 4 | 5 | 3 | 1 | 4 | 2 |
21 | 5 | 1 | 5 | 4 | 3 | 2 |
22 | 5 | 2 | 1 | 5 | 4 | 3 |
23 | 5 | 3 | 2 | 1 | 5 | 4 |
24 | 5 | 4 | 3 | 2 | 1 | 5 |
25 | 5 | 5 | 4 | 3 | 2 | 1 |
(7)L8(4×2^4)
试验号\列号 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 2 | 2 | 2 | 2 |
3 | 2 | 1 | 1 | 2 | 2 |
4 | 2 | 2 | 2 | 1 | 1 |
5 | 3 | 1 | 2 | 1 | 2 |
6 | 3 | 2 | 1 | 2 | 1 |
7 | 4 | 1 | 2 | 2 | 1 |
8 | 4 | 2 | 1 | 1 | 2 |
(8)L12(3×2^4)
试验号\列号 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 1 | 1 | 2 | 2 |
3 | 1 | 2 | 2 | 1 | 2 |
4 | 1 | 2 | 2 | 2 | 1 |
5 | 2 | 1 | 2 | 1 | 1 |
6 | 2 | 1 | 2 | 2 | 2 |
7 | 2 | 2 | 1 | 2 | 2 |
8 | 2 | 2 | 1 | 2 | 2 |
9 | 3 | 1 | 2 | 1 | 2 |
10 | 3 | 1 | 1 | 2 | 1 |
11 | 3 | 2 | 1 | 1 | 2 |
12 | 3 | 2 | 2 | 2 | 1 |
(9)L16(4^4×2^3)
试验号\列号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 2 | 2 | 2 | 1 | 2 | 2 |
3 | 1 | 3 | 3 | 3 | 2 | 1 | 2 |
4 | 1 | 4 | 4 | 4 | 2 | 2 | 1 |
5 | 2 | 1 | 2 | 3 | 2 | 2 | 1 |
6 | 2 | 2 | 1 | 4 | 2 | 1 | 2 |
7 | 2 | 3 | 4 | 1 | 1 | 2 | 2 |
8 | 2 | 4 | 3 | 2 | 1 | 1 | 1 |
9 | 3 | 1 | 3 | 4 | 1 | 2 | 2 |
10 | 3 | 2 | 4 | 3 | 1 | 1 | 1 |
11 | 3 | 3 | 1 | 2 | 2 | 2 | 1 |
12 | 3 | 4 | 2 | 1 | 2 | 1 | 2 |
13 | 4 | 1 | 4 | 2 | 2 | 1 | 2 |
14 | 4 | 2 | 3 | 1 | 2 | 2 | 1 |
15 | 4 | 3 | 2 | 4 | 1 | 1 | 1 |
16 | 4 | 4 | 1 | 3 | 1 | 2 | 2 |