跳到主要内容

边界值分析

边界值分析是在有序取值中,重点检查处理规则交界处及其附近取值的方法。它适合发现上限下限写错、开闭区间理解不一致,以及长度和时间判断差一个单位的问题。

边界不是一组固定数字。先明确范围、是否包含端点、取值单位和取整规则,才能推导出有意义的输入。

1. 面试核心​

先记住这几条,再读正文
  • 边界来自处理规则发生变化的位置。整数范围、文件字节数和到期时刻都有边界,格式类别本身则未必存在大小顺序。卡 · 有序范围与取点
  • 取点要核对端点及相邻规则。“前一个”和“后一个”取决于最小有效单位,不能对所有类型都简单加减 1。卡 · 单位、表示与精度
  • 空值、缺失和错误类型不是普通数值边界;它们需要独立的输入分类。长度为零也不等于字段不存在。卡 · 空值与特殊输入
  • 多个条件同时限制结果时,分别触发每条限制,再检查交界和组合。商品上限通过不代表库存限制也正确。卡 · 综合题

2. 有序范围与取点​

边界值分析建立在 等价类划分之上。若数量只允许 1 到 99 的整数,就有低于下限、合法区间和高于上限三个有序类别。

围绕合法区间的两个端点,可以先选择:

位置输入预期
下限外侧0拒绝
下限本身1接受
下限内侧2接受
上限内侧98接受
上限本身99接受
上限外侧100拒绝

再保留一个普通有效值,例如 25,用来区分“只支持边缘值”和“整个范围的正常行为”。这些期望都还要以库存、身份等其他条件满足为前提。

这六个值针对示例中的两个合法端点,不是所有系统的固定答案。如果规则改成 1 < quantity < 99,则 1、99 的期望都改变;如果只允许偶数,合法值之间的间隔和类别又不同。

使用“两值边界”“三值边界”等覆盖口径时,应先列出到底把哪些类别端点算作边界,再计算覆盖项。不同题设对类别和可取值范围的定义会影响取点,不能仅凭一个公式给出数量。

3. 单位、表示与精度​

相邻输入要能被系统准确表示,并且符合约定单位。下面几个约束看起来都是一个“上限”,取点方式却不同:

约束需要明确可以选择的检查
文件不超过 5 MiB1 MiB = 1,048,576 字节5,242,879、5,242,880、5,242,881 字节
金额最低 0.01 元以分存储,还是允许更多小数位0 分、1 分、2 分,另测非法精度
密码长度 8 到 64字符、码点、字节还是可见字符对明确的长度计量构造 7、8、9、63、64、65
now < expires_at 有效时间精度、时区与判定使用的时钟到期前一个可表示单位、恰好到期、之后

浮点数不能一律用 x ± 0.01 表示最近邻。数学上的连续区间没有紧邻的前后两个实数,而计算机的数值表示和业务精度都有限。应先确定实际输入与比较方式,再选择能揭示舍入和端点问题的数值。

时间测试也应控制时钟。若规定 now == expires_at 已过期,就需要可靠地产生这个状态;让测试线程睡到大约那个时刻,再依赖调度碰中毫秒边界,很难得到可重复证据。

4. 多条件边界​

购物车的数量可能同时受单品限购、库存和单次购买上限约束。假设三者分别为 5、3、99,直接提交 6 得到拒绝,并不能说明系统正确校验了限购 5:库存 3 就足以先拒绝。

可以分开建立环境:

验证目标其他条件取点思路
单品限购 5库存大于 5,其他限制不生效4、5、6
库存 3限购大于 32、3、4
两个限制恰好相同库存与限购都为 5核对允许数量、拒绝原因及一致性
结算时库存减少加入购物车后再改变库存检查重新校验与提示,不只看旧页面

如果两个用户同时购买最后一件商品,还需要控制并发时序并检查最终库存和订单。这属于共享状态竞争,不会因为单线程已经测过 0 和 1 就自动覆盖。

5. 空值与特殊输入​

长度为零属于长度范围,字段缺失属于输入结构,null 属于显式空值。只有契约明确赋予它们相同含义时,才可以讨论合并;它们不是“都在下限附近”就可以只测一个。

边界检查还要看副作用。非法数量被拒绝后,库存、价格和已有购物车记录应该保持什么状态,需要分别核对。只检查页面出现提示,可能漏掉后台已经写入错误数量的实现。

6 · 面试题卡片​

本页题目与参考回答

6.1 什么是边界值分析,怎样为 1 到 99 的整数范围选值?​

考察重点:有序类别、端点含义及取点依据。

相关内容:有序范围与取点。

参考回答

重点验证规则切换处及其附近值,先确认 1 和 99 是否包含在合法范围内。 若二者都包含,可以围绕合法端点选择 0、1、2、98、99、100,分别核对拒绝与接受,再保留普通有效值。

取点数量来自具体类别和覆盖目标。存在步长、额外阈值或开区间时,需要重新推导,而不是机械使用同一组数。

6.2 文件大小、金额和时间的边界都可以用加减 1 来测试吗?​

考察重点:业务单位、可表示值与精度。

相关内容:单位、表示与精度。

参考回答

必须先说明这个 1 是什么单位,以及系统实际接受和比较什么表示。 字节大小可以加减 1 字节,以分存储的金额可以加减 1 分;时间则要根据秒、毫秒等精度和端点包含规则取值。

浮点数没有统一的十进制最近邻间隔。边界测试还需考虑舍入、非法精度和可控时钟,避免数据实际上没有落在计划检查的位置。

6.3 已经测试了空字符串,还需要测字段缺失和 null 吗?​

考察重点:长度边界与结构、类型类别的区别。

相关内容:空值与特殊输入。

参考回答

需要根据契约分别判断,空字符串只覆盖长度为零的字符串。 缺失可能触发默认值,null 可能表示清空,也可能因类型不符被拒绝。

三种表示可能走不同路径,不能因为都没有可见文字就认为同一个测试足够。

6.4 购物车数量应测试哪些边界,只有最大购买数量够吗?​

题型:综合题

考察重点:单个限制、组合限制与状态变化。

相关内容:多条件边界、空值与特殊输入。

参考回答

除最小值和最大值,还要区分限购、库存、数据类型以及加入购物车后的状态变化。 分别让每条限制成为真正生效的条件,检查边界内外的返回与副作用。

例如库存低于限购时,不能用一次超限拒绝证明限购逻辑正确。还应检查结算前库存变化和并发购买最后一件商品;单线程数值边界不能替代并发一致性验证。

7. 参考资料​

来源:Coding 101 原文 · 免费阅读,引用请保留出处。内容使用说明