Skip to content
返回质量保障

审查清单

用一致清单使每审查覆同面: 正确性、安全、性能、可读性、测试。

为什么

无清单代码审查不一致——一审查者重风格、另一重性能、正确性漏因无人查。清单确保每审查覆同关键区: 代码做所声称的吗(正确性)、处理边缘情况吗(健壮性)、安全吗(无注入、无密)、测试了吗(新逻辑覆盖)、可读吗(下开发者懂吗)。清单非填的刚性表;是易忘区的提醒。最有经验审查者受益最多,因经验创盲点——从未被 SQL 注入咬的资深审查者假设已处理,清单提醒查。共享清单也使团队审查一致,质量不依赖谁可审查。

何时使用

每 pull request、团队共享标准。周期审查清单本身加团队常漏项。

如何做

1. 正确性: 代码做所声称的吗?
   - 实现匹配 issue/PR 描述吗?
   - 边缘情况处理了吗(null、空、最大、最小、错误)?
   - 假设记录且有效吗?
   - 用具体例追逻辑

2. 安全: 代码安全吗?
   - 输入验证: 所有外部输入验证和消毒了吗?
   - 认证/授权: 检查正确且每路径上吗?
   - 密: 有硬编码键、密码或令牌吗?
   - 注入: 查询参数化了吗、HTML 转义了吗?
   - 依赖: 新包查已知漏洞了吗?

3. 性能: 代码高效吗?
   - 算法: 复杂度合适吗(O(n) vs O(n²))?
   - 数据库: 有 N+1 查询、缺索引、无界结果吗?
   - 内存: 大对象持比需久吗?
   - 并发: 有竞条件、死锁吗?

4. 可读性: 下开发者懂吗?
   - 命名: 名描述什么非如何吗?
   - 结构: 函数短、单目的、正确抽象层吗?
   - 注释: 解释为什么非什么吗?
   - 一致性: 遵代码库约定吗?

5. 测试: 代码测试了吗?
   - 覆盖: 新逻辑行测试了吗?
   - 边缘情况: 边界条件测试了吗?
   - 失败路径: 错误情况测了非仅快乐路径?
   - 测试质量: 测试断言对的事还是仅无错抛?

示例

// 审查清单(贴 PR 模板)
/*
## 代码审查清单

### 正确性
- [ ] 实现匹配 issue/PR 描述
- [ ] 边缘情况处理(null、空、最大、最小、错误)
- [ ] 假设记录且有效
- [ ] 用具体例追逻辑

### 安全
- [ ] 所有外部输入验证和消毒
- [ ] 认证检查正确且每路径
- [ ] 无硬编码密(键、密码、令牌)
- [ ] 查询参数化、HTML 转义
- [ ] 新依赖查漏洞

### 性能
- [ ] 算法复杂度合适
- [ ] 无 N+1 查询、缺索引、无界结果
- [ ] 无大对象持比需久
- [ ] 无竞条件或死锁

### 可读性
- [ ] 名描述什么非如何
- [ ] 函数短、单目的、正确抽象
- [ ] 注释解释为什么非什么
- [ ] 遵代码库约定

### 测试
- [ ] 新逻辑行测试
- [ ] 边缘情况测试
- [ ] 错误路径测试(非仅快乐路径)
- [ ] 测试断言对的事
*/

// 用清单的审查评论例:
// "安全: userId 来自 req.query 但未验证。
//  攻击者可传 userId=admin。加:
//  const userId = z.string().uuid().parse(req.query.userId);"
//
// "测试: 快乐路径测了但错误情况
//  (用户未找到)未测。加 404 路径测试。"

常见问题

  • ⚠仅审查 diff 漏上下文——新函数孤立看对但从未查授权路径调,审查者未见调用点。
  • ⚠勾每框但不实际追逻辑——清单标完但审查者未跑代码或追边缘情况,空指针异常发。
  • ⚠把清单当填的门而非思考工具——审查者 30 秒勾每框,审查无清单外价值。
  • ⚠加清单项但永不移过时——清单长到 50 项、无人读、变仪式非有用工具。

最佳实践

  • ✓用共享清单作覆区提醒非填表——价值在引思考非勾框。
  • ✓读周围代码非仅 diff——新函数孤立可能对但调用上下文错。
  • ✓用具体例追逻辑特别边缘情况——这抓读代码抓不到的 bug,因代码看起来对但未处理 null。
  • ✓保持清单短(每区 5-10 项)移团队总对的项——50 项清单被忽略;10 项被用。