-
1 电子教材
-
2 PPT
如果软件在能力达到极限时能够运行,那么在正常情况下就不会有什么问题。长期的测试工作经验说明“错误隐藏在角落里,问题聚焦在边界上”,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此,针对各种边界情况设计测试用例,可以查出更多的错误。
程序在处理大量中间数值时往往是对的,但是在边界处就容易出现错误?下面的例子说明了在一个极简单的程序中是如何产生边界条件问题的。
int data[10];
int i;
For (i=l; i<=10; i++)
Data[i]= -1;
这段代码的意图是创建包含10个元素的数组,并为数组中的每一个元素赋初值-1。看起来相当简单,它定义了包含10个整数的数组data和一个计数值i。For循环从1到10,数组中从第1个元素到第10个元素被赋予数值-1。
我们知道在C语言中,当定义数组时(在本例中定义语句是int data[10]),第一个创建的元素下标为0,而不是1。该程序实际上创建了一个从data[0]到data[9]共10个元素的数组。程序从1到10循环地将数组元素的值初始化为-1,但是由于数组的第一个元素是data[0],因此它没有被初始化。程序执行完毕,数组值如下:
data[0]= 0 data[6]= -1
data[l]=-1 data[7]= -1
data[2]= -1 data[8]= -1
data[3]= -1 data[9]= -1
data[4]= -1
data[5]= -1
注意:data[0]的值是0,而不是-1。如果这位程序员以后忘记了,或者其他程序员不知道这个数据数组是如何初始化的,他就可能会用到数组的第1个元素data[0],以为它的值是-1。代码中还造成了缓冲区溢出问题,因为data[10]是不可用的。诸如此类的问题很常见,在复杂的大型软件中,可能导致极其麻烦的软件缺陷。
在测试两位加法计算器时,输入第1个值,其值为-99,第2个值为98,单击“加”按钮后,程序弹出一个提示对话框,如图7-1所示。

图7-1 加法器错误信息提示
根据前面的等价类方法,按照测试用例表给出的测试用例进行测试,没有发现问题,那么为什么现在输入参数-99和98后,程序提示输入的数据有误了?而-99是合理的输入数据,以-99作为输入数据应该是有效等价类中的数据。是不是等价类划分方法有问题?现在来看看有关的代码,为什么在第一个数值取-99的时候,程序就给出了错误提示:
If Val (Textl.Text) >= 99 Or Val(Textl.Text) <= -99 Then
MsgBox ("输入的参数值必须大于-99同时小于99")
Else
If Val (Text2.Text) >= 99 Or Val(Text2.Text) <= -99 Then
MsgBox ("输入的参数值必须大于-99同时小于9,9" )
Else
Text3.Text = Val (Textl.Text) + Val (Text2.Text)
End If
End If
分析以上代码,发现在对输入的数据进行判断时,程序将判断条件设为:
If Val (Textl.Text) >= 99 Or Val (Textl.Text) <= -99 Then
在事实上将输入数据的值的范围限制在了-98到98之间,没能完全实现功能的要求。
测试技术中的边界值测试方法可以帮助我们避免以上问题。
下面根据边界值分析的方法来看看如何对边界值进行测试。
由于允许输入的数值在-99到99之间(图7-2所示),所以可以把-99和99看作两个边界值。在测试的时候可以取紧邻边界值的数值和边界值本身作为输入(表7-1)。

图7-2 等价类划分
表7-1 边界值测试用例
| 测试用例编号 | 输入数值 | 被测边界 | 预期输出 |
| 1 2 3 | -100 -99+ (-99) -98+ (-98) | -99 | 错误信息 正确输出: -198 正确输出: -196 |
| 4 5 6 | 98+98 99+99 100 | 99 | 正确输出: 196 正确输出: 198 错误信息 |

