第4章1黑盒测试之边界值测试课件
4.1 边?界?值?测?试 任何一个程序都可以看做是一个函数,程序的输入构成函数的定义域,程序的输出构成函数的值域。人们从长期的测试工作经验得知,大量的错误是发生在定义域或值域(输出)的边界上,而不是在其内部。对于软件缺陷,有句谚语形容得很恰当,即“缺陷遗漏在角落里,聚集在边界上”。 比如,在做三角形计算时,要输入三角形的三个边长A、B和C。这三个数值应当满足A>0、B>0、C>0、A+B>C、A+C>B、B+C>A,才能构成三角形。但如果把六个不等式中的任何一个大于号“>”错写成大于等于号“≥”,那就不能构成三角形。问题常常出现在容易被疏忽的边界附近。类似的例子还有很多,如计数器常常“少记一次”;循环条件应该是“≤”时错误地写成了“<”;数组下标越界(在C语言中数组下标是从零开始,可能错误地认为是从1开始,从而使最后一个元素的下标越界)等。 边界值分析关注的是输入空间的边界,从中标识测试用例。边界值测试背后的基本原理是错误更可能出现在输入变量的极值附近。因此针对各种边界情况设计测试用例,可以查出更多的错误。 4.1.1 边界条件 边界条件就是一些特殊情况。一般的,在条件C下,软件执行一种操作,对任意小的值σ,条件C+σ或C-σ会执行另外的操作,则C就是一个边界。 在多数情况下,边界条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到。比如程序要对学生成绩进行处理,要求输入数据的范围是[0,100],则很明显输入条件的边界是0和100。 然而,在测试用例设计过程中,某些边界条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界条件或次边界条件。 内部边界条件主要有下面几种。 1.数值的边界值 计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。比如一个字节由8位组成,一个字节所能表达的数值范围是[0,255]。表4-1-1列出了计算机中常用数值的范围。 2.字符的边界值 在计算机软件中,字符也是很重要的表示元素。其中ASCII和Unicode是常见的编码方式。表4-1-2中列出了一些常用字符对应的ASCII码值。如果要测试文本输入或文本转换的软件,在定义数据区间包含哪些值时,就可以参考ASCII码表,找出隐含的边界条件。 3.其他边界条件 有一些边界条件容易被人忽略,比如在文本框中不是没有输入正确的信息,而是根本就没有输入任何内容,然后就按“确认”按钮。这种情况常常被遗忘或忽视了,但在实际使用中却时常发生。因此在测试时还需要考虑程序对默认值、空白、空值、零值、无输入等情况的反应。 在进行边界值测试时,如何确定边界条件的取值呢?一般情况下,确定边界值应遵循以下几条原则: (1) 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。 (2) 如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少一、比最大个数多一的数作为测试数据。 (3) 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试数据。 (4) 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试数据。 (5) 分析规格说明,找出其他可能的边界条件。 4.1.2 边界值分析 为便于理解,以下讨论涉及两个输入变量x1和x2的函数F。假设x1和x2分别在下列范围内取值:a≤x1≤b;c≤x2≤d。 函数F的输入空间如图4-1-1所示。矩形阴影中的任何一点都是函数F的有效输入。 图4-1-1 两个变量函数的输入域 边界值分析的基本思想是使用输入变量的最小值、略大于最小值、正常值、略小于最大值和最大值设计测试用例。通常我们用min、min+、nom、max-和max来表示。 当一个函数或程序有两个及两个以上的输入变量时,就需要考虑如何组合各变量的取值。我们可根据可靠性理论中的单缺陷假设和多缺陷假设来考虑。 单缺陷假设,即被测对象只要在某个输入条件的某个边界出错,则在任何包含改输入条件的某个边界的情况下一定会出错,那么测试时仅覆盖输入条件的单个边界点即可,无需测试多个输入条件取边界测试数据的情况。因此,单缺陷假设的策略是在任何一个测试用例中,有且只能有一个输入条件的取值为边界邻域内的测试数据,其他输入条件应取正常值(一般为相邻边界点之间的中值)。 单缺陷假设是指“失效极少是由两个或两个以上的缺陷同时发生引起的”。依据单缺陷假设来设计测试用例,只让一个变量取边界值,其余变量取正常值。多缺陷假设是指“失效是由两个或两个以上缺陷同时作用