天天看点

黑盒测试方法一(等价类划分)

等价类划分

等价列划分设计方法是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少量具有代表性的数据作为测试用例。

等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。并合理地假定:测试某等价类的代表值就等于对这一类其他值的测试。

等价类划分有两种不同的情况:有效等价类和无效等价类。设计时要同时考虑这两种等价类。

下面给出6条确定等价类的原则:

  1. 在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。
  2. 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,则可以确立一个有效等价类和一个无效等价类。
  3. 在输入条件是一个布尔量的情况下,可以确立一个有效等价类和一个无效等价类。
  4. 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可以确立n个有效等价类和一个无效等价类。
  5. 在规定了输入数据必须遵守的规则的情况下,可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
  6. 在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。

在确立了等价类后,可建立等价类表,列出所有划分出的等价类。然后从划分出的等价类中按以下的3个原则设计测试用例:

  1. 为每一个等价类规定一个唯一的编号
  2. 设计一个新的测试用例,使其尽可能多的覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止。
  3. 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

例子:

根据下面给出的规格说明,利用等价类划分的方法,给出足够的测试用例。

"一个程序读入3个整数,它们分别代表一个三角形的3个边长。该程序判断所输入的整数是否构成一个三角形,以及该三角形是一般的、等腰的或等边的,并将结果打印出来。"

要求:设三角形的3条边分别为A、B、C,并且

(1) 列出等价类表,格式如下:

输入条件 有效等价类 无效等价类
(注意:将等价类编号) (注意:将等价类编号)

(2) 设计测试用例,格式如下:

  用例n:输入【A,B,C】覆盖等价类……(列出等价类序号),输出结果为……。

答:设三角形的3条边分别为A,B,C。如果它们能够构成三角形的3条边,必须满足:

A>0,B>0,C>0,且A+B>C,B+C>A,A+C>B。

如果是等腰的,还要判断A=B,或B=C,或A=C。

如果是等边的,则需判断是否A=B,且B=C,且A=C。

输入条件 有效等价类 无效等价类
是否三角形的三条边 (A>0),     (1) (A≤0),      (7)
(B>0),     (2) (B≤0),      (8)
(C>0),     (3) (C≤0),      (9)
(A+B>C),   (4) (A+B≤C),   (10)
(B+C>A),   (5) (B+C≤A),   (11)
(A+C>B),   (6) (A+C≤B),    (12)
是否等腰三角形 (A=B),     (13) (A≠B)and(B≠C)and(C≠A)     (16)
(B=C),     (14)
(C=A),     (15)
是否等边三角形 (A=B)and(B=C)and(C=A) (A≠B),     (18)
            (17) (B≠C),     (19)
(C≠A),      (20)
举例
序号 【A,B,C】 覆盖等价类 输出
1 【3,4,5】 (1),(2),(3),(4),(5),(6) 一般三角形
2 【0,1,2】 -7 不能构成三角形
3 【1,0,2】 -8
4 【1,2,0】 -9
5 【1,2,3】 -10
6 【1,3,2】 -11
7 【3,1,2】 -12
8 【3,3,4】 (1),(2),(3),(4),(5),(6),(13) 等腰三角形
9 【3,4,4】 (1),(2),(3),(4),(5),(6),(14)
10 【3,4,3】 (1),(2),(3),(4),(5),(6),(15)
11 【3,4,5】 (1),(2),(3),(4),(5),(6),(16) 非等腰三角形
12 【3,3,3】 (1),(2),(3),(4),(5),(6),(17) 是等边三角形
13 【3,4,4】 (1),(2),(3),(4),(5),(6),(14),(18) 非等边三角形
14 【3,4,3】 (1),(2),(3),(4),(5),(6),(15),(19)
15 【3,3,4】 (1),(2),(3),(4),(5),(6),(13),(20)