功能测试数据测试之等价类划分

定义

等价类划分法是把所有可能的输入数据,即程序的数据数据集合划分成若干个子集(即等价类),然后从每一等价类中选取有代表意义的数据作为测试用例。


划分等价类

进行等价类划分一般分两个步骤: 分类和抽象。 分类:就是将输入源按相同特性或者类似功能进行分类 抽象:就是在各个子类中抽象出相同特性并用实例来表征这个特性 例如:对一个实数开平方 可以把测试数据分为正实数、负实数、0三个等价区间,每个等价区间的一个测试数据产生的测试结果都可以代表每个等价类的测试结果。 在进行等价类划分时,不但要考虑有效等价类划分,还要考虑无效等价类划分,只有这两种情况全都考虑并进行测试,才能充分验证软件的容错处理,使软件更稳定和可靠 有效等价类:指输入完全满足程序输入的规格说明,是由有效且有意义的输入数据所构成的集合。利用有效等价类可以检验程序是否满足规格说明所规定的功能和性能。 无效等价类:和有效等价类相反,即不满足程序输入要求或者由无效的输入数据构成的集合。

划分等价类的方法

等价类的划分后的集合所有子集的“并”是整个集合:保证测试的完备性。 等价类的划分后的集合所有子集互不相交:避免测试的冗余。 同一等价类标示一个测试用例:同一等价类中,往往处理相同,相同处理映射到“相同的执行路径”。

划分等价类的标准

1. 在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。如:输入值是学生成绩,范围是0~100。
2. 在输入条件规定了输入值的集合或者规定了"必须如何"的条件的情况下,可确立一个有效等价类和一个无效等价类。
3. 在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
4. 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
例:输入条件说明学历可为专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。
5.在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
6. 在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。


设计测试用例

在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有效等价类、无效等价类,然后从划分出的等价类中按以下三个原则设计测试用例: 为每一个等价类规定一个唯一的编号; 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止; 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

实例分析

.NextDate 函数包含三个变量:month、 day 和 year ,函数的输出为输入日期后一天的日期。 例如,输入为 2010年3月 7日,则函数的输出为 2010年3月8日 。要求输入变量 month 、 day 和 year 均为整数值,并且满足下列条件:
①1≤month≤12
②1≤day≤31
③1920≤year≤2050
  1)有效等价类为:
M1={月份:1≤月份≤12}
D1={日期:1≤日期≤31}
Y1={年:1812≤年≤2012}
  2)若条件 ① ~ ③中任何一个条件失效,则 NextDate 函数都会产生一个输出,指明相应的变量超出取值范围,比如 "month 的值不在 1-12 范围当中 " 。显然还存在着大量的 year 、 month 、 day 的无效组合, NextDate 函数将这些组合作统一的输出: " 无效输入日期 " 。其无效等价类为:
M2={月份:月份<1}
M3={月份:月份>12}
D2={日期:日期<1}
D3={日期:日期>31}
Y2={年:年<1812}
Y3={年:年>2012}
弱一般等价类测试用例
月份 日期 年 预期输出
6 15 1912 1912年6月16日

月份 日期 年 预期输出
6 15 1912 1912年6月16日
强一般等价类测试用例同弱一般等价类测试用例
  注:弱–有单缺陷假设;健壮–考虑了无效值
  (一)弱健壮等价类测试
   用例ID 月份 日期 年 预期输出
WR1 6 15 1912 1912年6月16日
WR2 -1 15 1912 月份不在1~12中
WR3 13 15 1912 月份不在1~12中
WR4 6 -1 1912 日期不在1~31中
WR5 6 32 1912 日期不在1~31中
WR6 6 15 1811 年份不在1812~2012中
WR7 6 15 2013 年份不在1812~2012中
  (二)强健壮等价类测试
用例ID 月份 日期 年 预期输出
SR1 -1 15 1912 月份不在1~12中
SR2 6 -1 1912 日期不在1~31中
SR3 6 15 1811 年份不在1812~2012中
SR4 -1 -11912 两个无效一个有效
SR5 6 -1 1811 两个无效一个有效
SR6 -1 15 1811 两个无效一个有效
SR7 -1 -11811 三个无效




作者:马克社区何老师