黑盒测试之等价划分
黑盒测试之等价划分
黑盒测试的目标是找出程序不符合规格说明书的地方
等价划分方法的形成
我们知道:第一对程序的穷举输入测试是无法实现的,这是现实,第二一个好的测试用例应该是具有相当高的可能发现某个错误来,这是对一个测试用例设计提出的基本要求。那么,从所有的可能输入中定义一个有效的子集就是必需的,这要求:
第一,严格控制测试用例的增加,减少为达到“合理测试”的既定目标而必须设计的其他测试用例的数量。这要求每个测试用例都必须体现尽可能多的不同的输入情况。
第二,它覆盖了大部分其他可能的测试用例。它会告诉我们,用或不用这个特定的输入集合,哪些错误会被发现,哪些会被遗漏。
于是基于以上两种思想形成了称为等价划分的黑盒测试方法。
用等价划分方法设计测试用例
第一步:确定等价类
用一个表格来管理,如下
外部条件 | 有效等价类 | 无效等价类 |
---|---|---|
摘自于规格说明书 | 代表对程序的有效输入 | 不正确的输入(任何可能的输入条件) |
一些帮助确定等价类的指导原则:
- 输入条件规定了一个取值范围,那么就需要确定一个有效等价类,2个无效等价类。
- 输入条件规定了取值个数,那么就需要确定一个有效等价类,2个无效等价类。
- 输入条件规定了一个输入值的集合,而且有理由认为程序会对每个值进行不同处理,那么就需要为每个输入值确定一个有效等价类和一个无效等价类。
- 输入条件规定了“必须是”的情况,那么就需要确定一个有效等价类和一个无效等价类。
第二步:生成测试用例
- 编号:要求为每个等价类设置一个不同的编号。
- 编写测试用例以至于所有的有效等价类都被覆盖,要求新增测试用例时尽可能多的覆盖那些还没有被覆盖的有效等价类。
- 编写测试用例以至于所有的无效等价类都被覆盖,要求新增的测试用例覆盖一个且仅一个还没有被覆盖的无效等价类。
一个范例
程序规格说明:输入三个整数作为三边的边长构成三角形。当此三角形为一般三角形、等腰三角形、等边三角形时,分别做计算。
下面我们用等价类划分方法为该程序进行测试用例设计。
第一步:确定等价类
把等价类用一个表格管理起来如下:
输入条件 | 有效等价类 | 无效等价类 |
---|---|---|
输入值的集合 | 整数 | 一边为非整数;两边为非整数 |
输入值的个数 | 3个数 | 给出一个边;给出两个边;给超过3个边 |
输入值的范围 | 正数 | 一边<=0;两边<=0;三边<=0 |
一般三角形 | 任意两边之和大于第三边 | 任意两边之和小于第三边;任意两边之和等于第三边 |
等腰三角形 | 有两边相等 | |
等边三角形 | 三边相等 |
第二步:生成测试用例
- 编号,如下(设a、b、c为三角形的三边)
有效等价类 | 编号 |
---|---|
整数 | 1 |
3个数 | 2 |
正数 | 3 |
一般三角形,a+b>c | 4 |
一般三角形,a+c>b | 5 |
一般三角形,b+c>a | 6 |
等腰三角形,a=b | 7 |
等腰三角形,a=c | 8 |
等腰三角形,b=c | 9 |
等边三角形,a=b=c | 10 |
无效等价类 | 编号 |
---|---|
一边为非整数:a非整数 | 11 |
一边为非整数:b非整数 | 12 |
一边为非整数:c非整数 | 13 |
两边为非整数:ab非整数 | 14 |
两边为非整数:ac非整数 | 15 |
两边为非整数:bc非整数 | 16 |
三边为非整数:abc非整数 | 17 |
给出一个边:只有a | 18 |
给出一个边:只有b | 19 |
给出一个边:只有c | 20 |
给出两个边:只有ab | 21 |
给出两个边:只有ac | 22 |
给出两个边:只有bc | 23 |
给超过三个边 | 24 |
一边<=0:a<=0 | 25 |
一边<=0:b<=0 | 26 |
一边<=0:c<=0 | 27 |
两边<=0:a/b<=0 | 28 |
两边<=0:b/c<=0 | 29 |
两边<=0:a/c<=0 | 30 |
三边<=0:a/b/c<=0 | 31 |
任意两边之和小于第三边:a+b<c | 32 |
任意两边之和小于第三边:a+c<b | 33 |
任意两边之和小于第三边:b+c<a | 34 |
任意两边之和等于第三边:a+b=c | 35 |
任意两边之和等于第三边:a+c=b | 36 |
任意两边之和等于第三边:b+c=a | 37 |
- 新增测试用例覆盖有效等价类
测试用例 | 覆盖的有效等价类编号 |
---|---|
a=3,b=4,c=5 | 1,2,3,4,5,6 |
a=3,b=3,c=1 | 7 |
a=1,b=4,c=4 | 8 |
a=5,b=1,c=5 | 9 |
a=5,b=5,c=5 | 10 |
- 新增测试用例覆盖无效等价类
测试用例 | 覆盖的无效等价类 |
---|---|
a=3.5,b=4,c=5 | 11 |
a=3,b=4.5,c=5 | 12 |
a=3,b=4,c=5.5 | 13 |
a=3.5,b=4.5,c=5 | 14 |
a=3.5,b=4,c=5.5 | 15 |
a=3,b=4.5,c=5.5 | 16 |
a=3.5,b=4.5,c=5.5 | 17 |
a=3 | 18 |
b=4 | 19 |
c=5 | 20 |
a=3,b=4 | 21 |
a=3,c=5 | 22 |
b=4,c=5 | 23 |
a=3,b=4,c=5,d=6 | 24 |
a=-3,b=4,c=5 | 25 |
a=3,b=-4,c=5 | 26 |
a=3,b=4,c=-5 | 27 |
a=-3,b=-4,c=5 | 28 |
a=-3,b=4,c=-5 | 29 |
a=3,b=-4,c=-5 | 30 |
a=-3,b=-4,c=–5 | 31 |
a=2,b=3,c=6 | 32 |
a=2,b=10,c=6 | 33 |
a=18,b=10,c=6 | 34 |
a=18,b=10,c=28 | 35 |
a=18,b=46,c=28 | 36 |
a=74,b=46,c=28 | 37 |
至此,所有的等价类都已经覆盖,测试用例设计完成!