2. 等价类划分与边界值结合:方法原理与关联

聊完单独的等价类和边界值,咱们得把它们结合起来用。说实话,这两个方法就像一把剪刀的两片刀刃——单独用也能剪东西,但合在一起才真的锋利。我个人习惯的处理方式是:先用等价类划出大范围,再在边界上重点排查。

2.1 为什么要把两者结合?

先说个我踩过的坑。早年测试一个日期输入框,录入“2000-2023”范围内的年份。我按等价类分了有效(中间值)和无效(太小/太大),觉得挺全面。结果上线后,用户一输入“1999”就崩了——哦,边界没测。

这个例子说明什么?等价类帮你找范围,边界值帮你找漏洞。它们犯错的模式不一样:

  • 等价类:覆盖“类”的完整性,保证功能正常
  • 边界值:覆盖“类”的极限,发现隐藏缺陷

核心结论:等价类做广度覆盖,边界值做深度挖掘。两者结合,才能做到测试既不少点,也不漏边。

2.2 怎么结合?三句话讲明白

我总结了一套“三步法”,简单直接:

  1. 先划分等价类:把所有输入数据按规则分成若干类(有效类、无效类)
  2. 再从每个类里抓出边界值:针对每个等价类,找出它的边界点
  3. 最后组合+挑选:每个等价类取一个代表值,再单独测它的边界

记住:边界值是从等价类里长出来的,不是凭空蹦出来的。

步骤 具体做法 目的
1. 划分等价类 根据需求文档,把输入划分为若干有效类和无效类 确定范围
2. 提取边界值 对每个等价类,找出最小、最大、略小、略大的边界值 定位高风险点
3. 生成用例 每个等价类取一个代表值,再补上对应的边界值 兼顾广度与深度

提示:我这几年做过的项目,80%以上的严重bug都藏在边界上。你把等价类和边界值结合测一遍,基本能把功能缺陷堵个七七八八。

2.3 举个栗子:年龄输入框

咱们拿一个真实场景来说。系统要求输入用户年龄,范围18-60(含两端)。怎么测?

第一步,划分等价类:

  • 有效类:18到60之间的整数
  • 无效类A:小于18的整数
  • 无效类B:大于60的整数
  • 无效类C:非整数(浮点数、字母、特殊字符等)

第二步,从每个等价类里挖出边界值:

  • 有效类边界:17(下邻)、18(下边界)、59(上邻)、60(上边界)
  • 无效类A边界:17(上边界)、16(非边界代表)
  • 无效类B边界:61(下边界)、62(非边界代表)
  • 无效类C:选一个代表,如“abc”

第三步,合并用例,去掉重复项:

用例编号 输入 预期结果 覆盖类型
TC_01 17 无效(小于范围) 无效类边界
TC_02 18 有效 有效类下边界
TC_03 39 有效 有效类代表值
TC_04 60 有效 有效类上边界
TC_05 61 无效(大于范围) 无效类边界
TC_06 abc 无效(非数字) 无效类代表值

注意:我曾经以为取18和60就够了,结果漏掉了17和61。上线后用户用17岁注册成功,后面很多逻辑都乱了——因为17岁触发了某个隐藏的“未成年”规则。千万别跳过邻界值,那是bug的重灾区。

2.4 核心流程:一张图看懂

下面这张图,是我自己画的结构。理解了这个流程,你基本就掌握了三成边界策略的精髓。

等价类与边界值结合逻辑图 输入需求 划分等价类(有效类/无效类) 每个等价类取代表值 提取边界值 合并去重生成用例 执行测试 边界值从等价类中提取,两者一横一纵,相辅相成

2.5 踩过的坑:别犯这些错

我自己带团队时,发现新手爱犯这几个错。你想想看,是不是也眼熟?

  • 混淆了“等价类代表值”和“边界值”:等价类代表值选中间值(比如30),边界值选两端(17、18、59、60)。别搞混了。
  • 只考虑单边界:所有等价类都有边界,无效类的边界也要测全。比如小于18的类,边界是17,但16、15你也要啊?不一定,但17必须测。
  • 忽略多个无效类同时触发的情况:我遇到过输入框既要范围限制,又要格式校验,两边界冲突,测单品不出bug,一起塞进去就崩。这种场景等价类+边界值很难单独覆盖,需要一点组合测试的思路——这个后面章节会单独讲。

避坑指南:我曾经在一个复杂权限系统的测试中,只按等价类取代表值,忘了补边界,结果一个18岁的用户被系统错误地分到了“未成年组”。“18”成了分水岭,没测到边界,线上出了事故。从那以后,我为每个等价类配了一个“边界检查清单”,确保不遗漏任何端点。

2.6 实战小技巧

最后分享几个实用的小习惯:

  • 画一个简单的数字轴,标出所有等价类和边界点——直观又好用
  • 边界值不止2个(最小值、最大值),还有内边界(最小值+1、最大值-1)——至少测4个
  • 写用例时,把“边界值”单独列为一列,方便review

嗯,等价类和边界值结合的底子打好了,咱们接下来的实践才站得住。别急,慢慢来,把这两个方法揉进骨子里,你写的每个测试用例都会扎实很多。