正交分析法设计理论及实践
一、理念介绍
在黑盒用例设计方法中有一个大家耳熟能详的正交分析法,却鲜有人知 “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%以上。
对于当今迭代开发测试如此高效率的时代,更需要将这种测试方法,并将其应用于测试当中。
作者:宋金刚
来源:宜信技术学院

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
etcd实现故障时主备秒级切换高可用架构
什么是Etcd? etcd是一个强大的一致性的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器群访问的数据。它优雅地处理网络分区期间的领导者选举,并且可以容忍机器故障,即使在领导者节点中也是如此。从简单的Web应用程序到Kubernetes,任何复杂的应用程序都可以读取数据并将数据写入etcd。这是官方对Etcd的描述,基于这些特性,Etcd常用于分布式配置、分布式锁、分布式服务协调者以及分布式注册。从功能上来说和zookeeper是一类项目,但是相比而言etcd更现代,etcd使用go语言开发,编译后生成了系统可执行的二进制产物,跨平台性更好,更易维护。etcd直接提供http的接口,非常方便各大语言封装自己的client sdk,在易用性方面也更好一点。下面也主要使用java的客户端jetcd,解决主备服务的协调问题。 etcd项目地址:https://github.com/etcd-io/etcd etcd官网:https://etcd.io jetcd地址:https://github.com/etcd-io/jetcd 主备服务场景描述 很多时候为了服务的高...
- 下一篇
浅谈java注解
前言:Annotation中文释义注解之意。 Java注解用于为Java代码提供元数据。 元数据是指用来描述数据的数据,通俗一点,就是描述代码间关系,或者代码与其它资源(例如数据库表)之间内在联系的数据。在一些技术框架中,如Struts、hibernate就不知不觉用到了元数据。对于Struts来说,元数据指的是struts-config.xml;对hibernate来说就是hbm文件。以上阐述的几种元数据都是基于xml文件的或者其他形式的单独配置文件。这样表示有些不便之处。1、与被描述的文件分离,不利于一致性的维护;2、所有这样的文件都是ASCII文件,没有显式的类型支持。基于元数据的广泛使用,JDK5.0引入了Annotation的概念来描述元数据。在Java中,元数据以标签的形式存在于Java代码中,元数据标签的存在并不影响程序代码的编译和执行。简而言之,言而总之,注解就是标签的意思。 一、如何创建注解? JDK5.0出来后,Java语言中就有了四种类型,即类class、枚举enum、接口interface、注解@interface,它们处于同一级别,Java就是通过注解来表示元...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址