购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.8 逻辑驱动测试的边界值

边界测试(Boundary Testing)是根据输入数据范围确定边界值,以边界值作为输入,驱动的测试。边界测试不仅广泛应用于数据驱动测试,在逻辑驱动测试中同样不可或缺。关于边界值分析的概念及原理,将在第6章予以详细介绍。这里仅对数据类型、数组、分支判断语句的边界值进行讨论,以说明逻辑驱动测试中的边界值问题。

5.8.1 数据类型的边界值

任何数据类型在内存中都占用一定存储空间,其范围就是测试的边界值。表5-25和表5-26分别列举了C语言和Java语言的基本数据类型及其范围。

表5-25 C语言的基本数据类型及其范围(Windows平台)

表5-26 Java语言的基本数据类型及其范围(任何平台)

在不同环境中,数据类型的范围不同。显然,测试需要关注不同数据类型在不同环境中的范围及边界值。例如,在Windows环境下,用C语言定义了一个整型变量,则需要测试这个整型变量的数值是否超出-2147485648~2147485647这个范围。这里,以如下程序为例,讨论数据类型边界值分析问题。

该程序定义整型变量a、b、c,对a和b分别赋初值32765和3,将a与b之和赋给c并打印。似乎,该程序的运行结果为32765 + 3 = 32768。但在DOS环境下,对于C语言,int占2个字节,其结果超出[−32768,32767]的范围,不能打印。整型变量a和b,虽然其赋值均未超出范围,但a+b的计算结果却超出了短整型数据类型的边界值,需要在测试中予以关注,检出这类边界错误。

5.8.2 数组的边界值

数组是一组具有相同数据类型的数据集合,对于不同的程序设计语言,数组的表现形式不同。这里,以如下程序为例,讨论数组边界值分析问题。

该程序定义了一个含有5个整型元素的数组a[5],进行for循环,逐个打印数组元素。C语言用int a[5]定义的数据元素为a[0]~a[4],Java则用int a[]=new int[5]定义数据元素a[0]~a[4],数据元素同样为a[0]~a[4]。对于数组,需要测试其边界值,防止数组越界。

显然,在该程序中,循环i的取值存在如下问题。

(1)对于第一个for循环:for(i=0;i<=5;i++),i的值从0到5,a[i]的赋值为a[0]到a[5],而数组a[5]的范围是a[0]到a[4],并无a[5]这个元素,因此属于典型的数组越界问题。因为事先在内存中只给a[5]分配了5个整型元素所用空间,而在用scanf语句输入时,却要输入6个元素,多输入的这个元素就只能存放在与数组a[5]相邻的内存空间,但该空间并未提前分配,可能导致内存溢出。

(2)对于第二个for循环:for(i=1;i<5;i++),i的值从1到4,输出a[1]到a[4],漏掉了a[0]这一数组元素。该问题是典型的数组边界值问题,对该程序作如下修改即可。

5.8.3 分支判断语句的边界值

边界值分析的另外一个重要应用就是分支判断语句测试,大多数if、else if语句都含有关系表达式,如if(a>=0),else if(b<1),需要测试a = 0,b = 1时是否成立。下面给出一个输入两个2位数(10~99)之间的整数,计算其和并输出的实现程序。

对于语句if(a<=10||a>=99),printf(“a的值应该在10~99之间”),表明只要a≤10或a≥99,程序就会给出错误提示信息。实际上,当输入10或99时,10和99也是两位数,属于合法数据,程序不应该报错。因此,应将该语句更改为:

if(a<10||a>99)

printf(“a的值应该在10~99之间”)。

同理,其中的else if改成:

else if(b<10||b>99)

printf(“b的值应该在10~99之间”)。 lduW0XEDGt3zO+/M3NHJitzYtt0XSB86M8KaLql0HEZUOTSynGptHOGysExdaD7w

点击中间区域
呼出菜单
上一章
目录
下一章
×