1、摘要
错误定位( Fault Localization,FL )旨在自动定位代码中的错误行。以前的FL技术假设提供输入测试,并且通常需要大量的程序分析,程序插桩或数据预处理。之前关于APR的深度学习工作很难从小数据集中学习,并且在真实世界程序上产生有限的结果。受代码的大语言模型( Large Language Models,LLMs )能够适应基于极少实例的新任务的启发,我们研究了LLMs对行级错误定位的适用性。具体来说,我们提出通过在LLMs学习到的表示之上微调一组小的双向适配器层来克服LLMs的左向右特性,从而产生LLMAO,这是第一种基于语言模型的错误定位方法,它可以在没有任何测试覆盖信息的情况下定位代码的bug行。我们分别对3.5亿、60亿和160亿个参数的LLMs在Buggy程序的手工编写的小型语料库上进行了微调,例如,Deads4J语料库。
2、相关内容
2.1 最新进展
基于机器学习的错误定位( MLFL )的最新进展,如DeepFL ,DEEPRL4FL [和GRACE 使用机器学习将代码,测试或执行特征与程序实体的错误可能性联系起来。MLFL技术从现有的SBFL和MBFL技术的可疑度得分( e.g . , TRANSFERFL )、易错性特征如代码复杂度度量(如Deep FL [ 2 ])或测试覆盖矩阵( DEEPRL4FL [ 10 ] )等信息中学习检测代码的错误行。
SBFL:基于频域的错误定位(Spectrum-based FL),这种方法主要依赖于测试用例执行的结果,通过分析测试用例的覆盖信息和测试结果,来推测哪些代码片段最有可能包含错误。它不能在单个直线块中消除直线之间的歧义。