黑盒测试技术之等价类划分法
一、 等价区间与等价测试原理
在描述等价类法之前,先来解释等价测试原理。正是基于这个原理,才有了等价类划分测试的充分性和完备性的保证。
- 等价区间和等价测试原理
假设(A, B)是命题f (x) 的一个等价区间,在(A, B) 中任意取一点xi进行测试。如果f (xi) 错误,那么f (x) 在整个(A, B) 区间都将是错误的,如果f (xi) 正确,那么f (xi) 在整个(A, B) 区间都将是正确的。
根据这个原则而设计的测试方法,称之为等价类测试。等价类划分法是把程序的输入域划分为若干部分,然后从每个部分中选取少量代表性数据当作测试用例, 而选取的每一个测试用例对于揭露程序中的缺陷或错误均为等效。简单来说就是某个等价类中的一个测试用例检测出了测试对象中的缺陷或错误,那么这一等价类中的其他测试用例也能发现同样的问题,反之亦然。
总结归纳: 等价类的假定条件是其中的每一个代表值,对于发现测试对象中的缺陷或错误是等价的,测试等类中的一个代表值等价了等价类中的其他值。应用等价类划分测试方法可大幅减少测试用例的数量,做到“事半功倍",并能满足测试的充分性,取得完备的测试结果。
二、等价类划分
- 测试的两个重要点:第一,是要具完备性;第二,是无冗余。
若在测试输入域须提供了一种形式的完备性,并且测试输入域互不相交,
则可保证形式上的测试无冗余。 - 等价类划分法的任务:第一,划分与确定等价类;第二,为每一个等价类建立一个测试用例,并提供充分的覆盖。
- 等价类的有效与无效
划分等价类需首先从功能规格说明书中找出所有输入条件,然后为每个输入条件划分两个或多个等价类,形成若干互不相交的子集,这些子集称之为等价类。而所有等价类的并集就是整个测试用例的输入域。
等价类划分有两种情形:有效等价类和无效等价类。
有效等价类指对程序功能规格说明是合理、有意义的输入数据构成的集合,利用有效等价类检验程序是否实现规格说明中所规定的功能。
与有效等价类定义相反,无效等价类指对软件功能规格说明是无意义、
不合理的输入数据所构成的集合,利用无效等价类,可检查被测对象的功能的实现是否有不符合程序规格说明要求的地方。 - 等价类划分原则
- 如果输入条件指定是在一个连续范围的值,则可划分为一个有效等价类及两个无效等价类。
例1: 某个参数值的输入值的有效范围是:3000-8500
- 在输入条件规定了输入值的集合或规定了“必须如何”的条件情形下,可划分一个有效等价类和一个无效等价类。
例2: 购买汽车的客户(申请者)必须是个人身份。
有效类: {个人}
无效类: (公司,房屋, 其他 } - 在输入条件为一个布尔品的情况下,可确定一个有效等价类和一个无效
等价类。 - 在规定了输入数据必须遵守某规则情形时,可确立一个有效等价类(符
合规则)及若干个无效等价类(违反规则)。
例3: 若某个输入条件说明了一个必须成立的情况(如输入数据必须是数
字0-9) , 则可划分一个有效等价类(输入数据仅为数字)及一个无效等价类(输入数据为非数字)。
按照数值集合划分。如规格说明规定了输入值的集合,则可确定一个有效等
价类(该集合有效值之内)和一个无效等价类(该集合有效值之外)。 - 当确知已划分的等价类中各元素在处理中方式不同时,则应将该等价类
进一步划分为更小等价类。
- 等价类划分测试的步骤
(1)划分若干互不相交子集
(2) 建立等价类表输入测试条件、有效等价类和无效等价类
(3)在划分等价类中设计测试用例
- 同时考虑有效、无效等价类测试用例设计
- 用最少的测试用例覆盖所有等价类
- 对每一个无效等价类设计一个测试用例
- 设计测试用例的预期结果也是测试用例的必要内容
三、常见等价类划分形式
- 标准等价类划分
标准等价类测试不考虑无效数据值。 - 健壮等价类划分
健壮等价类测试主要出发点是不仅关注等价类,同时也关注无效等价类。
四、应用
【问题描述】NextDate 函数包含三个变量:month 、 day 和 year ,函数的输出为输入日期后一天的日期。 例如,输入为 2006年3月 7日,输出为 2006年3月8日 。要求输入变量 month 、 day 和 year 均为整数值,并且满足下列条件:①1≤month≤12②1≤day≤31 ③1912≤year≤2050
解题步骤:
-
划分等价类
有效等价类:
M1={mouth:1≤mouth≤12}; D1={day:1≤day≤31};Y1={year:1912≤year≤2050} S1={年、月、日有值 && 均为整数值}
无效等价类:
M2={mouth:mouth<1}、M2={mouth:mouth>12};
D2={day:day<1}、D3={day:day>31};
Y2={year:year<1912}、Y2={year:year>2050};
S2={年不为整数值 || 值为空}、S2={月不为整数值 || 值为空}、S2={日不为整数值 || 值为空} -
形成测试用例