资讯动态

AI 重构老代码,最怕的不是改错,是“改对了但行为变了“

发布时间:2026/10/17 12:50:01 来源:尧图企业网站定制
摘要让 AI 重构老代码最怕的不是它改错是它改对了但行为变了——测试全绿上线才发现。实测最稳的打法不是让 AI 更小心而是重构前先写特征测试characterization test把当前行为锁死再让 AI 动手。本文给出五步可复现清单、三个坑和一个反方观点。## 为什么 AI 重构老代码忽然变敢想了老代码的问题是不敢动。几千行没人敢碰手写特征测试要几周重构收益遥遥无期。AI 把这个账算过来了- snowmanlabs 实测2026-08特征测试让 AI 读代码、列分支、生成用例几小时干完原来几周的活- VSCode 官方文档《Refactor code without changing behavior》2026-10-07先确认测试命令、记录变更前测试结果覆盖不足先补测试再改## 翻车证据AI 重构的安全是幻觉arXiv 2411.04444180 个真实重构任务| 指标 | 数值 ||—|—|| ChatGPT 自主识别重构机会 | 28/180 15.6% || 明确子类提示后成功率 | 86.7% || 方案质量可比/优于人类 | 63.6% || unsafe 比例改功能/语法错误 | 7.4%13/176Gemini 6.6% |arXiv 2605.21537《Articulate but Wrong》LLM 代码现代化自审语义漂移39.7%、语法漂移 12.7%。它自己 review 自己错的地方看不出来。arXiv 2608.00924RefactorAssist9.7% 语法/结构错误括号配对不齐13.7% 是顺手加功能——它觉得该加个变量就加了。结论AI 重构不是不会错是错的姿势你防不住。最阴的是语义漂移行为悄悄变了没人发现。## 反转安全网是先锁死它要改的东西反常识操作改老代码之前先写测试把当前行为锁死——哪怕这个行为是 bug。特征测试characterization test由 Michael Feathers 20 年前提出不验证代码应该做什么只记录代码现在做什么。断言现状不是正确性。为什么 AI 时代它最有用因为 AI 不需要理解代码只需要观察代码——读一遍、列分支、造输入、抓输出。这恰恰是特征测试的做法是 LLM 最擅长的事。社区套路-Behavior-Pinning Test Before Agent Edit改之前先跑老代码输出存成 golden fixtures测试不过就不许 agent 再动-cutler.sg2026-05AI 生成特征测试 mutation testing 验锁变异分数 80% 以上才解锁让 agent 改代码## 五步照着做给数字不给形容词01 圈定范围。一次只让 AI 改一个 seam接口/函数边界别一次扫 20 个文件。Cline 做 64 文件清理靠逐文件确认防漂移aicoderscope2026Aider 在 20 文件仓库级重构最强repository map但改动越大越要先锁行为。02 锁行为。让 AI 生成特征测试。输入清单照 VSCode 官方指南默认值、边界值、非法输入、每个受影响调用方的可观察结果。核心提示词text生成特征测试断言这段代码【现在】的行为不假设它应该怎样。03 验锁。mutation testing 打一遍变异分数 80% 就回去补测试别急着重构。04 差分重构。让 AI 分小步改每步一个 git 提交Aider 默认自动 commit天然可回滚配--auto-test/--test-cmd每改完跑一遍测试。先问它打算怎么改批准了再动。05 对比。重构完特征测试必须全绿。人工抽查diff 里有没有顺手加的优化关键调用方输入输出是否和之前一模一样。一个函数跑通大概 1-2 小时。## 三个坑亲测1.别 mock 掉太多。外部依赖DB、网络、文件mock 到最小不然锁的是你想象的行为不是真实行为。2.别让 AI顺便优化。prompt 明确写只做结构变换禁止修改任何逻辑、常量、返回值。不加这句就是递刀13.7% 的概率。3.别让 AI 自己验收。自审漂移 39.7% 摆在那。验收走特征测试 你本人抽查不是AI 说全绿。## 反方全自动重构派怎么说我让 AI 重构就是为了省事你还让我先写测试“有道理代码年轻、回归覆盖厚特征测试是多余动作靠现有测试兜底就行。特征测试的价值集中在老代码、覆盖薄的地方。更根本的质疑特征测试锁的是现状而现状可能本来就是错的。它防行为变化”不防行为本来就坏。想借重构顺手修 bug特征测试会拦着你——你得主动决定这次允许修哪些差异。边界这五步是给行为必须不变的重构用的重命名、拆函数、改结构。要改行为加功能、修 bug走另一条路别混。## 小结AI 重构老代码最怕的不是改错是改对了但行为变了。特征测试不验证代码对不对它验证代码没变。让 AI 自己验收 AI 的重构等于让考生给自己改分。你让 AI 重构过老代码吗遇到测试全绿、上线翻车了吗评论区聊聊。—内容验真- arXiv 2411.04444ChatGPT 识别重构机会 28/18015.6%细化提示 86.7%63.6% 可比/优于人类13/1767.4%unsafeGemini 9/1376.6%- arXiv 2605.21537semantic drift 39.7%、syntactic drift 12.7%- arXiv 2608.009249.7% 语法/结构错误13.7% 添加新功能或变量- VSCode 官方《Refactor code without changing behavior》2026-10-07- snowmanlabs 2026-08特征测试 AI 数小时 vs 手写数周- cutler.sg 2026-05mutation score 80% 门槛- aicoderscope 2026-05Cline 64 文件逐文件确认

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑