对于多输入参数组合类的测试方法目前业界流行两种方法,一种是OATS(Orthogonal Array Testing Strategy),即正交表法;另一种是Pairwise/All-Pairs Testing,即配对测试法。对于两种方法,虽然业内已经存在比较成熟的设计工具,但是秉着知其然,知其所以然的目标,还是先熟悉一下两者的原理,然后再进行区分和比较,从而在实际运用中将其灵活运用。

第一部分:正交表,OATS(Orthogonal Array Testing Strategy)

关于正交表一直困扰我的有以下几个问题:

1.          正交表可以自己设计吗?

2.          对于全组合(笛卡尔积)而言,正交表的结果是怎么筛选出来的?

3.          在不查询正交表的前提下,怎样才能快速确定组合测试数呢?

4.          对于一个多因子、多水平的组合,且没有现成的正交表可以对应,怎样采用变通的方式套用现成的正交表呢?

5.          如果觉得正交表的设计的测试组合不够充分,怎样确定需要新增的用例中的水平组合呢?

问题1:正交表可以自己设计吗?

解答:正交表的构造需要用到组合数学和概率学知识,而且如果正交表类型不同,则构造方法差异很大,甚至有些正交表其构造方法到目前还未解决。虽然简单的正交表可以自行推导出来,但是还是建议采用现成的生成工具或参照先已公开的正交表模板进行设计以提高效率。

问题2:对于全组合(笛卡尔积)而言,正交表的结果是怎么筛选出来的?

解答:回答这个问题之前,必须了解正交表两个重要特性:

1.        每列中不同数字出现的次数相等。这一特点表明每个因素的每个水平与其它因素的每个水平参与试验的几率是完全相同的,从而保证了在各个水平中最大限度地排除了其它因素水平的干扰,能有效地比较试验结果并找出最优的试验条件。

2.        在任意两列其横向组成的数字对中,每种数字对出现的次数相等。这个特点保证了试验点均匀地分散在因素与水平的完全组合之中,因此具有很强的代表性.

以上两点充分的体现了正交表的两大优越性,即“均匀分散,整齐可比”。特性中有任意一条不满足,就不是正交表。

有一个简单的例子可以形象的说明上述两大特性。现在有一个组合有三因子,每个因子是三水平,权且用如下方式进行表示A(A1,A2,A3),B(B1,B2,B3),C(C1,C2,C3),在左图的正方体中每个因子的每个水平代表的是一个面,共九个面,任意两个因子的水平之间都存在交点,共27(3x3x3)个,这就是笛卡尔积。按照两大特性设计出的正交表如右图所示,试验点用⊙表示。我们看到,在9个平面中每个平面上都恰好有三个点而每个平面的每行每列都有一个点,而且只有一个点,总共九个点。这样的试验方案,试验点的分布很均匀,试验次数也不多。

问题3:在不查询正交表的前提下,怎样才能快速确定组合测试数呢?

解答:回答这个问题需要引入正交表中的一个重要概念,强度Strength,以下简称S。正交表的核心性质就是最后S个因素的每个水平值要相互组合一次且只组合一次。设有5因子,每个因子的水平数分别2,2,2,3,3时,不同强度S的生成正交表分别为:

s=2时,结果是 L9(23×32),记录数为最后两个变量的水平数乘积3x3=9

s=3时,结果是 L18(23×32),记录数为最后三个变量的水平数乘积2x3x3=18

快速判断组合测试数的经验法则:对每个因子的水平数进行从小到大的排列,那么强度为n的正交表组合测试数等于最后的n个水平数的乘积。

说明:在普通使用中的正交表都是强度为2的,原因是根据错误模型发现,绝大多数缺陷都来自于结对的参数组合。由三个或者多个参与的组合而导致的缺陷的情况不占多数。

问题4:对于一个多因子、多水平的组合,且没有现成的正交表模板可以参照,怎样采用变通的方式套用现成的正交表呢?

解答:先给出一个确定正交表模板的准则:必须选择因子数等于大于组合的因子数,且测试组合数尽可能逼近“快速判断组合测试数的经验法则”中给出的组合数值的正交表模板。

情况一:4因子,不同水平数,A(1,2),B(1,2),C(1,2,3),D(1,2,3,4)

解决方案:

步骤1:采用4因子3水平的正交表比较合适,先将D因子中的3和4水平可先合并成一个水平3。

因子A

因子B

因子C

因子D

实验1

1

1

1

1

实验2

1

2

2

2

实验3

1

3

3

3

实验4

2

1

2

3

实验5

2

2

3

1

实验6

2

3

1

2

实验7

3

1

3

2

实验8

3

2

1

3

实验9

3

3

2

1

步骤2:在测试行中D因子有出现3的水平的行,将该行直接拷贝并新增到测试行中,并将该新增的行的水平3改为水平4。

因子A

因子B

因子C

因子D

实验1

1

1

1

1

实验2

1

2

2

2

实验3

1

-

3

3

实验4

2

1

2

3

实验5

1

-

3

4

实验6

2

1

2

4

实验7

2

2

3

1

实验8

2

-

1

2

实验9

-

1

3

2

实验10

-

2

1

3

实验11

-

2

1

4

实验12

-

-

2

1

步骤3:第一第二列中出现的空白处从上向下依次分别循环填写可能出现的水平值1和2

因子A

因子B

因子C

因子D

实验1

1

1

1

1

实验2

1

2

2

2

实验3

1

1

3

3

实验4

2

1

2

3

实验5

1

2

3

4

实验6

2

1

2

4

实验7

2

2

3

1

实验8

2

1

1

2

实验9

1

1

3

2

实验10

2

2

1

3

实验11

1

2

1

4

实验12

2

2

2

1

情况二:6因子,均为2水平

解决方案:采用7因子2状态的正交表模板,然后将最后一列直接删除即可。

情况三:5因子,不同水平数,A(1,2),B(1,2),C(1,2,3),D(1,2,3),E(1,2,3,4,5,6)

解决方案:在正交表中需要寻找满足至少6水平且至少5因子的模板,找到L49(7水平,8因子),发现需要49行的测试组合,但根据“快速判断组合测试数的经验法则”,18行测试组合足够了。再次寻找合适的模板,找到L18(6因子3水平和1因子6水平组合)的模板比较合适,只需将结果中的第五第六列删除,因为不存在。另外将第一第二列中出现的水平3删除掉。第一第二列中出现的空白处从上向下依次分别循环填写可能出现的水平值1和2,方法同情况一。

问题5:如果觉得正交表的设计的测试组合不够充分,怎样确定需要新增的测试组合由哪些水平组成的呢?

解答:很多时候这要凭个人的经验来判断还有什么组合可能引起缺陷,没有特定的规范可循。

关于正交表的基础概念,本文没有给出详细的解释和说明,具体可以参看如下帖子:

http://blog.csdn.net/zeeslo/archive/2006/09/26/1289991.aspx。

以下文章和帖子给了本文以很大的启发和引导:

Jackc,正交表设计用例,很简单

http://bbs.51testing.com/viewthread.php?tid=181940&highlight=%D5%FD%BD%BB%B1%ED

Laomei,正交表学习笔记

http://blog.csdn.net/laomai/archive/2007/12/11/1929302.aspx

百度百科,正交表

http://baike.baidu.com/view/753410.htm

Jeremy M. Harrell,Orthogonal Array Testing Strategy (OATS) Technique

http://bbs.51testing.com/viewthread.php?tid=13448&highlight=%D5%FD%BD%BB%B1%ED

第二部分:配对测试法,Pairwise/All-Pairs Testing

对于Pair Testing的原理描述的资料,国内能找到的不是太多。一个偶然的机会在网上发现如下这篇国外的文章《Pair Testing》 (http://www.developsense.com/pairwiseTesting.html),对此给出了比较详细的解释和说明,摘录其中精华部分,以解迷惑。

定义: "Most field faults were caused by either incorrect single values or by an interaction of pairs of values." If that's generally correct, we ought to focus our testing on the risk of single-mode and double-mode faults. We can get excellent coverage by choosing tests such that 1) each state of each variable is tested, and 2) each variable in each of its states is tested in a pair with every other variable in each of its states. This is called pairwise testing or all-pairs testing.

简单的来说就是:缺陷往往是由一个参数或两个参数的组合所导致的,那么我们选择比较好的测试组合的原则就是1)每个因子的水平值都能被测试到;2)任意两个因子的各个水平值组合都能被测试到,这就叫配对测试法。

下面用文中的一个飞机订票的例子加以说明配对测试法是怎样从笛卡尔积中筛选出最后的结果的。

这是一个三因子,三水平的测试组合,分别是Destination(Canada, Mexico, USA),Class(Coach, Business Class, First Class), Seat Preference(Aisle, Window),所对应的笛卡尔积共有3x3x2=18中测试组合,如下表所示。

经过配对测试法筛选后,得到的结果是:

筛选方法如下(引用原文):

The easiest thing to do is to select lines, starting at the bottom of the table, and if all of the pairs for the line are duplicated somewhere higher up in the table, we can remove the line.

·         Line 18 contains USA, First Class, and Window.

·         the USA-First Class pair appears in line 9

·         the First Class-Window pair appears in lines 16 and 17

·         the USA-Window pair appears in line 12 and line 15

So we can drop line 18.

·         Line 17 contains Mexico, First Class, and Window

·         the Mexico-First Class pair appears in line 8

·         the First-Class Window pair appears in line 16

·         the Mexico-Window pair appears in lines 14 and 11

We can drop line 17 too.

·         Line 16 contains Canada, First Class, and Window

·         Canada-First Class appears in line 7

·         Canada-Window appears in line 13

·         First-Class-Window doesn't appear elsewhere in the table

We must keep line 16 to preserve the First Class-Window pair.

可以看出整个筛选过程还是比较简单的。另外原文中关于三个和三个以上的因子组合的的配对,以及对于因子数量众多的两两配对提出了一些建议,这里一并附上:

All-pairs testing is a very powerful technique for reducing the number of tests to be run, but there are two problems to consider.

The first problem is that if the defect in are example requires three variables to be just so (Destination=Canada, Class=Business, and Seat Preference=Aisle), our smaller table won't trigger the defect. Still, simply bashing away at random will be even less efficient. One workaround is to complement pairwise testing with other testing and QA techniques code inspections, coverage tools, boundary tests and risk-based tests, to name but a few.

The second problem is that an all-pairs table takes a significant time to construct and to check for anything but a small number of variables and more possible states for each variable. If you want to test for more than pairs--triples, or n-tuples--the problem quickly becomes intractable for a human test planner. Fortunately, there are a few solutions to this problem, like tool allpairs and PICT.

最后给出两个All-Pairs Testing比较好的网址:

http://www.pairwise.org/,上面有很多比较好的技术文章分析原理和运用的

http://msdn.microsoft.com/zh-cn/library/cc150619(en-us).aspx,Pairwise Testing in the Real World: Practical Extensions to Test-Case Scenarios,原理介绍

第三部分:OATS PK Pairwise/All-Pairs Testing

在熟悉了OATS和All-Pairs Testing两者的原理后,比较两者之间的异同点就显得容易一些了。

共同点:

·         两者使用频率最高的均是两两组合,前提也都是基于“缺陷大部分发生在参数两两组合的情况下,三个参数组合导致的缺陷并不多见”。

·         两者的父集均是笛卡尔集。

不同点:

两者采用的筛选方式稍显不同,配对测试选择的是所有的两两组合所构成的测试用例;而正交表在此基础上做了更进一步的筛选,使得结果更加精炼。

使用场合:

我个人的建议有两点:

·         在因子水平数比较少的情况下,采用配对测试方法,因为测试组合数更加全面一些,当然在某些因子水平数时,两者左最后筛选出的结果可能是一致的。

·         在因子水平数比较多的情况下,采用正交表测试,因为可以得到更加精炼的测试组合,从而使测试效率得到很大的提升。

第四部分:快速生成测试组合的小工具

正交表:

正交设计助手II,下载地址 http://www.onlinedown.net/soft/16188.htm

网页查询模板:http://www.york.ac.uk/depts/maths/tables/orthogonal.htm

配对测试:

Allpairs & PICT,下载地址http://bbs.51testing.com/thread-46683-1-1.html

CVG,基于WPF和微软Pairwise开发包的一个开源工具,本人的一位兄弟写的,推荐一下。

下载地址http://cvg.codeplex.com/

OATS PK Pairwise Testing相关推荐

  1. 测试用例设计之三——OATS PK Pairwise

    转: 在熟悉了OATS和All-Pairs Testing两者的原理后,比较两者之间的异同点就显得容易一些了. 共同点: ·         两者使用频率最高的均是两两组合,前提也都是基于" ...

  2. Orthogonal Arrays(正交法测试)amp;Pairwise Testing (成对法测试)

    对于多输入参数组合类的测试方法目前业界流行两种方法,一种是OATS(Orthogonal Array Testing Strategy),即正交表法:另一种是Pairwise/All-Pairs Te ...

  3. OATS和配对测试应该如何选择? 如何确定正交选择的强度?

    [Roger Ge] 在[OATS PK Pairwise Testing]一文关于OATS和配对测试(场景选择一方法) 的论述确实精彩. 但是对QA人员来讲还是存在疑惑, 因为QA很忙, 没有时间去 ...

  4. GrowingIO 大数据多维分析自动化测试实践

    作者:郝阔君 GrowingIO QA Lead,曾任职于中国惠普.奇虎 360.带领 QA 团队负责 GrowingIO 全产品线质量保证工作,目前专注于 DevOps 实践,帮助团队提升质量和效率 ...

  5. 组合测试术语:Pairwise/All-Pairs、OATS(Orthogonal Array Testing Strategy)

    组合测试 组合测试(Combinatorial Test)是一种黑盒测试用例生成方法,主要针对多输入参数组合场景. 目前业界较流行的两种组合测试方法,一种是Pairwise/All-Pairs,即配对 ...

  6. Oracle自动化测试工具OATS

    OATS(Oracle Application Testing Suite)是一个全面,集成的测试解决方案,可以用以保证Web应用程序,Web Services的质量,可扩展性以及可用性.它包含以下组 ...

  7. 记录一次Oracle自动化测试工具 - OATS实战分享

    #前言 项目上线过程会经历各种阶段,如测试.灾难备份.恢复演练.压力测试,本次便是分享一篇关于压力测试的实战文章. #环境准备 Window10/Window7系统一台 OATS:Oracle App ...

  8. 黑盒测试设计专题:Pairwise配对测试

    ​ 点击上方 BeTester ,学习更多知识 让碎片成体系,让测试更专业 概述 定义 维基百科: In computer science, all-pairs testing or pairwise ...

  9. 第3章 软件测试方法--基于组合技术和组合优化的方法(决策表、因果图、场景测试)

    文章目录 3.3 基于组合技术和组合优化的方法 3.3.1 判定表(决策表)测试 3.3.2 因果图法 3.3.3 两两组合(Pair-wise)方法 3.3.4 正交实验法 3.3.5 基于场景的测 ...

最新文章

  1. 【java】兴唐第二十五节课(异常和log4j的使用)
  2. java方法区内存泄露_深入理解java虚拟机-第二章:java内存区域与内存泄露异常...
  3. 大夏书系·学习共同体:走向深度学习
  4. USACO Section1.3 Combination Lock 解题报告
  5. VC中实现GCC的2个比较常用的位运算函数
  6. ML之RF:kaggle比赛之利用泰坦尼克号数据集建立RF模型对每个人进行获救是否预测
  7. php文件上传指定路径,php上传文件到指定文件夹
  8. php 代码如何使用,PHP如何使用strval()函数?用法和代码示例
  9. ubuntu apache配置负载均衡篇(一)
  10. 一个可编辑与新增博客园文章的 Python 脚本
  11. 那个20多万“不可描述”照片的数据集,有人用它做了鉴黄模型 | Demo
  12. svn merger的时候 报远程主机强迫_SVN与Git比较(二)版本库与工作区
  13. pku2192---Zipper(动态规划题,随机组合两个字符串)
  14. linux7.7 离线安装nfs客户端_Linux提权姿势二:利用NFS提权
  15. python—简单数据抓取六(安装scrapy环境并创建爬虫项目、以顶点小说网为例利用scrapy进行爬取、scrapy相关的注意事项)
  16. 九型人格:三、The proformer 实干者 - 我若没有成就,就没有人会爱我。
  17. java私有方法_如何调用私有方法
  18. 安卓手机内置NFC模块的使用和开发
  19. 请做好 5 年内随时失业的准备
  20. 下一跳—数据包的下一跳目的地址

热门文章

  1. 张家界市4月份计算机职称,2017年4月张家界计算机应用能力考试报名时间4月10日起...
  2. U-Boot 启动过程和源码分析(第一阶段)
  3. adb 删除文件时提示Read-only file system问题【not in /proc/mounts】
  4. 中国高温合金市场规模预测与发展态势研究报告2022版
  5. Jmockit 静态方法mock
  6. 用 DELPHI 为 MQL5 编写 DLL 指南
  7. LabVIEW控制Arduino实现舵机联控(基础篇—9)
  8. 现在,我们用大炮来打蚊子:蚊子分布在一个M×N格的二维平面上,每只蚊子占据一格。向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意:
  9. 网站 服务器 诸葛,GrowingIO
  10. 一位实习生对软件测试的看法