用 AI 重构遗留代码:从 800 行到 3 个模块
用 AI 重构遗留代码 2026 实战:重构前体检(圈复杂度 / 测试覆盖 / 依赖分析)、让 AI 先出重构计划再动手、分步骤提示词模板(拆分 / 提取 hook / 加测试 / 验证)、每步回滚策略,以及一个约 90 分钟的真实案例。
发布 2026-08-02更新 2026-09-28核实 2026-09-28一句话结论
AI 重构遗留代码的成败,不取决于用 Cursor 还是 Claude Code,而取决于流程:先体检 → 让 AI 出重构计划 → 小步提交 → 每步可回滚。最大的坑是「让 AI 一口气大改 800 行」,结果 diff 没法 review、出错没法定位。把大任务拆成 5-10 个可验证的小步,成功率从约 50% 拉到 90%+。
重构前体检
动手前先用工具摸清代码债,别盲目相信 AI 的「我理解了」:
| 检查项 | 工具 / 命令 | 目的 |
|---|---|---|
| 圈复杂度 | npm run lint(开 complexity 规则)/ sonarlint | 找出「该拆」的函数 |
| 测试覆盖 | vitest --coverage / pytest --cov | 确认有没有安全网 |
| 依赖分析 | madge --circular / import 可视化 | 找循环依赖、死代码 |
| 类型健康 | tsc --noEmit / mypy | 确认类型兜底 |
AI 之家 观点:没有测试覆盖的遗留代码,先让 AI 补测试再重构。补测试是重构的「安全网」——否则你永远不知道 AI 改没改坏逻辑。补测试的方法见 用 AI 写单元测试。
让 AI 先出「重构计划」再动手
不要直接说「重构这个文件」。先要计划:
分析 src/legacy/orderService.js(约 800 行),输出重构计划:
1. 识别职责(按业务拆成几个模块)
2. 标出高风险点(状态共享 / 副作用 / 隐式依赖)
3. 给出目标目录结构
4. 列出每步的验证方式(测试 / 手动)
不要改任何代码,只给计划。
AI 给计划后,你 review 风险点,确认无误再进入执行阶段。这一步能挡掉 80% 的「重构改坏逻辑」事故。
分步骤提示词模板
第 1 步:拆分巨型函数
把 processOrder() 按职责拆成 validateOrder / calcPrice / persistOrder 三个纯函数。
保持对外接口不变(仍导出 processOrder)。每拆一个函数补一个单元测试。
第 2 步:提取重复逻辑为 hook / util
扫描 src/ 里重复的日期格式化 / 错误处理代码,提取到 src/utils/。
替换所有调用点,确保行为一致。
第 3 步:加测试
按 用 AI 写单元测试 的三段式提示词补测试。
第 4 步:验证
跑 pnpm test + pnpm build,确认全绿。对比改动前后行为无差异。
每步回滚策略
铁律:每完成一个子目标就 commit。 任何一步翻车,git reset --hard <上一个干净 commit> 即可。
git add -A && git commit -m "refactor: split processOrder into 3 fns"
# 下一步前再 commit,绝不攒一大坨
Claude Code 用户可用 /rewind 回滚到任意 checkpoint(代码 + 对话)。Cursor 用户每步 Accept 前看 diff 预览,别无脑 Accept All。
AI 之家 观点:git 是重构的「无限后悔药」。我们规定「任何单步 diff 不超过 200 行、必须能单独 revert」,AI 改得再顺也不能破这个规矩。
真实案例:90 分钟拆 800 行
一个 Express 的 orderService.js(800 行、0 测试、3 个循环依赖):
| 时间 | 动作 | 结果 |
|---|---|---|
| 0-15 min | 体检 + 让 AI 出计划 | 拆成 3 模块 + 标 2 个高风险点 |
| 15-35 min | 拆函数 + 补测试 | 12 个单测,全绿 |
| 35-55 min | 提取 utils + 去重复 | 删 120 行重复代码 |
| 55-75 min | 去循环依赖 + 类型标注 | tsc 通过 |
| 75-90 min | 全量验证 + commit | 测试 + build 全绿 |
关键:中间第 2 步 AI 把一个副作用写错(改了全局状态),因为每步都 commit,直接
git reset回到上一步,改提示词重跑,没影响其他进度。
常见失败模式与对策
| 失败模式 | 表现 | 对策 |
|---|---|---|
| 大改一次性提交 | diff 没法 review | 拆成 <200 行小步 |
| 改了测试让它「通过」 | 假绿 | 测试先写好再改实现 |
| 破坏对外接口 | 调用方报错 | 第 1 步明确「接口不变」 |
| 引入新依赖 | 包体积膨胀 | 禁忌清单写「不引入未声明依赖」 |
什么时候不该用 AI 重构
这套流程不是万能的。以下四类场景下,让 AI 主导重构的期望收益低于风险,建议改为人主导、AI 辅助:
| 场景 | 为什么不适合 | 更合适的用法 |
|---|---|---|
| 没有测试覆盖的核心链路 | 没有「绿」作为判定基准,AI 改完你无法验证没坏 | 先补** characterization test**(固化当前行为的测试),再谈重构 |
| 并发 / 时序相关代码 | 行为依赖调度顺序,AI 看到的静态代码不足以推断正确性 | 让人写清不变量,AI 只做提取与改名这类语义保持的改动 |
| 跨服务契约变更 | 改动半径超出单个仓库,AI 看不到调用方 | 先做契约评审,把「接口不变」写成硬约束再交给 AI |
| 性能敏感的热路径 | AI 的优化常以可读性为目标,可能引入额外分配或拷贝 | 让人给出优化目标与基准,AI 只做结构整理 |
判断标准其实只有一条:你能不能在改完之后,用一句可执行的话判定「没坏」。能,就可以交给 AI 推进;不能,就先补判定手段。
让 AI 重构的六个纪律
前面各节讲的是步骤,这里收敛成可以贴在团队 wiki 上的六条:
- 先要计划,再要代码。 AI 直接吐 diff 时你失去了拒绝的机会——计划阶段拒绝的成本是零,代码阶段拒绝的成本是已经花掉的时间。
- 一步一个 commit,且每个 commit 都能独立编译 / 通过测试。 「可回滚」的粒度就是 commit 的粒度。
- 测试先于实现。 让 AI 改了测试让它通过的「假绿」,是重构里最贵的失败——它把质量 gate 本身污染了。
- 明确写出「不许做什么」。 不引入新依赖、不改对外接口、不动公共工具函数。负面清单比正面描述更有效,因为模型的默认倾向是「顺手改进」。
- 每步之后人读一遍 diff。 不用逐行,但要看改动范围是否符合预期——本来说改 3 个文件结果动了 11 个,这就是信号。
- 保留一次完整回滚点。 开始重构前打一个 tag 或分支。这条听起来多余,直到你真的需要它。
更新说明
- 2026-09-28:新增「什么时候不该用 AI 重构」与「让 AI 重构的六个纪律」两节;正文步骤、提示词模板与案例未作改动。
- 本文的提示词模板基于 Cursor 与 Claude Code 的通用能力编写,未针对特定版本做一手实测;两个工具的版本节奏较快,斜杠命令与配置项请以各自官方文档为准。
相关阅读
- 工具卡:Cursor | Claude Code
- 方案:大型重构实战 | 用 AI 写单元测试
- 对比:Cursor vs Claude Code
- 概念:Vibe Coding
来源说明:本文基于 Cursor / Claude Code 官方文档及 AI 之家 编辑部重构实践归纳。命令与功能以最新官方文档为准。
相关工具
Aider vs Claude Code:终端 AI 编程双雄怎么选
Aider vs Claude Code 2026 选型对比:开源 BYOK 多模型 vs Anthropic 订阅长任务 Agent,从编程能力、多模型支持、价格、Git 集成、国内可用性和适合人群判断,帮你选对终端 AI 编程工具。
Cursor vs Aider:GUI IDE 还是 CLI?2026 对比
Cursor vs Aider 2026 选型对比:GUI IDE vs Git 原生 CLI,从 Composer vs Architect 双模型、Tab 补全、多模型 BYOK、价格计费、开源与否和适合人群判断,帮开发者选对。Cursor 是闭源 VS Code fork 月费 $20,Aider 是开源 Apache-2.0 CLI 自带 API key。
Augment Code vs Cursor:企业 AI 编程怎么选?Context Engine vs AI IDE 对比
Augment Code vs Cursor 2026 选型对比:Context Engine 全仓索引的企业 AI 平台 vs SpaceX 收购的 AI IDE 天花板,从形态、Context 覆盖、长任务、价格、合规、中文支持和适合人群 8 个维度判断,帮你选对企业 AI 编程工具。
Claude Code vs Cline:CLI AI Agent 怎么选?2026 对比
Claude Code vs Cline 2026 选型对比:Anthropic 官方闭源 CLI Agent vs Apache-2.0 开源 VS Code 插件。从模型绑定、工作流、MCP 支持、价格、隐私和适合人群 6 个维度帮你选对 CLI AI 编程工具。
Claude Code vs Codex CLI:终端 AI Agent 双雄对比
Claude Code vs Codex CLI 2026 选型对比:Anthropic 与 OpenAI 两大官方终端 Agent 的模型、长任务、MCP 生态、Windows 支持、订阅打包价格和国内可用性全方位对比,帮你判断该用哪个终端 AI Agent,以及能不能两个一起用。
Claude Code vs Crush:Anthropic 官方 vs 多模型 TUI(2026 实测选型)
Claude Code vs Crush 2026 选型对比:Anthropic 官方 CLI Agent(Claude only + 长任务最稳 + MCP 一等公民)vs Charmbracelet 开源 TUI Agent(多模型 mid-session 切换 + LSP + FSL-1.1-MIT)。从模型、长任务、生态、价格、国内可用性帮你选对终端 AI 编程工具。
AI 编程工具选型决策树:30 个场景告诉你该用哪个
整合 AI 之家 编辑部 11 篇深度评测的结论:按角色、预算、规模、网络环境四维度的 AI 编程工具决策树。Cursor / Claude Code / Aider / Trae / v0 / Lovable 等主流工具一图看完该选哪个,附 30 个真实场景对应表。
2026 年 AI 编程工具全景图:18 款实测排行
2026 年 AI 编程工具全景图:18 款工具按 IDE / CLI / 插件 / Agent / Builder / 本地 6 桶分类,综合 Top 10 排行,按国内/海外/JetBrains/终端/学生党场景推荐,5 维评分方法论,以及 2026 趋势(Agent 化、MCP、本地化、私有部署)。
Aider 深度评测:把 AI 编程当 git 工作流的极客派最爱
Aider 深度评测:git-native 心智的真实代价、Architect 双模型经济学、与 Claude Code 的决策边界、何时不该选 Aider。AI 之家 编辑部基于官方文档与社区公开反馈整合,非厂商付费内容。