Yaitza

用例设计之边界值

在长期的测试经历中,大量的缺陷发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以检查出更多的错误。例如,在做三角形计算时,要输入三角形的3个边长A、B和C。这3个数值应当满足A>0,B>0,C>0,A+B>c,A+C>B,B+C>A,才能构成三角形。但如果把6个不等式中的任何一个大于号“>”错写成大于等于好“≥”,那就不能构成三角形。问题恰恰出现在容易被忽略的边界值附件。这里所说的边界值是指相当于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特殊情况。

1. 边界条件

边界条件是特殊情况,编程从根本上说不怀疑边界有问题。但是根据人的固有思维,常年累月形成的经验可能会造成边界的问题;例如:生活常识中,大部分人都认为数字开始是1,可是代码中数字开始是从0开始;这种误差就可能导致在边界处出现问题。

2.次边界条件

普通边界条件是容易找到的,一般在产品说明书中有定义,或者在使用软件的过程中确定。而有些边界在软件内部,最终用户几乎看不到,但是软件测试仍然有必要检查。这样的边界条件称为次边界条件或内部边界条件。
寻找这样的边界不要求软件测试人员具有程序员那样阅读源代码的能力,但是要求大体了解软件的工作方式。2的乘方和ASCII表就是这样的例子。

2.1 2的乘方

计算机和软件的计算基础是二进制,用户(bit)来表示0和1,一个字节(byte)有8位组成,一个(word)有两个字节组成等。下表列出了常用的2的乘方单位及其范围或值。

术语 范围或值 术语 范围或值
0或1 1,024
双位 0~15 1,048,576
字节 0~255 亿 1,073,741,824
0~65,535 万亿 1,099,511,627,776

上表列出的范围和值是作为边界条件的重要数据。除非软件向用户提出这些范围,否则在需求文档中不会指明。然而,它们通常由软件内部使用,外部是看不见的,当然,在产生软件缺陷的情况下可能会看到。
在建立等价区间时,要考虑是否需要包含2的乘方边界条件。例如,如果软件接受用户输入1~1000范围内的数字,谁都知道在合法区间中包含1和1000,也许还有2和999.为了覆盖任何可能的2的乘方次边界,还要包含临近双位边界的14、15和16,以及临近字节边界的254、255和256.

2.2 ASCII表

字符 ASCII值 字符 ASCII值 字符 ASCII值 字符 ASCII值
Null 0 B 66 2 50 a 97
Space 32 Y 89 9 57 b 98
/ 47 Z 90 : 58 y 121
0 48 [ 91 @ 64 z 122
1 49 96 A 65 { 123

0至9的后面ASCII值是48至57。斜杠符(/)在数字0前面,而冒号字符“:”在数字9的后面。大写字母A~Z对应65至90。小写字母对应97至122。这些情况都代表次边界条件。

2.3 其他一些边界条件

另一种看起来很明显的软件缺陷来源是当软件要求输入时,不是没有输入正确的信息,而是根本没有输入任何内容,只按了Enter建。这种情况在产品说明书中常常被忽略,程序员也可能经常遗忘,但是在实际使用中却时有发生。
正确的软件通常应该将输入内容默认为合法边界内的最小值,或者合法区间内的某个合理值,否则,返回错误提示信息。

3. 边界值选择方法

边界值分析是一种补充等价划分的测试用例设计技术,它不是选择等价类的任意元素,而是选择等价类边界的测试用例。实践证明,为检验边界附近的处理专门设计测试用例,常常取得良好的测试效果。边界值分析法不仅重视输入条件边界,而且也适用于输出域测试用例。

对边界值设计测试用例,应遵循以下几条原则:

  1. 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
  2. 如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1的数作为测试数据。
  3. 根据规格说明的每个输出条件,使用前面的原则1或者原则2。
  4. 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
  5. 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构边界上的值作为测试用例。
  6. 分析规格说明,找出其他可能的边界条件。

这些都是正统的软件开发流程中,能给根据其相关文档找到对应的边界值。在实际工作中,可能并没有规范的文档,这就需要测试人员根据自己的实际积累,去辨识对应的边界,设计测试用例。

🐶 您的支持将鼓励我继续创作 🐶