近年来,智能化软件工程研究领域出现了一大批神经程序修复(NPR)系统,它们采用先进的深度学习技术以自动修复程序中的错误。全面了解现有系统可以有效促进该领域的研究继续向前发展,并为系统用户提供实用的指导手册。然而,当前 NPR 系统评估中存在两个潜在弱点:1、已发布的系统没有使用统一的数据进行训练,虽然训练数据是影响系统性能的关键因素之一,但其是容易统一的,这导致现阶段无法抛开数据的影响以充分对比各个系统本身设计对修复性能的影响;2、现有评估方案简单地使用NPR系统在评估数据集上能够正确修复的缺陷代码数量进行对比,导致诸如"当前系统可以修复哪些类型的错误"之类的问题尚无法回答。由于上述不足,研究人员无法根据现有评估结果对相关NPR系统作出有针对性的改进,系统用户也无法根据待处理缺陷的特征和NPR系统的真实能力选择适合的修复方案。
为此,LIPLAB博士生钟文康针对现阶段最先进的9个NPR系统进行了系统评估,全面覆盖基于传统神经机器翻译模型的系统和基于大语言模型的系统,如图1所示。
图1. 对比的NPR系统及其特征
本研究的主要工作包括:
(1) 建立了一个新的基准和框架,支持使用统一数据对九个系统进行训练和验证,以保证对比的公平性。具体而言,使用从BFP数据集中筛选得到的144641条数据样本作为训练数据,使用广泛采用的Defects4J、Bears和QuixBugs作为评估数据集。为了确保没有数据泄露的问题,使用评估数据对训练数据进行了充分的过滤。执行缺陷修复时,保证所有系统的缺陷定位的假设是相同的;训练模型的时候,也通过同样的搜索策略保证所有系统的超参数设置都是最优的;预测的时候保证生成的候选结果是相同的,并且采用同样的机制筛选出似真补丁和正确补丁。
(2) 对重新训练的系统进行详细的性能分析,尤其是有效性和效率。具体而言,提出了4个研究问题,包括不同NPR系统对不同类型的缺陷的修复能力如何、NPR系统之间的能力重合度以及和传统APR方法的能力重合度如何、当候选补丁数量可变时各个系统之间的能力差距有多大、各个NPR系统需要验证多少似真补丁才能获得正确的修复结果等。针对每一个研究问题设计了详细的实验和结果分析,罗列了关于构建NPR以发挥最好性能、为缺陷选择合适NPR工具的建议,并为构建更好的NPR系统提供了有效参考。
(3) 深入讨论了不同NPR在不同Benchmark上的性能差异以及导致差异的根本原因,并为NPR的发展指出了三个可以深入探究的方向。
本研究的成果论文"Benchmarking and Categorizing the Performance of Neural Program Repair Systems for Java"已被软件工程领域国际顶级期刊ACM Transactions on Software Engineering and Methodology( CCF - A类 )录用。钟文康同学由葛季栋老师和李传艺老师共同指导,其多个自动程序修复技术研究成果已分别发表在ICSE、ASE、TOSEM和Internetware等期刊和会议。