边界值分析法:原理、上点/内点/离点、设计步骤、实战案例
大家好,我是老赵。今天我们来聊聊边界值分析法。
说实话,这是我个人最常用的一种黑盒测试方法。为什么?因为大量的缺陷都藏在边界上。你想想看,开发写代码的时候,最容易出错的往往不是正常值,而是那些「差一点就超了」或者「刚好在边界上」的情况。
我记得刚入行那会儿,测试一个登录框,密码长度要求6-16位。我随便测了几个长度,觉得没问题就提交了。结果上线第二天,用户反馈说输入17位密码居然也能通过。嗯,从那以后,我再也不敢轻视边界值了。
边界值分析法的核心原理
边界值分析法的理论基础其实很简单:大量的软件缺陷发生在输入域的边界附近,而不是在等价类的内部。
为什么会这样?因为开发人员在写条件判断时,比如 if (len >= 6 && len <= 16),很容易把 >= 写成 >,或者把 <= 写成 <。这种「差一个等号」的错误,用常规的等价类划分是测不出来的。
核心思想:边界值分析是对等价类划分的补充。等价类划分帮你「分块」,边界值分析帮你「卡边」。
上点、内点、离点——三个关键概念
这三个点,是边界值分析法的灵魂。我一个个说清楚。
| 术语 | 定义 | 举例(区间 [6, 16]) |
|---|---|---|
| 上点 | 边界上的点。闭区间就是边界本身,开区间就是紧挨着边界的点。 | 6 和 16 |
| 内点 | 有效等价类内部的任意一点。 | 10(随便选一个) |
| 离点 | 离边界最近但不在有效等价类内的点。闭区间取边界外一侧,开区间取边界上。 | 5 和 17 |
我的记忆口诀:「上点就是门框,内点就是屋里,离点就是屋外紧贴墙根。」
这里有个容易混淆的地方——开区间和闭区间的离点不一样。
- 闭区间 [6, 16]:上点是 6 和 16,离点是 5 和 17
- 开区间 (6, 16):上点是 7 和 15(因为 6 和 16 不在区间内),离点是 6 和 16
我在项目中遇到过不少测试新人把开闭区间搞混,结果测了半天,边界缺陷一个都没抓到。所以,拿到需求先确认:这个边界是包含还是不包含?
设计步骤——我习惯的四步法
边界值分析的设计步骤,我总结为四步。不多不少,刚刚好。
- 确定输入条件:找出所有需要测试的输入域,明确其数据类型和取值范围。
- 识别边界:找出每个输入域的边界值。注意,可能有多个边界(比如最小值、最大值)。
- 确定上点、内点、离点:根据区间类型(开/闭),确定每个边界对应的三个点。
- 生成测试用例:将每个点作为一个测试输入,结合预期结果,形成完整的测试用例。
你可能会问:每个边界都要测三个点吗?我的经验是:对于大多数场景,测上点和离点就够了,内点可以少测甚至不测。因为内点已经在等价类划分中覆盖过了。但如果你时间充裕,或者这个功能特别关键,那就全测。
实战案例一:密码长度验证
需求:用户注册时,密码长度要求为 6 到 16 个字符(包含 6 和 16)。
第一步,确定输入条件:密码字符串,长度范围 [6, 16]。
第二步,识别边界:最小值 6,最大值 16。
第三步,确定上点、内点、离点:
- 上点:6, 16
- 内点:10(随便选)
- 离点:5, 17
第四步,生成测试用例:
| 测试用例编号 | 输入(密码长度) | 预期结果 | 覆盖点 |
|---|---|---|---|
| TC-01 | 5 个字符 | 提示「密码长度不足」 | 离点(下边界) |
| TC-02 | 6 个字符 | 验证通过 | 上点(下边界) |
| TC-03 | 10 个字符 | 验证通过 | 内点 |
| TC-04 | 16 个字符 | 验证通过 | 上点(上边界) |
| TC-05 | 17 个字符 | 提示「密码长度超限」 | 离点(上边界) |
避坑指南:我曾经测过一个系统,密码长度限制是 6-16 位,但开发在数据库里把字段长度设成了 16 个字符。结果输入 16 位密码能通过验证,但存不进数据库,直接报 500 错误。所以,边界值测试不仅要测前端验证,还要测后端存储。
实战案例二:温度范围控制
需求:一个恒温箱控制系统,温度设定范围为 -10°C 到 50°C(不包含 -10 和 50)。
注意,这里是开区间 (-10, 50)。也就是说,-10 和 50 本身是无效的。
上点:-9 和 49(因为 -10 和 50 不在区间内,所以紧挨着它们的有效值是上点)
内点:20
离点:-10 和 50(离边界最近但无效的点)
| 测试用例编号 | 输入(温度) | 预期结果 | 覆盖点 |
|---|---|---|---|
| TC-06 | -10°C | 提示「温度过低」 | 离点(下边界) |
| TC-07 | -9°C | 设定成功 | 上点(下边界) |
| TC-08 | 20°C | 设定成功 | 内点 |
| TC-09 | 49°C | 设定成功 | 上点(上边界) |
| TC-10 | 50°C | 提示「温度过高」 | 离点(上边界) |
你看,同样是边界值分析,开区间和闭区间的测试数据完全不同。这就是为什么我反复强调:拿到需求先确认区间类型。
边界值分析法的知识体系
下面这张图,是我自己整理的边界值分析法知识结构。你可以把它当作一张「地图」,学完本章后对照着回顾一下。
几点补充建议
最后,分享几个我个人的小习惯:
- 边界值要结合等价类一起用。等价类划分帮你「选代表」,边界值分析帮你「卡边」。两者是黄金搭档。
- 多边界的情况要小心。比如一个输入同时有长度限制和字符类型限制,那就要分别对每个边界做测试。
- 别忘了「0」和「空」。很多系统的边界是从 0 开始的,比如数组索引、分页页码。0 这个边界特别容易出问题。
我的经验:如果你时间只够测 3 个点,那就测「最小值-1」「最小值」「最大值+1」。这三个点能覆盖 80% 的边界缺陷。剩下的 20%,靠内点和正常值去补。
好了,边界值分析法就讲到这里。记住一句话:边界是缺陷的温床,测试要往边上靠。
可可精品资料库