five

RunBugRun

收藏
arXiv2023-04-04 更新2024-08-06 收录
下载链接:
http://arxiv.org/abs/2304.01102v1
下载链接
链接失效反馈
官方服务:
资源简介:
一个包含450,000个小型错误/修复程序对的可执行数据集,这些程序对最初提交给编程竞赛网站,使用八种不同的编程语言编写。该数据集提供了编译、安全执行和测试程序的基础设施,以及细粒度的错误类型标签。

An executable dataset containing 450,000 pairs of small buggy and fixed programs. These program pairs were originally submitted to programming contest platforms and written in eight distinct programming languages. This dataset provides infrastructure for compiling, securely executing, and testing programs, as well as fine-grained bug type labels.
创建时间:
2023-04-04
搜集汇总
数据集介绍
main_image_url
构建方式
RunBugRun数据集源自Project CodeNet,一个包含编程竞赛提交的大规模多语言代码库。研究者首先筛选出C、C++、Java、Python、Ruby、PHP、Go和JavaScript八种语言的提交。随后,针对每个问题和用户,提取被拒绝的提交与后续被接受的提交,并计算两者之间的令牌级差异,仅保留差异小于六个令牌的配对,视为潜在的buggy/fixed程序对。为确保可执行性,所有提交均经过编译或语法检查,并运行于沙箱环境中,利用从问题描述、AlphaCode数据集及半自动生成方式获取的测试用例进行验证。最终,经过执行过滤、去重、数据分割和基于语法树的自动标签标注,构建出包含约45万对可执行bug实例的数据集。
特点
该数据集的核心特点在于其大规模与可执行性,填补了传统APR基准(小规模、可执行)与NPR数据集(大规模、不可执行)之间的鸿沟。每个bug实例均附带完整的测试用例、细粒度的层次化bug标签(涵盖136种叶标签)以及运行时错误信息,支持基于执行的语义级评估。数据集涵盖八种编程语言,语言分布虽不均衡(C++和Python占主导),但测试集通过刻意平衡以缓解偏差。此外,所有程序均为短小的算法实现,编译与执行效率高,便于大规模实验。数据集还提供了预定义的数据划分和基线性能结果,为后续研究提供了可靠的比较基准。
使用方法
RunBugRun的使用方法灵活多样。用户可直接利用数据集进行传统的生成与验证(G&V)式APR研究,通过提供的沙箱基础设施编译、安全执行并测试程序。对于神经程序修复(NPR)研究,数据集的大规模训练集可用于训练模型,而测试集则作为评估基准,支持基于测试用例的语义正确性度量而非静态词汇匹配。研究者还可利用细粒度标签进行模型弱点分析,或利用多语言特性探索跨语言知识迁移。数据集附带的基础设施支持并行执行,显著提升评估效率。此外,运行时错误信息和执行轨迹可被整合为模型输入,以探索执行感知的修复策略。
背景与挑战
背景概述
在自动程序修复(APR)领域,传统方法如生成与验证(G&V)技术长期依赖可执行代码与测试套件,而近年来基于深度学习的神经程序修复(NPR)方法则倾向于使用大规模但不可执行的代码片段进行训练。这种割裂导致NPR模型在评估时不得不依赖静态指标,难以捕捉代码语义等价性,且存在基准过拟合风险。为此,Julian Aron Prenner与Romain Robbes于2023年提出了RunBugRun数据集,该数据集基于Project CodeNet中的编程竞赛提交,经过严格过滤与执行验证,最终包含约45万个可执行的错误/修复程序对,覆盖C、C++、Java、Python、JavaScript、Ruby、Go和PHP八种语言。RunBugRun不仅提供了测试用例与沙盒执行基础设施,还引入了细粒度层次化错误标签,旨在推动NPR超越纯静态代码表示,促进执行特征的应用,并缓解APR基准中Java语言主导的偏差,为多语言程序修复研究奠定坚实基础。
当前挑战
RunBugRun数据集所面临的挑战体现在多个层面。首先,在领域问题层面,当前NPR模型仍难以有效利用程序执行信息,多数方法仅依赖文本或语法特征,导致对语义等价修复的误判;同时,传统G&V方法虽然依赖执行,但受限于时间开销与语言特异性,难以在大规模多语言场景下高效运行。其次,在构建过程中,从Project CodeNet中提取可执行错误对面临诸多困难,包括:需确保所有代码无语法错误且可编译执行,通过大量测试用例执行以验证错误真实性;需处理Python 2到3的迁移、跨语言重复代码去重、以及细粒度标签的自动生成;此外,还需应对测试用例不足问题,通过半自动生成补充测试集,并过滤掉不稳定的(flaky)提交。这些步骤耗费数周时间,涉及超过1.3亿次程序执行,最终才得以构建出高质量、大规模、多语言的可执行APR基准。
常用场景
经典使用场景
在自动程序修复(Automated Program Repair, APR)领域,RunBugRun数据集最经典的使用场景是作为大规模、可执行的训练与评估基准,用于训练和测试基于深度学习的神经程序修复(Neural Program Repair, NPR)模型。该数据集包含约45万个来自编程竞赛网站的短小算法程序,覆盖C、C++、Java、Python、JavaScript、Ruby、PHP和Go八种编程语言,每个程序均附带完整的测试用例和细粒度的缺陷标签。研究者可利用其提供的沙盒执行基础设施,在安全环境中编译、运行并验证修复候选程序,从而在语义层面而非纯词法层面评估修复效果。这一场景尤其适合那些希望将执行反馈(如运行时错误、堆栈轨迹)融入模型训练过程的NPR研究,为突破传统静态代码表示的局限提供了理想试验场。
衍生相关工作
RunBugRun的发布催生了一系列重要的衍生研究工作。在神经修复领域,研究者基于该数据集探索了执行反馈增强的修复策略,例如通过将运行时异常类型或测试失败信息作为额外输入特征,改进CodeT5等预训练模型的修复准确率,相关工作验证了执行信号对定位和修复复杂缺陷的显著增益。在评估方法论方面,该数据集促进了执行驱动评估指标(如测试通过率)与静态词法指标的系统对比,推动了更科学的NPR评估框架的建立。此外,其多语言特性直接激发了跨语言知识迁移的研究,实验表明在C++等数据丰富语言上训练的模型,可通过迁移学习显著提升PHP、Go等低资源语言的修复性能,为构建语言无关的通用修复系统奠定了实证基础。
数据集最近研究
最新研究方向
RunBugRun数据集的最新研究方向聚焦于融合程序执行信息的神经程序修复技术,旨在突破传统静态代码修复的局限。该数据集包含45万对可执行的有缺陷与修复后的程序,覆盖8种编程语言,为跨语言知识迁移和基于执行反馈的修复提供了大规模实验平台。当前热点包括利用运行时错误信息(如堆栈跟踪、异常类型)增强模型定位能力,以及通过测试执行结果驱动强化学习策略优化补丁生成。这一方向不仅推动了从词法匹配向语义正确性评估的范式转变,也缓解了现有基准中Java语言主导的偏差,为构建真正多语言、环境感知的自动化修复系统奠定了数据与评估基础。
相关研究论文
  • 1
    RunBugRun -- An Executable Dataset for Automated Program Repair · 2023年
以上内容由遇见数据集搜集并总结生成
二维码
社区交流群
二维码
科研交流群
商业服务