软件测试用例设计方法-等价类划分

前言

通过等价类划分进行测试用例的设计,可以用较少的测试用例,达到较好的测试效果。

1.1 为什么要等价类划分

穷举测试是测试程序所有可能的输入和输出,验证程序运行符合规格说明,保证测试的充分性,发现程序的全部错误。但是,实际工作中是无法实现穷举测试的,因为输入组合多导致效率低、测试投入高。 软件测试用例设计方法-等价类划分1 通过等价类划分,可以用较少的测试用例,发现程序错误,同时保证测试的充分性,较好的完成测试目标。从而避免穷举测试,提高测试效率

1.2 什么是等价类划分

等价类是相同逻辑或错误的一类测试数据组成的集合,测试等价类的任何一个值就等于对这个类的其他值的测试。需要将输入域划分为若干个互不相交的等价类,并且每个等价类的并集是输入域的整个集合。

1.2.1 什么是等价类划分法

将程序的输入域划分为若干个互不相交的子集,从每个子集中选取少数代表性的数据作为测试数据。

1.2.2 什么是等价类

等价类是预期触发程序中相同逻辑或错误的一类测试数据。在同一类等价类中,各个输入数据对于验证功能符合规格说明是等效的,揭露程序中的错误是等效的。合理假设,测试等价类中的代表值就等于对这一类其他值的测试。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据,取得较好的测试结果。本段说的逻辑对应正向分支,错误对应异常分支。

1.2.3 等价类分类

等价类划分可有两种不同的情况:有效等价类和无效等价类。

有效等价类:符合程序的规格说明的、合理的、有意义的输入数据集合,用于检验程序是否实现规格说明中的功能,应被程序正确的接受和处理,触发正确逻辑

无效等价类:违反程序的规格说明的、不合理的、无意义的输入数据集合,用于检验程序在不符合规格的输入数据下,程序能否识别并拦截,触发异常处理逻辑

无效等价类至少应有一个,也可能有多个。设计测试用例时,要同时考虑这两种等价类,因为软件不仅要正确处理正常输入,也要有效拦截异常情况,这样的测试才能确保软件具有更高的可靠性。 软件测试用例设计方法-等价类划分2

1.3 如何划分等价类

将处理逻辑或错误相同的划分为同一等价类,要尽量做到避免冗余、避免遗漏。有效等价类的值有多个且处理逻辑不同时,需分别测试。无效等价类,每次只违反一个规则,直到违反全部规则。

1.3.1 划分等价类标准

划分等价类要避免冗余,要避免遗漏(要完备测试)。重点是集合的划分,将输入数域划分为互不相交的一组子集,而子集的并集是整个集合。同一等价类中,处理逻辑相同,映射到“相同的执行路径”

1.3.2 划分等价类方法

(1) 当输入条件规定了取值范围或值的个数时,可以确定一个有效等价类和两个无效等价类

​ a) 输入条件规定取值范围:

​ i. 有效等价类:所有满足取值范围的值。

​ ii. 无效等价类1:不满足取值范围下限的值;

​ iii. 无效等价类2:不满足取值范围上限的值。

​ iv. 比如,输入学生成绩,范围0到100,包括0和100。

  • 有效等价类为:0≤成绩≤100;
  • 无效等价类1:成绩<0;
  • 无效等价类2:成绩>100。

​ b) 输入条件规定值的个数:

​ i. 有效等价类:满足取值个数的值。

​ ii. 无效等价类1:小于取值个数的值;

​ iii. 无效等价类2:大于取值个数的值。

​ iv. 比如,输入6位数字的短信验证码。

  • 有效等价类为:6位数字;
  • 无效等价类1:位数<6;
  • 无效等价类2:位数>6。

(2) 当输入条件规定了输入值的集合或者规定了“必须如何”的条件时,可以确定一个有效等价类和一个无效等价类

​ a) 输入条件规定输入值的集合:

​ i. 有效等价类:所有属于该集合的输入值;

​ ii. 无效等价类:所有不属于该集合的输入值。

​ iii. 比如,在线支付方式,可以选择支付宝、微信或银行卡。

  • 有效等价类:集合内的支付方式,比如,支付宝、微信、银行卡;
  • 需要覆盖集合的全部值。
  • 无效等价类:集合外的支付方式,比如,信用卡。

​ b) 输入条件规定“必须如何”:

​ i. 有效等价类:符合规则的输入值;

​ ii. 无效等价类:所有违反任一规则的输入值。

  • 处理逻辑相同,不区分具体错误类型,提示相同错误,故划分为一个无效等价类
  • 每次输入仅违反其中一个规则,直到全部规则都被违反。
  • 长度超出范围、格式错误、空值、违反规则。
  • 即使程序逻辑对无效输入统一处理,但不同输入可能导致底层异常(如类型转换错误、空指针异常等)。多用例设计能发现潜 在的程序漏洞。所以,要验证全部违反规则场景。

​ iii. 比如,设置账户密码,密码必须同时包含大写字母、小写字母、数字,且长度≥8位。

  • 有效等价类:符合规则的密码;
  • 无效等价类:违反任一规则的输入。

(3) 如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类

​ a) 有效等价类:符合业务规则;

​ b) 无效等价类:违反业务规则;

​ c) 比如,注册账户时,用户必须勾选“同意《用户服务协议》”的复选框才能注册。

​ i. 有效等价类:用户已勾选协议,允许注册并跳转到下一步;

​ ii. 无效等价类:用户未勾选协议,阻止注册并提示错误,比如,请先阅读并同意用户协议。

(4) 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类

​ a) 有效等价类n个:每个合法值单独为一个有效类,每个合法值独立处理;

​ b) 无效等价类:非法输入处理逻辑一致,合并为一个无效等价类。

​ c) 比如,后台管理系统支持3种角色,包括管理员、编辑、访客,不同角色对应不同权限。

​ i. 有效等价类1:管理员,访问全部功能和数据;

​ ii. 有效等价类2:编辑,允许编辑内容,禁止删除用户;

​ iii. 有效等价类3:访客,仅允许查看公开内容。

​ iv. 无效等价类:管理员、编辑、访客之外的值,提示“角色不存在”。

​ v. 测试意义:避免越权操作,确保权限隔离。

(5) 在规定了输入数据必须遵守的规则情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)

​ a) 有效等价类:符合全部规定的输入值;

​ b) 无效等价类若干:违反任一规定的输入值;

i. 处理逻辑不同,区分具体错误类型,故划分若干个无效等价类。

ii. 每次输入仅违反其中一个规则,直到全部规则都被违反。

c) 比如,使用优惠券需同时满足以下条件:

  • 券状态为「未使用」;
  • 当前日期在有效期内(如2025.1.1-2025.12.31);
  • 订单金额≥券的最低消费门槛(如满100元可用)。

​ i. 有效等价类:订单金额120元,使用有效期内未使用的优惠券;

​ ii. 无效等价类:不同维度违反规定。

  • 已使用券 → 提示"该券已被使用";
  • 过期券(当前日期2026.1.1) → 提示"优惠券已过期";
  • 金额不足(订单80元) → 提示"未达到最低消费";
  • 非本平台券(如竞品平台优惠码) → 提示"无效券码"。

1.4 等价类用例设计

1) 分析需求,找出全部输入条件。 2) 根据划分等价类方法,列出全部输入条件的所有的有效等价类和无效等价类,建立等价类分析表。 3) 设计一个新的测试用例,使其尽可能多地覆盖那些尚未被涵盖的有效等价类,重复这一步,直到所列出的所有有效等价类都被覆盖为止 4) 设计一个新的测试用例,使其覆盖一个且仅一个尚未被涵盖的无效等价类,重复这一步,直到所列出的所有无效等价类都被覆盖为止。

1.5 等价类划分案例

需求:对“修改WiFi网络的默认名称”使用“等价类划分”方法设计测试用例,测试点如下:

(1) 可以通过WiFi的管理口直接登录到WiFi上修改WiFi的网络名称;

(2) PC连接成功后,可以登录到WiFi上修改WiFi的网络名称;

(3) WiFi网络支持的名称为:1到10个字符,允许输入“字母”、“数字”、“下划线”中的一种或多种,不允许其他的输入。

1.5.1 分析需求

分析需求,找出输入条件。本案例中的输入条件为:

(1) 通过管理口登录WiFi修改WiFi网络名称;

(2) 通过PC连接后,登录WiFi修改WiFi网络名称;

(3) 网络名称的长度和命名规则。

1.5.2 等价类分析表

根据划分等价类方法,对全部输入域划分所有有效等价类和无效等价类,建立等价类分析表。输入域有2个入口修改网络名称,对网络名称进行等价类划分。

软件测试用例设计方法-等价类划分4

两种输入域相互独立,并且他们的有效等价类、无效等价类相同,输出也相同,可以进行合并。

软件测试用例设计方法-等价类划分5

1.5.3 用例设计

设计一个新的有效等价类的测试用例,使其尽可能多地覆盖那些尚未被涵盖的有效等价类,重复这一步,直到所列出的所有有效等价类都被覆盖为止

设计一个新的无效等价类的测试用例,使其覆盖一个且仅一个尚未被涵盖的无效等价类,重复这一步,直到所列出的所有无效等价类都被覆盖为止。

软件测试用例设计方法-等价类划分6

1.5.4 补充用例

为了让测试更充分有效,可以根据经验补充一些用例,比如:

(1) 是否要在“等价类”中增加一些“边界值”之外的测试数据;

(2) 是否有哪些地方容易出问题,是否还要补充一些用例

1.6 等价类划分注意事项

(1) 不但要考虑有效等价类,也要考虑无效等价类;

(2) 避免过度细分,否则导致冗余用例;

(3) 避免过度合并,否则可能遗漏场景;

(4) 审查划分:同一等价类应触发相同的处理逻辑;

(5) 关注特殊值和默认值:

a) 特殊值:空值、默认值、系统保留值(如“NULL”、“NaN”)。

​ i. 例:表单中未填写的字段是否触发正确校验。

b) 默认值处理:系统自动填充的默认值需验证是否符合规则。

(6) 输出结果也应划分等价类,确保不同输出场景被覆盖。

有效等价类对应正向用例,无效等价类对应反向用例、负向用例、逆向用例。