重构改动的评审要点
评审重构 PR 时看三件事:行为是否等价(有没有测试证据)、动机是否单一(一次只解决一类问题)、是否引入新坏味道(比如把长函数拆成一堆更长的参数表)。重构与功能混在同一个 PR 里时,最该做的不是逐行审,而是请作者先拆开——评审者需要先确认行为不变,才可能聚焦在结构上。
基本信息
| 重点 | 行为等价证据 / 动机单一 / 无新坏味道 |
|---|---|
| 证据 | 测试通过、对照说明、必要时给出前后输出 |
| 要求 | 重构与功能分离的 PR 结构 |
| 节奏 | 小步提交,每一步都能独立解释 |
评审清单
- 改动前后的调用方与输出契约是否一致
- 每一步是否都能独立解释(看提交历史而不只是最终 diff)
- 是否留下临时过渡物(转发方法、双写、兼容分支)需要后续清理
- 测试是否随结构调整同步更新,而不是被删掉
- 有没有引入新的坏味道:参数表变长、类变成杂物间、抽象只有单一实现
- 命名变化是否让调用方更好理解,而不是更绕
评审清单
评审清单
□ 行为等价证据在哪?测试/对照说明/前后输出
□ 本 PR 同时解决了几类问题?
□ 提交历史能否逐步解释每一步?
□ 是否留下过渡物?清理计划写了吗?
□ 测试跟随结构调整更新了吗?
□ 新增的抽象目前有第二个使用者吗?常见问题与处理
| 问题 | 风险 | 处理 |
|---|---|---|
| 重构与功能混提 | 无法判断行为变化来自哪部分 | 请作者拆分后再评审 |
| 顺手改扩大化 | diff 巨大,评审疲劳 | 无关清理拆成独立 PR |
| 只改不测 | 等价性无证据 | 要求补测试或给出验证方式 |
| 过渡物无清理计划 | 双写与转发长期留存 | 在 PR 描述中记录删除时机 |
对照说明是低成本高收益的证据:作者用一段话说明「改动前行为 X、改动后仍是 X、证据是哪个测试」,评审者就不必逐行推演。没有这段说明的重构 PR,评审成本会陡增。
提交历史本身就是证据:一步一次提交、每次提交都能编译通过,说明作者是在可控节奏下推进。一次性大改动即使结果正确,回滚与定位问题的代价也高得多。