《软件测试设计》第3章——基于规格说明的测试(2)
3.5 结对测试
作用:减少测试用例的数目并确保测试覆盖率的要求
结对测试设计的测试用例可覆盖测试对象每个参数的两两组合
案例6 测试某网站系统
上述案例测试量巨大,测试人员可采用以下策略:
① 尝试测试所以输入的组合,延期项目导致的后果可能是失去产品的市场
② 选择一些容易设计和执行的测试用例,而忽略其是否能够提供产品质量的信息
③ 罗列所有组合,并随机选择其中的子集进行测试
④ 采用特殊测试技术,选择能发现大部分缺陷的子集进行测试。
结对测试技术属于策略④,举例如下:
① 若软件有4个不同的输入参数,每个参数有3个不同的输入值,则完全组合数目是34,,81个,采用结对测试技术只需9个测试用例即可覆盖所有参数的两两组合。
② 若软件有13个不同的输入参数,每个参数有3个不同的输入值,则完全组合数目是313,,采用结对测试技术只需15个测试用例即可覆盖所有参数的两两组合。
③ 若软件有20个不同的输入参数,每个参数有10个不同的输入值,则完全组合数目是1020,,采用结对测试技术只需180个测试用例即可覆盖所有参数的两两组合。
结对测试技术能发现所有的单模式失效和双模式失效,但并不适合与发现测试对象中的多模式失效。
① 单模式失效:失效由单个参数引起,只要针对所有独立参数进行测试就能发现该失效
② 双模式失效:失效由两个参数共同引起,必须针对所有参数的两两组合进行测试才能够确保发现此类缺陷。
③ 多模式失效:失效由3个或3个以上参数共同引起,采用结对测试技术也可能发现多模式缺陷,但不能保证测试的充分性。
结对测试的重点是识别参数输入值的两两组合,它们可以通过正交矩阵的方法或相关测试工具来识别。
3.5.1 基于正交矩阵的结对测试
举例:两个参数,每个参数取值可能为1或2,那么这两个参数的取值组合是4个,{1、1}{1、2}{2、1}{2、2}
L4(23)就是一个正交矩阵,如下所示。其任何两列都覆盖了数字的所有两两组合。
测试人员没必要创建正交矩阵,需做的是选择一个合适的正交矩阵,并将测试需求映射到正交矩阵。
下介绍正交矩阵符号定义
23不是一个指数,而是表示矩阵有3列(可以理解为测试对象有3个参数),每列由两个输入值组成。
上例正交矩阵可称为“2水平3因素正交矩阵”,其中“水平”对应参数取值的数目,“因素”对应参数的个数。
再举例,假定4个参数,每个参数可能取值是1、2和3,那么任意两个参数取值对应的两两组合共9种,{1、1}{1、2}{1、3}{2、1}{2、2}{2、3}{3、1}{3、2}{3、3}
下表为L9(34)正交矩阵,选择任何两列即可覆盖对应参数取值的两两组合。
该矩阵并没有覆盖所有1、2和3的组合,如{1,2,3}{1,2,1}。这因为正交矩阵只保证覆盖所有参数的两两组合。
正交矩阵还有特性:平衡性。若两个参数的某个组合出现多次,那么在其他参数的两两组合中也会出现同样的次数。用下表L18(35)解释
1、2列中{1 1}出现两次,其他两列亦是。其他组合亦是。
在正交矩阵中不是每列(参数)都有相同的取值数,有些正交矩阵是混合形式,如下表L18(2137)
其中有一个参数有两个不同取值,其他7个参数有3个不同取值
了解正交矩阵后,下需将正交矩阵应用于结对测试用例的设计。步骤为:
① 识别测试对象的参数或变量
② 确定每个参数的可能取值个数
③ 选择正交矩阵,使得每列对应一个参数并且每列中的每个取值对应参数的不同取值。
④ 将测试对象实际的取值映射到正交矩阵
⑤ 构建测试用例
下通过网站测试案例6介绍步骤
① 识别参数
网站系统的参数包括浏览器、插件、客户端操作系统、Web服务器软件和服务器端操作系统。
② 确定参数的取值个数
网站系统的参数包括8种浏览器、3种插件、6种客户端操作系统、3种Web服务器软件和3种服务器端操作系统。
完全组合数是1296(8×3×6×3×3=1296),若要求进行完全测试,需覆盖1296个组合。
③ 选择正交矩阵
确定正交矩阵的规模。正交矩阵需5列,第1列需8个不同取值,第2列需3个不同取值,第3列需6个不同取值,第4和5列需3个不同取值。所以正交矩阵应为816133。因无法找到这样的正交矩阵,所以需选择一个规模更大的正交矩阵满足覆盖要求,最终选择L64(8243),此时两两组合只需要64个测试用例,与原来1296个测试用例相比,数目大大减少。
④ 映射正交矩阵
确立正交矩阵后,需将测试对象中的具体取值映射到其中。因为采用了扩展的正交矩阵,所以参数中增加一个取值“Not Used”
将各参数映射到正交矩阵L64(8243)中,在此截取部分图
网站系统只需816133即可,本例采用了正交矩阵L64(8243),表格中没有相应实际参数取值的,用“Not Used”表示。
采用下面策略处理正交矩阵中多余部分
(1) 若选择正交矩阵比要求的矩阵有更多的列,直接删除多出的列即可。
(2) 若选择的正交矩阵比要求的矩阵有更多的行(相当于增加了参数的取值数),为保证正交矩阵特征,不能删除任一行。多出的单元格用相应参数的实际取值代替。
额外填充后,部分结果如下
⑤ 构建测试用例
根据完整正交矩阵,构建测试用例。注意根据得到的正交矩阵构建的测试用例需依据测试对象的需求和用户的要求增加期望结果。
3.5.2 Allpairs
除了正交矩阵理论可帮助识别所有参数输入值的两两组合,Allpairs也可用来识别两两组合。下介绍如何利用Allpairs得到结对测试的测试用例。
① 从www,satisfice.com/tools.shtml下载AllParis并解压。阅读licence.txt和allpairs.rtf文件
② 准备测试对象参数输入值。将测试对象的参数及其取值填入到excel中,得到如下参数列表
将excel中的内容复制到文本文件中,如input.txt。复制表格的内容到文本文件中后,需确保不同的列以tab键分割。
③ 运行程序的得到测试用例。在DOS命令行下运行命令Allpairs.exe input.txt>testcases.txt即可得到包含所有网站参数取值的两两组合的列表,截取部分图像如下。
若列表中某个参数的取值以~开头,那么说明该参数取值已经有两两组合。以~开头的参数取值可用该参数的任何其他取值来代替,并不会影响其两两组合的覆盖率。
Allpairs的得到的测试数据中罗列了所有的两两组合,并统计了每个两两组合出现的次数,以及每个测试用例所包含的两两组合数。
Allpairs的得到的测试用例数目是48个,比正交矩阵得到的数目(64个)更为精简。