【tool】组合法设计用例中的全对偶测试法(All Pairs)

  现在我们假设存在3个变量:V1、V2、V3,V1变量存在3个值:A、B、C;V2变量存在2个值:D、E;V3变量存在2个值:F、G。按照组合 测试法,可以组合出3*2*2 = 12种情况,也就是可以设计出12个测试用例。如果3个变量都存在5个不同的值的话,那就可以组合出5*5*5 = 125种情况,也就是需要设计出125个测试用例。测试专家James Bach使用全对偶测试法(All Pairs)将这125个测试用例压缩成25个测试用例,从理论上来覆盖变量组合的测试覆盖率,全对偶测试法有个基本的原则是每个变量的每个取值都要与至 少一个用例中的每个其他变量的每个取值配对。

  为了让业界测试人员更能方便的使用全对偶测试法产生的组合测试的测试用例,James Bach使用Perl语言开发了一个allpairs工具,接下来通过讲解allpairs工具的使用方法来了解全对偶测试法(All Pairs)的实现原理和组合策略。本工具的下载地址:http://www.satisfice.com/tools/pairs.zip。

  假设我们有两个参数需要测试,比如操作系统,打印机,先列出每个参数的值:

  操作系统:

  Win 98

  Win XP

  Win 7

  打印机:

  HP 4050

  HP 4100

  为了测试所有的组合对(pairings),测试用例包括如下情况:


用例


操作系统


打印机


1


Win 98


HP 4050


2


Win 98


HP 4100


3


Win XP


HP 4050


4


Win XP


HP 4100


5


Win 7


HP 4050


6


Win 7


HP 4100

  在两个参数的情况下,所有的组合对(pairings)就是参数之间的所有组合情况。但是如果我们新增一个参数将会发生什么呢?

  是否双面打印:

  是

  否

  下面是3个参数进行组合的所有测试用例:


用例


操作系统


打印机


是否双面打印


1


Win 98


HP 4050



2


Win 98


HP 4100



3


Win XP


HP 4050



4


Win XP


HP 4100



5


Win 7


HP 4050



6


Win 7


HP 4100



7


Win 98


HP 4050



8


Win 98


HP 4100



9


Win XP


HP 4050



10


Win XP


HP 4100



11


Win 7


HP 4050



12


Win 7


HP 4100


对应三个参数的所有组合情况就是12个测试用例。但是我们需要的是在一组测试用例中能够保证至少一个用例中的每个其他变量的每个取值都配对过。这种情况就可以得到较少的测试用例,我们就可以得到6个测试用例。


用例


操作系统


打印机


是否双面打印


1


Win 98


HP 4050



2


Win 98


HP 4100



3


Win XP


HP 4050



4


Win XP


HP 4100



5


Win 7


HP 4050



6


Win 7


HP 4100


  事实上,如果这三个参数中的某两个参数的值的任意不同的组合会触发一个bug的话,那表格上的那组测试用例也可以发现该bug。当三个特殊的值组合在一起触发的某个bug,那表格上的那组测试用例不一定能发现该bug,但是至少我们覆盖了所有的全对偶(all pairs)。

  相对于所有组合情况来说,全对偶的测试覆盖率要容易很多。例如,如果你想测试10个参数且都有26个值的功能,所有组合情况将导致存在141,167,095,653,376个测试用例。而全对偶测试法就只要测试1094个测试用例就可以。

  为了能较好的使用allpairs工具,测试人员需要在表格上列出所有的参数和参数值,一般可以使用Excel工具来表达:


操作系统


打印机


是否双面打印


Win 98


HP 4050



Win XP


HP 4100



Win 7

   

  然后将这个Excel表格拷贝到一个text文件(暂时命名为vars.txt),在Dos平台上运行Allpairs程序,使用如下的命令:

  ALLPAIRS VARS.TXT > TESTCASES.TXT

  如果测试人员也安装了Perl,也可以使用如下的命令:

  PERL ALLPAIRS.PL VARS.TXT > TESTCASES.TXT

  TESTCASES.TXT文件里面的数据也适合拷贝到Excel文件中,类似于如下:

  上图的第一部分是测试用例的集合,那个”pairrings”列说明的是全对偶方法找到的唯一pairrings的数量。

  上图的第二部分是帮助测试人员了解全对偶方法的是怎么完成的。它列出了每个pair,且显示了这个pair在测试用例列表中出现的次数,且列表出了每个pair出现的时候所对应的测试用例的用例号。

  James Bach 也在《软件测试经验验与教训》中详细的说明任何使用全对偶的测试方法进行组合测试。

    主要分三大步骤:

    第一个步骤是 从域划分开始,确定和压缩每个参数所取的值和个数;

    第二个步骤是 获得全单值,保证覆盖到每个变量的每个重要取值;

    第三个步骤是 获得全对偶,保证每个变量的每个取值都要与至少一个测试用例中的每个其他变量的每个取值配对。

  同时他还表示仅仅使用全对偶测试是有风险的,与全单值一样, 测试人员可能知道被广泛应用的特定组合,或可能有麻烦的组合。

当然很多人会问是不是还有其他的工具来自动生成组合的测试用例,由于全对偶测试法并不是一个最完美的解决办法,但在大部分情况下,对测试来说还是足够的。考虑10个参数且都有10个值的情况,全对偶 测试(All Pairs)需要使用177个测试用例来覆盖组合测试情况。最有可能的最佳的用例个数是100到177之间,James怀疑在130个测试用例左右。但是 与成千上万的测试用例集合相比,177个并不是特别差的情况。当然,对于使用全对偶测试(All Pairs)法产生的所有测试用例集合也可以是可运行的自动化脚本,由于参数和取值之间没有约束关系,所以产生的用例集合有规律,目前淘宝网技术质量部开发了相关的工具用于通过组合测试法生成页面自动化脚本,该脚本是 Ruby语言编写,通过规则和参数化取值来准备数据,使用关键的key标识来组合自动化脚本的框架,有兴趣的同学可以一同研究。

  一般在测试设计过程中,组合测试法不会单独使用,而是会与其他方法进行组合使用,大部分时候是和判定表和边界值组合使用,在关键性的高稳定要求的系统软件中,组合测试和边界测试的组合覆盖率尤其重要。这个组合测试策略在兼容性测试策略方案上也有很大的作用,在选择操作系统,浏览器版本,其他软件配置的兼容性测试上给出方向性的指导。

  美国Telcordia 技术公司有一个基于Web的 工具,它产生的结果集要优于全对偶测试(All Pairs)得到的结果集。例如,存在40个参数且都有3个值的情况,这个工具可以使用21个测试用例来覆盖所有的pairs。全对偶测试(All Pairs)则需要29个测试用例才能达到同样的效果,但是这个工具是收费的,相比较免费的全对偶测试(All Pairs),测试人员可以自己做出选择。

  当然,微软也会有相关的工具来构造组合测试用例,PICT就是一个比较易用的工具。PICT(Pairwise Independent Combinatorial Testing tool)可以有效地按照两两测试的原理,进行测试用例设计。在使用PICT时,需输入与测试用例相关的所有参数,以达到全面覆盖的效果。下载地 址:http://download.csdn.net/source/3078728。 使用过程中关键的是需要建立组合测试的模型,以便于用尽可能少的测试用例,覆盖尽可能多的影响因素,详细使用介绍如 下:http://www.cnblogs.com/liangshi/archive/2010/07/25/1784666.html。

时间: 2025-01-13 16:13:03

【tool】组合法设计用例中的全对偶测试法(All Pairs)的相关文章

在敏捷测试中如何设计用例

1.测试用例的粒度测试用例可以写得很简单,也可以写得很复杂.最简单的测试用例是测试的纲要,仅仅指出要测试的内容,如探索性测试(Exploratory Testing)中的测试设计,仅会指出需要测试产品的哪些要素.需要达到的质量目标.需要使用的测试方法等.而最复杂的测试用例就像飞机维修人员使用的工作指令卡一样,会指定输入的每项数据,期待的结果及检验的方法,具体到界面元素的操作步骤,指定测试的方法和工具等等.测试用例写得过于复杂或过于详细,会带来两个问题:一个是效率问题,一个是维护成本问题.另外,测

五步打造APP节日主题设计:以Lofter新年图标设计为例

我们需要做有依据,有逻辑,有理念的设计,需要发散思维,整合创意,严谨输出,让设计经得起推敲 前言 ? 2018年春节已远去,一直想把Lofter新年Logo设计思路分享给大家,直到现在才整理出来,希望这篇文章能给大家一些思路和参考. 每当过节的时候,市场上大大小小的APP icon都进行了节日换装,作为视觉设计师,如何设计出与产品品牌相符合并能营造出节日氛围的设计是我们需要思考的.下面以Lofter新年图标设计为例,分享一下当时的设计思路和方法. Lofter是网易产品中资历比较老的一款产品了,

日志表设计一例分析

关于关系表的设计归根结底有两个方面.第一,就是完全按照范式理论去设计,一般来说达到第三范式就可以了,或者你可以划分的更细到达更上一层次.比如第四,第五,第六等等.这种设计有自己的可读性很强,但是有一点,在检索数据的时候增加了多张关系表来做关联的开销.第二,就是在范式理论上适当的做些反范式,有的东西还是不要太剥离的好.(窄表以及宽表) 这点和软件设计中的紧耦合松耦合理论一致. 下面我就以常用的LOG表来做下演示,其中有两种表的实际,一种是窄表,一种是稍微宽一点的表.窄表:log_ytt mysql

信息系统实践手记5-CACHE设计一例

说明:信息系统实践手记系列是系笔者在平时研发中先后遇到的大小的问题,也许朴实和细微,但往往却是经常遇到的问题.笔者对其中比较典型的加以收集,描述,归纳和分享. 摘要:此文描述了笔者接触过的部分信息系统或平台之间的对接构型和情况,挂一漏万的总结分享之. 正文 系列随笔目录:信息系统实践手记 (http://www.cnblogs.com/taichu/p/5305603.html) 作者:太初 转载说明:请指明原作者,连接,及出处. 1.CACHE是啥? 最近一直在弄scala,Spark,Pyt

以网游服务端的网络接入层设计为例,理解实时通信的技术挑战

本文参考并引用了部分腾讯游戏学院的相关技术文章内容,感谢原作者的分享. 1.前言 以现在主流的即时通讯应用形态来讲,一个完整的即时通讯IM应用其实是即时通信(英文简写:IM=Instant messaging)和实时通信(英文简写:RTC=Real-time communication)2种技术组合在一起的一整套网络通信系统.之所以以IM这个简写代称整个即时通讯软件,其实是历史原因了(因为早期的诸如ICQ这样的即时通讯工具,也就是文字聊天,并没有加入实时音视频这样的实时通信技术),对这个话题有兴

@有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不

@有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中 2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不加@那么需要用一些转义符\来显示一些特殊字符 举例1:(2) stringsql ="update Table1 set name [email protected] where ID = '1'";//未采用SqlParameter SqlParameter sp =newSqlParameter("@name&q

单例中懒汉和饿汉的本质区别

单例中懒汉和饿汉的本质区别在于以下几点: 1.饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变.懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的. 2.从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题.写法简单明了.能用则用.但是它是加载类时创建实例(上面有个朋友写错了).所以如果是一个工厂模式.缓存了很多实例.那么就得考虑效率问

【设计用例】站内信

[站内信]也被称作[站内消息],如果验证它呢?需要考虑的无非是2个方面: 功能验证 - 是否覆盖了所有的场景(开发人员会在代码里注释出来 会触发站内消息的场景 把这些沟通并记录下来 以免设计用例有所遗漏) 样式验证 - 站内消息里面包含的文字描述是否得到了正常的展示

如何在自己设计的页面中调用metamask-1

() 下面是cryptokitties这个游戏使用metamask的方法: 如果你没有添加metamask并且打开它,你是进不去这个游戏的,你点击开始游戏,它会一直卡在这里 然后当你打开了metamask之后,这时候无论你连接的是什么网络,这时候应该是探测到了window.web3.currentProvider !== 'undefined'了,然后你就可以进行下一步注册了 上面那样子就注册好了,这个时候你就能够进行登录了 然后点击登录后你就能够看见下面的页面弹出: 就是你想要进入这个页面你需