大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
等价类划分法
等价类划分法是一种常用的、典型的黑盒测试方法。
由于做到穷举测试不可能,因此需要从大量的数据中选取一部分数据用于测试,这也是等价类划分法的意义所在。
用尽可能少的测试用例覆盖尽可能多的数据,以发现尽可能多的软件缺陷。
等价类划分法概述
(1)等价类概念
等价类指输入域的某个互不相交的子集,所有等价类的集便是整个输入域。
等价类中的元素有一些共同的特点,即在该子集合中,各个输入数据对于发现程序中的错误都是等效的,并合理地假定,测试某个等价类的代表值就等于对这一类其他值的测试。
也就是说,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误。
这样,在测试时,只选取等价类某一集合的代表数据就可以其他数据就不用测试了,可以节省大量时间。
(2)等价类划分
使用等价类划分法设计测试用例,首先必须在分析需求规格说明的基础上划分等价类,列出等价类表。
等价类可以分为有效等价类和无效等价类两种。
①有效等价类 有效等价类指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。
利用有效等价类可以检验程序是否实现了规格说明中所规定的功能和性能。在具体问题中,有效等价类可以有一个,也可以有多个。
②无效等价类 无效等价类指不符合程序规格说明书,不合理或无意义的输入数据所构成的集合。
利用无效等价类,可以检查软件功能和性能的实现是否有不符合规格说明要求的地方。对于具体的问题,无效等价类至少应有一个也可能有多个。
(3)常用等价类划分原则
①如果程序要求输入值是一个有限区间的值,则可以将输入数据划分为一个有效等价类和两个无效等价类
其中,有效等价类为指定的取值区间,两个无效等价类分别为有限区间两边的值。例如,某程序输入值x的取值范围为【11001则一个有效等价类为1≤x≤100两个无效等价类分别为x<1和x>100。
再比如,某软件规格说明书规定,学生选课允许选修5到8门课程,则一个有效等价类为”选课5到8门”,两个无效等价类分别为”选课不到5门”和”选课超过8门”。
②如果程序要求输入必须是一个”必须成立”的情况可以确立一个有效等价类和一个无效等价类。
例如某程序要求第一次进入系统时必须更改初始密码,则正确更改密码是有效等价类,不更改密码是无效等价类。
再比如用户连续输入错误密码的次数最多为3次,则有效等价类有一个,即小于等于3次;无效等价类有一个,即大于3次。
③在规定了输入数据的一组值中(假定有n个值)并且程序要对每个输入值分别处理的情况下.可以确定n个有效等价类和一个无效等价类。
这种输入一般是枚举类型的,输入值相互之间没有确切关系,必须每一个都需测试,就有多个有效等价类。
例如,某程序需要对月末最后一天进行处理,由于一年中有的月份是30天,有的月份是31天,如果为闰年则2月份是29天,否则2月份是28天。
这4种值相互间没有必然关系,都需测试到,就需有4个有效等价类。
再比如输入条件说明学历可为专科、本科、硕士、博士四种之一,则有效等价类有4个,即①专科,②本科,③硕士,④博士;无效等价类一个,即其他任何学历。
④ 如果规定了输入数据必须遵守某种规则的情况下可以确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
例如,某信息系统设置的密码必须是大写字母、小写字母和数字三者的组合,则可以有一个有效等价类((正确的设置)和六个无效的等价类(全是大写字母、全是小写字母、全是数字、大小写字母组合设置、大写字母和数字组合设置,小写字母和数字自合设置)。
⑤在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,应再将该等价类进一步划分为更小的等价类。
如核对日期的有效性,初步有效等价类是1<=Month<=12,1<=Day<=31,不过需要考虑2月以及闰年或者农历的闰月、长月、短月等。
(4)等价类划分法设计测试用例步骤
确立了等价类后,需要建立等价类表,列出所有划分出的等价类,用以设计测试用例。
①为每个等价类规定一个唯一的编号。
②设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖。
③设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步使所有无效等价类均被覆盖。
等价类划分法测试用例设计举例
(1)实例1∶三角形问题等价类划分
三角形问题是测试中广泛使用的一个经典案例,它要求输入3个正数作为三角形的三条边,设三条边分别为a、b、c,判断这3个数是否能构成三角形。如果构成三角形,构成的是什么三角形。
对该案例进行分析,得到如下信息∶
①程序要求输入3个数,并且是正数(一般取正整数即可);
②在输入3个正数的基础上,按照三角形判定准则来判断能否构成三角形;
③如果构成三角形,则判断它构成的三角形是一般三角形、等腰三角形还是等边三角形,为了简单起见,直角三角形、等腰直角三角形没有加进来,读者可以加入后自己设计一下。
然后,按照下列步骤将输入情况划分为不同的等价类。
①判断是否输入了3个数,可以将输入情况划分成1个有效等价类,4个无效等价类。
a.有效等价类∶输入3个数。
b.无效等价类∶输入0个数。
c.无效等价类∶只输入1个数。
d.无效等价类∶只输入2个数。
e.无效等价类输入超过3个数。
②在输入3个数的基础上,判断3个数是否是正数,可以将输入情况划分为1个有效等价类,3个无效等价类。
a.有效等价类∶3个数都是正数。
b.无效等价类∶有1个数小于等于0。
c.无效等价类∶有2个数小于等于0。
d.无效等价类∶3个数都小于等于0。
③在输入3个正数的基础上,判断3个数是否能构成三角形,可以将输入情况划分为1个有效等价类和1个无效等价类。
a.有效等价类∶任意2个数之和大于第三个数,a+b>c、a+c>b、b+c>a。
b.无效等价类∶其中2个数之和小于等于第三个数。
④ 在3个数构成三角形的基础上,判断三个数是否能构成等腰三角形,可以将输入情况划分成1个有效等价类。
由于是在构成三角形的基础之上判断,所以这里没有无效等价类。
有效等价类∶其中有2个数相等,a=b或a=c或b=c。
⑤在构成等腰三角形的基础上,判断这3个数能否构成等边三角形,也就是说,只有1个有效等价类。
有效等价类三个数相等,a=b=c
建立等价类表后,下一步就可以设计测试用例了。
设计测试用例的原则是,对于有效等价类,要可能多地覆盖尚未覆盖的有效等价类;
对于无效等价类,一次只能覆盖一个。
有效等价类测试用例见表
无效等价类测试用例见表
其实这里是为了输出一般三角形和等腰三角形,设计了3条测试用例,如果严格按照标准,只需要Test3这条测试用例就可以了,因为Test3这条已经覆盖了所有的有效等价类。
三角形判断问题的等价类表,从不同角度会有不同的等价类表,这里只是列出了其中一个角度,而且有些地方分的并不具体比如等价类编号16。
如果严格按照测试完整性,应该拆分成三个,要逐一判断是a=b或b=c或a=c,而且它们之间的关系应该是互斥的,不能用一条代替三条。
有兴趣的同学可以从其他角度设计。
(2)实例2∶某保险公司人寿保险保费计算程序的等价划分
某保险公司1~99岁的人寿保险的保费计算方法
保费=投保额×保险费率
其中,保险费率根据年龄、性别、婚姻状况和抚养人数的不同而有所不同,体现在不同年龄、性别、婚姻状况和抚养人数,点数设定不同。
10点以上保险费率为0.6%,10点及以下保险费率为0.1%;而点数又是由投保人的年龄、性别、婚姻状况和抚养人数(最多抚养9人,多于9人不予保险)来决定,具体规则如表所示。
分析程序规格说明中给出的对输入数据要求以及一些没给出但实际存在的隐含要求,可以得出下述规律。
①年龄∶一位或两位非零整数,取值的有效范围为1~99。
②性别∶一位英文字符,只能取”M”或”F”值。
③婚姻∶字符,只能取”已婚”或”未婚”。
④抚养人数∶空白或字符”无”或1~9之间的一位非零整数。
根据规格说明分析,得到等价类划分表。
根据表3 5的等价类表,假设保险额为1万元,保险公司保险程序的等价类测试用例设计如表所示。
可以看出,编号的编写顺序可以先按照数据的输入内容分开,再按有效等价类和无效等价类编写。
也可以整体上先对有效等价类编写,再对无效等价类编写。
测试用例的设计可以把有效等价类和无效等价类分开设计;
也可以合并到一张表中设计,实际工作中,可以根据规模和需要进行选择。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180718.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...