DynaFix: Iterative Automated Program Repair Driven by Execution-Level Dynamic Information

📄 arXiv: 2512.24635v1 📥 PDF

作者: Zhili Huang, Ling Xu, Chao Liu, Weifeng Sun, Xu Zhang, Yan Lei, Meng Yan, Hongyu Zhang

分类: cs.SE, cs.AI

发布日期: 2025-12-31

备注: 22 pages, 7 figures, preprint version


💡 一句话要点

DynaFix:一种执行级动态信息驱动的迭代式自动程序修复方法

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 自动程序修复 大型语言模型 动态分析 迭代修复 执行级信息

📋 核心要点

  1. 现有APR方法主要依赖静态分析或仅一次性注入动态信息,无法充分捕捉程序运行时行为,限制了复杂错误的修复。
  2. DynaFix通过迭代地收集和利用执行级动态信息(如变量状态、控制流路径),指导LLM生成和改进补丁。
  3. 实验表明,DynaFix在Defects4J基准上修复了186个单函数错误,比现有方法提高了10%,并显著减少了补丁搜索空间。

📝 摘要(中文)

自动程序修复(APR)旨在为有缺陷的程序自动生成正确的补丁。最近利用大型语言模型(LLM)的方法显示出潜力,但也面临局限性。大多数方法仅依赖于静态分析,忽略了运行时行为。一些方法试图结合动态信号,但这些信号通常仅限于训练或微调,或者仅一次性注入到修复提示中,而没有迭代使用,无法充分捕捉程序执行。当前的迭代修复框架通常依赖于粗粒度的反馈,例如通过/失败结果或异常类型,并且没有有效地利用细粒度的执行级信息。因此,模型难以模拟人类逐步调试,限制了其在多步骤推理和复杂错误修复中的有效性。为了解决这些挑战,我们提出DynaFix,一种执行级动态信息驱动的APR方法,它迭代地利用运行时信息来改进修复过程。在每个修复轮次中,DynaFix捕获执行级动态信息,例如变量状态、控制流路径和调用堆栈,将它们转换为结构化提示,以指导LLM生成候选补丁。如果补丁未能通过验证,DynaFix会重新执行修改后的程序,以收集新的执行信息以供下一次尝试。这种迭代循环基于更新的反馈逐步改进补丁,类似于人类开发人员的逐步调试实践。我们在Defects4J v1.2和v2.0基准上评估了DynaFix。DynaFix修复了186个单函数错误,比最先进的基线提高了10%,其中包括38个以前未修复的错误。它在最多35次尝试中实现了正确的补丁,与现有方法相比,减少了70%的补丁搜索空间,从而证明了修复复杂错误的有效性和效率。

🔬 方法详解

问题定义:论文旨在解决自动程序修复(APR)中,现有方法无法有效利用程序运行时信息,导致复杂错误修复效果不佳的问题。现有方法要么只依赖静态分析,要么只是在初始阶段使用一次动态信息,无法模拟人类开发者逐步调试的过程,难以进行多步骤推理和修复。

核心思路:DynaFix的核心思路是通过迭代地收集和利用程序的执行级动态信息,指导大型语言模型(LLM)生成和改进补丁。每次修复尝试后,都会重新执行程序,收集新的运行时信息,并将其用于下一次修复尝试,从而模拟人类开发者逐步调试的过程。

技术框架:DynaFix的整体框架是一个迭代循环。首先,使用LLM生成候选补丁。然后,执行带有候选补丁的程序,收集执行级动态信息,包括变量状态、控制流路径和调用堆栈。这些信息被转换成结构化的提示,用于指导LLM在下一轮迭代中生成更好的补丁。如果补丁通过验证,则修复成功;否则,重复上述过程,直到达到最大迭代次数。

关键创新:DynaFix的关键创新在于迭代地利用执行级动态信息来指导LLM进行程序修复。与现有方法相比,DynaFix能够更充分地利用程序的运行时信息,从而更好地模拟人类开发者的调试过程,提高复杂错误的修复成功率。这种迭代式的反馈机制是其与现有方法最本质的区别。

关键设计:DynaFix的关键设计包括如何有效地收集和表示执行级动态信息,以及如何将这些信息融入到LLM的提示中。论文中具体使用的LLM模型和提示工程方法未知,但强调了将变量状态、控制流路径和调用堆栈等信息结构化地融入提示中,以指导LLM生成更准确的补丁。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

DynaFix在Defects4J v1.2和v2.0基准测试中,成功修复了186个单函数错误,比现有最先进的方法提高了10%。此外,DynaFix还修复了38个之前未被修复的错误。更重要的是,DynaFix在最多35次尝试内找到正确补丁,将补丁搜索空间减少了70%,显著提高了修复效率。

🎯 应用场景

DynaFix可应用于软件开发和维护的各个阶段,例如自动化测试、持续集成和缺陷修复。它可以帮助开发者快速定位和修复程序中的错误,提高软件质量和开发效率。未来,该方法可以扩展到更复杂的程序和错误类型,并与其他自动化软件工程技术相结合,实现更智能化的软件开发。

📄 摘要(原文)

Automated Program Repair (APR) aims to automatically generate correct patches for buggy programs. Recent approaches leveraging large language models (LLMs) have shown promise but face limitations. Most rely solely on static analysis, ignoring runtime behaviors. Some attempt to incorporate dynamic signals, but these are often restricted to training or fine-tuning, or injected only once into the repair prompt, without iterative use. This fails to fully capture program execution. Current iterative repair frameworks typically rely on coarse-grained feedback, such as pass/fail results or exception types, and do not leverage fine-grained execution-level information effectively. As a result, models struggle to simulate human stepwise debugging, limiting their effectiveness in multi-step reasoning and complex bug repair. To address these challenges, we propose DynaFix, an execution-level dynamic information-driven APR method that iteratively leverages runtime information to refine the repair process. In each repair round, DynaFix captures execution-level dynamic information such as variable states, control-flow paths, and call stacks, transforming them into structured prompts to guide LLMs in generating candidate patches. If a patch fails validation, DynaFix re-executes the modified program to collect new execution information for the next attempt. This iterative loop incrementally improves patches based on updated feedback, similar to the stepwise debugging practices of human developers. We evaluate DynaFix on the Defects4J v1.2 and v2.0 benchmarks. DynaFix repairs 186 single-function bugs, a 10% improvement over state-of-the-art baselines, including 38 bugs previously unrepaired. It achieves correct patches within at most 35 attempts, reducing the patch search space by 70% compared with existing methods, thereby demonstrating both effectiveness and efficiency in repairing complex bugs.