组合测试法中的全对偶测试法

本贴最后更新于 4306 天前,其中的信息可能已经天翻地覆

在测试设计过程中,大家都会遇到很多变量进行组合的情况,对相互组合的两个或更多变量进行的测试活动就是组合测试,一般情况下都是使用组 合测试法,但这种情况很多测试人员研究得不够深入。测试人员需要开发或了解组合测试法中使用到的工具,通过程序得到用例组合才更加合理和全面,如果不在测 试中一起改变某些变量,就会遗漏由不同的变量组合而触发的错误。

首先介绍下组合测试法的定义,组合测试是一种测试用例生成方法。它将被测系统抽象出来的变量的取值进行组合并生成一组测试用例的过程,一般情况下, 组合测试能够在保证错误遗漏率的前提下采用较少的测试用例测试系统。但是对于如何从全集合的变量组合中抽取出有效的测试用例,会有不同的方法,两因素 (Pairwise)组合测试就是一种比较好的方法去挖掘出有效的测试用例组合。接下来介绍另外一种方法去自动生成较好的测试用例集,那就是全对偶测试法 (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


转自:http://www.infoq.com/cn/news/2011/08/combination-test

  • Test

    如果你要试验论坛功能,请到 Sandbox 标签下发帖。

    14 引用 • 29 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
Vanessa
我们终此一生,就是要摆脱他人的期待,找到真正的自己。

推荐标签 标签

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24878 引用 • 102380 回帖
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 2 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 80 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 719 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 140 回帖 • 1 关注
  • 叶归
    5 引用 • 16 回帖 • 11 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 147 关注
  • OneNote
    1 引用 • 3 回帖
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 1 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 251 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 662 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    297 引用 • 755 回帖
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 55 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 169 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖 • 1 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 611 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 3 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 159 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 1 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 26 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 75 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖 • 1 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    410 引用 • 3588 回帖