首页/开发/代码质量与评审速查/重构改动的评审要点
重构手法62 条

重构改动的评审要点

评审重构 PR 时看三点:行为是否等价(测试证据)、动机是否单一(一次只解决一类问题)、是否引入新坏味道(如更长的参数表);重构与功能混提时请作者拆分。

重构改动的评审要点

评审重构 PR 时看三件事:行为是否等价(有没有测试证据)、动机是否单一(一次只解决一类问题)、是否引入新坏味道(比如把长函数拆成一堆更长的参数表)。重构与功能混在同一个 PR 里时,最该做的不是逐行审,而是请作者先拆开——评审者需要先确认行为不变,才可能聚焦在结构上。

基本信息

重点行为等价证据 / 动机单一 / 无新坏味道
证据测试通过、对照说明、必要时给出前后输出
要求重构与功能分离的 PR 结构
节奏小步提交,每一步都能独立解释

评审清单

  • 改动前后的调用方与输出契约是否一致
  • 每一步是否都能独立解释(看提交历史而不只是最终 diff)
  • 是否留下临时过渡物(转发方法、双写、兼容分支)需要后续清理
  • 测试是否随结构调整同步更新,而不是被删掉
  • 有没有引入新的坏味道:参数表变长、类变成杂物间、抽象只有单一实现
  • 命名变化是否让调用方更好理解,而不是更绕

评审清单

评审清单
□ 行为等价证据在哪?测试/对照说明/前后输出
□ 本 PR 同时解决了几类问题?
□ 提交历史能否逐步解释每一步?
□ 是否留下过渡物?清理计划写了吗?
□ 测试跟随结构调整更新了吗?
□ 新增的抽象目前有第二个使用者吗?

常见问题与处理

问题风险处理
重构与功能混提无法判断行为变化来自哪部分请作者拆分后再评审
顺手改扩大化diff 巨大,评审疲劳无关清理拆成独立 PR
只改不测等价性无证据要求补测试或给出验证方式
过渡物无清理计划双写与转发长期留存在 PR 描述中记录删除时机
对照说明是低成本高收益的证据:作者用一段话说明「改动前行为 X、改动后仍是 X、证据是哪个测试」,评审者就不必逐行推演。没有这段说明的重构 PR,评审成本会陡增。
提交历史本身就是证据:一步一次提交、每次提交都能编译通过,说明作者是在可控节奏下推进。一次性大改动即使结果正确,回滚与定位问题的代价也高得多。

易错点

  • 只看风格不看行为等价证据:回归风险被放过,问题在上线后才暴露
  • 要求一次性拆完所有重构:评审成本转嫁给作者与评审者,最后没人愿意重构
  • 过渡物不登记:双写与转发方法留在代码里,半年后没人记得可以删
  • 评审重点放在命名偏好:真正的结构问题被忽略,讨论还容易变成争论

数据来源与参考

  • Google Engineering Practices(小型 CL 与评审重点)、《重构》第 2 版评审实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌