软件测试(第2版)_Paul学习05_01——Ch5边界值测试_01

任何程序都可以看做是一个函数,程序的输入构成函数的定义域,程序的输出构成函数的值域。输入定义域测试是最著名的功能性测试手段。本章和后面两章将讨论如何运用程序的函数特性,为程序标识测试用例。在历史上,这种形式测试的重点是在输入定义域,但是将很多这类手段应用于开发基于值域的测试用例,常常是很好的补充。

什么是功能性测试:不知道程序的结构,通过规格说明或可执行程序以及一些知识了解到的输入输出之间的关系。

5.1 边界值分析

为了便于理解,以下讨论涉及有两个变量x1和x2的函数F。如果函数F实现为一个程序的一个功能,x1、x2的定义域如下:

a≤x1≤b

c≤x2≤d

区间[a,b]和[c,d]分别是x1和x2的定义域。

强类型语言:Ada和Pascal,允许显示地定义变量的值域,原因,就是为了防止程序员出现某些类型的错误,这些错误会导致通过边界值测试很容易发现的缺陷。弱类型语言:COBOL、FORTRAN、C,边界值测试更适用于采用这些语言编写的程序代码。

  

图5-1 两变量的输入定义域

 函数F的输入空间(定义域)如图所示。带阴影矩形中的任何点都是函数F的有效输入。边界值分析关注的是输入空间的边界,以标识测试用例。边界值测试背后的基本原理是错误更可能出现在输入变量的极值附近。例如,循环条件可能在应测试≤时只测试了<,并且计数器常常"少记一次"、打印书稿的问题,页的边界,美国陆军(CECOM)对其软件进行了研究,令人吃惊地发现,大量缺陷都是边界值缺陷。

边界值分析的基本思想是使用在最小值、略高于最小值、正常值、略低于最大值和最大值处取输入变量值,一种商业化测试工具(叫做T)可以为恰当描述程序生成这类测试用例,分别用min、min+、nom、max-、max表示5个值。

边界值分析的下一个部分基于一种关键假设,在可靠性理论叫做"单缺陷"假设。这种假设是说,失效极少是由2个(或多个)缺陷的同时发生引起的。因此,边界值分析测试用例的获得,通过只使一个变量取极值,其它所有变量取正常值。

因此,2变量函数F的边界值分析测试用例是:

{<x1nom,x2min>,<x1nom,x2min+>,<x1nom,x2nom>,<x1nom,x2max->,<x1nom、x2max>,<x1min,x2nom>,<x1min+,x2nom>,<x1nom,x2nom>,<x1max-,x2nom>,<x1max,x2nom>}

图5-2 两变量函数边界值分析测试用例

 

5.1.1归纳边界值分析

基本边界值分析手段可以用2种方式归纳:(1)通过变量的数量,(2)通过值域的种类

(1)通过变量的数量:边界值分析会产生4n+1个测试用例;

(2)归纳值域取决于变量本身的性质(或更准确地说是类型)。

①NextDate函数,月份可能是整数1-12

     ②佣金问题中的变量也可确定min、min+等

     ③三角形问题就没有显示地给出边界,使用整数,边长的最小值是1,最大值如没明确,可以是最大可表示的整数,如明确则为200。

     ④边界值分析对布尔变量没有实际意义。

     ⑤逻辑变量,比如SATM中PIN,事务处理类型也是逻辑变量(存款、取款、查询)。对于这种变量可以"遍历"边界值分析测试,但是这样做与"测试人员的直觉"并不非常吻合。可以不做边界值分析。也可以试一试,作为逻辑(相对于物理)变量的一个例子,我们可以研究PIN或者电话号码。很难想象0000、0001、5000、9998、9999的PIN会发现什么缺陷。

5.1.2边界值分析的局限性

如果被测程序是多个独立变量的函数,这些变量受物理量的限制,则很适合边界值分析。这里的关键词是"独立"和"物理量"。

  • 独立:不考虑变量之间的关系,不考虑语义
  • 物理量:比如温度、压力、速度、负载

作为逻辑变量的一个例子,我们可以研究PIN(密码)或电话号码,很难想象0000、0001、5000、9998和9999的PIN会发现什么缺陷。

5.2 健壮性测试

健壮性测试是边界值分析的一种简单扩展,除了变量的五个边界值分析取值,还要通过采用一个略超过最大值(max+)的取值,以及一个略小于最小值(min-)的取值,看看超过极值时系统会有什么表现。

 

 

图5-3 两变量函数健壮性测试用例

 

健壮性测试最有意思的部分不是输入,而是预期的输出。当物理量超过其最大值时会出现什么情况呢?如果是飞机机翼的迎角,则飞机可能失速;如果是公共电梯的负荷能力,则我们不希望出现特别的情况。健壮性测试的主要价值是观察例外处理情况。

对于强类型语言,健壮性测试可能非常困难。例如在Pascal中,如果变量被定义在特定范围内,则超出这个范围的取值会产生导致中断正常执行的运行时错误。这带来实现理念的一个问题:最好是执行显示的范围检查并使用例外处理机制解决"健壮性"问题呢?还是坚持通过强类型解决?如果采用例外处理选择,则必须进行健壮性测试。

 

5.3 最坏情况测试

最坏情况测试是指拒绝边界值分析的单缺陷假设,对每个变量,首先进行包含最小值、略高于最小值、正常值、略低于最大值和最大值五元素集合的测试,然后对这些集合进行笛卡尔积计算,以生成测试用例。下图分别是最坏情况和健壮最坏情况。


图5-4 两变量函数的最坏情况测试用例

 

  

图5-5 两变量函数健壮性最坏情况测试用例

 

5.4 特殊值测试

特殊值测试大概是运用最广泛的一种功能测试,最直观、最不一致,依赖于具体的问题和测试人员的领域知识、使用类似程序的经验以及感觉的程序的"软肋"。比如NextDate的2月28日、2月29日和闰年。尽管特殊值测试是高度主观性的,但产生的测试用例集合,常常比用我们已经研究过的其它方法生成的测试用例集合,更能有效地发现缺陷。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值