黑盒测试用例设计方法-等价类划分法
等价类划分法:
等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,它们具有等价特性,即每一类的代表性数据在测试中的作用都等价于这一类中的其它数据。这样,对于表征该类的数据输入将能代表整个子集合的输入。因此,可以合理的假定:
测试某等价类的代表值就是等效于测试这一类的其它值。
即如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误;反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误。
等价类划分法是一种重要的、常用的黑盒测试方法,它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。
定义:
将被测程序的输入域(输入数据)划分为若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例中数据。
如何划分:
先从程序的规格说明书中找出各个输入条件,再为每个输入条件划分两个或多个等价类,形成若干的互不相交的子集。
软件不能只接收合理有效的数据,也要具有处理异常数据的功能,这样才能确保软件具有更高的可靠性。因此,在划分等价类的过程中,不但要考虑有效等价类划分,也要考虑无效等价类划分。
所以划分等价类可分为两种情况:
(1)有效等价类
——是指对软件规格说明而言,是有意义的、合理的输入数据所组成的集合。利用有效等价类,能够检验程序是否实现了规格说明中预先规定的功能和性能。
(2)无效等价类
——是指对软件规格说明而言,是无意义的、不合理的输入数据所构成的集合。利用无效等价类,可以鉴别程序异常处理的情况,检查被测对象的功能和性能的实现是否有不符合规格说明要求的地方。
划分依据:
(1)按照区间划分
在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类。
例1:在程序的规格说明书中,对输入条件有这么一句话:“程序输入条件为大于10小于100的实数x”
则有效等价类为10<x<100,两个无效等价类为x≤10和x≥100。
例2:规格说明书要求:学生允许选修5到8门功课,
则可得到一个有效等价类为:选课5到8门,两个无效等价类为:选课不足5门和选课超过8门。
**(2)按照数值划分 **
在规定了一组输入数据(假设包括n个输入值),并且程序要对每一个输入值分别进行处理的情况下,可确定n个有效等价类(每个值确定一个有效等价类)和一个无效等价类(所有不允许的输入值的集合)。
例:程序输入x取值于一个固定的枚举类型{1,3,7,15},且程序中对这4个数值分别进行了处理,则
有效等价类为x=1、x=3、 x=7、x=15,
无效等价类为x≠1,3,7,15的值的集合。
(3)按照数值集合划分
在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类(该集合有效值之外)。
例1:程序输入条件为取值为奇数的整数x,则有效等价类为x的值为奇数的整数,无效等价类为x的值不为奇数的整数。
例2:某软件设计标识符,要求“标识符应以字母开头”,则“以字母开头”者作为一个有效等价类,“以非字母开头”者作为一个无效等价类。
**(4)按照限制条件或规则划分 **
在规定了输入数据必须遵守的规则或限制条件的情况下,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
例:程序输入条件为以字符‘a’开头、长度为8的字符串,并且字符串不包含‘a’-‘z’之外的其它字符,则有效等价类为满足了上述所有条件的字符串,无效等价类为不以‘a’开头的字符串、长度不为8的字符串和包含了‘a’-‘z’之外其它字符的字符串。
(5)细分等价类
在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表。
等价类划分法设计测试用例:
在确立了等价类之后,建立等价类表,列出所有划分出的等价类,如表3-1所示
在设计测试用例时,应同时考虑有效等价类和无效等价类测试用例的设计。
根据已列出的等价类表可确定测试用例,具体过程如下:
(1)首先为等价类表中的每一个等价类分别规定一个唯一的编号。
(2)设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。
(3)设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。
等价类测试分类:
(1)基于覆盖程度:
弱组合形式:测试用例仅需满足对等价类的完全覆盖
强组合形式:测试用例不仅满足对等价类的完全覆盖,而且应覆盖所有的等价类组合
(2)基于检测无效等价类:
一般等价类测试:只考虑有效等价类 (测试用例使用每个等价类中的一个值。)
健壮等价类测试:考虑有效、无效等价类 (对有效输入,测试用例从每个有效等价类中取一个值;对无效输入,一个测试用例有一个无效值,其他值均取有效值。)
健壮等价类测试存在两个问题:
需要花费精力定义无效测试用例的期望输出、对强类型的语言没有必要考虑无效的输入
基于以上分类组合:
1、弱一般等价类测试
2、强一般等价类测试
3、弱健壮等价类测试
4、强健壮等价类测试
假设,F实现为一个程序,且输入变量x1和x2的边界以及边界内的区间:
a ≤ x1 ≤ d,区间为[a,b),[b,c),[c,d]
e ≤ x2 ≤ g,区间为[e,f),[f,g]
弱一般等价类测试:
强一般等价类测试:
弱健壮等价类测试:
强健壮等价类测试:
案例:
1)城市电话号码由三部分组成。它们的名称和内容分别是:
地区码:空白或三位数字;
前 缀:首位非‘0’或‘1’的三位数字;
后 缀:4位数字。
假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。根据该程序的规格说明,作等价类的划分,并设计测试方案。
2)某保险公司的人寿保险的保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由投保人的年龄、性别、婚姻状况和抚养人数来决定,具体规则如下:
请使用等价类划分法列出输入域等价类表,并设计相应的测试用例。
3)在三角形问题中,输入的数值必须满足3个条件:整数、3个数的取值在1—100之间。