# 边界值与输入校验方法（boundary）

> 输入输出型功能的用例设计方法（何时选它见 `../testing-principles.md` 第 2 节）。
>
> **定位（2026-08-23 R5）：本文件是方法参考，不是执行点。**强制执行的边界纪律已内联到
> test-case-writing 阶段三「维度核对」第 2 条（每条时间类规则至少 1 条双侧边界用例）
> 与第 3 条（负向底数）；数值类边界的七点公式与等价类划分按本文件加深，供强模型/高价值项目选用。
> （依据：评测轮实测 2/2 任务边界维度零增益——注入本知识文件不改变弱模型行为，
> 约束必须在生成路径内联才生效。）

## 1. 等价类划分

每条输入规则先划**有效等价类**与**无效等价类**，每个等价类至少一条用例：

```text
规则示例：单笔提现金额为 10–50000 元整数
有效类：10（最小）、50000（最大）、1000（常规）
无效类：9、50001、0、-5、0.5（小数）、"abc"、空、超大数（1e10）
```

## 2. 边界值取值公式

对每个数值/长度/数量边界，取七点：

```text
空 / 最小值 / 最小-1 / 最小+1 / 最大值 / 最大+1 / 超大值
```

字符串长度、列表条数、文件大小、分页页码同理。**边界依据**必须来自文档或代码（常量、校验规则所在 `文件:行`，落附录），不得凭通用经验猜边界。

## 3. 校验规则 × 写入路径（二阶交叉，高发 bug 区）

同一条校验规则必须在**每条写入路径**上分别验证——校验常只挂在创建，编辑/重提路径绕过校验是最高发的真实 bug：

```text
写入路径：创建 / 编辑 / 重新提交 / 导入 / 批量修改 / API 直调
校验规则：每条规则一行
逐格问：这条规则在这条路径上验过吗？
```

## 4. 常见边界清单（逐项过一遍，适用则配用例）

| 类别 | 检查点 |
|------|--------|
| 数值 | 0 / 负数 / 小数位 / 进制 / 单位（分 vs 元）/ 溢出 |
| 字符串 | 空串 / 纯空格 / 超长 / 特殊字符（emoji、引号、`<script>`）/ 全半角 / 不可见字符 |
| 时间 | 时区 / 跨天 / 闰年 2-29 / 结束早于开始 / 1970 / 2038 / 未来超远日期 |
| 集合 | 空列表 / 单元素 / 去重 / 排序稳定性 / 重复元素 |
| 文件 | 0 字节 / 超大 / 类型伪装（改后缀）/ 损坏内容 |
| 编码 | UTF-8 中文 / 生僻字 / 组合字符 / 不同换行符 |

## 5. 校验用例写法要点

- **拦截类用例**预期结果必须写具体：提示文案（或文案关键字）、拦截后表单数据是否保留、拦截后能否修改重提
- **边界值用例**逐值一条，不合并（"输入 0 和 -5 均报错"是两条用例）
- 拦截之后配**重试恢复**用例（拦截 → 改正 → 提交成功），见 `../testing-principles.md` 第 3 节
- 服务端校验与前端校验分别验证：前端绕过（直接调 API / 改请求）时服务端仍应拦截——前端拦了不代表后端拦了
