测试设计方法:正交试验原理分析与实践
文章目录
- 1、引言
- 2、基本原理及定义
- 3、正交表的分类
- 3.1、标准正交表
- 3.2、混合水平正交表
- 4、正交试验设计步骤
- 5、应用案例
- 5.1 案例一:自助售货机
- 5.2 案例一:自动化处理
- 1)PICT自动化工具介绍
- 2)自动化处理过程
- 5.3 案例二:终端设备端口交互测试
- 1)PICT约束基本规则
- 2)自动化处理过程
- 6、正交试验的优势和局限
- 6.1 优势
- 6.2 局限
- 7、其他实用工具推荐
- 8、拓展:加权正交试验
- 9、附录
- 9.1 常用正交表查阅表
- 9.2 取得正交表的常用方法
- 10、参考
1、引言
软件领域从上世纪60年代发展至今,开发技术不断地迭代,软件的复杂度也日趋复杂,质量保障地实践方法也在发生着变化。早期的黑盒测试,通过等价类划分、边界值分析、错误猜测等方法对程序功能进行分析,对黑盒测试的案例设计方法也在不断的探索,下面来介绍一种新的黑盒测试设计方法:正交试验。一种十分经典的设计方法,将统计学正交试验的思路结合到了测试设计的过程中,通过采用此方法,可以非常高效的提高案例的设计效率,十分方便。
2、基本原理及定义
正交试验,是一种基于统计学原理的黑盒测试方法,本质是利用正交表,来将各种因素进行均匀的搭配组合,来提高我们的测试场景整体的覆盖密度,确保我们每个独立的因素场景及它们之间的交互场景都能被充分的验证到。因为这一点,通过这一种方法,生成的测试案例的数量会相对少很多,减少了用例场景之间的冗余。也正因为这一点,可以在不影响整体测试效果下,大幅提升测试效率,并且测试的结果依然可靠。
正交试验包含下面三种基本要素:
-
1、因素 (Factor):
指代能够影响软件功能、性能、或配置一种独立的输入变量。例如自动售货机,交易时的支付方式、售卖物品都可视为独立因素。
-
2、水平 (Level):
表示独立因素下,所有可能的取值或状态。例如自动售货机,支付方式有支付宝、微信支付、数字货币、云闪付,这些都是支付方式这一因素的水平值。
-
3、正交表 (Orthogonal Array):
一种预设好的、用于安排多因素试验的标准化表格,也可称之为因子状态表,依据伽罗瓦理论(Galois Theory)生成。通常用 L n ( m k ) \ L_n(m^k) Ln(mk)来表示:
- L:代表正交表 (Latin Square)
- n:代表正交表的行数,即试验的次数,对应最终生成的测试用例的数量
- k:代表正交表的列数(栏数),表示最多可以安排的因素个数
- m:表示每个因素所具有的水平数
L n ( m k ) \ L_n(m^k) Ln(mk)表示的是一个可研究k个因素,每个因素最多可具有m个水平值的需n次试验的正交试验。
3、正交表的分类
3.1、标准正交表
在研究的案例下,当所研究的所有因素都具有相同的水平值时,通过这种格式生成的正交表即为标准正交表,也称为单一水平正交表。
如 L 9 ( 3 4 ) L_9(3^4) L9(34)表示的就是一个需要进行9次试验的标准正交表,可以用来研究最多4个因素,每个因素有3个水平:
factor1: level_1, level_2, level_3
factor2: level_1, level_2, level_3
factor3: level_1, level_2, level_3
factor4: level_1, level_2, level_3
正交表示例:
用例 | factor1 | factor2 | factor3 | factor4 |
---|---|---|---|---|
用例1 | level_1 | level_1 | level_1 | level_1 |
用例2 | level_1 | level_2 | level_3 | level_2 |
用例3 | level_1 | level_3 | level_2 | level_3 |
用例4 | level_2 | level_1 | level_3 | level_3 |
用例5 | level_2 | level_2 | level_2 | level_1 |
用例6 | level_2 | level_3 | level_1 | level_2 |
用例7 | level_3 | level_1 | level_2 | level_2 |
用例8 | level_3 | level_2 | level_1 | level_3 |
用例9 | level_3 | level_3 | level_3 | level_1 |
3.2、混合水平正交表
大多数情况下,问题涉及的因素水平数并不会相同,这种情况下采用混合水平正交表。像 L 6 ( 2 1 3 1 ) L_{6}(2^{1}\ 3^{1}) L6(21 31)表示的是一个需要6次试验的混合水平正交表,其中存在1个因素有2水平、1个因素有3水平。
factor1: level_1, level_2
factor2: level_1, level_2, level_3
正交表示例:
用例 | factor1 | factor2 |
---|---|---|
用例1 | level_1 | level_1 |
用例2 | level_1 | level_2 |
用例3 | level_1 | level_3 |
用例4 | level_2 | level_1 |
用例5 | level_2 | level_2 |
用例6 | level_2 | level_3 |
总结:标准正交表的格式固定,生成的表可以查阅标准表,见附录[9.1 常用正交表查阅表](###9.1 常用正交表查阅表),其中也包含一部分常见的混合水平正交表可以查阅。
4、正交试验设计步骤
通过正交试验设计用例,简要分为下面四个步骤:
-
第一步: 分析需求中涉及的所有的“因素”以及“水平”值。
-
第二步: 选择合适的正交表,优先采用标准正交表。当因素水平不一致时采用混合水平正交表。
-
第三步: 将“因素”以及“水平”根据正交表水平值映射到正交表。
-
第四步: 根据完整正交表生成测试用例。
上面的四个步骤中,相对复杂的是对正交表的选用,下面通过具体案例进行探究。
5、应用案例
5.1 案例一:自助售货机
以上面提到的自助售货机为例,假设完整需求规格书如下:
某自助售货机,支持自助售卖饮品,售卖的产品有怡宝、农夫山泉、脉动,售货机支持的支付方式需要有:支付宝、微信支付、数字货币、云闪付并且在交易时,并且支持人民币、美元支付。售卖机投放的区域有两块,区域A、区域B。售卖规则按所属区域自主调控定价。设计针对自助售货机的售货功能测试。
1、分析需求中的“因素”和“水平”:
售卖物品:怡宝、农夫山泉、脉动 ———— 因素:售卖物品、水平值:3
支付方式:支付宝、微信支付、数字货币、云闪付 ———— 因素:支付方式、水平值:4
交易货币:人民币、美元 ———— 因素:交易货币、水平值:2
销售区域:区域A、区域B ———— 因素:销售区域、水平值:2
2、选择合适正交表:
这里很明显的是,四个因素,各自有不同的水平值,采用的是混合正交表 L 24 ( 2 2 3 1 4 1 ) L_{24}(2^{2}\ 3^{1}\ 4^{1}) L24(22 31 41),混合正交表处理方式有很多种,这里采用拆分2个小的正交表,再进行合并:
- 拆分正交表1: L 2 ( 2 2 ) L_{2}(2^{2}) L2(22):处理的因素”交易货币“、”销售区域“。将此部分处理好整体作为1个因素A,此因素有2种结果。
针对”交易货币“、”销售区域“得到标准正交表:
交易货币 | 销售区域 |
---|---|
人民币 | 区域 B |
美元 | 区域 A |
- 拆分正交表2: L 12 ( 3 1 4 1 ) L_{12}(3^{1}\ 4^{1}) L12(31 41):剩余2个因素待处理,最大水平为4,直接进行正交组合得到12个试验,再补全关联因素A,以标准正交表来进行处理得到如下:
试验序号 | 售卖物品 | 支付方式 | 因素A |
---|---|---|---|
1 | 怡宝 | 支付宝 | 1 |
2 | 怡宝 | 微信支付 | 1 |
3 | 怡宝 | 数字货币 | 1 |
4 | 怡宝 | 云闪付 | 1 |
5 | 农夫山泉 | 支付宝 | 1 |
6 | 农夫山泉 | 微信支付 | 1 |
7 | 农夫山泉 | 数字货币 | 1 |
8 | 农夫山泉 | 云闪付 | 1 |
9 | 脉动 | 支付宝 | 1 |
10 | 脉动 | 微信支付 | 1 |
11 | 脉动 | 数字货币 | 1 |
12 | 脉动 | 云闪付 | 1 |
3、处理子正交表: 将拆分表1和表2正交合并,并将”因素“和”水平“映射到正交表,最终生成的正交表如下:
试验序号 | 售卖物品 | 支付方式 | 交易货币 | 销售区域 |
---|---|---|---|---|
1 | 怡宝 | 支付宝 | 人民币 | 区域 A |
2 | 怡宝 | 微信支付 | 人民币 | 区域 B |
3 | 怡宝 | 数字货币 | 美元 | 区域 A |
4 | 怡宝 | 云闪付 | 美元 | 区域 B |
5 | 农夫山泉 | 支付宝 | 人民币 | 区域 B |
6 | 农夫山泉 | 微信支付 | 人民币 | 区域 A |
7 | 农夫山泉 | 数字货币 | 美元 | 区域 B |
8 | 农夫山泉 | 云闪付 | 美元 | 区域 A |
9 | 脉动 | 支付宝 | 美元 | 区域 A |
10 | 脉动 | 微信支付 | 美元 | 区域 B |
11 | 脉动 | 数字货币 | 人民币 | 区域 A |
12 | 脉动 | 云闪付 | 人民币 | 区域 B |
13 | 怡宝 | 支付宝 | 美元 | 区域 B |
14 | 怡宝 | 微信支付 | 美元 | 区域 A |
15 | 怡宝 | 数字货币 | 人民币 | 区域 B |
16 | 怡宝 | 云闪付 | 人民币 | 区域 A |
17 | 农夫山泉 | 支付宝 | 美元 | 区域 A |
18 | 农夫山泉 | 微信支付 | 美元 | 区域 B |
19 | 农夫山泉 | 数字货币 | 人民币 | 区域 A |
20 | 农夫山泉 | 云闪付 | 人民币 | 区域 B |
21 | 脉动 | 支付宝 | 人民币 | 区域 B |
22 | 脉动 | 微信支付 | 人民币 | 区域 A |
23 | 脉动 | 数字货币 | 美元 | 区域 B |
24 | 脉动 | 云闪付 | 美元 | 区域 A |
4、将正交表输出到完整测试用例,每一行输出到一个测试用例。
以此,每一行试验项,为一个测试用例,最终得到完整的24个测试用例。四个因素,在不使用正交试验的情况下,总共会产生 3 × 4 × 2 × 2 = 48 3\times4\times2\times2=48 3×4×2×2=48个测试案例。采用正交试验后对比减少50%的用例数量。针对混合水平的处理,有许多不同的处理思路,不同的处理方式下,得到的最终正交表的规格会有差异。具体方法思路参考附录:[9.2 取得正交表的常用方法](###9.2 取得正交表的常用方法)
5.2 案例一:自动化处理
1)PICT自动化工具介绍
PICT (Pairwise Independent Combinatorial Testing tool):微软开发的一款免费开源工具,用于正交表生成的命令行工具,支持自定义因素、水平及因素间约束关系,甚至可针对因素配置自定义权重,生成高效的成对测试用例集,广泛应用于组合测试。
基本命令语法:
pict sample.txt > sample.xls [options]
- sample.txt:包含所有的因素水平等内容,因素后“:”跟接各水平值,逗号相隔,因素水平默认不区分大小写。示例:
因素A: a1, a2, a3
因素B: b1, b2, b3, b4, b5
- sample.xls:生成的正交表,仅支持xls格式。
- [options]:可选项,详细如下:
❯ pict
Pairwise Independent Combinatorial TestingUsage: pict model [options]Options:/o:N|max - Order of combinations (default: 2) # 设置测试组合的阶数/d:C - Separator for values (default: ,) # 设置输出文件中值的分隔符/a:C - Separator for aliases (default: |) # 设置值别名的分隔符/n:C - Negative value prefix (default: ~) # 设置约束条件中表示否定的前缀/e:file - File with seeding rows # 指定包含预定义测试用例的文件/r[:N] - Randomize generation, N - seed # 随机生成测试用例[- 不带参数:使用当前时间作为种子;- N:指定随机种子]/c - Case-sensitive model evaluation # 在评估模型时区分大小写,默认不区分/s - Show model statistics # 显示模型统计和生成的测试用例统计
2)自动化处理过程
按照pict规则,将案例1因素和水平处理后如下:
售卖物品: 怡宝,农夫山泉,脉动
支付方式: 支付宝,微信支付,数字货币,云闪付
交易货币: 人民币,美元
销售区域: 区域A,区域B
保存到sample3.txt,将其生成正交表:
pict sample3.txt > sample3.xls
得到完整的正交表如下:
试验序号 | 售卖物品 | 支付方式 | 交易货币 | 销售区域 |
---|---|---|---|---|
1 | 怡宝 | 微信支付 | 人民币 | 区域B |
2 | 怡宝 | 数字货币 | 美元 | 区域A |
3 | 农夫山泉 | 数字货币 | 美元 | 区域B |
4 | 农夫山泉 | 微信支付 | 人民币 | 区域A |
5 | 怡宝 | 云闪付 | 美元 | 区域B |
6 | 农夫山泉 | 支付宝 | 人民币 | 区域A |
7 | 脉动 | 云闪付 | 人民币 | 区域A |
8 | 怡宝 | 支付宝 | 美元 | 区域B |
9 | 农夫山泉 | 云闪付 | 人民币 | 区域A |
10 | 脉动 | 数字货币 | 美元 | 区域B |
11 | 脉动 | 支付宝 | 人民币 | 区域A |
12 | 脉动 | 微信支付 | 美元 | 区域B |
13 | 农夫山泉 | 数字货币 | 人民币 | 区域A |
工具生成的结果相比于上述手动处理结果更加精简,对交易货币和销售区域进行了进一步精简交叉。之后将处理得到的正交表转为用例即可。
5.3 案例二:终端设备端口交互测试
1)PICT约束基本规则
基本符号:
操作符类型 | 操作符 | 说明 |
---|---|---|
关系操作符 | = | 等于 |
<> | 不等于 | |
< | 小于 | |
> | 大于 | |
<= | 小于等于 | |
>= | 大于等于 | |
逻辑操作符 | and | 与 |
or | 或 | |
not | 非 | |
xor | 异或 | |
集合操作符 | in | 属于某个集合 |
not in | 不属于某个集合 |
基本语法:
# 如果 ParameterA 等于 ValueA 则 ParameterB 要求等于 ValueB
if [ParameterA] = "ValueA" then [ParameterB] = "ValueB";
# 如果 ParameterA 等于 ValueA 则 ParameterB 要求不等于 ValueB
if [ParameterA] = "ValueA" then [ParameterB] <> "ValueB";
# 如果 ParameterA 等于 ValueA 且 ParameterB 等于 ValueB 则 ParameterC 等于 ValueC
if [ParameterA] = "ValueA" and [ParameterB] = "ValueB" then [ParameterC] = "ValueC";
2)自动化处理过程
完整需求如下:
有一款终端设备,有3个端口,分别为A、B、C,端口A支持接入PC、适配器、OTG、上位机,端口B与端口A相同支持4种设备接入,端口C为专用接口,用来连接终端底座,拓展其他外设。端口C与端口B存在物理上互斥,无法同时接入。分析端口的测试场景。
对其多端口场景进行分析,得到的因素和水平分别如下:
1、分析“因素”及所有可能的“水平”值: 可充分考虑同时接入3、2、1端口的场景
A端口: PC、适配器、OTG、上位机、空闲 ———— 因素:A端口、水平值:5
B端口: PC、适配器、OTG、上位机、空闲 ———— 因素:B端口、水平值:5
C端口: 底座、空闲 ———— 因素:C端口、水平值:2
由于B端口与C端口物理互斥,存在约束条件:
- 长边B端口:接入 -> C端口:无法接入(反之亦然)
2、生成正交表:
直接使用PICT工具,将约束条件及因素和水平值整理得到如下初始表单:
# Sample
A端口: PC,适配器,OTG,上位机,空闲
B端口: PC,适配器,OTG,上位机,空闲
C端口: 底座,空闲# 约束条件:如果B接入外设,则C必须为空
if [B端口] <> "空闲" then [C端口] = "空闲";
使用工具直接生成:
pict demo.txt > demo.xls
输出正交表如下:
试验序号 | A端口 | B端口 | C端口 |
---|---|---|---|
1 | 上位机 | OTG | 空闲 |
2 | 适配器 | 上位机 | 空闲 |
3 | 空闲 | 适配器 | 空闲 |
4 | PC | 空闲 | 底座 |
5 | 空闲 | 上位机 | 空闲 |
6 | PC | 适配器 | 空闲 |
7 | PC | PC | 空闲 |
8 | OTG | 上位机 | 空闲 |
9 | OTG | 适配器 | 空闲 |
10 | PC | OTG | 空闲 |
11 | 上位机 | PC | 空闲 |
12 | 空闲 | 空闲 | 底座 |
13 | 空闲 | OTG | 空闲 |
14 | 适配器 | PC | 空闲 |
15 | 上位机 | 上位机 | 空闲 |
16 | 适配器 | 空闲 | 底座 |
17 | OTG | PC | 空闲 |
18 | PC | 上位机 | 空闲 |
19 | 适配器 | OTG | 空闲 |
20 | 空闲 | PC | 空闲 |
21 | OTG | OTG | 空闲 |
22 | 上位机 | 空闲 | 底座 |
23 | 适配器 | 适配器 | 空闲 |
24 | OTG | 空闲 | 底座 |
25 | OTG | 空闲 | 空闲 |
26 | 上位机 | 适配器 | 空闲 |
4、根据正交表输出测试用例
上面的例子下,原始用例数量为, 5 × 5 × 2 = 50 5\times5\times2=50 5×5×2=50条用例,用例数量可以看出,减少了24条的用例量。这两个例子下,在使用正交试验法设计用例时,均能够在保证一定覆盖率的前提下,大幅缩减测试用例的数量,提高测试设计的效率。
6、正交试验的优势和局限
6.1 优势
优势 | 描述 |
---|---|
高效性 | 可有效减少测试用例的总数,提高测试效率。因素水平越复杂的场景效果越明显。 |
均匀覆盖率 | 元素水平均匀覆盖,保证每对因素水平组合至少被测试一次,确保了测试的覆盖面。 |
系统性 | 提供了一套系统化的方法来输出测试用例,避免主观随意性,防止场景遗漏。 |
易操作性 | 过程相对简单,一旦理解了原理,便可借助现有的正交表或工具,快速设计用例。 |
6.2 局限
局限性 | 描述 |
---|---|
不适用强交互因素场景 | 对因素的独立性要求高,当因素间有强交互作用时,正交实验处理的效果会大打折扣,结果准确性也更差,不适宜采用正交实验进行处理。 |
边界与异常覆盖不足 | 正交实验关注的是整体覆盖均匀,对于单个因素的边界值或异常值的关注不足,需结合其他方法(如边界值分析)处理。 |
因素水平不同时处理相对复杂 | 当不同因素的水平数不同时,需要使用混合水平正交表,选择和使用混合水平正交表相对复杂,增加了测试设计的难度。 |
特定组合的遗漏 | 正交试验本质上确保各因素水平两两组合,但不是所有可能的组合都会出现,可能遗漏业务逻辑上重要的特定组合,对于生成的组合需结合业务场景审查。 |
7、其他实用工具推荐
对于正交表的生成,除PICT外,还有下面的一些实用工具:
-
在线正交表生成器:chemtools.cn提供的一款免费在线工具,可以直接根据因素和水平值生成正交表。
-
allpairs:python工具库,用于直接生成all-pairs(pairwise)测试组合,开源免费。
-
Minitab:一款适用于各水平的统计学工具,功能强大,支持生成各类标准正交表及混合水平正交表,但需付费。
应用中“统计->DOE->田口->创建田口设计”:田口设计即为正交试验

生成正交表示例:

8、拓展:加权正交试验
在进行正交试验时,有时部分因素的重要程度比较高,比如一个网页的兼容性,客户的主要群体假设是程序员,则依据市场占有率以及客户群体本身,chrome浏览器的占比就相对较高。则在网络应用的正交案例中,chrome这一项因素水平就可以将其权重提高,针对正交试验中的各因素水平进行加权,在进行因素组合时,根据不同权重决定组合中因素的优先采用:
通过PICT工具可以直接实现自定义因素水平的权重:
# 示例:Chrome权重定义为10,windows权重定义为7,1920×1080权重定义为2
浏览器:Chrome(10), Firefox, Edge, Safari, Opera
操作系统:Windows(7) , MacOS
分辨率:1920×1080(2), 1366× 768
其他所有的未指明的水平,权重都为1,在确定因素水平权重之后,直接进行正交表生成即可。
注: 权重仅在不影响整体因素覆盖标准时,才会根据权重确定最终结果,且权重值必须为正整数。
更多详情参考:https://github.com/Microsoft/pict/blob/main/doc/pict.md
9、附录
9.1 常用正交表查阅表
SSPSAU提供的10水平以下常用正交表查阅,包含标准正交表和混合水平正交表: SPSSAU正交表手册2020版.xlsx

9.2 取得正交表的常用方法
获取方法 | 适用类型 | 描述 | 优势 | 局限性 | 推荐程度 |
---|---|---|---|---|---|
专业正交表软件 | 标准/混合 | 使用SPSS Orthogonal Design、OrthArray、PICT等专门工具 | 功能专注,针对性强 | 可能需要专业知识,部分软件收费 | ⭐⭐⭐⭐⭐ |
统计软件生成 | 标准/混合 | 使用Minitab、SAS、JMP、Design Expert等统计软件自动生成 | 操作简便,可视化强,支持分析 | 部分软件收费,学习成本相对高一些 | ⭐⭐⭐⭐⭐ |
标准正交表手册 | 标准 | 使用已发表的标准正交表集合,如 L 4 ( 2 3 ) L_4(2^3) L4(23)、 L 8 ( 2 7 ) L_8(2^7) L8(27)、 L 9 ( 3 4 ) L_9(3^4) L9(34)等 | 方便快捷,可靠性高 | 仅限于常见规格的标准正交表 | ⭐⭐⭐⭐ |
在线正交表生成器 | 标准/混合 | 使用网站如STATEASE、正交设计助手等 | 无需安装,随时可用 | 功能可能受限,稳定性不确定 | ⭐⭐⭐⭐ |
编程自动生成 | 标准/混合 | 使用R、Python等编程语言实现算法生成 | 高度自定义,可批量生成 | 需编程能力,算法复杂 | ⭐⭐⭐⭐ |
泰格奇正交表集 | 标准/混合 | 使用田口玄一编制的正交表集合 | 工业实践验证,配套分析方法 | 特定领域针对性,选择有限 | ⭐⭐⭐⭐ |
交互作用设计法 | 标准/混合 | 考虑因素交互作用影响的设计方法 | 可分析因素间相互作用 | 设计复杂度增加,运行次数增多 | ⭐⭐⭐⭐ |
Excel模板工具 | 标准 | 使用预设Excel模板选择和生成正交表 | 广泛可用,易于操作 | 功能有限,大规模设计不适用 | ⭐⭐⭐⭐ |
表格查询法 | 标准 | 根据因素数和水平数,查询标准正交表目录 | 简单直接,无需软件 | 只适用于标准正交表 | ⭐⭐⭐ |
混合水平转换法 | 混合 | 从标准正交表转换,如将3水平转为2水平 | 利用已有正交表资源 | 可能导致正交性下降 | ⭐⭐⭐ |
替换法 | 混合 | 用多个低水平因素替换一个高水平因素 | 操作相对简单 | 需注意替换规则,保持正交性 | ⭐⭐⭐ |
缩减法 | 标准/混合 | 从大规模正交表删除列或合并行得到 | 灵活性强 | 需确保删减后仍保持正交性 | ⭐⭐⭐ |
基本正交表构造法 | 标准 | 基于GF(q)伽罗华域或其他数学方法构造 | 适用于特定结构正交表 | 需要数学背景,复杂度高 | ⭐⭐ |
拼接法 | 混合 | 将多个正交表按规则拼接成更大的正交表 | 可构造大规模正交表 | 技术要求高,易出错 | ⭐⭐ |
正交拉丁方阵变换 | 标准 | 基于拉丁方阵变换构造正交表 | 数学基础扎实 | 仅适用于特定结构 | ⭐⭐ |
10、参考
https://baike.baidu.com/item/%E6%AD%A3%E4%BA%A4%E8%A1%A8/948850
https://spssau.com/helps/medicalmethod/orthogonal.html
https://testerhome.com/articles/16837