基于AST与LLM的遗留代码重构:绞杀者模式自动化实践
本文提出“AST静态解析+代码Agent局部重构+沙箱闭环校验+绞杀者代理层灰度路由”的渐进式遗留系统重构路径。在十万行级电信BSS模块实践中,实现解耦自动化率72.0%、回归故障率从4.8%降至0.3%,验证了该方法在高耦合、低测试覆盖率遗留系统中的工程可行性。
遗留系统演进必须走向渐进式绞杀
大型企业核心业务系统(如电信领域的 BSS)历经十余年频繁业务变更,历史技术债务持续累积。这类系统普遍具备三大典型特征:
- 1.1 代码逻辑高度耦合:模块间调用关系纵横交错,缺乏清晰的层级边界;
- 1.2 文档与注释缺失:核心业务逻辑仅存在于运行中的代码内;
- 1.3 单元测试覆盖率低:变更改动犹如“在暗室中走钢丝”,曾多次引发跨模块的全局回归缺陷。
面对此类遗留系统,盲目采取“推倒重来”(Big Bang Rewrite)的全量重写策略风险更高[1],一旦遗漏隐式业务逻辑,就会导致项目延期甚至上线失败。然而,单纯依托大语言模型进行大范围代码改写同样面临挑战:LLM 在处理超长上下文时存在逻辑推导衰减,且对隐式全局变量缺乏感知。纯 LLM 全量重写会产生代码幻觉,进而破坏核心业务逻辑。
因此,遗留系统的重构必须放弃“一次性替换”的幻想,转向“静态分析确定边界 + LLM 局部重构 + 绞杀者模式渐进演进”的技术路线。


渐进式绞杀需要静态解析与Agent局部重构的分工协同
为确保遗留系统重构的安全性与工程可控性,我们设计了包含“静态解析—叶子识别—代码 Agent 局部重构—沙箱断言校验—绞杀者代理层路由”的自动化闭环方案。
2.1 AST 静态扫描是精确识别叶子模块与依赖边界的基础
重构的第一步不是修改代码,而是建立全量代码的依赖图谱。纯文本检索或大语言模型解析均无法确保依赖识别的 100% 准确性,必须依赖抽象语法树(AST)分析。
针对十万行级的 Java 遗留代码库,通过语法解析引擎提取类、方法、变量定义以及显式/隐式接口调用,构建全局调用有向图 G = (V, E)。在此基础上进行依赖拓扑排序与环路切断,寻找入度不为零但出度受限、或无外部逆向调用的叶子模块(Leaf Modules)。该步骤可一次性产出全量模块的出入度矩阵,为自内向外的重构顺序提供依据。相比基于文本相似度的启发式方法,AST 解析能够区分同名方法与重载调用,避免依赖边的误判。

如上图所示,叶子模块是整个遗留系统中最内层的逻辑单元。将叶子模块作为重构的突破口,能够确保每次解耦改动的受控影响范围降至最低,避免改动引发连锁反应。
2.2 代码 Agent 局部重构结合沙箱单元测试补全确保演进稳定性
在识别出目标叶子模块后,代码 Agent 开始接管具体的重构任务[2]。重构过程严格遵循整洁架构(Clean Architecture)范式,将过程式代码剥离为标准的领域模型(Domain Model)、服务层(Service Layer)与基础设施层。
为防止代码 Agent 产生的代码幻觉破坏原有业务逻辑,我们为 AISWare TuringCoder 智能代码生成引擎设计了三个闭环步骤:
- 上下文抽取与契约定义:提取 AST 识别出的叶子模块源码及输入输出数据结构,由代码 Agent 自动提取业务契约并生成接口定义;
- 代码重构与单元测试自动生成:代码 Agent 按照规范重写业务逻辑,并同步生成覆盖各类边界条件(如空值、异常分支、边界值)的单元测试用例;
- 沙箱隔离运行与断言校验:将重构后的代码与单元测试推送到隔离沙箱环境进行编译与运行。若单元测试断言失败,编译错误与 Trace 栈日志将自动反馈给代码 Agent 进行迭代修复,直至单元测试通过。
只有当核心路径覆盖率 100%、整体单元测试覆盖率达到 ≥85% 且全部断言校验通过后,重构成果才会被标记为就绪状态。

十万行级模块的实测数据验证了自动化重构的工程可行性
为验证上述技术路径的有效性,我们在某电信级核心 BSS 订单处理模块(遗留代码量约 12.4 万行,Java 语言编写)中开展了重构实践。
重构过程中,通过绞杀者代理层(Facade Router)在前端部署透明路由,按灰度比例将业务请求在旧单体模块与重构后的微服务之间进行切换。在实际灰度过程中,我们采用了“1%—10%—50%—100%”四阶段阶梯式流量切换策略,同时在代理层配置了毫秒级自动倒换机制。若重构服务响应异常率超过 0.01%,即触发流量回切至旧单体模块,保障生产环境的高可用性。每次灰度放量前,均以单元测试与核心链路回归用例做准入校验,未通过则维持当前灰度比例。

如图 4 所示对比了采用传统人工重构模式与本文“AST + 代码 Agent 自动化重构模式”在各项核心指标上的表现:

从数据对比可见,自动化重构模式同时提升了遗留代码解耦与微服务化的自动化率。高覆盖率的单元测试则将回归故障率控制在 0.3% 的水平。

隐式全局变量与数据层强耦合仍是自动化重构的人工边界
AST 与代码 Agent 的结合提升了遗留系统重构的效率与安全性。但在存在深层耦合的遗留代码面前,仍有需要人工干预的技术边界[3]:
- 共享内存与跨线程隐式依赖:
遗留系统经常使用ThreadLocal、全局静态变量或内存缓存传递上下文。AST 虽然能捕捉静态语法调用,但难以完全预测高并发下的运行时竞争条件。
- 存储层强耦合与分布式事务:
当遗留模块之间通过数据库物理表直接进行联表查询(JOIN)或共享事务时,纯代码层面的绞杀无法解决数据层面的耦合。此时必须配合数据库拆分与 SAGA 分布式事务模式。
未来,如何在静态 AST 分析的基础上引入运行时动态插桩追踪(Dynamic Tracing),建立“静态语法树 + 动态调用图”的双重校验机制,将是实现低风险遗留系统自动化重构的关键探索方向。



JOTO 企业落地观察
- 企业若计划引入类似方案,需前置评估其遗留系统中 ThreadLocal、静态变量等隐式状态的分布密度——这直接决定 AST+Agent 路径的适用边界与人工介入成本。
- 该实践表明,RAG 知识工程不能仅依赖文档注入,必须将 AST 解析生成的调用图谱作为结构化知识底座,才能支撑代码 Agent 做出符合真实依赖关系的重构决策。
- 沙箱闭环校验机制对 AI 安全治理提出新要求:企业需建立“生成—运行—断言—反馈”全链路可观测性,将单元测试通过率、断言失败根因分类纳入 AI 工程效能看板。
- 绞杀者代理层的灰度路由能力,本质是 FDE(Frontline Deployment Engineer)驻场共创的关键交付物之一——它要求团队在重构早期即共建流量调度语义与熔断策略,而非仅交付代码。
立即咨询 JOTO
JOTO 提供覆盖企业智能体规划与搭建、AI 平台私有化部署、RAG 知识工程、AI 安全治理、FDE 驻场共创及持续运营优化的全周期 AI 落地服务,帮助企业把验证中的 AI 能力转化为安全、可控、可持续迭代的生产力。 联系 JOTO 获取 AI 落地咨询
想把这些做法用到你的业务里?
留下你的场景和痛点,我们帮你判断从哪一步开始。
联系我们


