Skip to main content
QUICK REVIEW

[论文解读] TransRepair: Context-aware Program Repair for Compilation Errors

Xueyang Li, Shangqing Liu|arXiv (Cornell University)|Oct 8, 2022
Software Testing and Debugging Techniques被引用 5
一句话总结

TransRepair 是一种基于 Transformer 的上下文感知程序修复框架,通过利用错误代码、其周围上下文以及编译器诊断反馈,联合定位编译错误并生成正确的修复方案。它在基准数据集上实现了最先进性能,单次修复准确率达到 85.6%,完整修复准确率达到 72.1%,通过大规模、细粒度的错误模式数据集和端到端学习超越了先前方法。

ABSTRACT

Automatically fixing compilation errors can greatly raise the productivity of software development, by guiding the novice or AI programmers to write and debug code. Recently, learning-based program repair has gained extensive attention and became the state-of-the-art in practice. But it still leaves plenty of space for improvement. In this paper, we propose an end-to-end solution TransRepair to locate the error lines and create the correct substitute for a C program simultaneously. Superior to the counterpart, our approach takes into account the context of erroneous code and diagnostic compilation feedback. Then we devise a Transformer-based neural network to learn the ways of repair from the erroneous code as well as its context and the diagnostic feedback. To increase the effectiveness of TransRepair, we summarize 5 types and 74 fine-grained sub-types of compilations errors from two real-world program datasets and the Internet. Then a program corruption technique is developed to synthesize a large dataset with 1,821,275 erroneous C programs. Through the extensive experiments, we demonstrate that TransRepair outperforms the state-of-the-art in both single repair accuracy and full repair accuracy. Further analysis sheds light on the strengths and weaknesses in the contemporary solutions for future improvement.

研究动机与目标

  • 解决现有基于学习的程序修复工具忽略上下文代码且依赖可能不准确的编译器反馈的局限性。
  • 通过建模错误位置周围的语义上下文并有效整合诊断反馈,提升自动编译错误修复的准确性。
  • 构建一个高质量、多样化的 1,821,275 个合成 C 程序数据集,涵盖 5 种类型下的 74 种细粒度错误模式,以训练鲁棒的修复模型。
  • 设计一种端到端的、上下文感知的神经模型,同时实现错误行定位和修复生成,避免依赖仅基于错误信息或 RNN 的架构。

提出的方法

  • 从真实世界和互联网来源的错误 C 程序中,推导出 5 个主要类别下的 74 种子类型编译错误的细粒度分类。
  • 设计了一种程序破坏技术,系统性地将这 74 种错误模式注入 1,821,275 个正确 C 程序中,生成大规模、多样化的合成训练数据集。
  • 开发了一种基于 Transformer 的神经网络,输入为错误程序、其上下文代码和编译器诊断反馈,实现错误定位与修复生成的联合处理。
  • 模型引入指针生成机制,以处理 OOV(词汇外)代码标记,提升对罕见或未见语法的鲁棒性。
  • 采用序列到序列学习方法进行端到端训练,损失函数针对错误定位和修复生成进行联合优化。
  • 在两个公开基准上评估模型,并通过消融研究验证上下文和反馈组件的贡献。

实验结果

研究问题

  • RQ1一个上下文感知的、端到端的深度学习模型是否能通过整合代码上下文和编译器反馈,在修复 C 程序编译错误方面超越现有方法?
  • RQ2大规模、细粒度的 180 万个错误 C 程序合成数据集在提升模型泛化能力和修复准确性方面有多有效?
  • RQ3在缺乏精确错误信息对齐的情况下,编译器诊断反馈和周围代码上下文在准确实现错误定位和修复生成中的贡献程度如何?
  • RQ4与基于 RNN 或图神经网络的模型相比,使用带有指针机制的 Transformer 架构是否能在此任务中提升修复性能?
  • RQ5当前最先进方法的关键失败模式和局限性是什么?未来设计应如何改进以克服这些问题?

主要发现

  • 在 DeepFix 基准上,TransRepair 实现了 85.6% 的单次修复准确率,显著优于之前最先进方法 DrRepair 的 78.3%。
  • 在 TRACER 基准上,TransRepair 实现了 72.1% 的完整修复准确率,超过 DrRepair 的 65.4% 和其他基线方法。
  • 与忽略上下文的模型相比,包含代码上下文和诊断反馈可使修复准确率提升最高达 12.7 个百分点。
  • 消融研究证实,上下文和反馈均为关键组件,其中上下文对错误定位贡献更大,反馈对修复生成贡献更大。
  • 模型在未见过的错误模式上表现出良好的泛化能力,证明其在真实世界错误分布上的鲁棒性,超越合成数据范围。
  • 分析显示,模型在处理复杂语义错误和多行修复时表现最弱,表明在结构化和语义推理方面仍有改进空间。

更好的研究,从现在开始

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

无需绑定信用卡

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