Orthogonal Arrays(正交法测试)&Pairwise Testing (成对法测试)

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


第一部分:正交表,OATSOrthogonal 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/

转自:https://blog.csdn.net/roger_ge/article/details/5329690

你可能感兴趣的:(Orthogonal Arrays(正交法测试)&Pairwise Testing (成对法测试))