女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

机器人找最大值时总拿 0 当起点。女孩拿出三张负数卡,它立刻露出了问题。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 普通例子2、5、3
  2. 边界例子只有一个值
  3. 特殊数据全是负数
  4. 重复数据最大值出现多次

边界测试针对最容易被默认假设漏掉的输入。

要根据题目允许范围选择,例如最小数量、最大数量、相等值和恰好等于阈值的数。

01什么叫边界情况?

边界情况(Edge Case)是位于问题“边缘”的输入。

例如数组长度规定 1 到 n,那么长度 1 和最大允许长度就是重要边界。

02最常见的边界有哪些?

最小规模

0 或 1 个元素(若题目允许)。

最大规模

接近题目上限。

极端值

最小 / 最大整数。

特殊结构

全相等、全递增、全递减。

03为什么下标特别容易出边界问题?

长度为 n 的数组合法下标是:

0 到 n - 1

因此 i < ni <= n 可能只差一个字符,却决定是否越界。

04除法有什么边界?

除数为 0 是典型边界。

if (b != 0) {
    result = a / b;
}

05搜索有什么边界?

  • 起点就是终点
  • 完全没有路径
  • 只有一个节点
  • 图不连通

06为什么最大数据也要测试?

因为小数据正确,不代表不会:

  • 超时
  • 整数溢出
  • 递归太深
  • 内存超限

07怎样建立边界检查习惯?

你已经知道了什么

  • 边界情况位于输入和规则的边缘。
  • 最小规模、最大规模、极端值都值得测试。
  • 数组下标、除零、空数据是常见风险点。
  • 最大数据还能暴露复杂度和溢出问题。
  • 主动构造边界测试是重要解题习惯。

下一篇:样例通过了,为什么还是错?

轮到你来试一试

最高分可以为负时,最大值初始化为 0 有什么风险?

想好了吗?点开看解释

程序可能输出不存在的 0。非空集合可用第一项初始化。