摘要:文章首先介绍了软件组合试验面临的测试案例难于筛选的问题,然后阐述正交实验的理论,并结合具体软件测试案例通过使用正交表解决了案例选择的问题,同时正交实验的实践要点和局限性也被介绍。综上所述,正交试验设计法适用于多因素低水平因子的组合测试场景,通过较少的测试用例获得良好的测试覆盖率和测试质量,在實际软件测试工作中能有效地提高测试效率。
关键词:组合测试;因素;水平;正交表;测试案例
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2022)05-0068-02
1 组合测试面临的问题
复杂的软件测试系统往往具有多个变量,每个变量可以有多个取值。某些严重错误的出现会依赖特定的变量的特定取值组合,所以有必要设计多个测试案例来覆盖各个变量的不同取值,这被称为软件测试中的组合测试。
在软件测试的实际实施中,留给测试阶段时间是非常有限的。如果遍历所有变量的所有取值组合显然费时耗力,而且许多案例很可能多余。但是,如果为了减少测试案例的数量而对测试案例进行随机选择,测试人员又很可能会漏测很多特定参数组合的测试案例,导致bug没有被发现。因此,软件测试人员需要找到合适的方式来选择测试案例,保证既覆盖必要的参数值组合,又避免类似的重复的参数组合[1]。
2 正交试验设计的理论基础
正交试验设计法是研究多因素多水平系统的试验设计方法。它依据正交理论,不再进行全面试验,而只是选择其中一些有典型的数值点来试验。在前面所述的软件测试系统中,多参数且每个参数多取值的特点正好符合正交实验设计的实验前提,所以可以尝试使用正交实验设计来减少组合测试中的测试案例的数量,以达到用最少的测试用例提供最大的参数值覆盖的目的。
正交试验设计的概念最好用一个例子来说明。假设有三个参数(A、B和C),每个参数有三个可能值(1、2、3)。测试三个参数的所有可能组合需要27个(3 ^ 3)测试用例。这么多测试用例真的有必要吗?显然只有当故障依赖于所有三个参数的某种特定组合时才有必要(例如,只有当A=1,B=1,C=1的情况下才会发生故障)。然而,通过对大量故障做事后分析发现:绝大多数故障的出现只会取决于两个参数的取值组合。比如某个故障可能发生在三个测试用例中的每一个:(A=1,B=1,C=1);(A=1,B=1,C=2)或(A=1,B=1,C=3)。在这个情况下,显然C无论取何值都不影响故障的捕捉,所以选择三个测试中的任意一个即可[2-3]。也就是说每个变量的每个值与另一个变量的每个值各碰一次就可以了,这与正交性正好吻合。
在具体实验设计中,我们主要依靠数学预先计算出来的正交表为基本工具。 正交表是利用组合理论知识的一种标准化形式。以正交表L8(27)为例:“L”象征正交表;其下的角标数字“8”表示有 8行,代表要进行8次实验;括号内的指数“7”表示有7列,表示系统中实验的因素最多为7 个;数“2”表示因素最多允许拥有的水平数,有两种水平1与2。可以看出,通过正交表安排的实验方法整齐可比,均匀分散性。也就是说:每一列中,任意两列中数字的排列方式均衡,不同的数字(水平)出现的次数相等[4]。
使用正交实验设计运用于软件组合测试,正交表中的行数就是测试案例的数目。为方便起见,将影响测试结果的变量称为因素。而某个因素所能取值的数量称为该因素的水平。 因素可以表示为正交表中的列数,正交表写为LRuns(水平因素)。正交表可以分为等水平正交表和混合水平正交表。前者系统中每个因素的水平数相同,如L8(27);后者系统中每个因素的水平数不相同,例如L18(21×37)。
根据法整齐可比,均匀分散性的正交性,对于某个确定的正交表中,各个因素的每一个水平的出现次数相同的。例如,正交表L8(27) 中的七个因素都拥有两个水平数,而正交表有8行,可见各个因素的每水平各出现4次。
假设某测试系统具有七个因素、每个因素有两个水平。如果做全覆盖,组合测试案例数可以大到2 ^ 7=128,但如果使用正交表L8(27),则可以将测试案例数数减少到8,也就是原来的1/16。显然,正交实验法在保证测试质量的同时又减少需要执行的案例,从而大大提高测试效率。
3 正交实验设计法在软件测试中的运用
下面以一个实例为例介绍了用正交表设计对多因素系统进行软件测试用例设计的步骤:
3.1 提取测试系统中因素的数量和每个因素的水平数
假定某测试系统有7个独立变量(因素)。其中有两个因素的水平数为2,而其他五个因素的水平数为3,表示为:
A: A1,A2; B: B1, B2; C: C1, C2, C3; D: D1, D2, D3; E: E1, E2, E3; F: F1, F2, F3; G: G1, G2, G3
3.2 选择合适的正交表
选择一个合适的正交表,它可以覆盖每个因素的所有水平。选择的正交表应满足以下条件:
从因素的角度来选择:表中因素的数目>=7;
从水平的角度来选择:表中至少有两个因素的水平数>=2,至少有五个因素的水平数>=3。
通过网站(比如约克大学数学系网站)查询可知, 正交表L18(21×37) 和 L27(313) 都可以符合上面的要求。由于正交表的行数对应测试案例的个数,从较少测试案例的角度,应该选择行数较少的表,因此正交表L18(21×37)被选中。
3.3 将软件测试系统映射到正交表
将测试系统中的因素映射到正交表的列,水平映射到正交表中的行。由于实际的测试系统具有的因素的数目和各个因素的水平数千差万别,预先计算好的正交表不一定能完全匹配测试系统,所以需要做一些折中。具体到本例,由于系统只有7个因素,但L18(21*37)有8个因素,所以正交表的第七列需要被忽略。
正交表中两个水平数的因素只有1个(21),所以首先从正交表映射到组合测试案例表的是水平数为2的因素A。因此尽管因素 B也只有两个水平,但是也被映射為三个水平的因素,也就是组合测试案例表中第二列,第二列的3的值可以均匀地映射为B1或B2。而因素C\D\E\F\G 水平数都是3,显然就被映射到第三\四\五\六\八列。组合测试案例表的第七列被忽略。
3.4 将表中每个行中各因素组合作为测试用例
通过前面的步骤,从正交表映射过来的组合测试案例表已经形成。正交表的因素和水平映射到组合测试案例表中就是各个变量以及其不同的值。该测试案例表由于来源于了正交表,保证了测试系统中任意一个独立变量的每个值都和与其他每个独立变量的每个值都组合一次。这样就从理论上保证了组合测试中案例选择的完备性。
3.5 添加可疑且不出现在表格中的组合
软件测试是理论和经验结合的艺术。正交表形成的组合测试集尽管非常高效,但是它的理论前提绝大多数故障的出现只会取决于两个参数的取值组合。如果测试人员怀疑个别三个及以上参数的取值组合有导致bug的可能,可以人为地添加上去,但注意这样的测试案例数量一般不要超过原来案例的10%。
4 正交实验设计法的局限
研究发现,使用正交实验法后组合测试的案例数为 rq2,其中r为自然数,q为系统的最大水平数。显然,当系统因素较多,但是每个因素的水平数较小时,也就是系统中因素的水平比较均匀时,正交实验法能大大降低正交表的行数。但是当系统中某一个或几个因素水平数q较大时,正交表行数会大大增加。所以该方法对拥有高水平因素的系统不适用[5]。
由此可知,正交实验设计法运用在软件测试中组合测试里,最适合的情况是多个变量但是每个变量的取值较少的这种“均匀可比”的情况,一旦某个变量的取值数目远远大于其他变量的取值,系统变量将变得不再均匀,从而软件测试案例的数目也会大大增加。
虽然该方法存在着一定的局限,但是实际情况中,大部分系统的变量取值都比较均匀,所以该方法对大部分测试系统而言能有效地降低组合测试的测试案例数量,从而能大大降低软件测试的时间,提高软件迭代的效率,具有较强的实用性。
参考文献:
[1] 梅耶.软件测试的艺术[M]. 3版.张晓明,黄琳,译.北京:机械工业出版社,2013.
[2] 斛嘉乙,符永蔚,樊映川.软件测试技术指南[M].北京:机械工业出版社,2019.
[3] 朱少民.全程软件测试[M].3版.北京:人民邮电出版社,2019.
[4] 方开泰,马长兴.正交与均匀试验设计[M].北京:科学出版社,2001.
[5] 郭兴家,熊英.实验数据处理与统计[M].北京:化学工业出版社,2019.
【通联编辑:梁书】
收稿日期:2021-08-27
作者简介:任洛漪(1976—),女,湖北武汉人,讲师,硕士,研究方向为软件测试,算法优化。