前情介绍:

测试过程中,对于多参数参数多值的情况进行测试用例组织,之前一直使用【正交分析法】进行用例组织,就是把每个参数的所有值分别和其他参数的值做一个全量组合,用Python脚本实现,就是itertools模块中product方法(又称笛卡尔积法),然后再用正交表进行筛选。

pairwise算法

Pairwise (结对)算法源于对传统的正交分析方法优化后得到的产物,Pairwise是L. L. Thurstone(29 May1887 – 30 September 1955)在1927年首先提出来的。他是美国的一位心理统计学家。Pairwise也正是基于数学统计和对传统的正交分析法进行优化后得到的产物。

Pairwise基于如下2个假设:

(1)每一个维度都是正交的,即每一个维度互相都没有交集。

(2)根据数学统计分析,73%的缺陷(单因子是35%,双因子是38%)是由单因子或2个因子相互作用产生的。19%的缺陷是由3个因子相互作用产生的。

因此,pairwise基于覆盖所有2因子的交互作用产生的用例集合性价比最高而产生的。

pairwise算法详解

假设有3个维度,每个维度有几个因子。如下:

浏览器:M(Firefox),O(Opera),IE

操作平台:W(windows),L(Linux),i(iOS)

语言:C(chinese),E(english)

求解:

使用pairwise算法,有多少个测试case?具体是什么case?

我们沿用数学做题的格式。

解:如果不用pairwise算法,我们需要 332=18个测试case。下面是具体的case:

1,M W C

2,MW E

3,M L C

4,M L E

5,M I C

6,M I E

7,O W C

8,O W E

9,O L C

10,O L E

11,O I C

12,O I E

13,P W C

14,P W E

15,P L C

16,P L E

17,P I C

18,P I E

一共有18个,很繁琐。但是这是100%的测试覆盖率,缺陷率也是100%。

现在我们使用pairwise,看看结果如何?

首先咱们从最下方一个18号开始,它是 P I E,两两组合是 PI ,PE ,IE。看这3个组合在以上的相同位置出现过没有,PI在17号,PE在16号,IE在12号出现过。所以18这个case就可以舍去。

最终剩下的如下:

1,MWC

4,MLE

6,MIE

7,OWE

9,OLC

11,OIC

14, PWE

15, PLC

17,PIC

共计9个测试case,节省了50%的测试case。

现在我们从上面开始重新做一次。1号是MWC,两两组合是MW MC WC 都出现过,去掉。最终剩下的是:

2,MWE

4, MLE

5, MIC

8, OWE

10, OLE

11, OIC

13 PWC

15 PLC

18 PIE

这样也是剩下9个测试case,但是具体的case内容不一样。

经过L. L. Thurstone证明,pairwise算法最终剩下的测试case个数肯定相同,但是可以有不同的case组合。

Pairwise算法的效率

Pairwise算法和正交分析法进行比较,当有3个维度,每个维度有4个因子的时候:

(1)正交分析法的case数量:444=64个

(2)Pairwise算法的case数量:20个

Pairwise的case数量是正交设计法的三分之一。当维度越多的时候,效果越明显。当有10个维度的时候 444433322*2=55296个测试case,pairwise为24个。是原始测试用例规模的0.04%。

pairwise算法的比较

Pairwise算法和单因素测试用例设计的比较,能够覆盖到两个维度的正交组合设计。能适当减少遗漏的测试。

Pairwise算法和全正交设计法的比较,全正交设计法,测试case太多,投入的成本太大。Pairwise算法在数学统计分析的基础上,对传统的全正交设计法进行了优化,适当的提高了效率。

现有很多程序都是围绕pairwise算法产生的,最著名的就是ReduceArray;SmartDesgin 和微软的PICT。

不出意外的在PYPI上找到一个pairwise的第三方包:AllPairspy

allpairspy.png

安装后本身就自带了一个Example的目录,里面有一些使用的例子,以上面的测试需求为例,代码如下:

#!/usr/bin/env python

# encoding: utf-8

"""

Demo of the basic functionality - just getting pairwise/n-wise combinations

"""

from __future__ import print_function

from allpairspy import AllPairs

parameters = [

["Windows", "Linux","MAC"],

["Firefox", "Opera", "IE"],

["Chinese", "English"],

]

# sample parameters are is taken from

# http://www.stsc.hill.af.mil/consulting/sw_testing/improvement/cst.html

print("PAIRWISE:")

for i, pairs in enumerate(AllPairs(parameters)):

print("{:2d}: {}".format(i, pairs))

运行结果:

example.png

是不是很方便,很好用~~~以后遇到多因素的测试用例的时候,这个神器还是很好用的,当然前提是你搞懂原理。

而且Pairiwise算法也有它不足的地方:

(1)Pairwise对于维度的分解来说,需要对业务很熟悉。以及需要正交测试法的理论支持。需要中等专业的测试人员才能完成。

(2)pairwise还是有一定的遗漏。相比于全正交设计法来说,pairwise算法对于多于2个因素相互作用所产生的bug,没有覆盖率上会有遗漏。

正交设计 python算法_Python实现正交实验法-高级篇相关推荐

  1. 四因素三水平正交试验表_测试用例设计方法(二)——正交实验法

    正交实验法严格来说不是为测试用例设计的方法,它广泛用于各种实验实践中.是研究多因素多水平的又一种设计方法,它是根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了"均 ...

  2. allpairspy一款高效的正交实验法生成用例工具

    一.问题 想必每个tester都有测试过类似下图中需要组合多种元素的业务场景,当然我们不会把所有条件元素组合的可能性都覆盖一遍,而是采取正交实验法进行用例设计,可以在不影响业务场景覆盖的前提下大大减少 ...

  3. 黑盒测试用例设计方法三(正交实验法、功能图法、用例设计方法综合选择)

    测试步骤 一.正交实验法 1.1正交实验法介绍 1.2正交实验法实现步骤 1.3实际案例 二.功能图法 2.1功能图法原理介绍 2.2功能图法实现步骤 2.3实践案例 三.其他用例设计方法 3.1测试 ...

  4. 其他测试用例设计方法-错误推测法与正交实验法

    常用的测试用例设计方法,前面基本都介绍完了,其中等价类划分法.边界值法与场景法是最常用的. 本篇文章介绍剩余两种测试方法--错误推测法与正交实验法. 错误推测法 基于经验和直觉推测程序中所有可能存在的 ...

  5. 软件测试--黑盒测试用例、测试步骤设计方法(正交实验法、功能图法、其他用例设计方法)

    黑盒测试用例设计(三) 正交实验法 正交表:一种特制的表,一般的正交表记为Ln(mk) m代表水平数,k代表因素数,n是需要进行实验的个数.这三个数没有任何数学关系. 仅适用于每个因素的水平数都相同的 ...

  6. 功能测试---正交实验法

    首先我们先看一下案例 案例: PPT打印功能 PowerPoint软件打印功能描述如下: 打印范围分:全部.当前幻灯片. 给定范围 共三种情况: 打印内容分:幻灯片.讲义.备注页.大纲视图 共四种方式 ...

  7. 黑盒测试方法四(正交实验法)

    正交实验法 正交试验设计(Orthogonal experimental design)是研究多因素多水平的又一种设计方法,它是根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具 ...

  8. 软件测试中用正交实验法设计测试用例

    软件测试中用正交实验法设计测试用例 正交实验法的由来 一.正交表的由来 拉丁方名称的由来 古希腊是一个多民族的国家,国王在检阅臣民时要求每个方队中每行有一个民族代表,每列也要有一个民族的代表. 数学家 ...

  9. 黑盒测试方法之正交实验法

    1.概述 在利用因果图和判定表驱动法来设计测试用例时,作为输入条件的原因和输出结果之间的关系有时候很难从需求规格说明中得到:或者因果关系非常庞大,导致利用因果图得到的测试用例数目非常大,为了有效地.合 ...

最新文章

  1. express给html设置缓存,webpack + express 实现文件精确缓存
  2. Python实例浅谈之三Python与C/C++相互调用
  3. 计算机网络多媒体图像矢量图,13多媒体信息处理——图像处理(一)
  4. 请教各位高手!手机要如何访问电脑的tomcat呢!
  5. SpringBoot+MySql+ElementUI实现一对多的数据库的设计以及增删改查的实现
  6. 【从传统方法到深度学习】图像分类
  7. html5新变化,HTML5的新变化,分享
  8. Pandas 文本数据方法 findall( )
  9. UWA发布 | 2017 Unity手游体检蓝皮书 — ARPG篇
  10. sencha touch Container控件 setRecord 与 setData的区别
  11. Gdcm源码编译with python wrap详解
  12. SAM4E单片机之旅——22、GMAC和PHY的介绍与初始化
  13. mklink实现软件搬家清理C盘空间
  14. Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介【转自游戏蛮牛】
  15. Linux查看文件大小的命令du的简单介绍
  16. 过万 star 高星项目的秘密——GitHub 热点速览 Vol.39
  17. 用C语言来实现扫雷小游戏
  18. 基于matlab山脊线,教你如何利用水文,分析提取山脊线山谷线
  19. 联想拯救者y7000p2022款 配置
  20. 【CSP-J】【图论】【最短路】加工零件

热门文章

  1. 【分享】从Mybatis源码中,学习到的10种设计模式
  2. 主张:男人害怕的30种女人(zt)
  3. 深入理解计算机系统 练习题3.8 理解计算机二元操作
  4. 中基鸿业什么是净值型理财产品
  5. AUTOCAD——图纸歪了如何对齐
  6. 读书笔记——寻找道德
  7. Android手机屏幕变化监听
  8. 五大爆款单视频开头,学会做短视频很轻松
  9. 绎维软件F-One获得B轮融资,华创资本领投,齐银基金跟投
  10. 计算机硬件的五大单元以及CPU的种类