自动程序修复(APR)试图修补软件缺陷并减少手动调试的工作。最近,随着大型语言模型(LLMs)的进步,提出了越来越多的APR技术,显著地促进了软件开发和维护,并展示了卓越的性能。然而,由于基于LLM的APR领域的持续探索,研究人员很难理解当前的成就、挑战以及潜在的机会。本项工作提供了第一个系统的文献综述,总结了2020年至2024年间LLMs在APR中的应用。我们分析了127篇关于LLMs、APR及其整合视角的相关论文。首先,我们分类了现有的流行LLMs,这些模型被应用于支持APR,并概述了三种部署策略。此外,我们详细描述了一些从LLMs受益的特定修复场景,例如,语义错误和安全漏洞。进一步地,我们讨论了几个将LLMs整合到APR研究中的关键方面,例如,输入形式和开放科学。最后,我们强调了仍需研究的一系列挑战和未来研究的潜在指南。总体而言,我们的论文为APR社区提供了一个系统的研究概览,帮助研究者全面理解成就并推动未来的研究。我们的工具在GitHub仓库公开可用:https://github.com/iSEngLab/AwesomeLLM4APR。
软件缺陷被公认为不可避免且具有破坏性,为全球用户带来安全问题,并每年造成数十亿美元的经济损失【11, 156】。对开发者而言,手动修复检测到的软件缺陷既非小事也耗时【13】。自动程序修复(APR)在软件开发和维护中扮演着至关重要的角色,旨在无需人工干预下修复软件缺陷。自2009年基础工作GenProg【80, 155】以来,过去几十年中APR已被广泛研究【43, 105】,研究者们提出了多种APR技术,包括基于启发式的【64, 80, 98, 177】、基于约束的【31, 99, 169, 171】以及基于模式的【76, 91, 92】。最近,受到深度学习(DL)进步的启发,越来越多基于学习的APR技术被提出,这些技术利用神经网络模型自动学习修复缺陷的模式【18, 66, 84, 85, 96, 142, 174, 175, 199, 200】。得益于DL模型从大量代码库中学习隐藏修复模式的强大能力,基于学习的APR在过去几年中取得了显著的表现【182】,吸引了学术界和工业界的广泛关注【69, 70, 73】。 最近,大型语言模型(LLMs)已成功应用于广泛的源代码相关任务【147, 184】,如代码生成【82, 148, 150, 201】、代码总结【132, 133, 146】和测试生成【4, 24, 57, 108, 128】。得益于庞大的模型参数和广阔的训练数据,LLMs展示了令人印象深刻的性能,并从根本上改变了软件工程(SE)社区的研究范式。在APR领域,从先驱研究开始,例如TFix【7】、CIRCLE【176】和AlphaRepair【163】,社区已经见证了利用LLMs的修复研究的爆炸性增长,已经取得了相当的优势,并进一步显示了未来研究的重大潜力。然而,LLMs在APR中的整合是一个相当复杂的任务,使得有兴趣的研究者难以理解现有工作。例如,现有基于LLM的APR研究涵盖了不同的研究视角(例如,经验性【162】、技术性【163】和基准研究【187】)、修复阶段(例如,补丁生成【186】和正确性评估【183】)、修复场景(例如,静态警告【69】和语法错误【70】)、模型架构(例如,仅编码器【185】和仅解码器【100】)以及模型使用范式(例如,微调【176】、少量样本【108】和零样本【186】)。尽管该领域的探索仍在进行中,目前的文献中缺乏关于LLMs在APR中应用的详尽和系统的综述,这使得研究人员难以理解现有工作的多样化设计选择和进行后续研究。 本文。为了弥补这一差距,我们的工作提供了第一个系统的文献综述,关于迅速出现的基于LLM的APR研究的部署。基于此,社区可以全面了解现有基于LLM的APR技术的优势、劣势和空白。我们讨论了在最先进的APR研究中广泛采用的LLMs是哪些,以及它们如何被整合到修复工作流中。我们收集了127篇相关论文,并从LLMs、APR和整合视角进行了系统分析。通过我们的分析,我们揭示了当前的挑战,并指出了基于LLM的APR研究可能的未来方向。总体来说,这项工作为LLM基于APR社区正在进行的进展提供了一个彻底的概览,帮助研究者在这个迅速发展的领域中导航,并推动创新实践。 贡献。总结来说,本工作做出了以下贡献: * 调查方法论。我们进行了第一个系统的文献综述,涵盖了127篇高质量的APR论文,这些论文利用近期的LLMs应对2020年至2024年4月的修复挑战。 * 趋势分析。我们就发布趋势、出版地点分布和贡献类型对选定的APR研究进行了详细分析。 * LLMs视角。我们总结了46种用于支持程序修复的LLMs,并提供了APR领域不同LLM类别的典型使用和趋势的概述。 * APR视角。我们描述了LLMs应用的常见修复场景,涵盖了18种错误类型,如安全漏洞和编程问题。 * 整合视角。我们讨论了一些关键因素,包括数据集、输入表现形式和开放科学,这些因素影响LLMs整合到APR中的性能。 * 挑战与机遇。我们总结了在APR领域应用LLMs的一些关键挑战,并指出了未来基于LLM的APR研究的一些潜在指南。
论文组织。第2节介绍了关于APR和LLMs的一些基本概念。然后,根据上述贡献,第3节列出了我们的研究问题(RQs)和收集与我们工作相关论文的研究方法。第4节调查了基于LLM的APR研究的趋势和分布。第5节总结了现有APR研究所使用的LLMs。第6节阐述了LLMs应用的主要修复场景,并对每项工作进行了简要描述。第7节讨论了LLMs与APR整合过程中的一些关键因素,包括数据集、输入表现形式、补丁正确性和开放科学。第8节讨论了一些挑战和实用指南。第9节得出结论。 我们试图通过总结相关研究并进一步提供后续研究的指南,提供近期LLMs在APR应用的全面概览。为了实现这一点,这个系统的文献综述回答了以下研究问题(RQs): * RQ1:利用LLMs的APR研究的趋势是什么?
(1) LLMs在修复软件缺陷方面显示出蓬勃的发展趋势,从2020年到2024年间共有127篇论文。 (2) 在APR中使用LLMs的会议论文数量显著超过期刊论文,其中ICSE和TOSEM分别是最受欢迎的会议和期刊场所。 (3) 基于LLM的APR论文发表在不同的研究领域,包括软件工程(SE)、人工智能(AI)和安全性。 (4) 有18种编程语言已被基于LLM的APR应用,其中Java、Python、C和C++是最常被目标的。 (5) LLMs已被应用于一些代表性较低的编程语言,如Verilog和Rust。 (6) 收集的大多数研究主要集中于引入新技术和进行实证研究,而有两篇论文执行了用户研究,以了解从业者对利用各种LLMs解决修复缺陷任务的态度和经验。 * RQ2:哪些受欢迎的LLMs已被应用于支持APR?
(1) 我们总结了46种不同的LLMs,这些模型已被用于修复缺陷,并且可以根据模型架构分为三类,即仅编码器、编码器-解码器和仅解码器。 (2) 仅解码器的LLMs是最常使用的模型架构,其中四种最受欢迎的LLMs均为仅解码器模型。 (3) ChatGPT、GPT-4、CodeT5和Codex是现有基于LLM的APR研究中最受欢迎的LLMs,分别被使用了37次、25次、23次和21次。 (4) 我们总结了三种典型的利用LLMs中封装的广泛知识来处理特定程序修复任务的方法,即微调、少量样本和零样本。 * RQ3:哪些修复场景已由LLMs促进?
总体来看,我们观察到LLMs已在文献中的广泛修复场景中得到应用,涉及18种错误类型。在一些由传统APR主导的常见场景中,例如语义错误,研究者继续投入大量努力研究LLMs的应用。此外,由于LLMs从所有可能的互联网数据中学到的通用知识,基于LLM的APR已扩展到一些以前未探索的罕见场景,如硬件缺陷和Web UI。 * RQ4:哪些关键因素有助于LLMs在APR中的整合?
(1) 我们总结了78种不同的数据集,这些数据集被用来基准测试LLMs在修复缺陷中的应用。 (2) 在基于LLM的APR中,Defects4J、QuixBugs、BFP、CVEfixes和Big-Vul是最常使用的。 (3) 我们将所有收集的论文中的输入形式分类为五组:原始修复输入、提示输入、掩码输入、对话式输入和结构感知输入。 (4) 提示输入是在应用LLMs进行程序修复时最常用的形式,这表明设计有效的提示对于利用LLMs的自然语言处理能力尤为重要。 (5) 我们总结了一些利用LLMs预测补丁正确性的研究。 (6) 所有收集的论文中有62.99%已经开源了其工具,而在顶级SE出版物中,这一比例增加到了86.84%。