等价类划分法

知识点

  • 等价类划分法概述
  • 等价类划分法案例

简介

在《软件测试的原则》小节中我们提到过一个案例,假设让你负责一个计算器小程序的测试工作,如何着手呢?假设先测试其加法运算功能,在字长为32位的计算机上运行,若随意取两个整数进行相加,那么测试数据的最大可能数目为2^32x 2^32= 2^64.如果测试一组数据需要1毫秒,一天工作24小时,一年工作365天,那么完成所有测试大概需要5亿年,还有减法、乘法、除法、其他算法,简直可以无穷无尽,测试到天荒地老。所以我们得出了一个软件测试的原则穷尽测试是不可能的

为了解决这个难题,又保证我们设计出来的测试用例具有完整性和代表性,我们引入等价类划分法,他将不能穷举的测试过程进行区域划分,减少测试的数量,从而使测试过程合理化。

等价类划分法的概述

等价类划分法是最常用的黑盒功能测试方法之一,根据程序对数据的要求,把程序的输入域划分若干个部分,列出那些数据是有效的,哪些数据是无效的,从每个部分选取少数代表型数据作为测试用例的数据。这样,每一类的代表数据在测试中的作用都等价于这类中的其他值。所谓的等价类是指具有相同属性或方法的集合

软件不能只接受合理有效的数据,也要具有处理异常数据的功能,这样测试才能确保软件具有更高的可靠性。因此,在等价类划分的过程中,不但要考虑有效等价类,也要考虑无效等价类。

有效等价类是指对软件规格说明来说,合理、有意义的输入数据等构成的集合,利用有效等价类可以检验程序是否满足需求规格说明书所规定的功能和性能。只考虑有效等价类的测试被称为“标准等价类测试”

无效等价类是指不满足程序输入要求或者无效的输入数据所构成的集合,利用无效等价类可以检验程序异常情况的处理。不止考虑了“有效等价类”,还考虑了“无效等价类”的测试被称为健壮性等价类测试

使用等价类划分法设计测试用例,首先必须分析需求规格说明书,然后列出有效等价类和无效等价类。以下是划分等价类的几个原则:

  • 如果程序规定了输入域的取值范围,则可以确定一个有效等价类和2个无效等价类

例如:程序要求输入的数值是50-100,那么一个有效等价类就是50-100,而两个无效等价类就是小于50,大于100的区域数据

  • 如果程序规定了输入值的集合,不是一个范围,则可以确定一个有效等价类和一个无效等价类

例如:程序要进行平方根函数的运算,那么大于等于0的数为有效等价类,而小于0的数为无效等价类

  • 如果程序规定了输入数据的一组值,并且称需要对每一个输入值分别进行处理,则可以每一个值确定一个有效等价类,然后再选择一个无效等价类

例如:规定某个输入条件x的权值只能为{1,2,3,4,5}中的某一个,那么有效等价类就是x等于这几个数,无效等价类就是x不等于这几个数

  • 如果程序规定了输入数据必须遵守的规则,则可以确定一个有效等价类和若干个无效等价类

例如:程序中某个输入条件规定必须为5位数字,则可划分一个有效等价类位5位数字,3个无效等价类为:位数少于5,位数多于5,5位中含有非数字字符

  • 如果已知的等价类中各个元素在程序中的处理方式不同,则应将该等价类进一步分成更小的等价类

使用等价类划分设计测试用例的步骤如下

第一步:分析程序的规格说明,列出有效等价类和无效等价类;列出等价类表,并对每个等价类规定唯一的编号如下表所示。当然也可以不是表格形式,采用文字描述的形式

输入条件有效等价类编号无效等价类编号

第二步:–列出输入条件可能的组合输入情况

第三部:选取合适的数据,编写测试用例

等价类划分法案例

案例1-注册界面

某网站用户申请注册时,要求必须输入“用户名”、“密码“及”确认密码“,如下图所示。对每一项输入有如下要求

某网站的注册功能界面

  • 用户名要求:3-12位,只能使用英文字母、数字、中划线-、下划线_,这四种字符或4种字符的组合。并且首字符必须为字母和数字
  • 密码要求:6-20位,只能使用英文字母、数字、中划线-、下划线_,这4种字符或4种字符的组合
  • 确认密码:与密码相同,并且区分大小写。

现在使用等价类划分法设计其测试用例

【解析】

分析程序的规格说明,列出等价类表(包括有效等价类和无效等价类)如下表所示

注册界面等价类分析表

– 列出条件中可能的输入组合情况

在该题中,可以有这样的组合,如:

  • 输入有效的用户名,有效的密码,有效的确认密码
  • 输入无效的用户名,正确的密码,正确的确认密码
  • 输入有效的用户名,无效的密码,正确的确认密码
  • 输入有效的用户名,有效的密码, 无效的确认密码

针对题中的等价类表,我们可以得出等价类组合表。如下表所示,此处简化测试用例的模板,只取我们关注的输入条件和输出结果的项,预期结果中的提示也是假设的,实际的提示会比这复杂得多。

条件组合用户名密码确认密码预期结果
124+56+7有效,首字母为字母有效有效注册成功
134+56+7有效,首字母为数字有效有效注册成功
824+56+7无效,少于3位有效有效提示用户名错误
942+56+7无效,多于12位有效有效提示用户名错误
1104+56+7无效,首字符错误有效有效提示用户名错误
1114+56+7无效,有其他字符有效有效提示用户名错误
124+12+6+7有效无效,少于6位有效提示密码错误
124+13+67有效无效,多于20位有效提示密码错误
124+14+57有效无效,有其他字符有效提示密码错误
124+56+15有效有效无效,与密码不同提示确认密码与密码不同
124+56+16有效有效无效,与密码大小写不同提示确认密码与密码不同

选择测试数据,编写测试用例,如下表所示

编号用户名密码确认密码预期结果
TC-001laoqian_2025test_123test_123注册成功
TC-0022025_lanqiaotest_123test_123注册成功
TC-003ddtest_123test_123提示用户名错误
TC-004lan_qiao_xue_yuan_12test_123test_123提示用户名错误
TC-005_lanqiao_2025test_123test_123提示用户名错误
TC-006lanqiao@2025test_123test_123提示用户名错误
TC-007lanqiao_2025abc12abc12提示密码错误
TC-008lanqiao_2025admin-istra-tor12_123admin-istra-tor12_123提示密码错误
TC-009lanqiao_2026abc@123456abc@123456提示密码错误
TC-010lanqiao_2027test_123abcd_123提示密码错误
TC-011lanqiao_2028test_123test_123提示密码错误

案例2-三角形

程序要求:输入三个整数a、b、c分别作为三角形的三边长度,通过三条边长度来判断三角形的类型分别为:一般三角形、等腰三角形或等边三角形,并产生对应的输出,请运用等价类划分法来设计该题的测试用例

【解析】

分析程序规格,列出等价类表。如下表所示

分析:根据题目,得出程序输入值的显示和隐式要求以及输出值的等价类

  • 输入值的现实要求为:整数、三个数、正数
  • 输入值的隐式要求为:两边之和大于第三边,三边均不相等,量变相等但不等于第三边,三边相等
  • 输出值的等价类为:不构成三角形、一般三角形、等腰三角形、等边三角形

三角形等价类分析表

–列出条件中可能的组合情况

  • 123456:输出一般三角形
  • 123456+7/8/9:输出等腰三角形
  • 123456+10:输出等边三角形
  • 11-17:提示“边长请输入整数”
  • 18-37:输出非三角形

选择测试数据,编写测试用例如下表所示

三角形等价类组合表

小结

在等价类划分法中,每一类的代表性数据(也就是被选为测试用例的测试数据),在测试中的作用等价于这一类中的其他值,如案例1中的密码==“test_123"和”abcd_123"就是等效的,他们都属于有效的密码数据==。

也就是说如果等价类中的一个测试数据能捕获一个缺陷,那么该等价类中其他测试数据也能捕获该缺陷;如果等价类中的一个测试数据不能捕获缺陷,那么选择该等价类中其他测试数据也不能捕获缺陷,这是一个重要的结论。

只要有数据输入的地方,就可以采用等价类划分法他可以从无限多的数据中选取少数代表性的数据进行测试以减少测试人员的工作量。

注意:在测试用例中,可以先测试全部输入条件的有效等价类组合,在每次只测试一个输入条件的无效等价类情况,无效等价类在开始测试的时候不能一起组合,避免发生屏蔽现象发生(前面输入条件的错误提示一出现,后面空间的错误提示就不出现了),然后可以在适当考虑无效等价类的组合,验证软件处理极端数据的能力

图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐