边界值法设计测试用例

摘要:
大量测试实践表明,在输入或输出数据范围的边界处会出现许多错误。因此,为各种边界条件设计测试用例有助于暴露程序中的错误。边界值分析法是对等价类分析法的补充。

大量的测试实践表明,很多错误是发生在输入或输出数据范围的边界上,因此针对各种边界情况设计测试用例,有利于揭露程序中的错误。

边界值分析法是对等价类分析法的补充。边界值分析法利用各输入等价类的最小值、略大于最小值的值、正常值、略小于最大值的值和最大值处进行取值。

1.“单故障”假设

边界值分析的另外一个要点基于一个十分重要的假设“单故障”假设,即失效问题通常不会由两个(或多个)故障同时引发。因此,构造边界值测试用例的方法是,尽让一个变量取边界值,其余变量取正常值。

例如有函数F(x1,x2) a ≤x1≤ b,c ≤x2≤ d,那么边界值取值情况应如下图:

边界值法设计测试用例第1张

因此,对于一个n个变量的函数,将会吃产生4n+1个不同的测试用例。

2.健壮性测试

健壮性测试是对边界值分析的一种简单扩展,在对变量的5个边界值进行分析之外,近一步考虑略大最大值和略小于最小值的情况。那么函数F(x1,x2)边界值取值情况应如下图:

边界值法设计测试用例第2张

边界值分析的大部分属性都直接适用于健壮性测试,对健壮性测试来说,最重要的不是输入而是期望输出。

3.最坏情况测试

如前所述,边界值分析是基于可靠性理论中的单故障假设的。如果抛开这个假设,就意味着要考察多个变量同时取极值的情况。这在电路分析中叫“最坏情况分析”,这里也利用这种思想来构造最坏情况测试用例。对于每个变量先构造最小值、略大于最小值的值、正常值、略小于最大值的值和最大值5个边界值的集合,然后计算这些集合的笛卡尔积。对于有n个变量的函数来说,最坏情况测试将会构造出5n个测试用例。

那么函数F(x1,x2)边界值取值情况应如下图:

边界值法设计测试用例第3张

最坏情况测试适用于各个物理量之间存在大量的相互作用,而且函数失效代价极高的情况。

在对测试有特别极端的要求时应采用健壮性最坏情况测试,这就是要用健壮性测试的7个值的集合做笛卡尔积,得到7n个测试用例。函数F(x1,x2)边界值取值情况应如下图:

边界值法设计测试用例第4张

4.特殊值测试

特殊值测试可能是采用最广泛的一种功能测试方法,也是最直观、最难统一的。在特殊值测试这种,测试人员利用其背景知识、在类似程序方面积累的经验以及对软件“软肋”的了解来设计测试用例。

5.边界值分析法设计测试用例应遵循的原则

1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。

2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。

3)将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。

     例如,某程序的规格说明要求计算出"每月保险金扣除额为0至1165.25元",其测试用例可取0.00及1165.24、还可取一0.01及1165.26等。

     再如一程序属于情报检索系统,要求每次"最少显示1条、最多显示4条情报摘要",这时我们应考虑的测试用例包括1和4,还应包括0和5等。

4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。

 5)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。

6.实例

NextDate函数包含三个变量:month(月份)、day(日期)、和年(year),函数的输出为输入日期的后一天的日期。例如输入为2007年9月9日,则函数的输出为2007年9月10日。要求输入变量month、day、year均为整数值,并且满足下列条件:

1)1 ≤month≤ 12

2)1 ≤day≤ 31

3)1812 ≤year≤ 2012

最坏情况测试用例:

边界值法设计测试用例第5张

7.边界值分析法的局限性

边界值分析法非常适用于多个变量相互独立又都代表实际物理量的情况。例如:NextDate函数中并没有针对2月和闰年的测试,实际上month、day和year这几个变量之间存在特殊的依赖关系。边界值分析假定各个变量之间应该是完全独立的。

变量的物理指标同样重要。如果某个变量代表具体的物理量,比如温度、压力、速度等,这个量的物理边界就非常重要。

免责声明:文章转载自《边界值法设计测试用例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Keepalived 的使用docker 安装部署 mysql(配置文件启动)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

浅谈C工程中的.c与.h文件

基于C语言的单片机、arm相关的工程开发时,C语言的模块化特点体现的非常明显。试想一下:你的一个工程中需要用到AD采样模块、液晶显示模块、串口发送模块、DA控制模块等。你肯定不会选择在一个.c文件中进行,必须是分模块的,这样才有利于团队开发,提高效率。 那么模块化设计遵循着怎样的原则呢,应该怎么写.c,.h文件呢。 1. .c和.h文件的区别 通常意义上的...

java 基本理论知识点

http://www.cnblogs.com/hellokitty1/p/4491808.html 1、main方法是怎么写的        public static void main(String [] args){}//最习惯的      public static void main(String  args[]){}      static p...

delphi基本语法

本文参考自《delphi2010语法手册》 1. 工程文件结构 源文件联系着unit单元,delphi主模块源文件格式为.dpr,其他模块为.pas,一个完整程序由一个.dpr和若干.pas组成。 2..dpr 程序结构 一个.dpr由程序头、[use从句]、主程序块组成。一个典型工程文件如下: 1 program Project; 2 {$APPT...

(转)source insight的使用方法逆天整理

转载自:https://www.cnblogs.com/xunbu7/p/7067427.html A. why SI:   为什么要用Source Insight呢?因为她比完整的IDE要更快啊,比一般的编辑器便捷啊!她有逆天的查看定义,查看调用,查看引用功能以及方便的Context Window上下文显示,像这样的东西非常有利于查看大量代码!   那么...

python unittest控制用例的执行顺序

为什么要进行顺序控制呢?使用过testng的同学就知道,它相对于junit来说有更强大的功能,其中的一个功能就是依赖测试。什么是依赖测试呢?简单的说一下就是,A方法运行时,其中有个变量的取值是B方法的动态产出值。这样就必须先执行B方法。testng的test方法有dependson属性来制定方法的依赖。但是向python的unittet框架,他类似于jun...

Java并发机制和底层实现原理

  Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码转化为汇编指令在CPU上执行。Java中的并发机制依赖于JVM的实现和CPU的指令。      Java语言规范第三版中对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排它锁单独获得这个变量...