测试用例方法----等价类划分法(黑盒)
等价类划分法
1、概述: 输入具有代表性的数据子集
2、原理:把所有可能的输入数据,即程序的输入域划分为若干个不相干的子集,称为等价类;所有子集的并集则构成整个输入域;每一个子集中选取少量具有代表性的数据作为测试用例。
3、分类:有效等价类(满足需求、合理的)、无效等价类(不满足需求、不合理的)
4、等价类划分原则
(1)在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类。
例如:输入值为学生成绩,范围是0~100,则学生成绩的等价类划分为:
有效等价类有一个,0《成绩《 100;无效等价类有两个,分别是成绩<0 和 成绩 >100
(2)输入条件规定了输入值的集合或者规定了“必须如何”条件的情况下,可确立一个有效等价类和无效等价类。
(3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
(4)在规定了输入数据的一组值(假定n个),并且程序对每一个输入值分别处理的情况下,可确立n个有效等价类和1个无效等价类。
例如:输入条件说明学生的学位可为学士、硕士、博士三种。
答:分别取学士、硕士、博士这三个值作为三个有效等价类,另外,把三种学位之外的任何学位作为无效等价类。
(5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则),和若干个无效等价类(从不同角度违反规则)
例如:输入条件说明每个学生可选修1-3门课程。
答:划分一个有效等价类,选修1-3门课程;划分两个无效等价类,分别是未选修课程或者选修课程超过3门。
若某个输入条件说明了一个必须成立的情况,则可划分一个有效等价类和一个无效等价类。
(6)在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步划分更小的等价类。
5、等价类划分法设计测试用例的步骤
(1)分析并确定等价类。
(2)建立等价类表,列出所有划分出的等价类。
| 输出条件 | 有效等价类 | 无效等价类 |
| ,,, | ,,, | ,,, |
| ,,, | ,,, | ,,, |
| 输入条件 | 有效等价类 | 无效等价类 |
| ,,, | ,,, | ,,, |
| ,,, | ,,, | ,,, |
(3)根据列出的等价类表,按照以下三个步骤设计测试用例。
第一:为每一个等价类规定一个唯一的编号。
第二:设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步骤,直到所有的有效等价类都被覆盖为止。
第三:设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步骤,直到所有的无效等价类都被覆盖为止。
注意:等价类关注要点(7点)
| 1 | 长度 |
| 2 | 类型 |
| 3 | 字母 |
| 4 | 汉字 |
| 5 | 特殊字符 |
| 6 | 空 |
| 7 | 空格 |
6、例子1:计算两个1---100之间整数的和
|
输入条件 |
有效等价类 |
编号 |
无效等价类 |
编号 |
|
第一个数 |
1-100整数 |
1 |
小于1 |
3 |
|
大于100 |
4 |
|||
|
小数 |
5 |
|||
|
特殊字符 |
6 |
|||
|
汉字 |
7 |
|||
|
字母 |
8 |
|||
|
空 |
9 |
|||
|
第二个数 |
1-100整数 |
2 |
小于1 |
10 |
|
大于100 |
11 |
|||
|
小数 |
12 |
|||
|
特殊字符 |
13 |
|||
|
汉字 |
14 |
|||
|
字母 |
15 |
|||
|
空 |
16 |
|
测试用例编号 |
输入数据 |
预期输出 |
覆盖等价类 |
|
|
第一个数 |
第二个数 |
|||
|
1 |
2 |
3 |
5(有效) |
1、2 |
|
2 |
68 |
-5 |
无效 |
1、10 |
|
3 |
89 |
244 |
无效 |
1、11 |
|
4 |
34 |
0.1 |
无效 |
1、12 |
|
5 |
56 |
@ |
无效 |
1、13 |
|
6 |
68 |
中 |
无效 |
1、14 |
|
7 |
35 |
A |
无效 |
1、15 |
|
8 |
47 |
无效 |
1、16 |
|
|
9 |
-89 |
34 |
无效 |
2、3 |
|
10 |
3789 |
7 |
无效 |
2、4 |
|
11 |
0.678 |
88 |
无效 |
2、5 |
|
12 |
¥ |
56 |
无效 |
2、6 |
|
13 |
汉 |
56 |
无效 |
2、7 |
|
14 |
D |
45 |
无线 |
2、8 |
|
15 |
67 |
无效 |
2、9 |
|
例子2:设计一元二次方程求解程序的测试用例
【分析】第一步:确定测试策略。在本例中,对被测程序的功能有明确的要求,即:
(1)判断是否组成一元二次方程;
(2)求解两个相等实根;
(3)求解两个不相等实根;
(4)求解虚根;
因此可首先用黑盒法设计测试用例,然后用白盒法验证其完整性,必要时再进行补充。
第二步:根据本例的实际情况,首先可用等价分类法划分输入的等价类,然后用错误推测法作补充。
|
输入条件 |
有效等价类 |
编号 |
无效等价类 |
编号 |
|
a |
a!=0 &&整数 |
1 |
a=0- |
4 |
|
小数 |
5 |
|||
|
非数字 |
6 |
|||
|
b |
整数 |
2 |
小数 |
7 |
|
非数字 |
8 |
|||
|
c |
整数 |
3 |
小数 |
9 |
|
非数字 |
10 |
第三步:用白盒法验证第二步产生的测试用例的充分性,看是否满足对被测程序图的完全覆盖。
|
测试用例 编号 |
输入数据 |
预期输出 |
覆盖等价类 |
||
|
a |
b |
c |
|||
|
1 |
2 |
4 |
2 |
-1 |
1、2、3 |
|
2 |
1 |
1 |
1 |
虚根 |
1、2、3 |
|
3 |
1 |
6 |
5 |
-5,1 |
1、2、3 |
|
4 |
0 |
4 |
3 |
不存在 |
4 |
|
5 |
4.2 |
4 |
9 |
不存在 |
5 |
|
6 |
$ |
5 |
8 |
不存在 |
6 |
|
7 |
6 |
5.2 |
7 |
不存在 |
7 |
|
8 |
1 |
# |
3 |
不存在 |
8 |
|
9 |
3 |
5 |
1.5 |
不存在 |
9 |
|
10 |
2 |
4 |
! |
不存在 |
10 |
例如3:某城市电话号码组成规则的需求规格说明书;
某城市电话号码由三部分组成,分别是:
地区码—— 空白或三位数字;
前 缀—— 非‘0’或‘1’开头的三位数字;
后 缀—— 4位数字。
假定被测程序能接受一切符合上述规定的电话号码, 拒绝所有不符合规定的电话号码
|
输入条件 |
有效等价类 |
编号 |
无效等价类 |
编号 |
|
|
地区码 |
空白 |
1 |
有非数字字符 |
5 |
|
|
少于3位数字 |
6 |
||||
|
3位数字 |
2 |
||||
|
多于3位数字 |
7 |
||||
|
前缀 |
200~999 |
3 |
有非数字字符 |
8 |
|
|
起始位为’0’ |
9 |
||||
|
起始位为’1’ |
10 |
||||
|
少于3位数字 |
11 |
||||
|
多于3位数字 |
12 |
||||
|
后缀 |
4位数字 |
4 |
有非数字字符 |
13 |
|
|
少于4位数字 |
14 |
||||
|
多于4位数字 |
15 |
|
测试用例 编号 |
输入数据 |
预期输出 |
覆盖等价类 |
||
|
地区码 |
前缀 |
后缀 |
|||
|
1 |
空白 |
223 |
4567 |
接受(有效) |
1, 3, 4 |
|
2 |
123 |
805 |
9876 |
接受(有效) |
2, 3, 4 |
|
3 |
20# |
223 |
4567 |
拒绝(无效) |
5 |
|
4 |
33 |
234 |
5678 |
拒绝(无效) |
6 |
|
5 |
1234 |
234 |
4567 |
拒绝(无效) |
7 |
|
6 |
123 |
2*3 |
1234 |
拒绝(无效) |
8 |
|
7 |
123 |
013 |
1234 |
拒绝(无效) |
9 |
|
8 |
123 |
123 |
1234 |
拒绝(无效) |
10 |
|
9 |
123 |
23 |
1234 |
拒绝(无效) |
11 |
|
10 |
123 |
2345 |
1234 |
拒绝(无效) |
12 |
|
11 |
123 |
234 |
1*34 |
拒绝(无效) |
13 |
|
12 |
123 |
234 |
34 |
拒绝(无效) |
14 |
| 13 | 123 | 234 | 2354 | 拒绝(无效) | 15 |
例4、QQ 账号:6-10自然数
|
输入条件 |
有效等价类 |
编号 |
无效等价类 |
编号 |
|
账号 |
长度在6—10位之间 |
1 |
长度小于6 |
5 |
|
类型是0---9自然数 |
2 |
长度大于10 |
6 |
|
|
首位空格 |
3 |
负数 |
7 |
|
|
末尾位空格 |
4 |
小数 |
8 |
|
|
英文字母 |
9 |
|||
|
字符 |
10 |
|||
|
中文 |
11 |
|||
|
空 |
12 |
|||
|
中间空格 |
13 |
|
测试用例编号 |
输入数据 |
预期输出 |
覆盖等价类 |
|
1 |
1234567 |
正确 |
1、2 |
|
2 |
123 |
提示有误 |
5 |
|
3 |
12345678910 |
提示有误 |
6 |
|
4 |
2345-1355 |
提示有误 |
1、7 |
|
5 |
35674.456 |
提示有误 |
1、8 |
|
6 |
123456a |
提示有误 |
1、9 |
|
7 |
123456% |
提示有误 |
1、10 |
|
8 |
123456好 |
提示有误 |
1、11 |
|
9 |
1234567 首位空格 |
正确 |
1、3 |
|
10 |
1234567 末尾位空格 |
正确 |
1、4 |
|
11 |
1234 567 中间空格 |
提示有误 |
1、13 |
|
12 |
为空 |
提示有误 |
12 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)