1.等价类设计方法
等价类划分思想所有可能输入的数据(无效数据和有效数据)合理地划分成若干个等价类,在每个等价类中选取少量的数据来代替这一类其他数据的测试。
等价类划分的基础是:①在需求规格说明的基础上划分等价类,不需要考虑内部结构
②将所有可能的输入划分为若干互不相交的子集,所有等价类的并集是整个输入域
③每个等价类中的各个输入数据对于揭示程序错误都是等价的,如果用等价类中的一个数据进行测试不能发现错误,那么用该等价类的其他数据也不能发现错误
2.等价类划分的规则
①按输入区间划分
例如,学生成绩范围是0≤成绩≤100,其等价类划分如图
②按数值集合划分
如果规格说明规定了一个输入值集合,则可以确定一个有效等价类和一个无效等价类。
③按离散数值划分
如果规格说明规定了一组值,假定有n个,则可以确定n个有效等价类和一个无效等价类
④按限制条件或规则划分
如果确定“必须如何”的规则或限制条件,则可以一个有效等价类和若干个无效等价类。如邮政编码必须6位组成,那么可以确定一个有效等价类以及含有字母、特殊字符、空格等情况的多个无效等价类
⑤按布尔量取值划分
如果规定了输入一个是布尔量,则可以确定一个有效等价类和一个无效等价类
⑥细分等价类
已划分的等价类中各个元素在程序中的吃力方式不同时,需要对该等价类进一步划分为更小的等价类小的等价类
3.实例(三角形问题)
三条边A,B,C需满足
①A>0,B>0,C>0
②A+B>C,A+C>B,B+C>A
③如果是等腰三角形,需要判断A=B,或B=C,或A=C
④如果是等边三角形,需要判断A=B,且B=C,且A=C
等价类表
输入条件 | 有效等价类 | 无效等价类 |
是否为一般三角形 |
A>0 (1) B>0 (2) C>0 (3) A+B>C (4) B+C>A (5) A+C>B (6) |
A≤0 (7) B≤0 (8) C≤0 (9) A+B≤C (10) B+C≤A (11) A+C≤B) (12) |
是否为等腰三角形 |
A=B (13) B=C (14) A=C (15) |
A≠B,且B≠C,且A≠C(16) |
是否为等边三角形 | A=B且B=C且A=C (17) |
A≠B (18) B≠C (19) A≠C (20) |
测试用例
用例编号 | A,B,C | 覆盖等价类编号 | 输出 |
1 | 4,5,8 | 1~6 | 一般三角形 |
2 | 6,6,8 | 1~6,13 | 等腰三角形 |
3 | 7,5,5 | 1~6,14 | |
4 | 5,6,5 | 1~6,15 | |
5 | 6,6,6 | 1~6,17 | 等边三角形 |
6 | 0,4,5 | 7 | 非三角形 |
7 | 5,-3,7 | 8 | |
8 | 3,4,0 | 9 | |
9 | 3,5,8 | 10 | |
10 | 8,3,4 | 11 | |
11 | 5,9,4 | 12 | |
12 | 6,7,8 | 1~6,16 | 非等腰三角形 |
13 | 5,6,6 | 1~6,18 | 等腰三角形 |
14 | 5,6,5 | 1~6,19 | |
15 | 6,6,7 | 1~6,20 |
3.等价类划分优缺点:优点是用相对少的测试用例就能够进行比较完整的输入数据覆盖,解决了不能穷举测试的问题。缺点是需要花费很多时间去定义规格说明中一般不会给出的无效测试用例预期输出。另外,等价类划分方法缺乏对特殊测试用例的考虑,并且经常需要深入的系统知识才能划分合适的等价类。