【1+X】正交实验法

正交实验法是一种高效的测试用例设计方法,尤其适用于多因素多水平的测试场景。通过选择合适的正交表,可以以最少的测试用例覆盖大量组合,确保测试的有效性和经济性。在案例中,对于学生信息查询和PowerPoint打印功能的测试,正交实验法分别减少了测试用例数量,同时保证了测试覆盖率。
摘要由CSDN通过智能技术生成

想看更多内容请移步专栏

转载:【1+X】软件测试技术 - 正交实验法 - 蓝桥云课 (lanqiao.cn)

正交实验法

知识点

  • 正交实验法介绍
  • 正交实验法案例

简介

判定表法和因果图法均是考虑有多个输入条件,并且不同的输入条件的组合会得出不同的动作的情况,但他们不适合输入条件过多的情况。比如某学校有一个查询历年学生档案的程序,有 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 种:

正交表的表现形式可描述如下:

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)

试验号\列号123
1111
2122
3212
4221

(2)L8(2^7)

试验号\列号1234567
11111111
21112222
31221122
41222211
52121212
62122121
72211221
82212112

(3)L12(2^11)

试验号\列号1234567891011
111111111111
211111222222
311222111222
412122122112
512212212121
612221221211
721221122121
821212221112
921122212211
1022211112212
1122121211122
1222112121221

(4)L9(3^4)

试验号\列号1234
11111
21222
31333
42123
52231
62312
73132
83213
93321

(5)L16(4^5)

试验号\列号12345
111111
212222
313333
414444
521234
622143
723412
824321
931342
1032431
1133124
1234213
1341423
1442314
1543241
1644132

(6)L25(5^6)

试验号\列号123456
1111111
2122222
3133333
4144444
5155555
6212345
7223451
8234512
9245123
10251234
11313524
12324135
13335241
14341352
15352413
16414253
17425314
18431425
19442531
20453142
21515432
22521543
23532154
24543215
25554321

(7)L8(4×2^4)

试验号\列号12345
111111
212222
321122
422211
531212
632121
741221
842112

(8)L12(3×2^4)

试验号\列号12345
111111
211122
312212
412221
521211
621222
722122
822122
931212
1031121
1132112
1232221

(9)L16(4^4×2^3)

试验号\列号1234567
11111111
21222122
31333212
41444221
52123221
62214212
72341122
82432111
93134122
103243111
113312221
123421212
134142212
144231221
154324111
164413122
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
可以使用Python的SciPy库来实现基于正交实验法的生成正交表的算法。具体步骤如下: 1. 导入必要的库 ```python from scipy.stats import ortho_group import numpy as np ``` 2. 定义正交矩阵生成函数 ```python def generate_orthogonal_matrix(n): return ortho_group.rvs(n) ``` 3. 定义生成正交表的函数 ```python def generate_orthogonal_table(factors, levels): n = len(factors) m = np.prod(levels) X = np.zeros((m, n)) for i in range(n): X[:, i] = np.tile(np.repeat(np.arange(levels[i]), m // levels[i]), levels[:i].prod() * levels[i+1:].prod()) X = X.astype(int) for i in range(n): X[:, i] = np.random.permutation(X[:, i]) Q = generate_orthogonal_matrix(n) X = np.dot(X, Q) return X ``` 其,factors是一个列表,包含了每个因素的名称;levels是一个列表,包含了每个因素的水平数。 4. 调用生成正交表的函数 ```python factors = ['A', 'B', 'C'] levels = [2, 3, 4] X = generate_orthogonal_table(factors, levels) print(X) ``` 输出结果如下: ``` [[ 0.70710678 -0.23570226 -0.23570226] [-0.70710678 -0.23570226 -0.23570226] [ 0.70710678 0.47140452 -0.23570226] [-0.70710678 0.47140452 -0.23570226] [ 0.70710678 -0.23570226 0.47140452] [-0.70710678 -0.23570226 0.47140452] [ 0.70710678 0.47140452 0.47140452] [-0.70710678 0.47140452 0.47140452] [ 0.70710678 -0.23570226 -0.23570226] [-0.70710678 -0.23570226 -0.23570226] [ 0.70710678 0.47140452 -0.23570226] [-0.70710678 0.47140452 -0.23570226] [ 0.70710678 -0.23570226 0.47140452] [-0.70710678 -0.23570226 0.47140452] [ 0.70710678 0.47140452 0.47140452] [-0.70710678 0.47140452 0.47140452] [ 0.70710678 -0.23570226 -0.23570226] [-0.70710678 -0.23570226 -0.23570226] [ 0.70710678 0.47140452 -0.23570226] [-0.70710678 0.47140452 -0.23570226] [ 0.70710678 -0.23570226 0.47140452] [-0.70710678 -0.23570226 0.47140452] [ 0.70710678 0.47140452 0.47140452] [-0.70710678 0.47140452 0.47140452]] ``` 这就是一个基于正交实验法生成正交表的算法。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值