等价分类法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。测试时把有效类与无效类相互组合,得到测试结果。
例题如下:
中国大陆地区的电话号码由“区号”和“电话号码”两部分组成,其编排规则为:
- 区号:以0开头的三位或者四位数字(严格说来,“0”并非区号的一部分,而是国内长途电话接入码字冠,“0”以后才是区号);
- 电话号码:以非0、非1开头的七位或者八位数字(此处不考虑110、95588等特殊号码)。
假设待测程序运行时会接收用户输入的电话号码并对其进行格式验证——凡符合上述规则的号码则接受、否则拒绝,请基于等价分类法设计针对上述功能的测试用例。
分析:
由条件可知,输入的手机号无非是区号和电话号码组成,而通常11位电话号码可以算作限制条件或者检查手机号格式的条件,手机号位数不对时,显示号码拒绝。
因此可以将电话号划分的等价类有:0开头的三位数字(有效区号)、0开头的四位数字(有效区号)、非0、非1开头的七位数字(有效号码)、非0、非1开头的八位数字(有效号码),所有的0开头的三位数字不可能都是有效区号,肯定有不是区号的三位数字,同样地,有效号码也是如此,非0开头的数字一定不是区号。
无效等价类有0开头的三位数字或四位数字(无效区号)、非0开头的三位或四位数字、0、1开头的七位数字(无效号码)、非0开头的三位或四位数字、0、1开头的七位数字(无效号码)。
将这些有效等价类和无效等价类相互组合,并对此做出预期结果,手机号码拒绝或者接收,接收代表手机号码格式正确,拒绝代表格式错误。
由以上做出下面的两个表格。第二个表格的覆盖等价类表示出现第一个表格中等价类的编号。
表1
输入条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
区号 | 0开头的三位数字有效区号 | 1 | 0开头的三位数字或四位数字,无效区号 | 5 |
0开头的四位数字有效区号 | 2 | 非0开头的三位或四位数字 | 6 | |
电话号码 | 非0、非1开头的七位数字,有效号码 | 3 | 0、1开头的七位数字,无效号码 | 7 |
非0、非1开头的八位数字,有效号码 | 4 | 0、1开头的八位数字,无效号码 | 8 | |
电话号位数 | 11位 | 9 | 非11位 | 10 |
表2
测试用例编号 | 输入数据 | 预期输出 | 覆盖等价类 | |
第一个数 | 第二个数 | |||
1 | 021 | 26556447 | 接收 | 1,4,9 |
2 | 021 | 01111111 | 拒绝 | 1,8,9 |
3 | 0431 | 3340556 | 接收 | 2,3,9 |
4 | 0431 | 1111111 | 拒绝 | 2,7,9 |
5 | 011 | 26556447 | 拒绝 | 5,4,9 |
6 | 0222 | 3340556 | 拒绝 | 5,3,9 |
7 | 111 | 26556447 | 拒绝 | 6,4,9 |
8 | 1111 | 3340556 | 拒绝 | 6,3,9 |
9 | 0431 | 26556447 | 拒绝 | 2,4,10 |
10 | 1111 | 26556447 | 拒绝 | 6,4,10 |