用 Claude 3.5 Sonnet 快速重构旧项目的遗留代码并实现单元测试
面对一个积了三年灰、没有文档且全是 500 行以上巨型函数的旧项目,最忌讳直接把整个文件扔给 AI 说「帮我重构」。这么做大概率会导致 Claude 在中间部分偷懒,或者在重构时丢失一些隐蔽的业务逻辑。
配合
我的实操路径是:先让 AI 做「逻辑审计」,再进行「原子化拆分」,最后补测。
第一步是建立上下文。我不会直接传代码,而是先喂一个 .cursorrules 或者在对话开头通过具体指令限制它的重构风格。比如要求它必须遵循单一职责原则,且禁止删除任何原有的错误处理逻辑。
具体的 Prompt 技巧:
你现在是一个资深的重构专家。请分析以下代码,不要直接修改,先以列表形式输出:
1. 该函数承担的所有具体职责(识别出隐藏的副作用);
2. 潜在的逻辑漏洞或过时的语法;
3. 如果将其拆分为 3-5 个小函数,建议的函数名及其输入输出。在拿到这份审计清单并确认无误后,我才开始执行拆分。这里有个关键点:强制要求它在重构的同时,为每个新拆分的函数编写对应的 Jest/Pytest 测试用例。 这样可以确保重构后的行为与原代码完全一致。
实战操作流:
1. 选中巨型函数 → Cmd+K → 「参考刚才的分析,将逻辑拆分为独立函数,并为每个函数生成单元测试,确保覆盖边界情况」。
2. 运行测试 → 发现 Bug → 将报错信息直接贴回 → 修正。
踩过的坑:
最典型的坑是 AI 倾向于把复杂的 if-else 嵌套直接简化掉,导致某些极端的边缘 Case 丢失。解决办法是要求它在重构前,先将原代码的逻辑分支写成伪代码流程图,确认逻辑闭环后再写代码。
效率提升点:
利用 Cursor 的 @Codebase 功能,在重构时加上 @Files 关联相关的类型定义文件。这样 Claude 3.5 Sonnet 能精准识别出旧代码里那些模糊的 any 类型,在重构过程中顺手把 TS 类型补全,一次性解决了「代码腐烂」和「类型缺失」两个问题。
重构前后的对比示例(伪代码):
原代码: 一个 300 行的 handleOrder() 函数,混杂了校验、数据库读写、邮件发送。
重构后:
validateOrder()→ 纯函数,易于测试。updateOrderStatus()→ 数据库操作,独立 Mock。sendOrderNotification()→ 异步任务,独立解耦。
配合
npm test 实时跑通,整个过程比手动重构快了至少 3 倍,且测试覆盖率从 0% 提升到了 80% 以上。 免费 AI 工具箱 · 全部完全免费
全部回复 (0)
还没有回复,来发第一条吧!
