正交分析法设计理论及实践

简介: 在黑盒用例设计方法中有一个大家耳熟能详的正交分析法,却鲜有人知 “Pairwise”设计理念。本文将介绍正交分析法设计理论及实践。

一、理念介绍

在黑盒用例设计方法中有一个大家耳熟能详的正交分析法,却鲜有人知 “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条,如图所示:

用例的详细内容如下:(每行即每条用例)

星火用户ID 开户状态 开户渠道 开户开始时间 开户结束时间
120988476900 请选择 请选择
120988476548 开户失败 PC 20150101 20171101
非数字 开户失败 wap
120988476900 开户成功 app 20150101 20150301
请选择 pc 20160101 20160301
120988476548 开户失败 app 20160101 20160301
开户成功 wap 20170101 20171101
开户失败 请选择 20150101 20150301
非数字 开户成功 pc 20150101 20150101
请选择 wap 20150101 20150101
非数字 开户成功 请选择 20160101 20171101
非数字 请选择 app 20150101 20160301
120988476548 开户成功 app
120988476548 请选择 app 20160101 20160201
120988476900 开户失败 wap 20160101 20160201
120988476548 开户成功 wap 20150101 20160301
非数字 开户成功 请选择 20150101 20160201
开户成功 pc
120988476900 请选择 app 20170101 20171101
120988476900 开户失败 请选择 20150101 20150101
请选择 app 20150101 20160201
120988476548 开户失败 app 20150101 20150101
120988476900 开户成功 请选择 20150101 20160301
120988476900 请选择 pc 20150101 20150301
120988476548 开户失败 请选择 20170101 20171101
120988476548 开户失败 wap 20150101 20150301
请选择 pc 20150101 20160201
非数字 请选择 请选择 20150101 20150301
非数字 开户成功 pc 20170101 20171101

四、总结

Pairwise是一种有效的测试用例生成技术,通过对测试变量的所有维度及值的组合,避免穷举测试所有维度的所有值及其组合来减少测试用例量。

遥想当年,Cohen等人应用Pairwise测试技术对Unix中的“Sort”命令进行了测试,测试结果表明覆盖率高达90%以上。

对于当今迭代开发测试如此高效率的时代,更需要将这种测试方法,并将其应用于测试当中。

作者:宋金刚

来源:宜信技术学院

相关文章
|
安全 关系型数据库 MySQL
Linux下安装mysql8.0(以tar.xz包安装--编译安装)
通过上述步骤,您完成了从下载、编译、安装到配置MySQL 8.0的全过程。此过程虽然较为复杂,但提供了对MySQL安装环境的完全控制,有助于满足特定的部署需求。在实际操作中,根据具体的系统环境,可能还需调整部分步骤或解决未预见的依赖问题。始终参考官方文档和社区资源,保持安装过程与最新版本的兼容性。
4679 68
|
机器学习/深度学习 算法 数据挖掘
C++ 数字世界的奥秘:探索 C++ 中的 numeric、cmath 和 complex 库
C++ 数字世界的奥秘:探索 C++ 中的 numeric、cmath 和 complex 库
573 0
|
存储 缓存 监控
Java 经典面试解析:服务器卡顿、CPU飙升、接口负载剧增
解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路,以CentOS为例,总结为4步。 第1步,使用top命令找到占用CPU高的进程。 第2步,使用ps –mp命令找到进程下占用CPU高的线程ID。 第3步,使用printf命令将线程ID转换成十六进制数。 第4步,使用jstack命令输出线程运行状态的日志信息。
512 0
|
敏捷开发 测试技术
【软件测试】基础知识第二篇
瀑布模型在软件工程中占有重要地位,是所有其他模型的基础框架。瀑布模型的每一个阶段都只执行一次,因此是线性顺序进行的软件开发模式。
|
存储 索引
西门子S7-200SMART与变频器的通信如何设置?USS通信协议如何组态?
今天我们来介绍西门子S7-200SMART与变频器的通信如何设置,USS通信协议如何组态,下面先介绍一下变频器参数设置。
西门子S7-200SMART与变频器的通信如何设置?USS通信协议如何组态?
|
机器学习/深度学习 自然语言处理 达摩院
语音识别技术|学习笔记
快速学习语音识别技术
700 0
语音识别技术|学习笔记
|
存储 消息中间件 大数据
OPPO 数仓与数据湖融合架构升级的实践与思考
过去几年,数据仓库和数据湖方案在快速演进和弥补自身缺陷的同时,二者之间的边界也逐渐淡化。云原生的新一代数据架构不再遵循数据湖或数据仓库的单一经典架构,而是在一定程度上结合二者的优势重新构建。在云厂商和开源技术方案的共同推动之下,2021 年我们将会看到更多“湖仓一体”的实际落地案例。InfoQ 希望通过选题的方式对数据湖和数仓融合架构在不同企业的落地情况、实践过程、改进优化方案等内容进行呈现。本文,InfoQ 采访了 OPPO 云数架构部部长鲍永成,请他与我们分享 OPPO 引入数据湖和数仓融合架构的探索工作和实践中的一些思考。
892 0
OPPO 数仓与数据湖融合架构升级的实践与思考
|
机器学习/深度学习 人工智能 并行计算
黄仁勋全面解读英伟达发展战略:打造面向未来的AI技术平台
9 月 26 日,英伟达 GTC 大会中国站在北京开幕。在大会第一天上午的 Keynote 中,英伟达 CEO 黄仁勋介绍了 TensorRT 3.0、全新机器智能芯片 Xavier 等新产品(详见:英伟达 GTC 中国站开幕:宣布 TensorRT3、自动机器处理器 Xavier)。随着计算机硬件和人工智能技术的发展,整个科技产业的基础正在被颠覆,大数据和深度学习正在影响着我们。在大会上,黄仁勋也为我们介绍了英伟达近期的发展战略。
1935 0
黄仁勋全面解读英伟达发展战略:打造面向未来的AI技术平台
|
传感器 边缘计算 运维
基于 OpenYurt & EdgeX Foundry 的云边端一体化解决方案
近日,OpenYurt 与 EdgeX Foundry 社区合作,完成了集成对接:从 v0.5.0 版本开始,OpenYurt 将正式支持部署和管理 EdgeX Foundry,并以云原生的方式管理端设备,双方将共同帮助开发者轻松、高效地解决物联网边缘计算场景下端设备管理和运维的挑战。
基于 OpenYurt & EdgeX Foundry 的云边端一体化解决方案
|
弹性计算 负载均衡
阿里云共享流量包是什么以及共享流量包使用方法
什么是共享流量包?阿里云共享流量包可用来抵扣按流量计费的云服务器ECS、弹性公网IP和负载均衡SLB多地域产生的流量,而且使用很简单
1809 0
阿里云共享流量包是什么以及共享流量包使用方法