边界值分析法
1、定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法
2、分类:(1)标准边界值测试:只考虑有效数据范围内的边界值。
对于一个含有n个变量的程,保留其中一个变量,其取值为最小值(min)、略高于最小值(min+)、正常值(normal)、略低于最大值(max-)、最大值(max),让其余变量取正常值,标准边界值分析法测试程序会产生4n+1个测试用例。
(2)健壮边界值测试:会考虑有效和无效数据范围内的边界值。最关心的不是输入,而是预期的输出。其最大的价值在于观察处理异常情况,可以认为它是检测软件系统容错性的重要手段。
对于一个含有n个变量的程,保留其中一个变量,其取值为略低于最小值(min-)、最小值(min)、略高于最小值(min+)、正常值(normal)、略低于最大值(max-)、最大值(max)、略高于最大值(max+),让其余变量取正常值,标准边界值分析法测试程序会产生6n+1个测试用例。
3、使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。
4、边界值分析法设计原则
(1)如果输入条件规定了值的个数,则应选取刚达到范围边界的值,以及刚刚超越边界值作为测试输入数据。
(2)如果输入条件规定了值的个数,则用略低于最小值(min-)、最小值(min)、略高于最小值(min+)、正常值(normal)、略低于最大值(max-)、最大值(max)、略高于最大值(max+)作为测试数据。
(3)将原则(1)和(2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。
(4)如果程序的规格说明给出输入域或输出域是有序的集合(如有序表、顺序文件等),则应选取集合的第一个和最后一个元素作为测试用例。
(5)如果程序用了一个内部结构,应取这个内部数据结构的边界值作为测试用例。
(6)分析规格说明,找出其他可能的边界条件。
注:长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部(从开发角度可以发现)。因此针对各种边界情况设计测试用例,可以查出更多的错误。
例1.找零钱最佳组合:
- 假设商店商品价格[X]皆不大于100元(整数),若顾客买一件商品,付款[Y]在100元内,求找给顾客的最少货币张数?
- 货币面值:
- 50元[R50]
- 20元[R20]
- 10元[R10]
- 5元[R5]
- 2元[R2]
- 1元[R1]
1、分析输入
x>100
0<x<=100
X<=0
y>100
x<=y<=100
y<x
2、分析输出
0<=R50<=1
0<=R20<=2
0<=R10<=1
0<=R5<=1
0<=R2<=2
0<=R1<=1
3、分析边界
- 无效边界
x>100
X<=0
y>100
y<x
- 有效边界
- 设找部分钱后剩余的金额为S(初始S=Y)
S>=50,找R50
20<=S<50,找R20
10<=S<20,找R10
5<=S<9,找R5
2<=S<5,找R2
1<=S<2,找R1
4、分析后无效情形
x>100 错误
x<=0 错误
0<x<=100, y>100 错误
0<x<=100,y<x 错误
5、分析后有效情形
S=50
S=49
S=20
S=19
S=10
S=9
S=5
S=4
S=2
S=1
S=0
6、设计测试用例:
用例编号 | S | 输入 | 输出 | 备注 张数 | ||||||
商品价格X | 付款Y | 50元R50 | 20元R20 | 10元R10 | 5元R5 | 2元R2 | 1元R1 | |||
1 |
| 101 |
|
|
|
|
|
|
| 错误 |
2 |
| 0 |
|
|
|
|
|
|
| 错误 |
3 |
| 100 | 101 |
|
|
|
|
|
| 错误 |
4 |
| 100 | 99 |
|
|
|
|
|
| 错误 |
5 | 50 | 50 | 100 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
6 | 49 | 51 | 100 | 0 | 2 | 0 | 1 | 2 | 0 | 5 |
7 | 20 | 30 | 50 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
8 | 19 | 31 | 50 | 0 | 0 | 1 | 1 | 2 | 0 | 4 |
9 | 10 | 40 | 50 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
10 | 9 | 41 | 50 | 0 | 0 | 0 | 1 | 2 | 0 | 3 |
11 | 5 | 5 | 10 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
12 | 4 | 6 | 10 | 0 | 0 | 0 | 0 | 2 | 1 | 3 |
13 | 2 | 98 | 100 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
14 | 1 | 99 | 100 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
15 | 0 | 100 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |