黑盒测试之等价类测试
等价类概念
1.划分指互不相交的一组子集,这些子集的并集是整个集合。
2.等价类
等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭示程序中的错误都是等效的。
翻译一下:比如三角形案例,我们不区分范围内的边界值、正常值,我们认为这些值都是正常值,既然都是正常值,只取一个就好了,这一个点代表了整个集合,我们就认为这个点是个等价类。
测试意义
完备性、无冗余性
等价类划分方法
使用等价类划分方法设计测试用例:
•划分等价类(列出等价类表)
•选取测试用例
有效等价类与无效等价类
有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。
无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。
弱等价类与强等价类测试
弱等价类测试:
把每个等价类都覆盖一遍,尽量多的覆盖有效等价类覆盖每一个无效等价类
弱一般等价类测试
通过使用一个测试用例中的每个等价类(区间)的一个变量实现。
弱健壮等价类测试
在弱一般的基础上添加无效点。
容错性测试通常构造一些不合理的输入来引诱软件出错,例如:
(1)输入错误的数据类型
(2)输入定义域之外的数值
强等价类测试:
笛卡尔积配对
强一般等价类测试
强一般等价类测试基于多缺陷假设,因此需要等价类笛卡尔积的每个元素对应的测试用例。
疑问:测试原则不应该支持单缺陷假设原则吗?
强健壮等价类测试
“强”:是因为有多缺陷假设
“健壮”:是因为考虑了无效值
划分等价类的规则
(1)如果输入条件规定了取值范围,可定义一个有效等价类和两个无效等价类。
例: 输入值是学生成绩,范围是0~100
则定义两个无效等价类 成绩<0 成绩>100 和一分有效等价类 0<=成绩<=100
(2)如果输入条件代表集合的某个元素,则可定义一个有效等价类和一个无效等价类。
如:某程序涉及到标识符,其输入条件规定标识符应以字母开头,则以字母开头者作为有效等价类,以非字母开头为无效等价类。
(3)如果输入条件是一个布尔量,则可以确立一个有效等价类和一个无效等价类。
(4)如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类(所有不允许的输入值的集合)。
例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。
(5)如果规定了输入数据必须遵循的规则,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
(6)如已划分的等价类各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类。
NextData测试用例说明
使用等价类划分法为NextDate函数列出输入域等价类表,并设计相应的测试用例。(说明:这里假定NextDate函数中年份year的取值范围为1912年到2050年之间)
既然是用等价类去设计测试用例,我们首先就需要去设计等价类:
在日期范围栏中的有效等价类,无效等价类,也就是第3条和第8条为什么一样呢?也许看完第四条测试用例你就会明白。
输入等价类的设计是从两个方面给出的,一个是输入数据的类型和长度,另一个是输入数据的定义域。并且对应地给出了无效等价类,在等价类的旁边用括号进行标注,方便设计测试用例的时候简洁、方便。
以下为测试用例
ID | 年 | 月 | 日 | 预期输出 | 备注 | 解释 |
---|---|---|---|---|---|---|
1 | 1912 | 12 | 31 | 1913.1.1 | 17,14,5 | 年是边界值且为闰年 覆盖等价类的测试用例 |
2 | 1912 | 2 | 29 | 1912.3.1 | 17,13,3 | 覆盖等价类的测试用例 |
3 | 1912 | 2 | 28 | 1912.2.29 | 17,13,2 | 覆盖等价类的测试用例 |
4 | 1912 | 2 | 30 | 闰年2月错误 | 17,13,9 | 注意这条语句 |
5 | 1913 | 4 | 30 | 1913.5.1 | 18,11,4 | 非闰年 覆盖等价类的测试用例 |
6 | 1913 | 10 | 0 | 日期出错 | 18,12,6 | 开始测试无效等价类 年月一定要满足有效等价类 因为只测试6 |
7 | 1913 | 7 | 32 | 日期出错 | 18,12,7 | |
8 | 1913 | 2 | 29 | 日期出错 | 18,13,8 | |
9 | 1913 | 11 | 31 | 日期出错 | 18,11,10 | |
10 | 1912 | 0 | 15 | 月份出错 | 17,15,1 | |
11 | 1913 | 13 | 15 | 月份出错 | 18,16,1 | |
12 | 1911 | 1 | 15 | 年份出错 | 19,12,1 | |
13 | 2051 | 1 | 15 | 年份出错 | 20,12,1 |
前三条语句覆盖了有效等价类。
第四条语句:9是一条闰年2月这个条件下的无效等价类,因此是9而非4.
练习2:电话号码问题
某城市电话号码由三部分组成。
它们的名称和内容分别是:
(1)地区码:空白或三位数字;
(2)前 缀:非(‘0’或‘1’)的三位数字;
(3)后 缀:4位数字。
假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。根据该程序的规格说明,作等价类的划分,并设计测试方案。
设计测试用例
用例编号 | 地区码 | 前缀 | 后缀 | 预计输出 | 备注 |
---|---|---|---|---|---|
1 | 空白 | 111 | 1111 | 满足条件 | 1,3,5 |
2 | 111 | 234 | 1111 | 满足条件 | 2,4,5 |
3 | he | 111 | 1111 | 地区码错误 | 6,3,5 |
4 | 11 | 0 | 1111 | 地区码错误 | 7,4,5 |
5 | 1111 | 111 | 1111 | 地区码错误 | 8,3,5 |
6 | 空白 | he | 1111 | 前缀错误 | 1,9,5 |
7 | 空白 | 022 | 1111 | 前缀错误 | 1,10,6 |
8 | 空白 | 122 | 1111 | 前缀错误 | 1,11,7 |
9 | 空白 | 22 | 1111 | 前缀错误 | 1,12,8 |
10 | 空白 | 2222 | 1111 | 前缀错误 | 1,13,9 |
11 | 空白 | 111 | hell | 后缀错误 | 1,3,14 |
12 | 空白 | 111 | 111 | 后缀错误 | 1,3,15 |
13 | 空白 | 111 | 11111 | 后缀错误 | 1,3,16 |