AI 生成代码 · 评审清单
每次合并前过一遍。可复制到 PR 描述。
功能与正确性
- [ ] 是否满足验收句(输入/输出/错误)?
- [ ] 边界:空值、0、超长、并发?
- [ ] 失败路径是否明确(抛错 / 返回 Result)?
安全
- [ ] 无密钥硬编码
- [ ] 用户输入是否校验/转义?
- [ ] SQL/命令是否参数化?
- [ ] 鉴权是否在 服务端 执行?
ts
// ❌ 危险:拼接 SQL
const q = `SELECT * FROM users WHERE id = '${id}'`
// ✅ 参数化
await db.query('SELECT * FROM users WHERE id = $1', [id])bash
# ❌ 危险:未校验的 shell 拼接
eval "rm -rf $USER_INPUT"
# ✅ 避免 shell;或白名单
printf '%s\n' "$USER_INPUT" | grep -E '^[a-z0-9_-]+$'性能与资源
- [ ] 无 N+1 查询
- [ ] 无无界
SELECT *大表 - [ ] 超时 / 重试是否有上限
| 检查 | 命令示例 |
|---|---|
| 依赖体积 | npx cost-of-modules / pnpm why lodash |
| 慢查询 | 看 DB EXPLAIN ANALYZE |
可维护性
- [ ] 命名可读
- [ ] 无死代码 / 注释掉的大段
- [ ] 日志含 correlation id(如有)
- [ ] 公共 API 有简短注释
测试
bash
# 至少覆盖改动路径
npm test -- --coverage
go test ./... -count=1
cargo test- [ ] 有失败用例证明校验有效
- [ ] 无 flaky(依赖真实网络要 mock)
发布
- [ ] 迁移可回滚
- [ ] 特性开关?(高风险)
- [ ] 文档/CHANGELOG 需要更新?
PR 描述模板
markdown
## 为什么
## 怎么做
## 风险
## 测试计划
- [ ] 单测
- [ ] 手测步骤:...