【软件测试之等价类划分法概述】*(蓝桥云课学习笔记)
在《软件测试的原则》小节中我们提到过一个案例,假设让你负责一个计算器小程序的测试工作,如何着手呢?假设先测试其加法运算功能,在字长为 32 位的计算机上运行,若随意取 2 个整数进行相加,那么测试数据的最大可能数目为 232x232=264。如果测试一组数据需要 1 毫秒,一天工作 24 小时,一年工作 365 天,那么完成所有测试大概需要 5 亿年。还有减法、乘法、除法、其他算法,简直可以无穷无尽,测试到天荒地老。所以我们得出了一个软件测试的原则----穷尽测试是不可能的。
为了解决这个难题,又保证我们设计出来的测试用例具有完整性和代表性,我们引入等价类划分法,它将不能穷举的测试过程进行区域划分,减少测试的数量,从而使测试过程合理化。
1、等价类划分法的概述
等价类划分法是最常用的黑盒功能测试方法之一,根据程序对数据的要求,把程序的输入域划分成若干个部分,列出哪些数据是有效的,哪些数据是无效的,从每个部分中选取少数代表性数据作为测试用例的数据。这样,每一类的代表数据在测试中的作用都等价于这类中的其他值。所谓的等价类是指具有相同属性或方法的集合。
软件不能只接收合理有效的数据,也要具有处理异常数据的功能,这样测试才能确保软件具有更高的可靠性。因此,在等价类划分的过程中,不但要考虑有效等价类,也要考虑无效等价类。
有效等价类是指对软件规格说明来说,合理、有意义的输入数据等构成的集合,利用有效等价类可以检验程序是否满足需求规格说明书所规定的功能和性能。只考虑有效等价类的测试称为“标准等价类测试”。
无效等价类是指不满足程序输入要求或者无效的输入数据所构成的集合,利用无效等价类可以检验程序异常情况的处理。不止考虑了“有效等价类”,还考虑了“无效等价类”的测试被称为“健壮性等价类测试”。
使用等价类划分法设计测试用例,首先必须分析需求规格说明书,然后列出有效等价类和无效等价类。以下是划分等价类的几个原则:
- 如果程序规定了输入域的取值范围,则可以确定一个有效等价类和 2 个无效等价类。
例如:程序要求输入的数值是 50 到 100,那么一个有效等价类就是 50~100,而 2 个无效等价类就是小于 50,大于 100 的区域数据。
- 如果程序规定了输入值的集合,不是一个范围,则可以确定一个有效等价类和一个无效等价类。
例如:程序要进行平方根函数的运算,那么大于等于 0 的数为有效等价类,而小于 0 的数为无效等价类。
- 如果程序规定了输入数据的一组值,并且程序要对每一个输入值分别进行处理,则可以每一个值确定一个有效等价类,然后再选择一个无效等价类。
比如:规定某个输入条件 x 的取值只能为{1、2、3、4、5}中的某一个,那么有效等价类就是 x 等于这几个数,而无效等价类则为 x 不等于这几个数。
- 如果程序规定了输入数据必须遵守的规则,则可以确定一个有效等价类和若干个无效等价类。
例如:程序中某个输入条件规定必须为 5 位数字,则可划分一个有效等价类为 5 位数字,3 个无效等价类为:位数少于 5、位数多于 5、5 位中含有非数字字符。
- 如果已知的等价类中各个元素在程序中的处理方式不同,则应将该等价类进一步划分成更小的等价类。
使用等价类划分法设计测试用例的步骤如下:
第 1 步:分析程序的规格说明,列出有效等价类和无效等价类;列出等价类表,并对每个等价类规定唯一的编号,如下表所示。当然也可以不是表格形式,采用文字描述的形式。
输入条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
---|---|---|---|---|
…… | …… | ① | …… | ③ |
…… | …… | ② | …… | ④ |
第 2 步:一一列出输入条件中可能的组合输入情况。
第 3 步:选取合适的数据,编写测试用例
2、等价类——注册页面案例
某网站用户申请注册时,要求必须输入“用户名”、“密码”及“确认密码”,如下图所示。对每一项输入有如下要求:
- 用户名要求:3~12 位,只能使用英文字母、数字、中划线-、下划线_,这 4 种字符或 4 种字符的组合。并且首字符必须为字母或数字。
- 密码要求:6~20 位,只能使用英文字母、数字、中划线-、下划线_,这 4 种字符或 4 种字符的组合。
- 确认密码:与密码相同,并且区分大小写。
现在使用等价类划分法设计其测试用例。
【解析】
分析程序的规格说明,列出等价类表(包括有效等价类和无效等价类),如下表所示:
一一列出条件中可能的输入组合情况
在该题中,可以有这样的组合,如:
- 输入有效的用户名、有效的密码、有效的确认密码;
- 输入无效的用户名、正确的密码、正确的确认密码;
- 输入有效的用户名、无效的密码、正确的确认密码;
- 输入有效的用户名、有效的密码、无效的确认密码。
针对题中的等价类表,我们可以得出等价类组合表,如下表所示。此处简化测试用例的模板,只取我们关注的输入条件和输出结果的项,预期结果中的提示也是假设的,实际的提示会比这复杂的多。
选择测试数据,编写测试用例,如下表所示:
3、等价类——判断三角形形状案例
程序要求:输入三个整数 a、b、c 分别作为三角形的三边长度,通过三条边长度来判断三角形的类型分别为:一般三角形、等腰三角形或等边三角形,并产生对应的输出。请运用用等价类划分法来设计该题的测试用例。
【解析】
分析程序规格,列出等价类表。如下表所示。
分析:根据题目,得出程序输入值的显式和隐式要求以及输出值的等价类。
- 输入值的显式要求为:整数、三个数、正数;
- 输入值的隐式要求为:两边之和大于第三边、三边均不相等、两边相等但不等于第三边、三边相等;
- 输出值的等价类为:不构成三角形、一般三角形、等腰三角形、等边三角形。
一一列出条件中可能的组合情况
- ①②③④⑤⑥:输出一般三角形
- ①②③④⑤⑥+⑦/⑧/⑨:输出等腰三角形
- ①②③④⑤⑥+⑩:输出等边三角形
- ⑪~⑰:提示“边长请输入整数”
- ⑱~37:输出非三角形
选择测试数据,编写测试用例。如下表所示。
4、等价类划分法小结
在等价类划分法中,每一类的代表性数据(也就是被选为测试用例的测试数据),在测试中的作用等价于这一类中的其他值,如案例 1 中的密码“test_123”和“abcd_123”就是等效的,他们都属于有效的密码数据。
也就是说如果等价类中的一个测试数据能捕获一个缺陷,那么该等价类中的其他测试数据也能捕获该缺陷;如果等价类中的一个测试数据不能捕获缺陷,那么选择该等价类中的其他测试数据也不能捕获缺陷。这是一个重要的结论。
只要有数据输入的地方,就可以采用等价类划分法,它可以从无限多的数据中选取少数代表性的数据进行测试以减少测试人员的工作量。
注意:在测试用例中,可以先测试全部输入条件的有效等价类组合,再每次只测试一个输入条件的无效等价类情况。无效等价类在开始测试的时候不能一起组合,避免“屏蔽”现象发生(前面输入条件的错误提示一出现,后面控件的错误提示就不出现了)。然后可以再适当考虑无效等价类的组合,验证软件处理极端数据的能力。