Skip to main content
QUICK REVIEW

[论文解读] RunBugRun -- An Executable Dataset for Automated Program Repair

Julian Aron Prenner, Romain Robbes|arXiv (Cornell University)|Apr 3, 2023
Software Testing and Debugging Techniques被引用 7
一句话总结

本文提出了 RunBugRun,一个包含 450,000 个程序错误/修复配对的大型可执行数据集,涵盖八种编程语言,旨在通过支持基于执行的评估与反馈,推动神经程序修复(NPR)的发展。该数据集支持基于测试的验证、错误消息提取和执行轨迹分析,提供了一个可扩展的多语言基准,克服了静态、不可执行训练数据的局限性,并推动了具备执行感知能力的修复模型,实现更精准的语义正确性评估。

ABSTRACT

Recently, we can notice a transition to data-driven techniques in Automated Program Repair (APR), in particular towards deep neural networks. This entails training on hundreds of thousands or even millions of non-executable code fragments. We would like to bring more attention to an aspect of code often neglected in Neural Program Repair (NPR), namely its execution. Code execution has several significant advantages. It allows for test-based evaluation of candidate fixes and can provide valuable information to aid repair. In this work we present a fully executable dataset of 450,000 small buggy/fixed program pairs originally submitted to programming competition websites written in eight different programming languages. Along with the dataset we provide infrastructure to compile, safely execute and test programs as well as fine-grained bug-type labels. To give a point of reference, we provide basic evaluation results for two baselines, one based on a generate-and-validate approach and one on deep learning. With this dataset we follow several goals: we want to lift Neural Program Repair beyond fully static code representations, foster the use of execution-based features and, by including several different languages, counterbalance the predominance of Java in the current landscape of APR datasets and benchmarks.

研究动机与目标

  • 为解决当前神经程序修复(NPR)数据集中缺乏大规模可执行代码的问题,这些数据集目前依赖于静态、不可执行的代码片段。
  • 通过包含八种不同的编程语言,减少 APR 研究中的语言偏见,以对抗现有基准中 Java 的主导地位。
  • 在 NPR 中实现基于执行的评估与反馈,例如测试通过率和运行时错误消息,以实现更准确且语义有意义的修复验证。
  • 为每个程序对提供细粒度、分层的错误类型标签和全面的测试套件,以支持详细分析与模型评估。
  • 通过提供一个可扩展、经筛选的数据集,支持使用编译和测试执行的反馈循环,促进执行感知型 NPR 模型的开发。

提出的方法

  • 该数据集通过从编程竞赛网站挖掘 450,000 个小型错误/修复程序对构建而成,确保每对程序在语法上有效且可执行。
  • 每个程序在沙盒环境中被编译并执行,以收集测试结果、错误消息和执行轨迹。
  • 建立了标准化基础设施,安全地编译、执行并验证每个程序对的补丁,使用全面的测试套件进行验证。
  • 该数据集包含基于修复本质的分层错误类型标签(例如,control_flow.break.add),支持细粒度分析。
  • 数据集按训练、验证和测试集进行划分,数据分布一致,且所有划分均保持可执行性和测试覆盖率。
  • 作者使用生成与验证模型和深度学习模型进行了基线评估,所有评估均基于测试套件执行,而非词法相似性。

实验结果

研究问题

  • RQ1与静态的词法度量(如 BLEU 或精确匹配)相比,基于执行的评估是否能提高神经程序修复模型的可靠性?
  • RQ2执行反馈(如测试通过率和错误消息)的引入在多大程度上影响了 NPR 模型的性能?
  • RQ3在多种编程语言上进行多语言训练,能在多大程度上提升 APR 系统的泛化能力和适用性?
  • RQ4当在可执行测试套件与静态代码相似性上进行评估时,NPR 模型在不同错误类型上的表现有何差异?
  • RQ5像 RunBugRun 这样大规模、可执行的数据集是否能支持新的训练范式,例如基于测试执行结果的反馈驱动训练?

主要发现

  • 该数据集包含 450,000 个在八种编程语言(包括 Go、Ruby、PHP 和 JavaScript)上的可执行错误/修复程序对,显著扩展了现有 APR 基准中以 Java 为主导的格局。
  • 基于执行的评估表明,BLEU 等词法度量不足以评估修复的正确性,因为语义正确的修复可能因词法差异而被惩罚。
  • 在该数据集上评估的基线模型表明,测试套件执行比静态代码比较更可靠、更具语义意义,是补丁验证的更优指标。
  • 整合执行反馈(如测试结果和错误消息)可提升 NPR 性能,已有研究在小样本子集上证明此类反馈可带来 7% 的性能提升。
  • 该数据集开启了新的研究方向,例如基于测试执行反馈训练模型,并支持开发能够处理多语言错误的多语言 APR 系统。
  • 作者证明,执行不仅在大规模上可行,而且对于捕捉语义正确性至关重要,而此类数据在当前的 NPR 研究中仍被严重低估。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。