2. 等价类划分与边界值结合:方法原理与关联
聊完单独的等价类和边界值,咱们得把它们结合起来用。说实话,这两个方法就像一把剪刀的两片刀刃——单独用也能剪东西,但合在一起才真的锋利。我个人习惯的处理方式是:先用等价类划出大范围,再在边界上重点排查。
2.1 为什么要把两者结合?
先说个我踩过的坑。早年测试一个日期输入框,录入“2000-2023”范围内的年份。我按等价类分了有效(中间值)和无效(太小/太大),觉得挺全面。结果上线后,用户一输入“1999”就崩了——哦,边界没测。
这个例子说明什么?等价类帮你找范围,边界值帮你找漏洞。它们犯错的模式不一样:
- 等价类:覆盖“类”的完整性,保证功能正常
- 边界值:覆盖“类”的极限,发现隐藏缺陷
核心结论:等价类做广度覆盖,边界值做深度挖掘。两者结合,才能做到测试既不少点,也不漏边。
2.2 怎么结合?三句话讲明白
我总结了一套“三步法”,简单直接:
- 先划分等价类:把所有输入数据按规则分成若干类(有效类、无效类)
- 再从每个类里抓出边界值:针对每个等价类,找出它的边界点
- 最后组合+挑选:每个等价类取一个代表值,再单独测它的边界
记住:边界值是从等价类里长出来的,不是凭空蹦出来的。
| 步骤 | 具体做法 | 目的 |
|---|---|---|
| 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
嗯,等价类和边界值结合的底子打好了,咱们接下来的实践才站得住。别急,慢慢来,把这两个方法揉进骨子里,你写的每个测试用例都会扎实很多。