接手一个跑了六年的老项目是什么体验?我在上个月体会得淋漓尽致:一个核心订单模块,3万多行代码,没有单元测试,注释和代码对不上,一个方法动辄两三百行,变量命名从a1到a99。业务方要求"重构,但不能改变任何外部行为"。这种活儿放在以前,我的预估工期是两个月,还不一定保证质量。这次我用AI辅助,四个星期完成,重构后线上零事故。这篇把整个过程和真实心得记录下来。
先说结论:AI不能替你做重构,但能把重构的"脏活累活"吃掉八成。老代码重构的核心难点不在"改",而在"理解"——3万行代码里,哪些是核心逻辑、哪些是历史遗留的死代码、哪些是"看着没用但删了就炸"的隐式依赖,光搞清楚这些就要花掉一半时间。而"理解代码"恰恰是AI的长项。
我的策略是:AI负责理解、分析和生成初稿,我负责审阅、决策和验证。这个分工是整件事能成的关键。
我把模块的所有代码文件(约60个文件)分批发给AI,让它输出:
这一步产出让我震惊:AI梳理出模块里竟然有12处完全相同的支付状态判断逻辑、3个"僵尸方法"(没有任何调用方)、还有一处隐藏的全局状态依赖(一个静态变量被多处隐式修改)。这些是人工要读一周才能发现的东西。
我按"依赖关系从底层到上层"的顺序,把模块拆成20个子模块,逐个让AI出重构方案:
以下是[子模块A]的现有代码。请给出重构方案:1) 提取重复逻辑 2) 拆分过长方法 3) 规范命名 4) 保持外部行为完全不变 5) 输出重构后的完整代码。
AI生成后,我做三件事:读一遍理解改动、跑一遍现有测试、对比行为是否一致。这一步的节奏是:每天处理2-3个子模块,20个子模块约两周完成。
这是我最得意的一步。重构最大的风险是"行为悄悄变了"。我的校验方法是:把重构前后的代码分别丢给AI,让它对比两者在相同输入下的行为是否一致,列出所有差异点。AI输出的差异清单,我再人工逐个确认是"真实差异"还是"重构误伤"。整个重构过程中,AI帮我发现了5处细微的行为变化(比如一处边界条件的判断顺序变了),全部在测试阶段拦下来了。
老模块没有单元测试是重构的大忌。我让AI基于重构后的代码反推生成单元测试:先写核心业务逻辑的测试,再补边界和异常场景。AI生成测试的速度比我手写快5倍以上,虽然部分测试断言需要我修正,但覆盖骨架一下就搭起来了。重构结束时,这个模块的测试覆盖率从0%提升到68%。
指标 | 预估(纯人工) | 实际(AI辅助) |
|---|---|---|
工期 | 2个月 | 4周 |
代码量 | 3万行 | 重构后约2.1万行(-30%) |
重复代码 | 多处 | 全部消除 |
测试覆盖率 | 0% | 68% |
线上事故 | — | 0起 |
团队review人力 | — | 我+1名同事 |
这次重构让我对"AI辅助重构"有了清晰的认知:AI是"阅读理解器"和"初稿生成器",人是"决策者"和"验收者"。它把最耗时、最枯燥的"读懂老代码"和"写重构初稿"两个环节压缩了80%,但"改什么、怎么改、改完对不对"这三个判断,永远是人做的。
如果你也要重构老代码,我的建议:
老代码重构没有银弹,但AI确实把"不可能的任务"变成了"辛苦但可控的任务"。如果你正被一个3万行的老模块折磨,不妨试试这个四步法。