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

数字筑梦
• 阅读 1801

一、理念介绍

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

最新的版本支持多平台(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%以上。

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

作者:宋金刚

来源:宜信技术学院

点赞
收藏
评论区
推荐文章
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
浅谈测试用例设计 | 京东云技术团队
一个良好的测试用例除了可以帮助测试人员阅读,理解,修改之外,也要方便我们去管理它,从而提高测试工作的质量和效率。不同的业务条线或者团队可以根据自己需要制定一些规则,让大家在进行测试用例设计遵守。
如何有效的进行用例评审
用例评审对于质量同学是再熟悉不过的一个重要环节,用例评审也是非常有效的保障测试质量的手段,但我们质量同学做了这么多次的评审,有没有去思考怎样去进一步提升用例评审的质量,使用例评审更加有效呢,这里呢抛砖引玉,总结一下我个人对用例评审的思考。
Karen110 Karen110
4年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Wesley13 Wesley13
4年前
CEOF
CEOF应用复经验正交函数分析法GuiCastelao,BiaVillasBoas发布:2020122311:09:08.815600作者:GuiCastelao,BiaVillasBoas
Stella981 Stella981
4年前
Spring Boot 教程
1\.应用测试的介绍一般我们在写完代码之后,代码的测试是会给专门的测试人员来测试的,如果一个测试跑到你的工位上对你说,你的代码好像有Bug,你肯定会不爽,反正我就是这样的🙃。所以为了显示自己的代码质量高一点,在功能提交给测试之前,我们会自己测试一下,接下来给大家介绍一下SpringBootTest应用测试框架。Spr
测试进阶之路—新手关于测试碎碎念篇
这是一篇京东JDStar小萌新的测试总结和经验分享,适用于广大小白新手测试进阶探讨,欢迎大家共同探讨关于测试的用例设计和如何提升测试效率。
API 小达人 API 小达人
2年前
【API 自动化测试】Eolink Apikit 图形用例详解
EolinkApikit的图形用例是指通过图形化的方式去表现API流程测试。它包括了条件选择器、单个API步骤和操作集等组件。相较于前面推荐的表格化的通用用例,图形用例可以让测试人员更方便地设计和管理API流程测试,同时也更加的灵活。
测试用例设计方法六脉神剑——第三剑:倚天屠龙,正交试验冲锋 | 京东物流技术团队
1引言上篇讲了因果图和判定表法,而这两种方法在变量值很多、排列组合数量极大的场景下,会生成非常庞大且冗余的测试用例,此时我们很难对所有组合场景进行全量测试用例覆盖,基于此短板,正交试验法应运而生。2概念及原理2.1定义正交试验法是研究多因素、多水平的一种试
大模型应用之基于Langchain的测试用例生成
一用例生成实践效果在组内的日常工作安排中,持续优化测试技术、提高测试效率始终是重点任务。近期,我们在探索实践使用大模型生成测试用例,期望能够借助其强大的自然语言处理能力,自动化地生成更全面和高质量的测试用例。当前,公司已经普及使用JoyCoder,我们可以
大模型应用之基于Langchain的测试用例生成
一用例生成实践效果在组内的日常工作安排中,持续优化测试技术、提高测试效率始终是重点任务。近期,我们在探索实践使用大模型生成测试用例,期望能够借助其强大的自然语言处理能力,自动化地生成更全面和高质量的测试用例。当前,公司已经普及使用JoyCoder,我们可以
数字筑梦
数字筑梦
Lv1
远上寒山石径斜,白云深处有人家。
文章
1
粉丝
0
获赞
0
热门文章

暂无数据