老仓库现代化重构工作流

📌 适用场景:遗留项目重构 / 技术债偿还

每个 PR 合入前用 Claude Code 跑一遍,重点检查"重构是否引入行为变更"以及"测试是否真的覆盖了改动点"。

8.3 /10 ★★★★☆
🪜 5 个步骤 🛠️ 4 款工具 ⏱️ 2-4 周(按模块拆分) 🎯 高级 🕒 更新于 2026-07-08

🛠️ 涉及工具清单

📋 完整步骤

  1. 1

    仓库地图绘制

    把整个仓库交给 Claude(100 万 token 上下文),让它产出一份"模块依赖图 + 高复杂度文件 Top 20 + 重构优先级"。

    使用工具: Claude
    💡 用 git ls-files + cat 把代码塞进同一条提示,比逐文件提问要有效得多。
  2. 2

    制定模块拆分计划

    让 Claude 把高优先级模块拆成 8-12 个可独立 PR 合并的"原子重构",每条原子重构带验收标准。

    使用工具: Claude
    💡 每个原子重构应该独立通过测试 —— 让 Claude 同时给出该模块的最小测试集。
  3. 3

    单 PR 重构执行

    在 Cursor 的 Composer 里加载该模块的所有文件,按上一步的验收标准让它一次性给出 diff。

    使用工具: Cursor
    💡 Composer 的"diff-only"模式比直接覆盖文件更安全 —— 你能逐 hunk 接受。
  4. 4

    批量机械化变更

    一些重复变更(比如 import 路径迁移、API 命名规范统一)适合本地跑 CodeLlama,免费且快,避免拿付费 API 跑无脑替换。

    使用工具: Code Llama
    💡 ollama run codellama:34b + ripgrep 组合是经典本地批改三件套。
  5. 5

    最终审查与合入

    每个 PR 合入前用 Claude Code 跑一遍,重点检查"重构是否引入行为变更"以及"测试是否真的覆盖了改动点"。

    使用工具: Claude Code
    💡 让它输出"风险清单 + 建议手动复查的代码段",作为 code reviewer 的 checklist。

老仓库现代化重构工作流

是什么

老仓库现代化重构工作流是一套面向遗留代码库的渐进式 AI 辅助重构方法论,覆盖从代码理解、模块拆分、单 PR 执行、批量机械变更到最终审查的全流程。核心理念是”AI 出方案 + AI 出 diff + 人决定合入”——把理解旧代码这种机械但高脑力消耗的工作交给 AI,把判断架构方向保留给人类。

这套工作流针对 5 万行以上的中型遗留仓库设计,假设代码库有以下特征:

  • 缺乏完整文档,作者已离职
  • 测试覆盖率不足(< 30%)
  • 存在大量重复/冗余代码(import 混乱、命名不一致、模块间耦合高)
  • 单个模块可独立重构,不需要全量重写

准备工作

前置条件

条件说明检查方式
仓库可本地运行确保能在本地完整构建+跑测试npm run build && npm test
至少一条 CI 流水线用于验证每个 PR 不破坏既有功能确认 CI 配置存在
4 种工具可用Claude、Cursor、CodeLlama(本地)、Claude Code逐一验证安装
Git 提交权限能够创建分支、提 PR、合并git push --dry-run

工具安装确认

  • Claude(Anthropic):claude CLI 已配置 API key,支持 100 万 token 上下文
  • Cursor:安装 Composer 插件,确认 diff-only 模式可用
  • CodeLlama(本地):ollama run codellama:34b 可调用,无额外 API 费用
  • Claude Code(Anthropic):claude code CLI 已安装,有 SWE-Bench Verified 75%+ 能力

安全底线

  1. 每步可回滚:每个原子 PR 单独分支,合入前确认可以单独 revert
  2. 测试先行:目标模块如果没有测试,先生成 characterization test(记录当前行为),再开始重构
  3. 不要相信 AI 说没问题:合入前必须跑一次完整测试 + 人工 smoke test

核心流程

阶段 1:理解(占 20% 时间)

这一步只用 Claude,因为它是当前少数能稳定吃下整个中型仓库(10-20 万行)的模型之一。不要急着改代码,先确认你和 AI 对仓库的理解一致。

具体操作:

  1. git ls-files | xargs cat 把全部源码塞进 Claude 的一条提示
  2. 让 Claude 产出三份输出:
    • 模块依赖图(text-based Mermaid 或 ASCII)
    • 高复杂度文件 Top 20(基于 cyclomatic complexity 估算)
    • 重构优先级排序(低风险高收益 → 高风险低收益)
  3. 根据输出制定原子 PR 拆分计划(8-12 个可独立合入的 PR)

阶段 2:执行(占 60% 时间)

按”原子 PR”节奏推进。每个 PR 的约束:

  • 单次 diff ≤ 500 行(超限需进一步拆分)
  • 独立通过 CI 测试
  • 有明确验收标准(以阶段 1 的 checklist 为准)

执行路径:

  • 复杂多文件变更 → Cursor Composer 的 diff-only 模式(逐 hunk 确认)
  • 重复机械变更(import 迁移、命名统一、API 路由重命名)→ CodeLlama 本地批量替换
  • 单文件简单重构 → Claude Code 内联编辑

CodeLlama 批量批改组合命令:

# 示例:统一 import 路径
rg 'from old-pattern' --files-with-matches | xargs -I{} sh -c 'ollama run codellama:34b "Replace all old-pattern imports with new-pattern in file {}"'

阶段 3:验收(占 20% 时间)

Claude Code 跑最终 review,人工合入。这一步必须保留人为闸门——重构最大的风险不是代码丑,而是行为变更被偷偷引入。

验收 checklist:

  1. Claude Code 输出”风险清单 + 建议手动复查的代码段”
  2. 针对风险清单逐条人工确认
  3. 运行完整 CI + 人工 smoke test
  4. 只有全部通过后才合入主干

踩坑记录

P1:Claude 大仓库上下文溢出

100 万 token 上下文在极端情况下仍可能溢出(如 monorepo 包含大量二进制/生成文件)。解决方案:用 .claudeignore 排除 node_modules/dist/build/*.lock 等非源码文件。

P2:Cursor Composer 一次性修改过多文件

Composer 在处理 10+ 文件的批量修改时可能出现 diff 顺序错误。解决方案:每个原子 PR 严格控制在 5 个文件以内,超过则拆分为子步骤。

P3:CodeLlama 本地批改质量不稳定

本地模型(34B)在复杂重构场景下可能产生不完整的替换或误改。解决方案:

  1. 仅用于机械性、模式固定的替换
  2. 每次替换后先 diff 再提交
  3. 替换后的文件必须通过 lint + test

P4:原始模块无测试覆盖面

目标模块如果没有测试,AI 重构引入行为变更的风险大幅上升。解决方案:先用 Cursor 或 Claude 生成 characterization test(记录 old code 的实际输入输出),作为后续重构的安全网。

P5:合入后 CI 红但本地绿

AI 工具可能在修复冲突时引入微妙的差异(换行符、编码、文件权限)。解决方案:每个 PR 合入前再跑一次 CI,不要在本地绿后就直接合入。

FAQ

Q:这套工作流适合多大代码库?

最适合 5-50 万行的中型仓库。小于 5 万行直接用 Claude Code 全量处理更快;大于 50 万行需要先拆分子仓库或独立服务。

Q:一定要 4 个工具全用吗?

不是。核心路径是 Claude(理解)→ Cursor(执行)→ 人工合入。CodeLlama 是可选优化项(降低 API 成本),Claude Code 是可选增强项(提升审查质量)。

Q:CodeLlama 34B 能跑在什么硬件上?

34B 量化版(Q4_K_M)需要约 20GB VRAM,建议 RTX 4090 24GB 或 M2 Ultra 64GB。8GB 以下显存的设备建议换用 CodeLlama 7B 或直接用 API。

Q:评估一个仓库能否用这套工作流需要多久?

1 天。用 Claude 走完整仓库分析,产出模块依赖图和 Top 20 高复杂度文件,当天就能判断是否可行。

Q:AI 重构后代码风格不一致怎么办?

在 Cursor 中使用 .cursorrules 定义项目代码规范,每个 PR 合入后跑一次 ESLint + Prettier(或其他 formatter),确保全局风格统一。

参考资料

📊 评分与标签

评分说明

总分 8.3/10 · P_优选

📊 可观测社区指标(数据核验日期:2026-07-08)

  • 本工作流为 MagicNetWorld 原创方法论,无独立 GitHub 仓库
  • 引用工具 GitHub Stars:Cursor getcursor/cursor ★33k, 🔱2.3k | CodeLlama meta-llama/codellama ★16.3k, 🔱1.9k(仓库已归档) | Claude Code anthropics/claude-code ★137k, 🔱22k
  • SWE-Bench Verified 参考:Claude Code 75%+(官方基准)

📋 流程完整性 2.5/3.0

  • 五步覆盖理解→拆分→执行→批改→验收,三阶段时间占比(理解20%/执行60%/验收20%)清晰
  • 原子PR策略(单次改≤500行)和自动化验收(lint+test+CI全绿)有实操指导价值
  • 对比 Swimm’s AI-driven docs:Swimm 侧重文档与代码同步,本工作流侧重执行端到端流程覆盖;Swimm 缺少批量机械变更环节
  • 对比 OpenRewrite(by Moderne):OpenRewrite 擅长声明式批量重构规则(Java/C#),覆盖更广但学习曲线陡峭;本工作流更灵活,不限于特定语言

🔄 可复用性 2.1/2.5

  • 原子PR节奏+验收标准(全绿+覆盖率不降+人工抽查10%)可跨仓库、跨语言复用
  • CodeLlama本地批改降低了API成本,适合预算有限的团队
  • 对比 Refact.ai:Refact.ai 提供 IDE 内集成重构和批量规则引擎,但缺乏本工作流的”理解→执行→验收”三阶段框架
  • 对比 Gemini Code Assist:Google 的 AI 辅助重构工具深度集成 Cloud Workflows,适合 GCP 生态;本工作流工具无关性更强

📖 文档清晰度 1.7/2.0

  • 每阶段有具体操作指引(Claude仓库级理解→Cursor多文件diff→CodeLlama本地批改→Claude Code审查),含工具选型表和注意事项
  • 新增踩坑记录(5 个常见问题)和 FAQ(5 个高频问题),覆盖实践中的主要风险点
  • 对比 GitHub Copilot Workspace:Copilot Workspace 提供自然语言→PR 的流程,文档着重描述界面操作;本工作流文档更侧重人机协作分工和工程决策
  • 对比 Sourcegraph Cody:Cody 的文档以代码搜索和上下文获取为主,不提供端到端流程指引

🔧 工具集成 1.2/1.5

  • 4 工具分工明确——Claude(仓库级理解/规划)、Cursor(Composer多文件diff编辑)、CodeLlama(本地免费批改)、Claude Code(审查验证),形成”读→改→审”闭环
  • 缺少 CI/CD 原生集成方案——用户需要自行配置 GitHub Actions 或 Jenkins 接入验证环节
  • 对比 Follow AI(CodeRabbit):CodeRabbit 直接集成 GitHub PR review 流程,自动化程度更高但侧重审查环节;本工作流更完整地覆盖理解到审查全链路
  • 对比 Snyk AI Fix:Snyk 专注安全和依赖修复,与本工作流定位不同;但可以在本工作流的验收阶段集成 Snyk 作为补充

💡 创新性 0.8/1.0

  • “AI出方案+AI出diff+人决定合入”的人机分工模型在老仓库重构场景下有独特的工程价值——把”理解旧代码”这种机械但高脑力消耗的工作交给AI,把”判断架构方向”留给人类
  • 原子PR+自动化验收的节奏设计从软件工程迁移到AI辅助开发,有方法论价值
  • 但三阶段框架(理解→执行→验收)并非独创——业界已有类似四阶段理念(如 buildfastwith.ai 的四阶段框架),本工作流的创新在于具体的工具分工和操作指引
  • 对比 DevOps Infinity: 提供 AI 代码重构的综合工作流平台,但商业闭源;本工作流开源透明,用户可完全掌控流程

评分依据可追溯至公开来源,每项分数均有明确理由和数据支撑。

🏷️ 标签说明

📋 来源与核验记录