基于多模态代码表征的图学习错误定位方法

李泓蓓 ,  于博文 ,  郭俊霞

北京化工大学学报(自然科学版) ›› 2026, Vol. 53 ›› Issue (5) : 80 -91.

PDF (905KB)
北京化工大学学报(自然科学版) ›› 2026, Vol. 53 ›› Issue (5) : 80 -91. DOI: 10.13543/j.bhxbzr.2026.05.009
机电工程和信息科学

基于多模态代码表征的图学习错误定位方法

作者信息 +

A graph-based fault localization method utilizing multi-modal code representations

Author information +
文章历史 +
PDF (925K)

摘要

自动错误定位技术在软件开发中发挥着重要作用,但现有技术缺乏对程序流和代码语法结构的深入表征,难以理解深层逻辑和上下文信息,同时缺乏处理不同粒度代码实体的普适性,限制了不同层次错误定位的信息交互和错误特征的全面理解。针对以上问题提出一种基于多模态代码表征的图学习错误定位方法,从两个方面提升错误定位效果:一是将语法结构、语义信息、执行逻辑与测试覆盖细节等多源信息通过大小模型结合构造出多模态代码表征图,提升在复杂代码结构中辨识错误的能力;二是通过在方法级和语句级错误定位模型之间共享参数,形成多粒度定位模型,提高错误定位方法准确率。在Defects4J数据集395个错误上进行测试的实验结果表明,与最佳基准技术相比,所提方法可以在方法级Top-1增加25个正确定位,首个错误排名提高1.12%;在语句级Top-1增加34个正确定位,首个错误排名提高5.34%。

Abstract

Automatic fault localization techniques play a critical role in software development,but existing techniques lack in-depth characterization of program flow and code syntactic structure, making it difficult to understand deep logic and contextual information. They also lack universality in dealing with code entities of different granularity, limiting the information interaction of different levels of error localization and the comprehensive understanding of error characteristics.To addres these issues, this study proposes a graph-based fault localization framework utilizing multi-modal code representations, aiming to enhance fault localization effectiveness in two ways: firstly, leveraging multi-source information such as syntactic structure, semantic information, execution logic, and test coverage details to construct multi-modal code representation graphs using both large and small models, enhancing the ability to identify faults in complex code structures; secondly, forming multi-granularity localization models by sharing parameters between method and statement-level localization models to improve fault localization method accuracy. Experimental results conducted on 395 faults from the Defects4J dataset demonstrate that compared to the best baseline technique, our framework results in an increase of 25 correctly localized faults at the method level with a 1.12% improvement in mean first rank (MFR), and an increase of 34 correctly localized faults at the statement level with a 5.34% improvement in MFR.

Graphical abstract

关键词

错误定位 / 大小模型结合 / 图神经网络 / 多粒度定位

Key words

fault localization / combination of large and small models / graph neural network / multi-granularity localization

引用本文

引用格式 ▾
李泓蓓,于博文,郭俊霞. 基于多模态代码表征的图学习错误定位方法[J]. 北京化工大学学报(自然科学版), 2026, 53(5): 80-91 DOI:10.13543/j.bhxbzr.2026.05.009

登录浏览全文

4963

注册一个新账户 忘记密码

引言

在软件开发和维护过程中,调试用于定位和修复程序中的错误是一项复杂的任务。调试、测试和验证的成本估计占软件开发项目总预算的50% ~ 75%[1]。为了降低成本,现有文献在文件、方法以及代码行等不同代码粒度上对错误定位技术进行了研究。迄今为止,研究者们已经开发了各种错误定位(fault localization,FL)技术,包括基于频谱[2-3]、基于变异[4-5]以及基于学习等的方法手段[6-7]。其中,基于深度学习的错误定位技术通过学习代码的基本特征和行为模式来自动识别和定位软件中的错误,展现出更大的应用潜力[8]。

与基于频谱的错误定位不同,基于深度学习的错误定位技术不需要依赖于一个怀疑公式来生成可疑代码元素列表,而是直接从代码本身和相关数据中学习。Li等[6]利用卷积神经网络(convolutional neural networks,CNN)的图像分类和模式识别能力,将错误定位视作一种深度学习图像模式识别,进行语句级别的错误定位。Grace(graph-based representation learning to fully utilize coverage information)方法通过将代码覆盖率表示为图结构,结合图神经网络进行训练,提升错误定位效果[7]。基于深度学习的错误定位过程始于从代码中提取特征,包括句法和语义信息,然后利用这些特征训练模型,通过学习错误和正常代码在代码库中的区别,识别潜在的错误模式和异常行为。训练完成后,模型就可以应用于新的代码,定位潜在的错误位置和类型。该类方法的优势在于其处理大规模数据和学习复杂代码模式的能力。有研究表明,基于深度学习的错误定位技术比基于频谱和基于变异的错误定位技术更有效[6]。

虽然基于深度学习的错误定位方法较之前的方法准确率有所提升,但在Defects4J V1.2.0数据集上的统计结果显示,其方法级Top-1最高准确率约为46.6%[7],语句级的Top-1最高准确率约为22.3%[9],定位效果有待进一步提升。此外,基于深度学习的错误定位方法目前存在以下问题:(1)由于代码的复杂性和提取程序流工具的缺乏,现有方法通过对抽象语法树(abstract syntax tree,AST)进行剪枝[7],作为代码的结构表征,但AST不能直接反映执行路径或控制流,使得基于AST的方法难以捕捉代码的执行上下文[10]。另外,剪枝操作导致代码行语法信息丢失,从而限制了其理解程序实体与错误行为间复杂关系的能力。(2)现有的错误定位方法忽略了不同粒度错误定位之间存在的关联信息。实际上,方法级的怀疑度与语句级的怀疑度之间存在紧密的相关性[11],理解并利用这种相关性对于提升错误定位的精准度具有重要的作用。

针对上述问题,本文提出一种基于多模态代码表征的图学习错误定位方法,从构建丰富的代码表征和优化多粒度错误定位两个方面进行改进。通过融合代码的多源信息,结合大小模型,构建涵盖语法结构、语义信息、执行逻辑和测试覆盖细节的表征方法,以增强对代码上下文的理解;同时,设计多粒度定位模型,利用方法级和语句级错误定位的协同学习策略,加强不同层次之间的信息交互,提升复杂代码环境下的定位准确性。通过本文工作,以期能改进现有技术对复杂程序逻辑的理解能力,提高错误定位方法在多样化代码场景中的精度与鲁棒性。

1 基于多模态代码表征的错误定位

基于代码的多源信息,本文提出基于多模态代码表征的错误定位模型(multimodal code representation fault localization model,MCRFL),框架如图1所示,主要包括大小模型结合的代码表征模块和多模态代码图学习模块。大小模型结合的代码表征模块分为代码属性表征和代码结构提取两个部分,其中代码属性表征利用大模型强大的代码理解能力进行代码Token序列的词法表征,利用小模型的轻量化特性进行语句类型、抽象语法树的语法信息表征。代码结构部分提取代码程序流、抽象语法树和测试用例覆盖信息。代码属性表征结合代码结构提取构造出多模态代码图(multimodal code graph, MCG),为错误定位提供分析基础。为了更好地理解程序,加强节点属性融合,本文结合门控技术和多层感知器设计出新型的门控图同构神经网络(gated graph isomorphism neural network,GGINN),并利用方法级和语句级定位的内在联系,通过共享参数的方式加深对错误模式的理解。

1.1 大小模型结合的代码表征

在代码表征部分,关注代码实体特性,捕捉代码潜在错误模式。利用大模型的强大语言理解特性进行代码行语义分析表征;利用小模型的轻量化特性处理较为轻量级的语句类型、代码语法以及失败测试用例表征,为错误定位提供更全面的信息源作为分析基础。

1.1.1 基于大模型的词法表征

代码行中的每个Token都承载着一定的语义功能,例如变量名、函数名、关键字等。通过词法表征可以将这些关键信息编码为特定的向量表示,从而更好地捕捉代码的结构和含义。

近年来随着计算能力的提高和数据量的增加,大语言模型已得到广泛应用并取得了显著的成果。因此,本文利用大语言模型CodeT5+[12]进行代码行词法信息提取。通过微调,大模型能够更好地适应特定任务的数据分布和需求。为了微调CodeT5+,首先利用正则表达式将代码行划分为独立的Token,从而构建一个词汇表。这个词汇表有助于CodeT5+学习到代码特定的语言表示,并将其迁移到代码特征提取任务中,从而提高模型在错误定位上的性能。最后,通过微调后的CodeT5+模型将待表征的代码Token序列映射到连续的低维向量表示。

然而不同的代码行由不同数量的Token组成,为实现代码行统一维度的向量表示,本文将代码行的Token进行拼接,形成n×m的矩阵表示,再利用主成分分析(principal component analysis,PCA)技术对矩阵去中心化,如式(1)所示,计算去中心化的矩阵的协方差矩阵,并如式(2)所示,进行特征分解以求出对应的特征向量。最后将矩阵 X 与特征向量进行点积运算,将数据降维至1×n,同时尽可能保留原始数据的重要信息。

 x¯i =1m∑j=1mxji,    i=1,2,⋯,n
M =1m-1X TX 

1.1.2 基于小模型的非序列化信息表征

虽然大模型在序列化信息的处理方面具有优势,但对于离散类型的代码行类型和具有树形结构的语法特征等非序列化信息,使用小模型进行表征效率更高且信息精度无损。

(1)代码行类型表征

不同类型的代码行在程序中具有不同的作用和功能,错误往往与条件语句、循环语句、异常处理等特定类型的代码相关,因此将更多的注意力放在这些代码行上效果会更好。鉴于代码结构和语义的多样性,本文将源代码根据其通用的语义功能细分为7种类型—方法(Method)、条件判断(If)、多路选择(Switch)、循环(For、While、Do)、异常处理(Try、Catch、Throw)、赋值语句和其他语句,并利用嵌入层将以上离散的代码类别映射到指定长度的连续低维向量表示中。

(2)代码行语法表征

每个代码行不仅包含Token序列信息,还蕴含着语法结构信息。本文通过现有的解析库Antlr4工具将源代码转换为一个集成的AST,然后根据语句粒度将AST分割成一组语句子树。提取后的语句子树被送入一个抽象语法树神经网络(abstract syntax tree neural network,ASTNN),其模型框架如图2所示。对于一个AST子树,本文使用Word2Vec的词嵌入参数表征树节点,以作为ASTNN的原始输入。然后,ASTNN在多路语句树上设计了一个递归编码器,以捕获语句级的语法信息。

在时间点t,ASTNN的状态转换方程如式(3)所示,利用重置门rt调控前一状态的影响力度;通过更新门zt整合历史信息和新信息;将候选状态h˜t与前一个状态ht-1进行线性组合,以决定当前的状态ht。通过ASTNN,错误定位模型能够理解Token级别的语法信息,加深代码的理解能力。

rt=σWret+Urht-1+brzt=σWzet+Uzht-1+bzh˜t=tanh Whet+rt⊙Uhht-1+bhht=1-zt⊙ht-1+zt⊙h˜t

(3)失败测试用例与方法声明的相似性

方法名称如果与失败测试名称具有更高的文本相似度,则此方法更可能是错误所在方法。用式(4)计算两个单词之间的文本相似度,其中wm和wt分别表示方法名称和失败测试名称,len()表示集合中元素个数。如果存在多个失败测试,采用平均值作为文本相似度评分。通过这种方式能够为每个方法分配一个基于文本相似度的评分,为后续的错误定位模型提供关于潜在错误位置的参考。

cor wm,wt=len wm⋂wtlen wt   

1.1.3 多模态代码图定义

将覆盖率视为测试用例和程序实体之间的连接关系,可以更充分地表示测试用例的覆盖信息[7]。因此,基于1.1.1节和1.1.2节提取的代码属性信息,定义多模态代码图如图3所示,其为一个无向图G=V,A,E,其中Vm,Vc,Vt∈V,Ec,Ed,Ea,Et∈E。顶点集Vm代表源代码中的方法声明,Vc代表从源代码中提取的语句行,Vt代表执行的测试用例;属性集A包含多模态代码图中每个节点的属性,包括词法、语法等表征;边集Ec代表源代码的控制流结构,Ed代表数据流结构,Ea代表抽象语法树结构,Et代表测试用例覆盖关系。

其中测试用例覆盖关系的定义如下:给定一个程序P={Li|i=1,2,…,n},其中Li代表程序P中的第i行代码,如果满足一个测试用例t在执行时覆盖到了Li,那么认定代码行Li与测试用例t之间存在覆盖关系。

1.2 基于多模态代码表征的错误定位模型

1.2.1 门控图同构神经网络

图的深度嵌入方法是一种采用深度学习框架编码图形结构和节点特性的技术,通过端到端的学习方式捕获图的拓扑结构与节点特性之间的关系。应用这种方法,可以针对软件的多模态代码图,通过反向传播技术调整和优化节点特征表示的聚合权重。这样的迭代更新使得图中的代码元素能够以压缩的形式在向量空间中得到表征。

为了更好地适应代码的长距离依赖性,本文将门控机制与多层感知器(multi-layer perceptron,MLP)结合,设计一种门控图同构神经网络GGINN,用于生成代码节点的特征表示。用于图表征学习的GGINN模型主要分为3个部分,即输入层、门控层和输出层。在输入层,模型接收由图结构信息和节点属性构成的输入;门控层引入信息流控制机制,通过门控单元的状态更新维护和管理节点间的信息流动,使得网络能够在长距离路径上有效传递和整合信息;最终,在输出层模型将多个层级的嵌入进行融合,以输出最终的定位结果。GGINN模型结构如图4所示,模型各部分介绍如下。

1)输入层

GGINN模型接受两类关键输入,包含词法、语法信息的节点属性信息和包含控制流、数据流信息的结构属性信息。结构信息源自多模态代码图,用于构建和映射代码的拓扑关系。属性信息包括提取的代码行信息,这些信息揭示了每个代码实体的内在功能和作用。本文将这些多模态向量信息进行拼接,以向量化形式表示,并运用层归一化(layer normalization)模块来增强数据的一致性和可比性,以便于后续处理。层归一化过程的具体计算方法如式(5)所示。

LNxi=a×xi-μσ+ϵ+b

式中,xi是输入向量的第i个元素,μ是输入向量x的均值,σ是输入向量x的标准差,ϵ是为了数值稳定性而添加的一个小的常数,a和b是可学习的参数,用于对归一化后的数据缩放和平移。

2)门控层

门控层结合了多层感知器和门控循环单元两个模块,以增强对节点特征的处理能力。MLP通过非线性映射对邻近节点的特征进行变换,从而提取出更深层次的特征信息。随后,这些经过MLP转换的特征被引入到门控循环单元(gate recurrent unit, GRU)的门控机制中,通过遗忘门和更新门计算得到一个更新后的记忆状态。这一新的记忆状态综合考虑了模型在当前时刻判断为重要且需保留或更新的信息,优化了信息流的管理。在此过程中,原始节点特征与其邻近节点的信息经过交互与融合,得到了全新的节点特征表示,如式(6)所示。

hv(t+1)=rhv(t),∑u→l MLPlhu(t);θr 

式中,r为门控单元GRU,hv(t)为目标节点的当前状态,hu(t)为邻近节点的当前状态,θr为递归单元的参数。

3)输出层

在所有目标节点经过GGINN迭代计算后,输出结果将进一步传递到一个线性变换层。本文使用Softmax函数对所有节点的输出结果进行分类处理,以确保最终的输出可以被解释为概率分布,反映每个节点是否存在错误的相对概率,如式(7)所示。

pvi=exp whi+b∑j=1n expwhj+b 

式中,pvi表示节点vi是错误节点的概率,hi表示节点vi的特征,w和b为可学习的参数。

为了增强模型在方法级和语句级错误定位任务上的信息交流,引入了一个交叉缝合单元(cross-stitch unit)来连接两个独立的GGINN模型。图5展示了这一机制的工作原理,在每个GGINN模型的ReLU层之后,交叉缝合单元的任务是学习方法级错误定位和语句级错误定位的门控模块输出之间的最优线性组合,为方法级和语句级错误定位提供了一种有效的共享学习框架。

交叉缝合单元通过对方法级特征和语句级特征中的输入特征进行线性组合学习,从而达到共享表征的目的。式(8)展示了交叉缝合单元的计算原理。

XMi+1XSi+1=αMMαMSαSMαSSHMiHSi 

式中,α代表一个可训练的权重矩阵,用于调整不同层次输入的贡献度;HMi、HSi分别为方法级任务和语句级GGINN模型在第i层ReLU激活后的输出特征表示,作为交叉缝合单元进行跨任务信息融合的输入,XMi+1和XSi+1分别为方法层和语句层在GGINN模型中第i+1层的输入,这些输入蕴含了从方法级和语句级错误定位中学习到的重要信息。

1.2.2 模型训练

Listwise方法是在学习排序技术中常用的损失函数方法,其以整体的视角分析整个列表,考虑列表中所有元素及其相互关系,因此能够更全面地反映列表的排名质量。基于这种综合评估能力,本文选择Listwise排名作为默认的损失函数,通过式(9)进行计算,以期达到更精确的排序学习效果。

ℒlist=-∑i=1n gviln pvi

式中,gvi表示节点vi的真实标签,pvi表示其推理结果。

2 实验与结果分析

2.1 实验设计

2.1.1 研究问题

为评估本文所提错误定位方法的效果,并分析模型关键部分在定位过程中的作用,提出以下研究问题:

研究问题1 与现有方法相比,MCRFL在错误定位上的性能表现如何?

研究问题2 使用不同的图神经网络模型对定位效果有何影响?

研究问题3 MCRFL中的多模态特征分别对性能产生了怎样的影响?

研究问题4 MCRFL所花费的时间成本如何?

本文采用留一验证法(leave-one-out cross-validation)进行实验,即对数据集包含的N个样本执行N次独立实验,在每次实验中选取1个样本作为测试集,其余的N-1个样本作为训练集。这样,每个样本都有机会被单独作为测试集进行评估,同时也会作为训练数据参与到模型的训练中。最终,模型性能的评估是基于这N次实验结果的平均值。

2.1.2 实验环境与数据集

实验采取离线评估的方式,所有实验均在配置有英特尔 Xeon Silver 4110 CPU、32GB RAM和 Nvidia GP102 GPU的64位Linux服务器上完成。实验环境基于PyTorch V1.8.0框架搭建。

实验采用Defects4J数据集[13],它汇集了来自多个不同Java项目的数百个可重现软件错误。目前Defects4J有两个版本:1.2.0版本包含来自6个项目的395个缺陷,2.0.0版本扩展到17个项目的835个缺陷。表1、2列出了该数据集的相关统计信息。本文使用Defects4J V1.2.0对研究问题1、2、3、4进行分析比较。此外,在研究问题1中,为了评估本方法在未见项目中的表现,使用Defects4J V2.0.0进行了跨项目实验。

2.1.3 评价指标

本文采用错误定位领域广泛使用的评价指标对方法性能进行评价,包括召回率、首个错误排名和平均错误排名,具体如下。

(1)召回率(Top-N)

Top-N召回率用于评估在排名列表的前N个位置内正确识别错误元素的概率。有研究显示高达73.58%的开发者主要关注排名列表中的前5个元素[14]。基于这一行为模式,本研究主要展示N为1、3和5的结果。Top-N值越大,说明可以定位到更多的错误。

(2)首个错误排名(mean first rank,MFR)

MFR指标关注于准确地标示出引发连锁反应的初始错误位置,因为后续的错误可能直接源于此。通常在项目所有版本中取平均值,来评价一个方法在定位初始错误方面的效果。MFR值越小,说明错误定位方法的定位效果越好。

(3)平均错误排名(mean average rank,MAR)

MAR计算所有被正确识别的错误在排名列表中位置的平均值。这一指标通过对项目各版本中的错误进行综合评估,提供了一个全面的视角来观察错误定位的整体准确性。MAR值越小,表明真实错误在排序列表中的位置越靠前,即错误定位的准确性越高。

2.1.4 基线方法

为评估本文所提方法的有效性,实验选用现有方法级和语句级错误定位技术为基线,其中包括基于频谱、基于变异以及基于深度学习的错误定位方法,具体如下。

Ochiai[15]:一种基于频谱的技术,通过分析测试用例的执行结果(成功或失败)以及代码覆盖数据来发现错误。

Tarantula[16]:一种基于频谱的方法,特点在于加入了一个容错机制,可以处理通过的测试用例中可能存在的错误,这一点与传统的基于覆盖的技术不同。

Multric[17]:一种基于深度学习的方法,通过学习训练数据集中有问题和无问题代码元素之间的关系来构建一个排名模型,融合了多种排名指标。

FLUCCS(fault localization using code and change metrics)[18]:将现有基于频谱的错误定位公式的可疑分数与代码度量结合起来,采用遗传编程和线性排名支持向量机(linear rank support vector machines)来检测错误。

DeepFL[19]:使用多层感知机模型,从测试用例和程序的不同方面提取特征,实现方法级别的错误定位。

AGFL(a graph convolutional neural network- based method for fault localization)[20]:基于图神经网络,抽象语法树的邻接矩阵和每个程序标记的词向量,参考Dstar计算语句的可疑性,并对这些语句进行排名。

DeepRL4FL[6]:将错误定位视作一种深度学习图像模式识别,进行语句级别的错误定位。

Grace[7]:通过图学习技术,捕捉代码的复杂结构和覆盖细节,并通过门控图神经网络来定位错误。

TRANSFER-FL(effective fault localization based on transferred knowledge)[21]:一种基于深度学习的方法,通过从开源数据集转移深层语义来增强错误定位和程序修复的能力。

LLMAO[9]:在大模型学习的表示之上微调一小组双向适配器层来克服大模型的从左到右特性,可以在没有任何测试覆盖信息的情况下定位有错误的代码行。

另外,为比较本文设计的GGINN模型的定位能力,选取了其他图神经网络进行对比实验,具体如下。

图卷积网络(graph convolutional networks, GCN)[22]:GCN将传统卷积神经网络中的卷积概念适应到图结构中,通过聚合邻居节点的特征来更新节点表示,利用图卷积操作捕获局部图拓扑的本质。

图同构网络(graph isomorphism networks,GIN)[23]:无论节点和边的排列如何,GIN可以识别不同图之间的结构相似性,擅长处理各种图配置。

门控图神经网络(gated graph sequence neural networks,GGNN)[24]:GGNN将节点间的信息流动视为一个动态的迭代过程。通过在每次迭代中评估当前节点和邻近节点的状态,更新节点表示,确保全面理解图的结构动态。

2.2 实验结果与分析

2.2.1 研究问题1

将MCRFL与其他错误定位技术进行比较,结果见表3。结果显示,MCRFL在大多数研究指标上均优于基线方法。特别是在Top-1召回率方面,方法级粒度上MCRFL分别比Multric、FLUCCS、DeepFL、AGFL和Grace额外识别了140、60、54、42和25个错误。相较于其余几种方法中表现最佳的技术Grace,MCRFL在MAR上提升了4.23%,在MFR上提升了1.12%。在语句级上,MCRFL相较于Ochiai和Tarantula多识别103个错误,相较于DeepRL4FL、TRANSFER-FL和LLMAO分别多识别51、38和34个错误。与其余几种方法中表现最佳的技术DeepRL4FL相比,MCRFL在MFR上提升5.34%,凸显了MCRFL更准确、高效地将错误元素排在怀疑列表前列的能力。

由于不同项目之间的特征可能存在巨大差异,因此跨项目缺陷定位是一项重大挑战。本文利用包含多个项目的Defects4J V1.2.0数据集作为训练集,测试中则采用Defects4J V2.0.0的扩展数据集,其在Defects4J V1.2.0数据集的基础上引入了9个新项目,共包含226个缺陷,以评估缺陷定位在不相关项目中的有效性。表4显示了MCRFL的跨项目缺陷定位性能。方法级粒度上,在Top-1、Top-3和Top-5级别中MCRFL分别成功定位了92、127和156个故障。语句级粒度上,相同级别的成功定位的故障数分别为48、90和114个。在Defects4J V1.2.0的同项目实验中,MCRFL在方法级别Top-1召回率上定位了56.96%的故障,相比之下,在Defects4J V2.0.0的跨项目环境中,MCRFL的有效性略有下降,方法级定位率降至40.71%,语句级定位率从35.70%降至21.24%。

由于不同项目之间在编程语言、编码风格和标准方面存在固有差异,这些差异会极大地改变代码结构和功能,影响故障的表现形式,进而影响模型准确定位故障的能力。因此,故障定位模型需要适应不同的编码环境,MCRFL等故障定位模型需具备通用性和适应性。

2.2.2 研究问题2

本文提出的GGINN模型的错误定位效果通过与3种常用的图学习模型—GCN、GIN和GGNN—进行比较来评估。所有模型中的参数都保持一致。

从图6(a)的数据可以看出,GGINN在方法级别上具有明显的优势,在Top-1召回率上比GCN、GIN和GGNN分别多定位了55、36和16个错误。图6(b)进一步展示了GGINN在MAR和MFR方面的表现,其MAR、MFR值相较于GCN模型分别提升了93.93%和100.81%。在语句级别方面,GGINN比GGNN、GIN和GCN在Top-1召回率上分别多定位了29、35和58个错误。图6(d)展现了GGINN在MAR和MFR方面的性能,分别比GCN模型提升57.40%和73.61%。

为了验证协同定位模块对错误定位准确率的影响,移除模型中的cross-stitch单元进行实验,并将这一改动后的版本(MCRFLnocross)与原始模型进行对比。表5的结果表明,缺少cross-stitch单元会导致模型性能显著下降。具体而言,这种缺失使得在方法级别的Top-1召回率减少了27个错误定位,语句级别减少了45个。此外,方法级别的MAR后移约1.67位,语句级别的MAR后移约42.8位。同样,MFR在方法级别后移约0.4位,在语句级别后移约39.95位。

2.2.3 研究问题3

为了探究不同特征对MCRFL在错误定位准确率上的影响,本文开展了一系列消融实验,分析不同节点特征对本文方法的影响。

本文设计了6种包含不同节点特征的变体:MCRFL_type(强调类型特征),MCRFL_word(专注于词汇特征),MCRFL_sem(以语法特征为中心),以及排除某一特征的组合MCRFL_notype、MCRFL_noword、MCRFL_nosem。通过将上述变体与标准 MCRFL方法对比,旨在展示每种代码表示在错误定位中的重要性,结果见表6。

实验结果显示,代码行的类型对MCRFL至关重要,缺少类型信息会导致性能大幅下降。在方法级别,不包含代码行类型信息会导致错误定位减少33个,即导致MAR由7.24降至12.35,MFR由6.16降至9.77,检测到真正错误的排名变得靠后。在语句级别,这一缺失会导致错误定位减少32个,MAR由29.58降至49.36,MFR由19.29降至39.12。

语法信息是第二重要的特征。在没有语法信息的情况下,方法级别的Top-1召回率下降18个错误定位,MAR后移约1.49位,MFR后移约0.67位。在语句级别,缺少语法特征导致错误定位减少26个,MAR后移约14.51位,MFR后移约14.27位。

词汇信息虽然影响较小,但仍对结果有所影响,其缺失导致方法级别错误定位减少9个,MAR后移约2.65位,MFR后移约1.42位。在语句级别,错误定位减少20个,MAR后移约13.63位,MFR后移约12.72位。

上述结果强调了将多模态序列属性整合在一起以有效表征代码行特征,从而提升错误定位准确率的重要性。经过消融实验发现,代码行类型信息影响最大,其次是语法信息,最后是词汇信息。

2.2.4 研究问题4

根据错误定位方法的流程,MCRFL的时间效率主要从3个方面进行分析:首先,MCRFL构建多模态代码图MCG需要多长时间;其次,MCRFL在图学习的训练中需要多长时间;第三,在测试集上生成怀疑度列表需要多长时间。所有项目的时间效率实验结果显示在表7中。

MCRFL始于提取代码属性特征与结构特征。随着代码项目规模的增大,构建时间也相应延长。在图学习阶段,MCRFL花费了大部分时间,鉴于这是一个离线过程,只需要在使用该方法之前执行一次,所以耗时是可以接受的。在预测阶段,每个项目的定位时间都不超过1 s。综合分析表明,尽管训练阶段的时间成本较高,但错误定位的时间消耗较短,能够满足实际应用需求。

3 结束语

本文提取多种代码信息进行合适的表征,利用大模型增强了代码结构和代码语句属性的信息表征能力,通过大小模型结合构建多模态代码图;探讨了基于多粒度协同的错误定位图神经网络模型构建与训练方法,最终达到进一步提高错误定位准确率的目的。为验证所提方法的有效性,进行了一系列实证研究,结果表明将多模态序列属性整合在一起进行代码行特征表征,通过GGINN模型的学习和协同定位模块的链接可以有效提升错误定位准确率。其中,在Defects4J V1.2.0数据集上的实验表明,方法级粒度下,本文的方法比最佳基准技术Grace的Top-1召回率增加25个正确定位,首个错误排名提高1.12%;语句级粒度下,相较于LLMAO技术在Top-1中增加了34个正确定位。MCRFL在未见项目中表现良好,在Defects4J V2.0.0扩展数据集中进行的实验结果显示,方法级Top-1成功定位了92个故障,语句级Top-1成功定位了48个故障,进一步证实了本文方法的有效性和适应性。

尽管自动错误定位领域发展至今已取得了一定的进展,但仍有广阔的探索空间。未来研究可探索更紧密的大模型学习策略,同时将研究成果转化为集成开发环境(IDE)插件,无缝集成自动错误定位技术到开发工作流,为开发者提供即时支持,实现研究成果实用化并促进软件开发实践。

参考文献

[1]

O’DELL D H. The debugging mindset: understanding the psychology of learning strategies leads to effective problem-solving skills[J]. ACM Queue, 2017, 15(1): 71-90.

[2]

姜淑娟, 张旭, 王荣存, 等. 基于路径分析和信息熵的错误定位方法[J]. 软件学报, 2021, 32(7): 2166-2182.

[3]

JIANG S J, ZHANG X, WANG R C, et al.Fault localization approach based on path analysis and information entropy[J]. Journal of Software,2021,32(7): 2166-2182.(in Chinese)

[4]

NATAN A, STERN R, KALECH M. Distributed spectrum-based fault localization[C]//The Thirty-Seventh AAAI Conference on Artificial Intelligence. Washington D.C., 2023: 6491-6498.

[5]

GHANBARI A, THOMAS D G, ARSHAD M A, et al. Mutation-based fault localization of deep neural networks[C]//2023 38th IEEE/ACM International Conference on Automated Software Engineering(ASE). Echternach, 2023: 1301-1313.

[6]

WEN M, XIE Z F, LUO K X, et al. Effective isolation of fault-correlated variables via statistical and mutation analysis[J]. IEEE Transactions on Software Engineering, 2023,49(4): 2053-2068 .

[7]

LI Y, WANG S H, NGUYEN T N. Fault localization with code coverage representation learning[C]//2021 IEEE/ACM 43rd International Conference on Software Engineering (ICSE). Madrid,2021: 661-673.

[8]

LOU Y L, ZHU Q H, DONG J H, et al. Boosting coverage-based fault localization via graph-based representation learning[C]//Proceedings of the 29th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering. Athens, 2021: 664-676.

[9]

SARHAN Q I, BESZÉDES Á. A survey of challenges in spectrum-based software fault localization[J].IEEE Access, 2022, 10: 10618-10639.

[10]

YANG A Z H, GOUES C L, MARTINS R, et al. Large language models for test-free fault localization[C]//Proceedings of the 46th IEEE/ACM International Conference on Software Engineering(ICSE). Lisbon,2024: 165-176.

[11]

WANG W H, LI G, MA B, et al. Detecting code clones with graph neural network and flow-augmented abstract syntax tree[C]//2020 IEEE 27th International Conference on Software Analysis, Evolution and Reengineering (SANER). London, 2020: 261-271.

[12]

DUTTA A, MANRAL R, MITRA P, et al. Hierarchically localizing software faults using DNN[J]. IEEE Transactions on Reliability, 2020, 69(4): 1267-1292.

[13]

WANG Y, LE H, GOTMARE A D, et al. CodeT5+: open code large language models for code understanding and generation[C]//Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing. Singapore, 2023: 1069-1088.

[14]

JUST R, JALALI D, ERNST M D. Defects4J: a database of existing faults to enable controlled testing studies for Java programs[C]//Proceedings of the 2014 International Symposium on Software Testing and Analysis. San Jose, 2014: 437-440.

[15]

KOCHHAR P S, XIA X, LO D, et al. Practitioners' expectations on automated fault localization[C]//Proceedings of the 25th International Symposium on Software Testing and Analysis. Saarbrücken, 2016: 165-176.

[16]

ABREU R, ZOETEWEIJ P, VAN GEMUND A J C. On the accuracy of spectrum-based fault localization[C]// Testing: Academic and Industrial Conference Practice and Research Techniques-MUTATION (TAICPART-MUTATION 2007. Windsor,2007: 89-98.

[17]

JONES J A, HARROLD M J. Empirical evaluation of the Tarantula automatic fault-localization technique[C]//Proceedings of the 20th IEEE/ACM International Conference on Automated Software Engineering.Long Beach, 2005: 273-282.

[18]

XUAN J F, MONPERRUS M. Learning to combine multiple ranking metrics for fault localization[C]//2014 IEEE International Conference on Software Maintenance and Evolution. Victoria, 2014: 191-200.

[19]

SOHN J, YOO S. FLUCCS: using code and change metrics to improve fault localization[C]//Proceedings of the 26th ACM SIGSOFT International Symposium on Software Testing and Analysis. Santa Barbara, 2017: 273-283.

[20]

LI X, LI W, ZHANG Y Q, et al. DeepFL: integrating multiple fault diagnosis dimensions for deep fault localization[C]//Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis. Beijing, 2019: 169-180.

[21]

QIAN J, JU X L, CHEN X, et al. AGFL: a graph convolutional neural network-based method for fault localization[C]//2021 IEEE 21st International Conference on Software Quality, Reliability and Security (QRS). Haikou, 2021: 672-680.

[22]

MENG X X, WANG X, ZHANG H Y, et al. Improving fault localization and program repair with deep semantic features and transferred knowledge[C]//2022 IEEE/ACM 44th International Conference on Software Engineering (ICSE). Pittsburgh, 2022: 1169-1180.

[23]

ZHANG S, TONG H H, XU J J, et al. Graph convolutional networks: a comprehensive review[J]. Computational Social Networks, 2019, 6: 11.

[24]

KIM B H, YE J C. Understanding graph isomorphism network for rs-fMRI functional connectivity analysis[J]. Frontiers in Neuroscience, 2020, 14: 630.

[25]

LI Y J, ZEMEL R, BROCKSCHMIDT M, et al. Gated graph sequence neural networks[C]//International Conference on Learning Representations. San Juan,2016.

AI Summary AI Mindmap
PDF (905KB)

0

访问

0

被引

详细

导航
相关文章

AI思维导图

/

〈 〉