测试方法-等价类划分法
什么是等价类划分法
等价类划分法是一种重要的、常用的黑盒测试方法,它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。
等价类划分法是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少量具有代表性的数据作为测试用例。
原因:不可能实现穷举测试,可以从大量的可能数据中选取一部分具有代表性的数据作为测试用例。
效果:经过类别划分后,每一类的代表性数据在测试中的作用都等价于这一类中的其他值。
手段:在设计测试用例时,在需求说明的基础上划分等价类,列出等价表,从而确定测试用例。
等价类划分法设计测试用例要经历两个步骤:
划分等价类(列出等价类表)
选取测试用例
等价类的划分有两种不同的情况:
有效等价类
无效等价类
等价类的类型
有效等价类
对需求规格说明而言,有意义、合理的输入数据所组成的集合。
检验程序是否实现了需求规格说明预先规定的功能和性能。
无效等价类
对需求规格说明而言,无意义的、不合理的输入数据所组成的集合。
检查被测对象的功能和性能的实现是否有不符合需求规格说明要求的地方。
等价类的划分原则
如何划分等价类?
先从程序的规格说明书中找出各个输入条件,再为每个输入条件划分等价类,形成若干互不相交的子集。
给出1到100之间两个整数相加的测试用例
1、考虑输入数据类型和范围
2、计算两个1-100之间整数的和
等价类的划分原则
(1)按照区间划分
在输入条件规定了取值范围的情况下,可以确定有效等价类和无效等价类。
例:程序输入条件为小于100大于10的整数x,则有效等价类为10<X<100,两个无效等价类为x≤10和x≥100。
(2)按照数值划分
在规定了一组输入数据(假设包括n个输入值),并且程序要对每一个输入值分别进行处理的情况下,可确定n个有效等价类(每个值确定一个有效等价类)和一个无效等价类(所有不允许的输入值的集合)。
例:程序输入x取值于一个固定的枚举类型{1,3,7,15},且程序中对这4个数值分别进行了处理,则有效等价类为x=1、x=3、x=7、x=15,无效等价类为x≠1,3,7,15的值的集合。
(3)按照限制条件或规则划分
在规定了输入数据必须遵守的规则或限制条件的情况下,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
例:程序输入条件为奇数的整数x,则有效等价类为x的值为奇数的整数,无效等价类为x的值不为奇数的数。
例:程序输入用户口令的长度必须是4位的字符串,可以确定一个有效等价类是输入字符串的长度为4,一个无效等价类长度不为4。
(4)细分等价类
在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表。
例:程序输入条件为以字符‘a’开头、长度为8的字符串,并且字符串不包含‘a’—‘z’之外的其它字符,则有效等价类为满足了上述所有条件的字符串,无效等价类为不以‘a’开头的字符串、长度不为8的字符串和包含了‘a’—‘z’之外其它字符的字符串。
等价类划分法设计测试用例的步骤
等价类测试用例设计
针对是否对无效数据进行测试,可以将等价类测试分为标准等价类测试和健壮等价类测试。
☆标准等价类测试——不考虑无效数据值,测试用例使用每个等价类中的一个值。
☆健壮等价类测试——主要的出发点是考虑了无效等价类。对有效输入,测试用例从每个有效等价类中取一个值;对无效输入,一个测试用例有一个“无效值”,其他值均取“有效值”。
健壮等价类测试存在两个问题:
(1)需要花费精力定义无效测试用例的期望输出
(2)对强类型的语言没有必要考虑无效的输入,程序可以自己检测。
等价类划分法设计测试用例的步骤
(1)确定等价类
(2)建立等价类表,列出所有划分出的等价类
(3)从划分出的等价类中按以下原则设计测试用例:
A.为每一个等价类规定一个唯一的编号
B.设计一个新的测试用例,使其尽可能多的覆盖尚未被覆盖的有效等价类,重复这一步。
C.设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步。
案例一
需求:QQ账号为5-11位自然数
界面原型
第一步:划分等价类
第二步:编号
第三步:设计用例,覆盖有效等价类
第四步:设计用例,覆盖无效等价类
案例二