核心要点
定义:在不改变外部可观察行为的前提下改进内部结构。
前提:有可靠测试保护,先补测试再动手。
时机:加功能前、发现坏味道、代码评审、修 bug 时顺手清理。
方法:小步修改 + 频繁提交,每步都跑测试保持绿色。
标准回答
什么是重构
重构指在不改变外部行为的前提下调整内部结构,使代码更易读、易改。它与「加功能」「修 bug」应分开提交,便于回滚和评审。
何时重构
- 添加新功能前,先让结构便于扩展(先重构后加功能)。
- 闻到坏味道:重复代码、过长函数、过大类、命名混乱。
- 代码评审或调试时发现可改进点。
如何安全重构
- 先确保有覆盖该行为的测试,缺失则补「特征测试」。
- 小步修改,每步只做一类变换(如提炼函数、改名)。
- 每步后立即跑测试,绿色才提交。
- 善用 IDE 自动重构,减少手误。
常见误区
⚠️ 常见踩坑
在没有测试保护下做大规模重构,等同高风险改写;以及「为重构而重构」,无业务价值地反复打磨。
追问
追问 1:没有测试的遗留代码怎么重构?
先用「特征测试」固定当前行为(即便行为有 bug 也先记录),再用接缝技术打断依赖以便测试,最后在测试保护下小步重构。参考《修改代码的艺术》。
追问 2:重构和重写有什么区别?
重构是渐进、保持行为、随时可上线的小步改进;重写是推倒重来,风险高、周期长,容易丢失隐含需求。多数情况优先持续重构。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。