[论文解读] ENCORE: Ensemble Learning using Convolution Neural Machine Translation for Automatic Program Repair
ENCORE 提出了一种用于自动程序修复的集成卷积神经机器翻译(NMT)方法,通过利用多个多样化的 NMT 模型,能够在多种编程语言中修复错误。该方法在性能上超越了先前的方法,在 Java、C++、Python 和 JavaScript 的五个基准测试中,总共修复了 67 个错误,其中包括 16 个此前未被修复的错误。
Automated generate-and-validate (G&V) program repair techniques typically rely on hard-coded rules, only fix bugs following specific patterns, and are hard to adapt to different programming languages. We propose ENCORE, a new G&V technique, which uses ensemble learning on convolutional neural machine translation (NMT) models to automatically fix bugs in multiple programming languages. We take advantage of the randomness in hyper-parameter tuning to build multiple models that fix different bugs and combine them using ensemble learning. This new convolutional NMT approach outperforms the standard long short-term memory (LSTM) approach used in previous work, as it better captures both local and long-distance connections between tokens. Our evaluation on two popular benchmarks, Defects4J and QuixBugs, shows that ENCORE fixed 42 bugs, including 16 that have not been fixed by existing techniques. In addition, ENCORE is the first G&V repair technique to be applied to four popular programming languages (Java, C++, Python, and JavaScript), fixing a total of 67 bugs across five benchmarks.
研究动机与目标
- 解决现有自动化程序修复(APR)技术依赖硬编码规则、在不同编程语言间泛化能力差的局限性。
- 克服先前基于神经机器翻译(NMT)的 APR 方法泛化能力差且搜索空间有限的问题,这些方法通常无法修复复杂或非模式相关的错误。
- 通过直接从数据中学习修复模式,实现在多种编程语言上的有效程序修复,减少对语言特定规则的依赖。
- 通过在具有不同超参数的卷积 NMT 模型上使用集成学习,捕捉多样化的修复策略,从而提高修复效果。
- 通过在短的、固定长度的错误代码到修复代码行对上进行训练,减少对错误上下文的依赖,从而提升可扩展性,并在更大方法上实现更优性能。
提出的方法
- 通过随机搜索训练多个具有不同超参数的卷积 NMT 模型,以创建模型多样性,从而增强捕捉多样化修复模式的能力。
- 使用集成学习结合多个 NMT 模型的预测结果,提升在多种错误类型上的鲁棒性和泛化能力。
- 采用卷积编码器-解码器架构,而非基于 LSTM 的模型,以更好地捕捉代码标记中的局部和长距离依赖关系。
- 在多达数百万个错误-修复行对上进行训练,聚焦于固定长度的输入序列,以避免上下文长度问题并提高训练效率。
- 使用程序的测试套件验证生成的补丁,返回最高排名且能通过所有故障触发测试用例的修复方案。
- 利用多步注意力机制解释模型预测,提升对开发人员和模型开发人员的可解释性。
实验结果
研究问题
- RQ1集成的卷积 NMT 模型是否能在自动程序修复中超越标准的基于 LSTM 的 NMT 和基于规则的 G&V 技术?
- RQ2基于数据驱动的神经 NMT 方法在无需语言特定规则工程的情况下,能在多大程度上在多种编程语言间实现泛化?
- RQ3从输入序列中移除显式的错误上下文是否能提升模型性能和可扩展性,尤其是在更大方法上?
- RQ4在多样化 NMT 模型上使用集成学习是否能修复现有技术未能发现的先前未修复的错误?
- RQ5该方法在处理复杂错误(超出简单语法或编译错误)方面的有效性如何?
主要发现
- ENCORE 在四种编程语言(Java、C++、Python、JavaScript)的五个基准测试中,总共修复了 67 个错误,显著优于以往的基于 NMT 的方法和基于规则的 G&V 技术。
- ENCORE 修复了 16 个此前任何现有技术均未能修复的错误,证明其具备发现新型修复模式的能力。
- 卷积 NMT 架构通过更好地捕捉代码中局部和远距离标记依赖关系,优于标准的基于 LSTM 的模型。
- 通过在数百万个固定长度的错误-修复行对上进行训练,并避免使用显式上下文,ENCORE 实现了比上下文密集型方法更好的可扩展性和性能。
- ENCORE 的集成学习方法降低了对超参数随机性的敏感性,并在多种错误类型上提升了鲁棒性。
- 该模型生成了一个过拟合的补丁,揭示了 java.util.Arrays.asList 中可能存在一个库级别的错误,表明其在生成变异体和深入检测错误方面具有潜力。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。