Towards Effectively Leveraging Execution Traces for Program Repair with Code LLMs

📄 arXiv: 2505.04441v1 📥 PDF

作者: Mirazul Haque, Petr Babkin, Farima Farmahinifarahani, Manuela Veloso

分类: cs.LG, cs.SE

发布日期: 2025-05-07


💡 一句话要点

利用程序执行轨迹增强代码大语言模型以提升程序修复效果

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

关键词: 自动程序修复 大语言模型 执行轨迹 提示工程 运行时信息

📋 核心要点

  1. 现有基于代码大语言模型的自动程序修复方法主要依赖静态分析,忽略了程序运行时行为。
  2. 该论文提出利用程序执行轨迹增强LLM的APR提示,旨在提升模型对程序运行时信息的感知能力。
  3. 实验表明,直接使用执行轨迹提升有限,但通过优化提示策略,可以更稳定地超越无轨迹基线。

📝 摘要(中文)

大型语言模型(LLMs)在各种编程任务(包括自动程序修复(APR))中表现出令人鼓舞的性能。然而,大多数基于LLM的APR方法仅限于程序的静态分析,而忽略了它们的运行时行为。受到知识增强NLP的启发,本文旨在通过使用程序执行轨迹增强标准APR提示来弥补这一潜在的盲点。我们使用GPT系列模型在三个流行的APR数据集上评估了我们的方法。我们的研究结果表明,仅仅将执行轨迹纳入提示中,与无轨迹基线相比,性能提升有限,仅在6个测试的数据集/模型配置中的2个中有效。我们进一步发现,执行轨迹对于APR的有效性随着其复杂性的增加而降低。我们探索了几种在提示中利用轨迹的策略,并证明了LLM优化的提示有助于更一致地优于无轨迹提示。此外,我们表明,基于轨迹的提示优于在小规模数据集上微调较小的LLM;并进行了探测研究,加强了执行轨迹可以补充LLM推理能力的观点。

🔬 方法详解

问题定义:现有基于大语言模型的自动程序修复方法主要依赖于对代码的静态分析,缺乏对程序运行时行为的理解。这种忽略可能导致模型无法识别由特定运行时状态触发的错误,从而限制了修复的有效性。因此,如何有效地将程序的运行时信息融入到LLM的APR过程中是一个关键问题。

核心思路:该论文的核心思路是借鉴知识增强NLP的思想,通过将程序执行轨迹(execution traces)作为额外信息添加到LLM的输入提示(prompt)中,从而使模型能够感知程序的运行时行为。这种方法旨在弥补LLM在静态分析方面的局限性,提高程序修复的准确性和效率。

技术框架:该方法主要包含以下几个阶段:1) 获取程序执行轨迹:通过运行待修复的程序,收集其执行过程中的变量值、函数调用等信息,形成执行轨迹。2) 构建增强提示:将收集到的执行轨迹信息添加到标准的APR提示中,形成包含运行时信息的增强提示。3) LLM程序修复:将增强提示输入到LLM中,由LLM生成修复后的代码。4) 评估修复效果:通过测试用例验证修复后的代码是否能够解决原始程序中的错误。

关键创新:该论文的关键创新在于探索了如何有效地利用程序执行轨迹来增强LLM的APR能力。与以往仅依赖静态分析的方法不同,该方法将程序的运行时信息融入到LLM的输入中,从而使模型能够更好地理解程序的行为和错误原因。此外,该论文还探索了不同的提示策略,以优化执行轨迹的利用效果。

关键设计:论文探索了多种利用执行轨迹的提示策略,包括直接将轨迹信息添加到提示中,以及使用LLM对轨迹信息进行总结和提炼后再添加到提示中。此外,论文还研究了不同复杂度的执行轨迹对APR效果的影响,并发现随着轨迹复杂度的增加,其有效性会降低。论文还通过实验对比了基于轨迹的提示与微调小型LLM的效果,结果表明基于轨迹的提示更具优势。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,简单地将执行轨迹添加到提示中,在部分数据集和模型配置下提升有限。然而,通过优化提示策略,例如使用LLM对轨迹进行总结,可以更稳定地超越无轨迹基线。此外,基于轨迹的提示优于在小规模数据集上微调小型LLM,证明了该方法的有效性。探测研究也表明,执行轨迹可以有效补充LLM的推理能力。

🎯 应用场景

该研究成果可应用于软件开发和维护领域,帮助开发者更高效地修复程序错误。通过结合静态分析和动态执行信息,可以提高自动程序修复的准确性和效率,降低人工调试成本。未来,该方法有望应用于更复杂的软件系统和编程语言,并与其他自动化测试和调试技术相结合,构建更智能化的软件开发工具。

📄 摘要(原文)

Large Language Models (LLMs) show promising performance on various programming tasks, including Automatic Program Repair (APR). However, most approaches to LLM-based APR are limited to the static analysis of the programs, while disregarding their runtime behavior. Inspired by knowledge-augmented NLP, in this work, we aim to remedy this potential blind spot by augmenting standard APR prompts with program execution traces. We evaluate our approach using the GPT family of models on three popular APR datasets. Our findings suggest that simply incorporating execution traces into the prompt provides a limited performance improvement over trace-free baselines, in only 2 out of 6 tested dataset / model configurations. We further find that the effectiveness of execution traces for APR diminishes as their complexity increases. We explore several strategies for leveraging traces in prompts and demonstrate that LLM-optimized prompts help outperform trace-free prompts more consistently. Additionally, we show trace-based prompting to be superior to finetuning a smaller LLM on a small-scale dataset; and conduct probing studies reinforcing the notion that execution traces can complement the reasoning abilities of the LLMs.