测试用例的几种常见设计方法

测试用例常见的设计方法有:等价类划分法、边界值分析法、错误推测法、判定表法、正交实验法。

一.等价类划分法

顾名思义,等价类划分,就是将测试的范围划分成几个互不相交的子集,他们的并集是全集,从每个子集选出若干个有代表性的值作为测试用例。

例如,我们要测试一个用户名是否合法,用户名的定义为:8位数字组成的字符。

我们可以先划分子集:空用户名,1-7位数字,8位数字,9位或以上数字,非数字。

然后从每个子集选出若干个有代表性的值:

空用户名:“”       (无效等价类实例,指对于软件规格说明而言,没有意义的、不合理的输入)

1-7位数字:"234"        (无效等价类实例)

8位数字:"00000000"     (有效等价类实例,能检验程序是否实现了规格说明中所规定的功能和性能)

9位或以上数字:"1234567890"     (无效等价类实例)

非数字:"abc&!!!"                 (无效等价类实例)

他们5个,就是用等价类划分选出的测试用例。实际上,对于1-7位数字的子集来说,选“234”和“11111”没有本质的区别。

等价类的划分,最关键的是子集的划分。实际上,非数字还可以继续划分子集:字母,特殊字符。。。。

究竟要划分到何种程度才合适呢?我请教过做测试的朋友,他的意见是,看你有多少资源和时间,还有,看是否值得。

对此,我表示赞同,毕竟无论你怎么测试,总会有未发现的缺陷存在,所以,先解决容易被发现的问题再说。

二.边界值分析法

长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。选出的测试用例,应选取正好等于、刚刚大于、刚刚小于边界的值,例如,对于在区间min,max的值,测试用例可以记为min,min+,max,max-。

例如,假定 X 为整数,10≤X≤100,那么 X 在测试中应该取的边界值为:10,11,99,100。

注:上面只是说边界值,如果是完整的测试,除了边界值外,还需要一个正常值,即12-98之间的任意值。

三.错误推测法

错误推测法是指:在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。

这种方法没有固定的形式,依靠的是经验和直觉,很多时候,我们都会不知不觉的使用到。

四.判定表法

又称为策略表,基于策略表的测试,是功能测试中最严密的测试方法。该方法适合于逻辑判断复杂的场景,通过穷举条件获得结果,对结果再进行优化合并,会得到一个判断清晰的策略表。

例如,某公司的对客户分类标准如下:

顾客每次订货额在 1000元以上(含1000元),信誉好的,订单设“优先”标志;

信誉不好,但是老客户的,订单设“优先”标志;

信誉不好,但是新客户的,订单设“正常”标志;

每次订货额在 1000元以下,订单设“正常”标志。

绘制的决策表如下:

  此列称为 “ 这些列称为 “” ,穷举所有条件的组合
  1 2 3 4 5 6 7 8  

条件

顾客订单>=1000 Y Y Y Y N N N N  
信誉好 Y   Y N N Y Y N N  
老顾客 Y N Y N Y N Y N  

行动

或结果

设为优先 Y Y Y            
设为正常       Y Y Y Y Y  

此表分两大行,两大列,分别用不同的颜色区别。

浅蓝:列出所有条件(或称为输入)

浅灰:列出所有结果(或称为输出,行动或决策)

浅黄:穷举所有条件的组合。

浅绿:根据每一列的条件,判断出结果。

因为穷举了所有条件,所以可以说这个判断是100%正确的。下一步是对这个表进行合并优化。

例如,从编号为1,2的列可以看出,顾客订单>=1000,信誉好,不管是新顾客还是老顾客,都设为优先,于是上面的表合并整理后,得到下表

  1(1,2) 2(3) 3(4) 4(5,6,7,8)

条件

顾客订单>=1000 Y Y Y N
信誉好 Y   N N --
老顾客 -- Y N --

行动

或结果

设为优先 Y Y    
设为正常     Y Y

这样,我们就可以得到更清晰的逻辑判断,也可以更好的协助我们编写测试用例。而决策表,对于开发人员来说一样有用。

从上面的表格,我们就可以写出更简洁的判断语句。

 五.正交实验法

用语言描述正交实验法会很抽象难懂,简单说,就是在各因素互相独立的情况下,设计出一种特殊的表格,找出能以少数替代全面的测试用例。

其中,上面所说的特殊表格就是正交表,是按照一定规则生成的表。

虽然说是特殊的表格,实际表现形式跟一般的表格没有什么区别,正交表的主要特征是,“均匀分布,整齐划一”,正是因为“均匀”的,所以才能以少数代替全部。

例如:

某所大学通信系共2个班级,刚考完某一门课程,想通过“性别”、“班级”和“成绩”这三个查询条件对通信系这门课程的成绩分布,男女比例或班级比例进行人员查询。

按照传统的方式,我们将会穷举所有的组合,来编写测试用例,组合个数是2*2*2=8。

排列组合参见下表


序号


性别


班级


成绩


1



1班


及格


2



1班


不及格


3



2班


及格


4



2班


不及格


5



1班


及格


6



1班


不及格


7



2班


及格


8



2班


不及格

当组合条件不多的时候,穷举暂时没问题,但是,一旦条件多了,组合个数就会以指数形式增长。

这个时候,就要用到正交表了,通过选出有代表性的测试实例,达到以少数代替全面的效果。

正交表如何设计呢,这个问题实际很复杂,涉及到组合统计的数学知识,有的正交表甚至到目前为止,还未得出算法。

我们只能通过已知的模型套上去。

例如,Dr. Genichi Taguchi 设计的正交表

https://www.york.ac.uk/depts/maths/tables/orthogonal.htm

Technical Support ( support.sas.com ) com 提供的

http://support.sas.com/techsup/technote/ts723_Designs.txt

首先,我们来看看基本的概念。

因素:被测的元素称为因素,例如上面的性别,班级,成绩,均为因素,因素的个数我们记为k,此处k=3

水平:因素的可能值,称为水平。例如班级的可能值为1或2。水平的个数我们记为m,此处正好每个因素的水平都是2,此处m=2。

那么正交表的行数n的计算公式为,n=k*(m-1)+1,此处为n=3*(2-1)+1=4。即共有4行。

我们通常用L表示这个正交表,完整的表示为Ln(mk)

如果每个因素的水平数相等,我们称之为单一水平正交表,例如本例子就是,L4(23)

各列水平数不完全相同的正交表称为混合水平正交表。如L8(4124),表示有一个因素的水平为4,有4个因素的水平为2。

按照这个表达式,我们可以去套用已知的正交表。例如本例子是L4(23),从上面提供的两个链接均可以查到例子,虽然表达方式略有不同,但实际是一样的,我们从http://support.sas.com/techsup/technote/ts723_Designs.txt 查到,其正交表的格式为:

23     n=4
000
011
101
110

此处0,1是对可能值的编号,例如,我们可以将(0,1)分别映射为(女,男)(1班,2班)(及格,不及格)

按照上面的格式,

000:女  1班  及格

011:女  2班  不及格

101:男  1班  不及格

110:男  2班  及格

这就是我们所得到的正交表。

六.总结

功能测试方法还有很多,例如因果图法,状态转换测试法等,他们都略为复杂,像正交实验法一样,有各自的一套东西,不过本质都是通过画图,让我们更好的思考,最后转化成判定表。

实际上常用的是前面五种方法,包括:等价类划分法、边界值分析法、错误推测法、判定表法、正交实验法。

参考文档:

http://blog.csdn.net/summercpp/article/details/28101891

http://www.51testing.com/html/36/489136-812551.html

https://wenku.baidu.com/view/a54724156edb6f1aff001f79.html

时间: 2024-07-29 03:01:23

测试用例的几种常见设计方法的相关文章

011-黑盒测试的测试用例常见设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用

黑盒测试的测试用例常见设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用. 1)等价类划分 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类. 2)边界值分析法 边界值分析方法是

用户最讨厌的3种UI设计方法

以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具.   注意:本文中提到的设计方法在不同设计场景带来的效果是不一样的,并不能说是好的或不好的. 这意味着,如果你正确执行,它们都具有很大的潜力. 1. 弹窗   也许你有过这种经历.你打开一个新的网页,阅读里面的内容,当你看到一半的时候,突然间弹出一个巨大的覆盖区,要求你填写个人电子邮件地址.在大多数情况下,你的即时反应将是关闭覆盖层,或者关闭整个页面. 这么多网站使用这种设计的原因是很明显的.然而,

Java实现几种常见排序方法

转自:http://www.cnblogs.com/sevenyuan/archive/2009/12/04/1616897.html 日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经

【转】Java实现几种常见排序方法

http://www.cnblogs.com/sevenyuan/archive/2009/12/04/1616897.html 日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换

枚举的七种常见使用方法

枚举的使用的方法有很多,下面举出常用的七种方法: 用法一:常量 在JDK1.5之前,我们定义常量都是:publicstaticfianl.....现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. Java代码 public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. Java代码 enu

Linux Touch命令的8种常见使用方法

Linux touch命令不仅可以用于在Linux上创建空文件. 您可以使用它来更改现有文件的时间戳,包括其访问权限和修改时间. 本文介绍了8种可以通过Linux终端使用touch命令的方案. 我们在Ubuntu 18.04 LTS/Ubuntu 18.10系统上运行了本文中提到的命令和过程. 由于touch命令是命令行实用程序,因此我们将在本文中使用Ubuntu终端. 您可以通过系统Dash或Ctrl + Alt + T快捷方式打开终端. [email protected]:~/linuxid

java返回参数中几种常见的方法

1.有参数有返回值 public class text_1 {    1)创建add方法 public int add(int i, int j) {        int res = i + j;        return res;    } 2)方法的调用 public static void main(String[] args) {        text_1 a = new text_1();// 创建方法对象        int k = a.add(3, 4);// 用对象调用方

比较C#中几种常见的复制字节数组方法的效率[转]

[原文链接] 在日常编程过程中,我们可能经常需要Copy各种数组,一般来说有以下几种常见的方法:Array.Copy,IList<T>.Copy,BinaryReader.ReadBytes,Buffer.BlockCopy,以及System.Buffer.memcpyimpl,由于最后一种需要使用指针,所以本文不引入该方法. 本次测试,使用以上前4种方法,各运行1000万次,观察结果. using System; using System.Collections.Generic; using

黑盒技术生成测试用例几种常见方法

因为实验还没做,所以无法写实验报告.在这里我将简述几种常见的黑盒测试方法. 黑盒测试,又称功能测试或者数据驱动测试.是把测试对象看作一个黑盒子.利用黑盒测试法进行动态测试时,需要测试软件产品的功能.不需要测试软件产品的内部结构和处理过程.   采用黑盒技术设计的测试用例方法有: 等价类划分方法 边界值分析 错误推测 因果图方法 判定表驱动分析方法 正交实验设计方法 功能图分析方法 等价类划分: 把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一个子集中选取少数具有代表性的数据作为测试