科研进展|基于大模型的软件缺陷自动修复工具

发布时间:2024-04-21


调查研究显示,在程序的开发过程中,开发者大约要花费一半的时间在修复缺陷上。在美国,软件维护的年度总成本高达700 亿美元[1]。为了减轻开发者的负担,提高修复效率,软件缺陷自动修复技术应运而生。近期,基于大模型的缺陷自动修复技术达到了最佳的修复效果。然而,这些技术通常基于昂贵的语句级错误定位信息,并且仅聚焦于行级/块级的缺陷修复,因而局限了缺陷修复技术的应用空间和场景。


日前,南方科技大学计算机科学与工程系助理教授张煜群领导的软件前沿技术研究组(ARiSE@SUSTech)发布了一款新的基于大模型的缺陷自动修复工具SRepair,取得了业内已知的最优效果。在业界最广泛应用的由真实大型Java项目缺陷组成的Defects4J数据集上,SRepair可以修复522个函数级缺陷中的300个,大幅超越当前SOTA技术至少85%[2]。实施SRepair只需要GPT-3.5-Turbo与开源代码大模型,仅需为使用API花费8.6$。因此,采用SRepair修复每个缺陷仅需花费2.9美分。同时,SRepair还在业内首先实现了对跨函数级缺陷的修复,总计共修复32个此类缺陷。可以说,SRepair极大地拓展了自动缺陷修复的应用范围和价值!该工作同时和快手公司合作完成。


SRepair机制

代码地址:https://github.com/GhabiX/SRepair

7-1.png

如上图所示,SRepair首先采用了一个修复建议模型。该模型通过思维链(Chain of Thought, CoT)技术综合分析辅助修复相关信息(即触发测试、错误信息和注释),以充分利用大模型的分析与学习能力,然后,它以自然语言提供修复建议。接下来,SRepair采用了一个补丁生成模型。该模型接受修复建议模型提供的修复建议,直接生成缺陷函数的补丁。如下图所示,SRepair通过思维链技术成功分析出复杂缺陷的根因,并且给出了正确的修复建议,进而成功修复这个缺陷。

7-2.png

为了全面评估SRepair的性能, 我们使用了以下数据集:

Defects4J:该数据集基于 Java 语言,共包含835个真实的程序缺陷,目前已经被广泛应用于评估自动修复工具的性能。该数据集包含了522个单函数缺陷与143个跨函数缺陷。

QuixBugs:包含 40 个经典编程问题的多语言(Python和Java)的缺陷数据集。

7-3.png

我们发现,相较于过去的SOTA技术,SRepair至少提升了85%的修复性能,并且修复了128个其他技术无法修复的缺陷。此外,我们观察到在Defects4J中68%的单函数缺陷(357个)可以被合理地修复,即可以通过所有数据集所提供的测试套件;57%(300个)缺陷被正确修复,即生成与官方补丁等价的修复。SRepair还首次成功修复了32个跨函数缺陷,成为业内第一次具备跨函数修复能力的工具。在QuixBugs数据集中,SRepair成功修复了Python与Java语言的所有缺陷,显示出其在多种编程语言上的卓越能力。


未来展望

SRepair将应用范围局限的行级(line-level)和块级(hunk-level)修复提升至函数级与跨函数级,达到了优异的修复效果,且成本低廉,无需昂贵的语句级错误定位信息。未来,我们将进一步拓展和优化SRepair,以更低的成本达到更加优秀的修复效果!


ARiSE@SUSTech简介

南方科技大学计算机科学与工程系助理教授张煜群领导的软件前沿技术研究组(The Laboratory of Advanced Rearch in Software Engineering, ARiSE@SUSTech)长期以来致力于软件安全与测试和面向人工智能的软件工程等领域的科研工作。在模糊测试、污点分析以及基于大模型的各软件工程下游任务取得的成果已经在国内腾讯、蚂蚁和快手等企业落地应用。


[1] Gazzola L, Micucci D, Mariani L. Automatic software repair: a survey. Proceedings of the 40th International Conference on Software Engineering. New York, NY, USA: Association for Computing Machinery, 2018: 1219.

[2] Xia, Chunqiu Steven, and Lingming Zhang. "Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT." arXiv preprint arXiv:2304.00385 (2023)