[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 %。

方法论

  1. Initial Test Run – 在其测试套件上执行有缺陷的程序;失败的测试用例会触发首次数据收集。
  2. Dynamic Information Extraction – 一个轻量级的插桩层记录:
    • 所有在作用域内变量的当前值
    • 实际执行的控制流路径(例如,命中了哪些分支)
    • 失败时的调用栈
  3. Prompt Construction – 将收集的数据序列化为简洁、易读的“调试报告”,并附加到 LLM 的修复提示中(例如,“变量 count 在第 42 行的值为 -1;程序走了 if (count > 0)else 分支 …”)。
  4. LLM Patch Generation – 一个具备代码能力的 LLM(例如 GPT‑4‑code)在调试报告的指导下生成一个或多个候选补丁。
  5. Validation & Iteration – 编译并重新运行候选补丁以通过测试套件。如果仍然失败,则使用最新执行的运行时数据重复步骤 2‑4。
  6. Termination – 当补丁通过所有测试或达到预定义的尝试上限(35 次)时停止。

该方法是模型无关的:任何能够理解结构化提示的 LLM 都可以替换使用,使 DynaFix 成为现有基于 LLM 的 APR 流水线之上的即插即用层。

结果与发现

指标DynaFix之前最佳 LLM‑APR
修复的缺陷(Defects4J v1.2 + v2.0)186169
新修复的缺陷(未被任何基线修复)380
每个缺陷的平均尝试次数(成功案例)≤ 3555‑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
Back to Blog

相关文章

阅读更多 »