[Paper] DynaFix:迭代式自动程序修复驱动于执行层级动态信息
发布: (2025年12月31日 GMT+8 13:13)
6 min read
原文: arXiv
Source: arXiv - 2512.24635v1
概述
本文介绍了 DynaFix,一种新的自动程序修复(APR)技术,它在补丁生成循环中将 execution‑level 运行时数据反馈给大型语言模型(LLMs)。通过模拟开发者调试的方式——在每次失败后检查变量值、控制流路径和调用栈——DynaFix 在广泛使用的 Defects4J 基准上实现了修复成功率和效率的显著提升。
关键贡献
- 迭代动态反馈回路:在每次补丁尝试后捕获细粒度运行时信息,并将其注入为结构化提示供 LLM 使用。
- 细粒度执行表示:将变量状态、控制流轨迹和调用栈快照转换为 LLM 能够推理的提示格式。
- 实证收益:修复了 186 个单函数错误(≈10 % 的提升相较最强基线),并解决了 38 个先前 APR 工具无法修复的错误。
- 搜索空间缩减:将每个错误的修复尝试次数限制在 ≤ 35 次,并相较现有迭代 APR 框架将候选补丁空间减少约 70 %。
方法论
- Initial Test Run – 在其测试套件上执行有缺陷的程序;失败的测试用例会触发首次数据收集。
- Dynamic Information Extraction – 一个轻量级的插桩层记录:
- 所有在作用域内变量的当前值
- 实际执行的控制流路径(例如,命中了哪些分支)
- 失败时的调用栈
- Prompt Construction – 将收集的数据序列化为简洁、易读的“调试报告”,并附加到 LLM 的修复提示中(例如,“变量
count在第 42 行的值为 -1;程序走了if (count > 0)的else分支 …”)。 - LLM Patch Generation – 一个具备代码能力的 LLM(例如 GPT‑4‑code)在调试报告的指导下生成一个或多个候选补丁。
- Validation & Iteration – 编译并重新运行候选补丁以通过测试套件。如果仍然失败,则使用最新执行的新运行时数据重复步骤 2‑4。
- Termination – 当补丁通过所有测试或达到预定义的尝试上限(35 次)时停止。
该方法是模型无关的:任何能够理解结构化提示的 LLM 都可以替换使用,使 DynaFix 成为现有基于 LLM 的 APR 流水线之上的即插即用层。
结果与发现
| 指标 | DynaFix | 之前最佳 LLM‑APR |
|---|---|---|
| 修复的缺陷(Defects4J v1.2 + v2.0) | 186 | 169 |
| 新修复的缺陷(未被任何基线修复) | 38 | 0 |
| 每个缺陷的平均尝试次数(成功案例) | ≤ 35 | 55‑80 |
| 搜索空间缩减 | 约 70 % | — |
| 运行时开销(插装 + 提示生成) | < 2 s 每次迭代(相较于 LLM 推理可忽略) | — |
作者报告称,动态提示显著提升了 LLM 对补丁失败原因的“理解”,从而实现更有针对性的编辑,而非盲目的试错。即使是需要多次代码更改的复杂缺陷,DynaFix 也能在少量迭代内收敛。
Source: …
实际影响
- 更快的 CI/CD 修复 – 将 DynaFix 集成到持续集成流水线中,可以在构建失败后自动生成高质量补丁,从而降低平均修复时间。
- 更好的调试助手 – IDE 插件可以向开发者展示相同的执行级提示,将 LLM 建议转化为交互式、逐步的调试提示。
- 降低 LLM 推理成本 – 通过提前剪枝搜索空间,所需的 LLM 调用次数更少,从而为基于云的推理服务带来实际的成本节约。
- 语言无关的扩展 – 虽然在 Java 上进行了评估,但该插装概念适用于任何具备运行时追踪器的语言(例如 Python 的
sys.settrace、.NET Profiler),为跨语言的自动程序修复工具打开了大门。
限制与未来工作
- Instrumentation overhead 对于大型、性能关键的应用可能并非微不足道;作者建议通过选择性跟踪来缓解。
- 当前评估聚焦于 single‑function(单函数)错误;扩展到多模块或系统范围的缺陷仍是一个未解决的挑战。
- DynaFix 依赖于可用的通过测试套件来定义“正确”行为;未来工作可以探索弱预言机(例如变形关系)以扩大适用范围。
作者
- Zhili Huang
- Ling Xu
- Chao Liu
- Weifeng Sun
- Xu Zhang
- Yan Lei
- Meng Yan
- Hongyu Zhang
论文信息
- arXiv ID: 2512.24635v1
- 分类: cs.SE, cs.AI
- 出版日期: 2025年12月31日
- PDF: Download PDF