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

author author     2022-09-01     463

关键词:

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

一.等价类划分法

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

例如,我们要测试一个用户名是否合法,用户名的定义为: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

测试用例的设计步骤

测试用例的设计步骤作为测试新人,如何实现测试用例的设计一直是我的一个疑惑,在工作中写过几个项目的测试用例,尝试总结一个测试用例的设计步骤。前提:编写测试用例之前我们需要对项目的需求有清晰的了解,对要测... 查看详情

面试测试开发工程师:用例篇

目录1.测试用例的基本要素2. 测试用例的给我们带来的好处 3. 测试用例的设计方法3.1测试用例的总体设计方法基于需求的设计3.2 具体的设计方法3.2.2等价类3.2.3 边界值3.2.4 因果图3.2.5 正交排列 3.2.6场景设计法3.2.7 错误猜测... 查看详情

测试用例的设计方法

测试用例的总体设计方法基于需求的设计验证需求的正确性和合理性细分需求,多细致的需求就设置多细致的测试用例(从细分的需求里面,根据每一个功能设计完整的测试用例)如:软件需求(1)若... 查看详情

2021最详细的测试用例的设计方法及案例——骚操作

测试用例的设计方法 一.概念1.什么是测试用例?在测试过程中很重要的一类文档,它是测试工作的核心、是一组在测试时输入输出的标准、是软件需求的具体对照。2.测试用例的作用:检验软件是否满足客户需... 查看详情

我的测试用例设计-01测试用例的个人见解

刚入行的时候,看了很多关于测试相关的文章,记得有一篇说到测试用例是测试灵魂让我印象深刻。如今,我入行几年了,越发深感测试用例的设计重要性,可以这么说,测试用例的设计与管理是测试工程师的核心技能。我发现... 查看详情

单元测试中测试用例的设计方法

单元测试中测试用例的设计方法1.用于语句覆盖的基路径法基路径法保证设计出的测试用例,使程序的每一个可执行语句至少执行一次,即实现语句覆盖。基路径法是理论与应用脱节的典型,基本上没有应用价值,读者稍作了解... 查看详情

测试用例

一、测试用例的切面设计1、功能点切面2、特定切面3、隐含切面(1)、后台功能(2)、完整业务流程的测试(3)、某种特定情况下的系统运行(4)、其它相关系统(5)、除功能测试外的其它测试类型二、详细用例的设计1、功... 查看详情

性能测试的几种常见方法

 性能测试的几种常见方法(转)  负载测试:负载测试是用户观点的测试行为。简单说来就是负载测试就是让系统在一定得负载压力下进行正常的工作,观察系统的表现能否满足用户的需求。  用户的需求从何而来?需... 查看详情

测试2:编写测试用例的方法(代码片段)

2.编写测试用例的方法==7种==测试常用的方法:codereview+代码静态分析、CI/CDCI--持续集成--开发成员经常集成它们的工作,尽快发现集成错误CD--持续部署--将集成后的代码部署到更贴近真实运行的环境2.1测试用例的描述:用例编号... 查看详情

软件测试测试用例的设计

测试用例:是为了实施测试而向被测试的系统提供的一组集合,这组集合包括:测试环境、操作步骤、测试数据、预期结果等要素。评价测试用例的标准:1.用例表达清楚,无二义性。2.用例可操作性强。3.用... 查看详情

测试用例设计方法场景设计方法

...成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。基本流和备选流:如下图所示,图中经过用例的... 查看详情

软件测试:测试用例的设计思想

一,登陆页面的测试:下面以一个登陆窗口为例,说说我设计登陆界面的思路和方法。我把这个测试用例分为三层结构,表单测试、逻辑判断、业务流程。第一层,表单测试为最底层(最基础的)。这部分的测试用例是对登陆窗... 查看详情

备考第12天——测试用例的编写

测试设计说明     为了更好地进行测试,我们需要为单个软件特性定义具体的测试方法,这就是测试设计说明。ANSSI/IEEE829中对测试设计说明的解释是:测试设计说明就是在测试计划中提炼测试方法,要明确指... 查看详情

测试用例设计方法基础理论知识

 一、什么是测试用例测试用例设计:将软件测试的行为活动,作为一个科学化的组织归纳。测试用例:设计一个情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的执行结果。因为我们不可能进行穷举测... 查看详情

功能测试用例的设计

功能测试的目的需要确保在各种场景下,软件的功能都是正常可用的 解释一下我说的功能测试,就是显示的功能性需求:终端用户可见的功能,软件应该做的功能都做了,不应该做的没有做非功能性需求就是涉及安全性,性... 查看详情

testng使用功能详解

TestSuite处理测试用例有6个规约(否则会被拒绝执行测试)A测试用例必须是公有类(Public)B测试用例必须继承与TestCase类C测试用例的测试方法必须是公有的(Public)D测试用例的测试方法必须被声明为VoidE测试用例中测试方法的前... 查看详情

软件测试之用例设计,入门必备(代码片段)

一名测试工程师的学习之路,所有博客链接已存放在该链接下:一个Tester目录一、前言二、用例设计方法2.1、等价类划分法2.2、边界值法2.3、因果图与判定表一、前言    测试用例的编写是测试日常工作中必不可少的事... 查看详情

测试用例的设计

一、什么是测试用例        测试用例(TestCase)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求,通俗的讲:就是把我们测试... 查看详情