一、等价类测试设计的思想
从输入的角度出发,把输入条件划分成不同类的集合,在每个类的集合中任选1组测试数据进行测试。
二、等价类的测试步骤
1、根据需求明确输入和输入条件
2、根据输入条件划分有效等价类和无效等价类--表格
3、对所有的有效等价类和无效等价类进行编号
4、设计测试用例优先覆盖尽可能多的有效等价类
5、每个无效等价类单独设计一条用例
三、等价类的划分原则
1、输入的条件是取值范围或者明确了是几个的时候,可以划分1个有效等价类,2个无效等价类
举例:输入的值范围是[15,30]
输入 | 输入条件 | 编号 | 有效等价类 | 编号 | 无效等价类 |
取值范围 | [15,30] | 1 | [15,30] | 1 | <15 |
2 | >30 |
举例:必须输入3个数
输入 | 输入条件 | 编号 | 有效等价类 | 编号 | 无效等价类 |
输入个数 | 3个 | 1 | 3个 | 1 | >3个 |
2 | <3个 |
2、输入的条件是一个集合,或者规定必须如何时,可以划分1个有效等价类和1个无效等价类
举例:输入的地区必须是直辖市
输入 | 输入条件 | 编号 | 有效等价类 | 编号 | 无效等价类 |
城市 | 直辖市 | 1 | (北京,上海,天津,重庆)任意一个 | 1 | 不是直辖市的城市 |
举例:必填项
输入 | 输入条件 | 编号 | 有效等价类 | 编号 | 无效等价类 |
身份证号 | 必填项 | 1 | 必填 | 1 | 不填 |
3、输入条件有n个值,每个值都都可以获得不同的结果。可以划分n个有效等价类和1个无效等价类。
举例:输入不同学历(大专,本科,硕士,博士)查询不同学历的基本工资
输入 | 输入条件 | 编号 | 有效等价类 | 编号 | 无效等价类 |
学历 | 大专,本科,硕士,博士 查询不同学历的基本工资 | 1 | 大专 | 1 | 不是这些学历的其他选项 |
2 | 本科 | ||||
3 | 硕士 | ||||
4 | 博士 |
4、如果输入要求必须满足一定的规则时,可以划分成1个有效等价类和n个无效等价类
举例:输入必须是字母数字和下划线的组合
输入 | 输入条件 | 编号 | 有效等价类 | 编号 | 无效等价类 |
内容 | 字母数字下划线 | 1 | 字母数字下划线 | 1 | 纯字母 |
大专 | 2 | 纯数字 | |||
本科 | 3 | 纯特殊字符 | |||
硕士 | 4 | 字母+特殊字符 | |||
博士 | 5 | 字母+下划线 | |||
6 | ...... |
5、如果输入是一个Bool值,可以划分为1个有效等价类和1个无效等价类
举例:输入的内容是男时条件为真,否则为假
输入 | 输入条件 | 编号 | 有效等价类 | 编号 | 无效等价类 |
性别 | 性别为男时条件真,否则为假 | 1 | 男 | 1 | 不为男 |
四、等价类测试设计实例
案例一:保费费率的计算问题
*备注:假如这个需求中年龄,性别、婚姻、抚养人数是必填项。假如这些条件在设计的时候都是都是通过输入来实现的。年龄其他的选项要求是最小不能小于1岁,最大不能超过99岁。
下面是按照等价类划分后提取的测试点,红色表示的是边界值
输入 | 输入条件 | 编号 | 有效等价类 | 编号 | 无效等价类 |
年龄 | [20,39] | 1 | [20,39] 20,39,30 | ||
[40,59] | 2 | [40,59] 40,59,45 | |||
其他 | 3 | [1,19] 1,19,10 | 1 | <1岁 0 | |
4 | [60,99] 60,99,79 | 2 | >99 100 | ||
2位数整数 | 5 | 2位数整数 | 3 | <2个 1 | |
4 | >2个 3 | ||||
5 | 字母 | ||||
6 | 汉字 | ||||
7 | 其他类型 | ||||
必填项 | 6 | 必填 | 8 | 不填 | |
性别 | 大写字母M或者F | 7 | M | ||
8 | F | ||||
9 | 大写字母 | 9 | 小写m | ||
10 | 小写f | ||||
11 | 其他大写字母 | ||||
12 | 其他非字母数据 | ||||
必填项 | 10 | 必填 | 13 | 不填 | |
婚姻 | 汉字已婚或未婚 | 11 | 已婚 | ||
12 | 未婚 | ||||
13 | 汉字 | 14 | 其他2个汉字 | ||
15 | 其他非汉字 | ||||
必填项 | 14 | 必填 | 16 | 不填 | |
抚养人数 | 1人口0.5点,最多扣3点,四舍五入取整 | 15 | 整数 | 17 | 汉字 |
18 | 字母 | ||||
19 | 小数 | ||||
20 | 其他非整数 | ||||
16 | 0 | ||||
17 | [1,2] 1,2 | ||||
18 | [3,4] 3,4 | ||||
19 | ≥5 | ||||
必填项 | 20 | 必填 | 21 | 不填 |
测试用例设计:从有效等价类先开始划分,尽可能多的覆盖有效等价类,最多有12条用例;无效等价类每一个单独设计一条用例,最多21条;所以如果想尽可能的保证测试的颗粒度比较细的话,这个功能最多可以设计33条测试用例。
案例二:三角形的问题
需求:随机输入三个非负正整数a,b,c,取值范围[1-99],单位是cm厘米。判断是否满足构成三角形,如果能构成三角形,则在此基础上判断构成哪种三角形(普通三角形,等腰三角形,等边三角形,直角三角形,等腰直角三角形),构成三角形的条件如下:
普通三角形:任意两边之和大于第三边
等腰三角形:任意两边之和大于第三边,任意2边相等
等边三角形:任意两边之和大于第三边,3边相等
直角三角形:任意两边之和大于第三边,任意2边的平方和等于第三边的平方和
等腰直角三角形:任意两边之和大于第三边,任意2边的平方和等于第三边的平方和,任意两边相等
如果单边或者三边构不成三角形,则需要给出提示,对不起边长必须为正整数,请重新输入。对不起,您输入的三个正整数无法构成三角形,请重新收入。
输入 | 输入条件 | 编号 | 有效等价类 | 编号 | 无效等价类 |
边长a | 必须输入 | 1 | 输入 | 1 | 不输入 |
非零 | 2 | 非零 | 2 | 零 | |
非负 | 3 | 非负 | 3 | 负整数 | |
4 | 负小数 | ||||
整数 | 4 | 整数 | 5 | 正小数 | |
6 | 字母 | ||||
7 | 汉字 | ||||
8 | 特殊字符 | ||||
取值范围[1,99] | 5 | [1,99] | 9 | <1 0 | |
10 | >99 100 | ||||
单位 | 6 | cm | 11 | m | |
边长b | 必须输入 | 7 | 输入 | 12 | 不输入 |
非零 | 8 | 非零 | 13 | 零 | |
非负 | 9 | 非负 | 14 | 负整数 | |
15 | 负小数 | ||||
整数 | 10 | 整数 | 16 | 正小数 | |
17 | 字母 | ||||
18 | 汉字 | ||||
19 | 特殊字符 | ||||
取值范围[1,99] | 11 | [1,99] | 20 | <1 0 | |
21 | >99 100 | ||||
单位 | 12 | cm | 22 | m | |
边长c | 必须输入 | 13 | 输入 | 23 | 不输入 |
非零 | 14 | 非零 | 24 | 零 | |
非负 | 15 | 非负 | 25 | 负整数 | |
26 | 负小数 | ||||
整数 | 16 | 整数 | 27 | 正小数 | |
28 | 字母 | ||||
29 | 汉字 | ||||
30 | 特殊字符 | ||||
取值范围[1,99] | 17 | [1,99] | 31 | <1 0 | |
32 | >99 100 | ||||
单位 | 18 | cm | 33 | m | |
普通三角形 | 任意两边之和大于第三边 | 19 | a+b>c | 34 | a+b<c |
35 | a+b=c | ||||
20 | a+c>b | 36 | a+c<b | ||
37 | a+c=b | ||||
21 | b+c>a | 38 | b+c<a | ||
39 | b+c=a | ||||
等腰三角形 | 任意两边之和大于第三边,且任意两边相等 | 22 | a=b | ||
23 | a=c | ||||
24 | b=a | ||||
等边三角形 | 任意两边之和大于第三边,且三边相等 | 25 | a=b=c | ||
直角三角形 | 任意两边的平方和等于第三边的平方,且任意两边之和大于第三边 | 26 | a^2+b^2=c^2 | 40 | a^2+b^2>c^2 |
41 | a^2+b^2<c^2 | ||||
27 | a^2+c^2=b^2 | 42 | a^2+c^2>b^2 | ||
43 | a^2+c^2<b^2 | ||||
28 | b^2+c^2=a^2 | 44 | b^2+c^2>a^2 | ||
45 | b^2+c^2<a^2 | ||||
等腰直角三角形 | 任意两边相等,且任意两边的平方和等于第三边,且任意两边之和大于第三边 |
如果上面的要求全部都要满足,那么最多需要53条用例