中文

大型预训练语言模型时代的实用程序修复

软件工程 2024-12-11 v2

摘要

自动程序修复(APR)旨在帮助开发者自动修补软件缺陷。然而,当前最先进的传统和基于学习的 APR 技术面临补丁多样性有限的问题,无法修复复杂的缺陷。这主要归因于它们依赖缺陷修复数据集来制作修复模板或直接预测潜在补丁。使用数十亿文本/代码词元训练的大型预训练语言模型(PLM)可能有助于避免此问题。最近,研究人员已直接利用 PLM 进行 APR,而不依赖任何缺陷修复数据集。同时,这类现有工作要么未能纳入最先进的 PLM,要么未在真实数据集上进行评估。在这项工作中,我们首次对直接应用 PLM 进行 APR 进行了广泛研究。我们选取了 9 个近期最先进的 PLM,包括生成式和填充式模型,规模从 1.25 亿到 200 亿参数不等。我们设计了 3 种不同的修复设置,以评估使用 PLM 生成补丁的不同方式。我们将 PLM 在这些修复设置下应用于跨 3 种不同语言的 5 个数据集,并比较了不同 PLM 在修复缺陷数量、生成速度和编译通过率方面的表现。我们的研究表明,直接应用最先进的 PLM 已经可以在我们所有数据集上大幅超越所有现有的 APR 技术。在所研究的 PLM 中,APR 存在规模效应,即更大的模型往往能取得更好的性能。此外,我们首次证明,缺陷行之后的后缀代码(在填充式 APR 中采用)不仅对生成更多修复方案至关重要,而且对生成具有更高编译通过率的补丁也至关重要。除了补丁生成,PLM 还认为正确的补丁比其他补丁更自然,甚至可以被用于有效的补丁排序或补丁正确性检查。

关键词

引用

@article{arxiv.2210.14179,
  title  = {Practical Program Repair in the Era of Large Pre-trained Language Models},
  author = {Chunqiu Steven Xia and Yuxiang Wei and Lingming Zhang},
  journal= {arXiv preprint arXiv:2210.14179},
  year   = {2024}
}