核心要点

  • 定义:在不改变外部可观察行为的前提下改进内部结构。

  • 前提:有可靠测试保护,先补测试再动手。

  • 时机:加功能前、发现坏味道、代码评审、修 bug 时顺手清理。

  • 方法:小步修改 + 频繁提交,每步都跑测试保持绿色。

标准回答

什么是重构

重构指在不改变外部行为的前提下调整内部结构,使代码更易读、易改。它与「加功能」「修 bug」应分开提交,便于回滚和评审。

何时重构

  • 添加新功能前,先让结构便于扩展(先重构后加功能)。
  • 闻到坏味道:重复代码、过长函数、过大类、命名混乱。
  • 代码评审或调试时发现可改进点。

如何安全重构

  1. 先确保有覆盖该行为的测试,缺失则补「特征测试」。
  2. 小步修改,每步只做一类变换(如提炼函数、改名)。
  3. 每步后立即跑测试,绿色才提交。
  4. 善用 IDE 自动重构,减少手误。

常见误区

⚠️ 常见踩坑

在没有测试保护下做大规模重构,等同高风险改写;以及「为重构而重构」,无业务价值地反复打磨。

追问

追问 1没有测试的遗留代码怎么重构?

先用「特征测试」固定当前行为(即便行为有 bug 也先记录),再用接缝技术打断依赖以便测试,最后在测试保护下小步重构。参考《修改代码的艺术》。

追问 2重构和重写有什么区别?

重构是渐进、保持行为、随时可上线的小步改进;重写是推倒重来,风险高、周期长,容易丢失隐含需求。多数情况优先持续重构。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。