来自南方科技大学和快手的研究人员发布关于自动化程序修复(Automated Program Repair,简称APR)的研究,特别是基于大语言模型(Large Language Models,简称LLMs)的函数级别(function-level)APR技术。函数级别的APR意味着不仅仅是修复代码中的单个错误或一小段代码,而是修复整个函数中的所有错误。这项技术对于软件开发者来说非常有用,因为它可以自动生成潜在的修复补丁,减少开发者修复程序中缺陷的工作量。
主要功能:
- 自动生成补丁:APR技术能够自动为发现的软件缺陷生成潜在的修复补丁。
- 学习提升性能:通过学习过去的修复案例,这些技术能够提升修复的性能和准确性。
主要特点:
- 零样本学习(Zero-Shot Learning):即使没有提供特定任务的先前例子,LLMs也能够执行函数级别的APR。
- 少样本学习(Few-Shot Learning):通过提供少量的示例,可以进一步提升LLMs在特定APR任务上的性能。
- 辅助修复相关信息:利用错误报告、触发测试等辅助信息可以显著提高修复性能。
工作原理:
- 大型语言模型:这些模型通过在大规模数据集上训练,学习了大量的编程语言模式和结构。
- 生成和验证(Generate-and-Validate Paradigm):APR技术首先定位程序中的错误,然后生成补丁,并通过测试套件验证这些补丁的可行性。
- 链式思考(Chain of Thought):一种提示技术,通过引导模型逐步分析问题并生成自然语言修复建议。
具体应用场景:
假设你是一名软件开发者,在你的程序中发现了一个函数没有按预期工作。使用APR技术,你可以上传有问题的函数代码到APR系统。系统将分析代码,利用其学习到的知识生成一个或多个潜在的修复方案。然后,它会运行这些方案通过你的测试套件,以验证它们是否能够修复错误。如果测试通过,你将得到一个或多个可行的补丁,你可以选择其中一个来应用到你的代码中。
论文中提出的SRepair技术是一个基于LLM的函数级别APR技术,它使用了一个双LLM框架,利用辅助修复相关信息来提高修复性能。SRepair在Defects4J数据集中成功修复了300个单函数错误,并且在没有昂贵的语句级故障定位信息的情况下,成功修复了32个多函数错误,这在APR技术中尚属首次。
简而言之,这项研究推动了自动化程序修复技术的发展,使得开发者可以更高效地修复软件中的缺陷,特别是那些涉及整个函数的复杂错误。
0条评论