测试用例设计——等价划分法

等价类即将所有有可能的输入数据(程序的输入域)划分为若干个子集,这些子集具有完备性、无冗余的特点。然后从每一个子集里,选取少数具有代表性的数据作为测试用例值。

在设计测试用例的时候,我们要考虑有效等价类、无效等价类两类。因为软件不仅要能接受正确的数据,还要能够接受住错误数据的考验,这样才能保证软件的可靠性。有效等价类是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合,它能检验程序是否可以实现规格说明中所规定的功能需求。无效等价类是指对程序的规格说明是不合理的或无意义的输入数据所构成的集合,它能检验程序在不符合规则的数据输入下,是否会有异常;无效等价类至少应有一个,也可能有多个,视具体情况而定。

分类:

等价划分法也可以分为四类:弱一般等价类测试、强一般等价类测试、弱健壮等价类测试、强健壮等价类测试。其中,“弱”指的是基于单缺陷假设(具体可见博客),也就是说在测试用例中,每条用例最多只能有一个变量取非正常值;而“强”则是基于多缺陷假设,所以测试用例中可以有一个、两个或多个变量取非正常值。而“一般”则是指不考虑无效等价类,“健壮”则是指要考虑无效等价类。详细可见博客。

几个原则:

(1)1+2原则:若规定了输入数据的取值范围,可定义一个有效等价类、两个无效等价类

例如,规定输入数据的范围是0-100,则可定义有效等价类:,定义无效等价类和。

(2)1+1原则:若规定了输入数据必须是某个指定集合或者规定了输入数据必须如何的情况下,可以定义一个有效等价类、一个无效等价类

例如,规定输入数据的必须是整数,则可以定义有效等价类:x是整数,定义无效等价类x是非整数。

(3)1+0原则:若输入数据为一个布尔量,则可以定义一个有效等价类

例如,填写信息时“姓名”一栏为必填项,则可以定义有效等价类是填写。

注:此种类型因为输入数据只有true、false两种类型,所以在实际测试的时候,建议两种都测试。若是基于操作系统的输入型布尔变量,则要遵循1+1原则。

(4)N+1原则:若规定了输入数据是指定的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确定N个有效等价类和一个无效等价类

例如,规定输入数据是1,2,3,则可将1,2,3三个数据作为有效等价类,其他数据均为无效等价类。

(5)1+N原则:若规定了输入数据必须遵循某规则,则可以确定一个有效等价类、N个无效等价类(从不同的角度违反规则)

例如,规定输入数据是非0的正整数,则定义有效等价类是非0的正整数,无效等价类:0、负数、字符串、小数等等。

(6)其它原则:在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类

例如,输入数据为日期型时,可以根据年份、月份、日结合现实情况进行一个更小的划分。

注:

1) 等价类测试比较适用于输入数据以离散值区间和集合定义的函数

2)当输入变量之间存在依赖关系,等价类测试会产生很多“错误”用例

在实际应用中,我们常常是等价边界值一直使用,即在划分好等价类之后,从每个等价类中取代表性数据再加上边界值设计测试用例。等价边界适用于对值的验证的场景,比如输入/输出界面,容量/体积限制。 其中,边界值分析法不是从一个等价类中任选一例子作代表,而是选一个或几个例子,使得该等价类的边界值情况成为测试的主要目标。同时,边界值分析不仅注意输入条件,它还根据输出的情况(即按输出等价类)设计测试用例。

经验分享 程序员 微信小程序 职场和发展