
一、理念介绍
在黑盒用例设计方法中有一个大家耳熟能详的正交分析法,却鲜有人知 “Pairwise”设计理念。
设想一种常见的场景,工期很紧的项目,原定的测试时间被“无理”地压缩之后,如何能用极少的时间去保证更高的质量呢?
举个例子,如果让你测试一下 word 字体效果,你会整理出多少个用例呢?

答案很简单是 2 的七次方=128 个用例,但当工期特别紧的时候(128 个用例执行不完)你又会从中选取哪些用例来执行呢?
“Pairwise”(官网: http://www.pairwise.org/)是行之有效的一个思路或者是强有力的理论基础。它是L. L. Thurstone(29 May1887 – 30 September 1955)在 1927 年首先提出来的。他是美国的一位心理统计学家。Pairwise 也正是基于数学统计和对传统的正交分析法进行优化后得到的产物。
Pairwise 基于如下 2 个假设:
(1)每一个维度都是正交的,即每一个维度互相都没有交集。
(2)根据数学统计分析,73%的缺陷(单因子是 35%,双因子是 38%)是由单因子或 2 个因子相互作用产生的。19%的缺陷是由 3 个因子相互作用产生的。
因此,pairwise 基于覆盖所有 2 因子的交互作用产生的用例集合性价比最高而产生的。
举例来说明:当因子 A 为 a1、B 为 b1 时,接下来不可出现 A 为 a1、B 为 b1 或者是 B 为 b1、A 为 a1(为什么会倒过来描述,可以思考一下)。
当然,在现实中会是有各种约束条件的,所以会出现 IF … Then…,或者是在同一场景下,因子 A、B、C 之间的组合是可以精简的,而因子 D、E、F、G 却是需要全组合(在 Pairwise 中的术语称谓“阶”)。一个个完全依靠人工来进行输出太麻烦,各大 contributor 贡献出自己的开源工具,这里挑一个大公司的(微软)给大家介绍一下,工具名 PICT。
工具下载地址:https://github.com/Microsoft/pict
最新的版本支持多平台(linux、mac、windows),需要自行编译。
二、PICT 工具使用

1)先准备一个文本文件 abc.txt,内容如下:

直接运行 pict abc.txt 即可得到 pairwise 之后的结果:

如果需要全组合情况,则可以在命令行参数中指定/o:3,其中 3 是因子的个数,(/o 的默认值是 2,此参数为上面所述的“阶”)如:

2)在文本中指定因子的组合情况,

直接运行 pict abc.txt 即可得到全组合的
3)因子判断结构:

输出的结果:(满足了当 A 为 a1 时,B 不等于 b2,C 不等于 c3)

三、实践
以“星火钱包——开户管理”的 “查询” 功能测试为例来详细介绍一下 PICT 工具的使用思路和过程。

查询因子有:“星火用户 ID”、“开户状态”、“开户渠道”、“开户时间”,其中每个因子的限制如下:
星火用户ID:不限制输入的内容
开户状态:请选择(默认)、开户成功、开户失败
开户渠道:请选择(默认)、开户成功、开户失败
开户时间:选择时间区间范围(前端页面的限制:填写其一,另外一个值会自动填充相同的时间,结束日期>=开始日期)(先不考虑后台接口的限制)
每个因子需要考虑值的范围为:
星火用户 ID:空(默认)、非数字、120988476548、120988476900
(假设 120988476548 是可以查询出结果的,120988476900 是查询不出结果的)
开户状态:请选择(默认)、开户成功、开户失败
开户渠道:请选择(默认)、PC、wap、app
开户开始时间:空(默认)、20150101、20160101、20170101
开户结束时间:空(默认)、20150101、20150301、20160201、20160301、20171101
“星火用户 ID”、“开户状态”、“开户渠道”这三个因子,比较好整理,如图所示,直接按照上面的内容直接填写至文件中即可:

而“开户开始时间”“开户结束时间”有依赖性,所以,需要特殊处理,我们将它们之间的依赖“翻译”成 PICT 所能理解的方式:
1)“填写其一,另外一个值会自动填充相同的时间”
换句话说,“开户开始时间”“开户结束时间”只能同时为空。
“翻译”:
IF [开户开始时间] = “空” THEN [开户结束时间]= “空”;
IF [开户结束时间] = “空” THEN [开户开始时间]= “空”;
(
当然,你也可以这样写:
IF [开户开始时间] NOT IN {“20150101”,“20160101”,“20170101”} THEN [开户结束时间]= “空”;
IF [开户结束时间] NOT IN {“20150101”,“20150301”,“20160201”,“20160301”,“20171101”} THEN [开户开始时间]= “空”;
)
2)“结束日期>=开始日期”
“翻译”:
IF [开户开始时间] <> “空” AND [开户结束时间] <> “空” THEN [开户开始时间] <= [开户结束时间];

准备好全部的“翻译”结果,如图所示:

我们先看一下“全组合”的用例总数为多少?答案 481 条,如图所示:

使用 Pairwise 思想,整理出的用例数量仅为 30 条,如图所示:

用例的详细内容如下:(每行即每条用例)
四、总结
Pairwise 是一种有效的测试用例生成技术,通过对测试变量的所有维度及值的组合,避免穷举测试所有维度的所有值及其组合来减少测试用例量。
遥想当年,Cohen 等人应用 Pairwise 测试技术对 Unix 中的“Sort”命令进行了测试,测试结果表明覆盖率高达 90%以上。
对于当今迭代开发测试如此高效率的时代,更需要将这种测试方法,并将其应用于测试当中。
本文转载自宜信技术学院网站。
原文链接:http://college.creditease.cn/detail/144
评论