测试用例设计——等价类划分法
一、分析问题
如果我们需要对下面的这个两位数加法器设计测试用例,在测试了1+1,1+2,(-1)+1和(-1)+2之后,是否有必要测试1+3,1+4 ,1+(-3)和1+(-4)呢?
如果不对两位数加法器程序进行穷举测试,我们能否放心的认为其他所有的参数组合都是正确的呢?
可想而知,我们不可能输入这么多的组合进行测试。那么,如果不可能输入这些组合进行测试,是否会担心会遗漏测试中会存在bug呢?
等价类是建立在这种思想之上——即我们不可能进行穷举测试,那么我们就必须对输入进行分类。我们知道程序是通过数据结构和算法来实现的,计算机按照算法来运行程序,这种运行是稳定的,不会因为我们的输入而导致计算机处理不稳定,即我们输入某种组合,即使输入成千上万次,也是得到同一结果。输入用同一数据结构表示的数据是稳定的,在某值域范围内,程序处理方法是相同的。如果输入不在同一值域,则不能称为同一类。实践证明,这种假设是成立的,所以等价类划分法也是有效的。
等价类划分法是一种最常用、也是最重要的黑盒测试方法,它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。
二、等价类划分
等价类划分是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。测试某等价类的代表值就等于对这一类其它值的测试。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据,取得较好的测试结果。
如何划分?——先从程序的规格说明书中找出各个输入条件,再为每个输入条件划分两个或多个等价类,形成若干个互不相交的子集。
三、等价类划分步骤
1、划分等价类(依据是需求)
有效数据等价类:由那些对程序的需求说明中有意义的、合理的输入数据所构成的集合
无效数据等价类:有那些不合理的或无意义的输入数据所构成的集合
2、建立等价类表
3、设计测试用例
在设计测试用例时,应同时考虑有效等价类和无效等价类测试用例的设计。
根据已列出的等价类表可确定测试用例,具体过程如下:
(1)首先为等价类表中的每一个等价类分别规定一个唯一的编号。
(2)设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。
(3)设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。
四、实例
某工厂2019年公开招工,规定报名者年龄应在16周岁至36周岁之间,出生年月规定日期由6位数字组成,前4位表示年份,后2位表示月份。出生年月不在上述范围内,将拒绝接受,并显示“年龄不合格”等出错信息。
1、根据程序要求划分等价类
出生年份:4位整数,值的有效范围是1983-2003
出生月份:2位整数,值的有效范围是1-12
2、建立等价类表
3、设计测试用例