使用allpairs自动设计组合测试用例

一般都说测试先做单元测试,然后做集成测试,然后做系统测试之类的,其实说白了,也可以理解成将最基本的测试步骤,或者说测试环境使用一定的方法组合以后再生成新的测试用例。因为人工组合,第一比较费神,第二是有时要么是设计了几个等价的测试用例,重复执行这些等价的测试用例,比较费时。这里有一个比较好的测试技术,叫做配对(pair-wise)测试,它可以根据你设定的条件,自动生成在测试时间(即工作量)和测试覆盖率之间做出平衡的组合。

   配对测试的基本理念是,虽然程序的某个组件,或者程序自己会接受很多的输入,但大部分情况下,程序的bug不是因为这些输入同时作用而产生的,而是由一 到两个输入条件同时作用导致的。因此配对测试在生成测试组合的时候,主要关注将每个条件与其它条件至少配对一次,而不是试图生成全组合,这样就可以大大减 少需要测试的组合数,尽而节省测试工作量,同时又能达到满意的测试覆盖率。

  当然不能期望配对测试是万能的,即我们仅依赖于配对测试自动生成的测试用例就可以了,使用配对测试的目的是为了减少测试人员浪费在执行太多的等价组合的时间,将宝贵的时间尽可能地放在设计符合用户使用场景的测试用例上。

  具体示例(手工步骤)

  废话少说,先看一个具体的示例,假设我们有下面一个产品,界面如下:

  对于上面这个产品(假设文本框接受1到100之间的整数),可以将测试条件划分为下面这样子:

   当然,文本框的条件我们还可以再细分一下,但是为了描述简单,我把条件设置的比较粗糙,如果按照全组合的用例设置方式,需要 6 (下拉框控件可能的条件) * 2 (复选框可能的条件) * 2 (单选框可能的条件) * 6 (文本框可能的条件) = 144个组合。

  我们来看使用配对方式设计组合的方式:

  1、先将上面的条件输入到Excel里,并在列头标明可能出现的条件的个数,并按条件的个数将各个输入参数排序,如下图所示:

  2、先将第二个和第三个参数的各个条件组合一次,这里为了省事起见,我先去掉第一个参数,只介绍第二、三、四个参数的配对组合方法:

 3、然后再将第二个参数和第四个参数的各个条件组合一次,如下图所示:

  4、为了确保第四个参数跟第三个参数的各个条件都有一次组合,可以使用Excel提供的过滤功能来判断,例如下图中,很明显,两个参数没有一个完全组合:

  5、解决方案很简单,只需要再添加两行,将两个参数中没有组合的条件各自组合一次好了(当然,你也可以将第四个参数的条件稍微调整一下达到相同的目的):

  自动化步骤

  上面的工作还是有点繁琐,实际上早已有人将这个过程自动化了,这里介绍一个免费开源的工具allpairs.exe,请于下面这个链接里下载:http://www.satisfice.com/tools/pairs.zip

 对于上面的例子,使用allpairs生成组合的方式是:

  1、先将上面的条件输入到Excel里,如下图所示(因为这个工具是老外写得,没有考虑支持中文的问题,所以最好全部用英文表示):

  2、将Excel文件保存为以Tab键作为分隔符的文本文件:

  3、然后使用allpairs.exe处理这个文件:

  allpairs.exe test.txt > output.txt

  4、在output.txt里,PAIRING DETAILS下面的东西都是没有用的,可以直接删掉,删掉以后,结果如下:

  你可以在设计测试环境矩阵还有组合测试用例的时候使用allpairs这个技术,当然,你不能完全依赖这个技术,除了allpairs组合的测试用例以外,你最好再根据测试覆盖率和用户场景覆盖率入手,补充更有价值的测试用例。

  另外,使用配对测试的算法,我们有可能结合Behavior Driven Design技术,直接从需求自动生成测试用例,加之如果我们将基本的测试用例自动化以后,完全可以使用这个技术将自动化过的测试用例配对组合(当然需要 加上一些限制条件),在节省测试时间的同时,达到满意的测试覆盖率,当然,这样做要求我们自己写一个测试工具来实现这个技术—至少到现在我还没有看到现成 的工具,而且这个技术应该要比模型驱动测试更容易使用,因为模型驱动测试的问题是建模太困难。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2025-01-28 01:28:30

使用allpairs自动设计组合测试用例的相关文章

combobox-MFC COMBOBOX 列表弹出时,不让它自动为组合框赋值?

问题描述 MFC COMBOBOX 列表弹出时,不让它自动为组合框赋值? 我在组合框中输入字符时,下拉列表如果有匹配项就自动弹出列表.问题是,当下拉列表弹出时,它会自动将列表的某项赋值到组合框里,从而取代先前输入的字符.跪问各位大神,有没有什么办法能让它弹出时不自动将值复制到组合框里啊?

如何设计软件测试用例

设计测试用例是个很大的主题,而且其中所需要的方法也很多.我计划一点一点的总结并记录下来.我这次讨论的不是针对一个软件的测试用例设计,而是针对一个模块或多个模块用例的设计. 今天我要写的主要是我自己在工作中所用的一些方法,当然不是最好用的.但我一直在研究最高效,最实用的方法. 首先我们要了解一下为什么要设计测试用例以及它在软件测试中的地位. 影响软件测试的因素很多,软件本身的复杂程度,开发人员的素质(包括分析,设计,编程和测试),测试方法和技术的应用.那么如何保证测试质量的稳定呢?测试用例就可以把

测试用例设计

等价类划分方法 一.方法简介 1.定义 把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例.该方法是一种重要的,常用的黑盒测试用例设计方法.   2.划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得

软件测试用例设计方法

前面有曰:测试结果的准确性取决于测试用例的设计,故测试用例设计显得尤为重要.今天就好好梳理下,测试用例的相关内容. 重要性:Test Case贯穿整个测试执行过程,分两大类:数值计算类和数据处理类 概述:编写一组前提条件,输入,执行条件,预期结果的组合方案.完成对某个特定需求或目标的测试,体现测试方案,方法,技术和策略的文档. 1.什么是测试用例,为什么要编写? 测试用例就是编写一组条件,输入,执行条件,预期结果的并完成对特定需求或目标的测试,体现测试方案,方法,技术和策略的文档. 由于测试用例

测试用例与输入数据的设计方法

测试用例的设计是测试设计的重要内容,关于测试用例的设计方法,当前不少出版的测试书和发表的测试文章,不少存在着表述错误,主要是把测试用例中的输入数据的设计方法与测试用例的设计方法混为一谈,对测试初学者和测试用例设计人员产生误导. 这种错误的主要表现举例如下: 测试用例的设计方法包括: ◆ 等价类划分法 ◆ 边界值法 ◆ 功能图与判定表法 ◆ 错误推测法 ◆ 用户场景法 ◆ ...... 其实,测试用例中输入数据的设计方法只是测试用例设计方法的一个子集,上面列出的集中方法都是确定黑盒测试用例的输入测

用正交表设计测试用例

正交试验设计(Orthogonal experimental design)是研究多因素多水平的一种设计方法,它是根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了"均匀分散,齐整可比"的特点,正交试验设计是一种基于正交表的.高效率.快速.经济的试验. 什么是因素(Factor):在一项试验中,凡欲考察的变量称为因素(变量) 什么是水平(位级)(Level):在试验范围内,因素被考察的值称为水平(变量的取值) 正交表的构成: 行数(Runs):正交表中的行的个

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

软件测试中用正交实验法设计测试用例 正交实验法的由来 一.正交表的由来 拉丁方名称的由来 古希腊是一个多民族的国家,国王在检阅臣民时要求每个方队中每行有一个民族代表,每列也要有一个民族的代表. 数学家在设计方阵时,以每一个拉丁字母表示一个民族,所以设计的方阵称为拉丁方. 什么是n阶拉丁方? 用n个不同的拉丁字母排成一个n阶方阵(n<26 ),如果每行的n个字母均不相同,每列的n个字母均不相同,则称这种方阵为n*n拉丁方或n阶拉丁方.每个字母在任一行.任一列中只出现一次. 什么是正交拉丁方? 设有

【软件测试】4、测试用例的设计

众所周知,试图对软件进行完全的测试并发现全部的问题是一件不可能的任务,对于测试而言,最有效的思想就是努力使测试尽可能完全. 在这个过程中,测试用例的设计至关重要.因为软件测试最关键的问题是:如何从所有可能的测试用例全集中寻找可能发现错误最多的子集. 1.白盒测试 白盒测试的重点在于测试用例的执行程度,或测试用例覆盖程序源码逻辑结构的程度.完整的白盒测试将走过程序运行路径的每一种可能,然而这是不可能的.因此需要设定一些准则来约束并不完善的测试用例子集,以求尽可能多的发现程序中的潜在错误. (1)语

用正交法设计测试用例

一.正交表的由来 1.拉丁方名称的由来 古希腊是一个多民族的国家,国王在检阅臣民时要求每个方队中每行有一个民族代表,每列也要有一个民族的代表. 数学家在设计方阵时,以每一个拉丁字母表示一个民族,所以设计的方阵称为拉丁方. 2.什么是n阶拉丁方? 用n个不同的拉丁字母排成一个n阶方阵(n<26 ),如果每行的n个字母均不相同,每列的n个字母均不相同,则称这种方阵为n*n拉丁方或n阶拉丁方.每个字母在任一行.任一列中只出现一次. 3.什么是正交拉丁方? 设有两个n阶的拉丁方,如果将它们叠合在一起,恰