CN114936158B - 一种基于图卷积神经网络的软件缺陷定位方法 - Google Patents

一种基于图卷积神经网络的软件缺陷定位方法 Download PDF

Info

Publication number
CN114936158B
CN114936158B CN202210595157.8A CN202210595157A CN114936158B CN 114936158 B CN114936158 B CN 114936158B CN 202210595157 A CN202210595157 A CN 202210595157A CN 114936158 B CN114936158 B CN 114936158B
Authority
CN
China
Prior art keywords
node
defect
source code
control flow
neural network
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210595157.8A
Other languages
English (en)
Other versions
CN114936158A (zh
Inventor
鞠小林
钱洁
陈志华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jiangsu Baorun Network Technology Co ltd
Nantong University
Original Assignee
Jiangsu Baorun Network Technology Co ltd
Nantong University
Filing date
Publication date
Application filed by Jiangsu Baorun Network Technology Co ltd, Nantong University filed Critical Jiangsu Baorun Network Technology Co ltd
Priority to CN202210595157.8A priority Critical patent/CN114936158B/zh
Publication of CN114936158A publication Critical patent/CN114936158A/zh
Application granted granted Critical
Publication of CN114936158B publication Critical patent/CN114936158B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明提供了一种基于图卷积神经网络的软件缺陷定位方法,包括以下步骤:(1)使用Louvain算法对抽象语法树进行剪枝,减少冗余节点;(2)结合抽象语法树与控制流图并通过Word2Vec生成对应的词向量,提取代码语义特征以及上下文依赖;(3)通过注意力机制进行关键特征提取和降维,减少模型参数的数量以及降低模型过拟合;(4)基于上述特征,对构建的图卷积神经网络模型进行训练,得到软件缺陷定位预测模型。本发明的有益效果为:结合抽象语法树和控制流图提取特征,通过图卷积神经网络进一步提取特征信息并进行节点分类,实现较高精度的缺陷定位,提高了缺陷定位的效率。

Description

一种基于图卷积神经网络的软件缺陷定位方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于图卷积神经网络的软件缺陷定位方法。
背景技术
在软件开发中,程序调试是一项重要的、但却耗费时间的任务。在此过程中,缺陷定位是识别错误位置的一项人工任务。开发人员利用过往经验来确定这些错误可能发生的位置,通常是通过检查语句输出、插入断点以及分析每个测试的结果,然而这与成本和效率成反比。由于软件规模的不断增加,自动化软件缺陷定位方法开始替代手动定位错误。
最近,随着深度学习的快速发展,许多程序员已经开始使用深度学习技术来解决软件工程中的问题。例如,刘等人提出了一种挖掘图行为和使用支持向量机(SVM)的缺陷定位方法。Wong等人提出了一种基于RBF神经网络的缺陷定位技术,以帮助程序员有效地定位错误。李等人使用卷积神经网络(CNN)的图像分类和模式识别能力,并将其应用于代码覆盖矩阵。CNN的卷积利用核函数对中心像素和设置的相邻像素进行加权求和,形成特征图,实现图像特征的提取。然而,CNN适用于欧几里德空间中的图像数据,但不适用于非欧几里德空间结构,这具有局限性。图卷积神经网络(GCN)适用于任何拓扑结构,不需要固定数量的节点。GCN可以学习节点的特征和节点之间的关联信息。
发明内容
本发明的目的在于提供一种基于图卷积神经网络的软件缺陷定位方法,该方法可以预测程序代码的缺陷所在位置。
本发明的思想为:本发明提出基于图卷积神经网络的软件缺陷定位方法,即通过Word2Vec以及注意力机制对AST、CFG提取代码语义信息和上下文依赖,进而得到各节点的特征表示。然后经过图卷积神经网络进一步聚合节点特征,从而更准确的预测代码缺陷所在位置。
一种基于图卷积神经网络的软件缺陷定位方法,包括以下步骤:
S1.使用Defects4J数据集,搜集各项目程序的源代码和缺陷报告后进行处理,获取源代码属性X、邻接矩阵D和错误标签Y,构成缺陷数据集,将所述缺陷数据集分为训练集和验证集;
所述处理具体包括以下步骤:
S11.提取所述缺陷报告中的错误行信息,得到错误标签Y;
S12.将所述源代码生成对应的抽象语法树A,并对抽象语法树A进行剪枝操作,得到抽象语法树A1及其邻接矩阵D;
其中,邻接矩阵D根据抽象语法树A1的节点连接信息得到;
S13.将所述源代码生成对应的控制流图C;
S14.对抽象语法树A1中的所有节点进行词嵌入操作,得到各节点的节点属性F1,对控制流图C中所有基本块进行词嵌入,得到各基本块的基本块属性F2;
S15.按照抽象语法树A1节点以及控制流图C基本块在源代码中的位置进行特征融合,得到源代码属性X;
S2.对所述训练集和所述验证集中的源代码属性X和错误标签Y使用GraphSMOTE方法进行处理,得到源代码属性X’和错误标签Y’;
S3.将源代码属性X’和错误标签Y’输入注意力机制,输出最后一层特征向量作为源代码属性X”;
S4.构建图卷积神经网络模型,将源代码属性X”、错误标签Y’以及邻接矩阵D输入图卷积神经网络模型,经过两层卷积后,使用softmax归一化,进而得到每个节点的缺陷概率P;
S5.根据所述验证集中节点的缺陷概率P和错误标签Y’,计算模型在验证集上的准确率;
S6.重复步骤S4和S5,重复次数为100~200次,将准确率最高的图卷积神经网络模型作为软件缺陷定位模型M;
S7.采用软件缺陷定位模型M对待检测软件进行缺陷定位,并生成缺陷报告。
进一步的,所述生成控制流图C,具体为:使用soot得到源代码的控制流图C0后,将控制流图C0中包含多个语句的基本块分割成多个基本块,得到新的控制流图C。
进一步的,所述按照抽象语法树A1节点以及序列控制流图C1基本块在源代码中的位置进行特征融合,具体为:若位置相同,则将基本块属性F2融合到节点属性F1中;若位置不同,则对节点属性F1进行补零操作。
进一步的,所述准确率的计算公式如下:
其中,precision表示准确率,TP表示验证集中成功预测错误节点的数量,FP表示将错误节点预测为正确节点的数量。
进一步的,所述成功预测错误节点的判断方式为:当缺陷概率P≥0.5且Y=1时,认为成功预测错误节点。
进一步的,所述将错误节点预测为正确节点的数量的判断方式为:当缺陷概率P<0.5且Y=1时,认为将错误节点预测为正确节点。
与现有技术相比,本发明有以下创新之处:
1)提出的一种基于图卷积神经网络的软件缺陷定位方法。它不仅考虑了代码的空间结构信息,还考虑了代码的上下文依赖。
2)使用注意力机制提取向量的关键特征并对其进行降维。
3)利用社区检测算法为抽象语法树去除冗余节点,减少冗余节点对模型的干扰。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
图1为本发明提供的一种基于图卷积神经网络的软件缺陷定位方法框架图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。当然,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
实施例1
参见图1所示,本发明提供了一种基于图卷积神经网络的软件缺陷定位方法,具体包括以下内容:
1、使用Defects4J数据集,搜集其各项目中的源代码、缺陷报告。
表1显示了Defects4J各项目的错误版本个数以及代码长度等信息,其中错误版本数是指各项目中所包含的错误代码个数,测试用例数指用于测试代码的输入数据个数;
表1实验对象信息表
2、对数据集进行预处理操作,包括删除代码中的注释,提取缺陷报告信息等。最后,提取所述缺陷报告中的错误行信息,得到错误标签Y;
3、使用javalang得到源代码的抽象语法树A,使用soot得到源代码的控制流图C。
具体的,抽象语法树中的节点对应源代码中的语句(例如Ifstatement),控制流图中的基本块也对应源代码中的语句(例如MethodDeclaration),若基本块包含多个语句,则将该基本块划分为若干个基本块。
在Defects4J数据集中,最大的AST有92684个节点,样本中存在大量冗余信息和噪声。为了解决这个问题,使用Louvain算法对抽象语法树A剪枝得到抽象语法树A1,并根据抽象语法树A1的节点连接信息得到邻接矩阵D,剪枝的目的是减少节点数量并降低冗余信息对模型的影响。
通过Word2Vec对抽象语法树A1的节点和控制流图C中基本块进行词嵌入操作,得到节点属性F1和基本块属性F2。
词嵌入操作具体为:将控制流图中的基本块作为节点,将源代码中的所有词作为语料库,选择Skip-gram来计算抽象语法树A1中各节点或控制流图C中各基本块之间的相似度,最后将得到的向量作为节点属性F1或基本块属性F2。节点属性F1表示节点的上下文信息,基本块属性F2表示基本块的上下文信息。
如表2所示,假设抽象语法树A1中存在5个节点,各节点通过词嵌入得到如第二列所示的向量并作为节点属性,第三列表示各个节点在源代码中的位置。
表3显示了基本块的具体数值以及其位置标识,假设控制流图C中存在5个基本块,各基本块通过词嵌入得到第二列的向量并作为基本块属性F2,第三列表示各个基本块在源代码中的位置:
表2节点属性信息表
表3基本块属性信息表
最后,根据代码位置信息将两者有序拼接,得到每个节点的特征向量,作为源代码属性X,表4显示了融合后的特征向量X;
表4融合后的特征信息表
经过以上操作,获得缺陷数据集,包括源代码属性X、邻接矩阵D和错误标签Y。
4、将缺陷数据集随机划分成训练集、验证集和测试集,同时构建图卷积神经网络模型。
在本发明的优选实施例中,将缺陷数据集按照4:3:2(训练:验证:测试)的比例进行划分,其对应的序号分别为id_train,id_val,id_test;
5、在分类问题中,通常假设不同类别的训练比例相同。在实际应用中,这种理想化的情况很少存在,并且经常可能存在一个或某些类别的样本数据过多,导致训练样本类别的分布不平衡。在缺陷定位中,有错误的节点数量远小于正确节点的数量,这就会导致模型将节点都预测为没有错误,进而影响模型的精度。为了解决这个问题,可对训练集以及验证集X[id_train+id_val],Y[id_train+id_val]使用GraphSMOTE方法进行处理,得到X’[id_train+id_val]及Y’[id_train+id_val]。
GraphSMOTE方法处理的具体操作为:通过插值生成少数类别样本(错误节点),形成一个增广的平衡图,使得错误节点与正确节点数量接近。
6、在步骤3中,将AST、CFG向量进行拼接。但拼接会使维度逐层翻倍,这就会增加模型参数的数量,进而导致模型过度拟合问题。故将GraphSMOTE方法处理得到的训练集以及验证集X’[id_train+id_val]及Y’[id_train+id_val]输入注意力机制,对特征向量维度降至20,输出其最后一层特征向量X”[id_train+id_val]。
7、将步骤6注意力机制得到的向量X”[id_train+id_val]、标签Y’[id_train+id_val]以及邻接矩阵D输入图卷积神经网络,在隐藏层l中每个节点都聚合邻居节点的信息,其具体公式如下:
其中,l表示模型所处的深度,表示邻接矩阵加上单位矩阵,A表示邻接矩阵/>的度矩阵,X”(l)表示在l层的节点属性,W(l)表示在l层的权重。经过多层卷积后,使用softmax归一化,进而得到每个节点的缺陷概率P[id_train+id_val],其具体公式如下:
其中,ReLU表示激活函数,表示最后一层的节点属性,W(l)表示第l层的权重,W(l +1)表示第l+1层的权重。
8、利用步骤7得到的节点的缺陷概率P[id_train+id_val],通过比较P[id_val]、Y[id_val]数值,来统计验证集中成功预测错误节点类型的数量TP,以及将错误节点预测为正确节点的数量FP。当P[id_val][k]≥0.5以及Y[id_val][k]=1时,则表示成功预测错误节点类型;当P[id_val][k]<0.5以及Y[id_val][k]=1时,则表示将错误节点预测为正确节点的数量,其中k=1,2…n,n为所有节点的数量。最后,利用下式计算模型在验证集上的准确率(precision):
9、重复执行步骤7、8,重复次数为100次,选取在验证集中准确率最高的模型作为软件缺陷定位模型M,最后使用测试集数据在最优模型M上的准确率作为模型M的准确率,为97.25%。
软件缺陷定位模型M的参数如下:
软件缺陷定位模型M的深度为2层;
软件缺陷定位模型M的学习率为0.023;
软件缺陷定位模型M的Dropout概率为0.2;
10、对待检测软件执行步骤3,得到源代码属性X、邻接矩阵D。将源代码属性X、邻接矩阵D,输入软件缺陷定位模型M对待检测程序进行缺陷定位,输出每个节点的概率。
表5显示了节点有缺陷的概率信息,概率值越大,节点所在的语句出错的可能性就越大。
表5节点概率信息表
11、将步骤10得到的节点概率作为语句可疑值。然后,对语句的可疑值进行排序,得到缺陷定位报告,表6显示了缺陷定位报告信息;
表6缺陷定位报告信息表
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种基于图卷积神经网络的软件缺陷定位方法,其特征在于,包括以下步骤:
S1.使用Defects4J数据集,搜集各项目程序的源代码和缺陷报告后进行处理,获取源代码属性X、邻接矩阵D和错误标签Y,构成缺陷数据集,将所述缺陷数据集分为训练集和验证集;
所述处理具体包括以下步骤:
S11.提取所述缺陷报告中的错误行信息,得到错误标签Y;
S12.将所述源代码生成对应的抽象语法树A,并对抽象语法树A进行剪枝操作,得到抽象语法树A1及其邻接矩阵D;
其中,邻接矩阵D根据抽象语法树A1的节点连接信息得到;
S13.将所述源代码生成对应的控制流图C;
S14.对抽象语法树A1中的所有节点进行词嵌入操作,得到各节点的节点属性F1,对控制流图C中所有基本块进行词嵌入,得到各基本块的基本块属性F2;
S15.按照抽象语法树A1节点以及控制流图C基本块在源代码中的位置进行特征融合,得到源代码属性X;
S2.对所述训练集和所述验证集中的源代码属性X和错误标签Y使用GraphSMOTE方法进行处理,得到源代码属性X’和错误标签Y’;
S3.将源代码属性X’和错误标签Y’输入注意力机制,输出最后一层特征向量作为源代码属性X”;
S4.构建图卷积神经网络模型,将源代码属性X”、错误标签Y’以及邻接矩阵D输入图卷积神经网络模型,经过两层卷积后,使用softmax归一化,进而得到每个节点的缺陷概率P;
S5.根据所述验证集中节点的缺陷概率P和错误标签Y’,计算模型在验证集上的准确率;
S6.重复步骤S4和S5,重复次数为100~200次,将准确率最高的图卷积神经网络模型作为软件缺陷定位模型M;
S7.采用软件缺陷定位模型M对待检测软件进行缺陷定位,并生成缺陷报告。
2.根据权利要求1所述的软件缺陷定位方法,其特征在于,所述生成控制流图C,具体为:使用soot得到源代码的控制流图C0后,将控制流图C0中包含多个语句的基本块分割成多个基本块,得到新的控制流图C。
3.根据权利要求1所述的软件缺陷定位方法,其特征在于,所述按照抽象语法树A1节点以及序列控制流图C1基本块在源代码中的位置进行特征融合,具体为:若位置相同,则将基本块属性F2融合到节点属性F1中;若位置不同,则对节点属性F1进行补零操作。
4.根据权利要求1所述的软件缺陷定位方法,其特征在于,所述准确率的计算公式如下:
其中,precision表示准确率,TP表示验证集中成功预测错误节点的数量,FP表示将错误节点预测为正确节点的数量。
5.根据权利要求4所述的软件缺陷定位方法,其特征在于,所述成功预测错误节点的判断方式为:当缺陷概率P≥0.5且Y=1时,认为成功预测错误节点。
6.根据权利要求4所述的软件缺陷定位方法,其特征在于,所述将错误节点预测为正确节点的数量的判断方式为:当缺陷概率P<0.5且Y=1时,认为将错误节点预测为正确节点。
CN202210595157.8A 2022-05-28 一种基于图卷积神经网络的软件缺陷定位方法 Active CN114936158B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210595157.8A CN114936158B (zh) 2022-05-28 一种基于图卷积神经网络的软件缺陷定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210595157.8A CN114936158B (zh) 2022-05-28 一种基于图卷积神经网络的软件缺陷定位方法

Publications (2)

Publication Number Publication Date
CN114936158A CN114936158A (zh) 2022-08-23
CN114936158B true CN114936158B (zh) 2024-06-04

Family

ID=

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102096017B1 (ko) * 2018-11-29 2020-04-01 중앙대학교 산학협력단 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템
CN112288079A (zh) * 2020-11-17 2021-01-29 北京轩宇信息技术有限公司 图神经网络模型训练方法、软件缺陷检测方法及系统
CN113434418A (zh) * 2021-06-29 2021-09-24 扬州大学 知识驱动的软件缺陷检测与分析方法及系统
CN113641586A (zh) * 2021-02-26 2021-11-12 北京北大软件工程股份有限公司 软件源代码缺陷检测方法、系统、电子设备及储存介质
CN114185769A (zh) * 2021-11-16 2022-03-15 南京航空航天大学 基于双向长短期记忆神经网络的软件缺陷预测方法及终端
CN114238100A (zh) * 2021-12-10 2022-03-25 国家电网有限公司客户服务中心 基于GGNN和分层注意力网络的Java漏洞检测定位方法
CN114528221A (zh) * 2022-02-24 2022-05-24 北京航空航天大学 一种基于异质图神经网络的软件缺陷预测方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102096017B1 (ko) * 2018-11-29 2020-04-01 중앙대학교 산학협력단 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템
CN112288079A (zh) * 2020-11-17 2021-01-29 北京轩宇信息技术有限公司 图神经网络模型训练方法、软件缺陷检测方法及系统
CN113641586A (zh) * 2021-02-26 2021-11-12 北京北大软件工程股份有限公司 软件源代码缺陷检测方法、系统、电子设备及储存介质
CN113434418A (zh) * 2021-06-29 2021-09-24 扬州大学 知识驱动的软件缺陷检测与分析方法及系统
CN114185769A (zh) * 2021-11-16 2022-03-15 南京航空航天大学 基于双向长短期记忆神经网络的软件缺陷预测方法及终端
CN114238100A (zh) * 2021-12-10 2022-03-25 国家电网有限公司客户服务中心 基于GGNN和分层注意力网络的Java漏洞检测定位方法
CN114528221A (zh) * 2022-02-24 2022-05-24 北京航空航天大学 一种基于异质图神经网络的软件缺陷预测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
AGFL: A Graph Convolutional Neural Network-Based Method for Fault Localization;Jie Qian et al.;《2021 IEEE 21st International Conference on Software Quality, Reliability and Security (QRS)》;20220310;第672-680页 *

Similar Documents

Publication Publication Date Title
CN117951701A (zh) 用于确定软件代码中的缺陷和漏洞的方法
CN112215013B (zh) 一种基于深度学习的克隆代码语义检测方法
CN112364352B (zh) 可解释性的软件漏洞检测与推荐方法及系统
CN110162972B (zh) 一种基于语句联合编码深度神经网络的uaf漏洞检测方法
CN112927061A (zh) 用户操作检测方法及程序产品
CN116932384A (zh) 一种基于特征融合和特征选择的软件缺陷预测方法
CN110825642B (zh) 一种基于深度学习的软件代码行级缺陷检测方法
CN101576850A (zh) 一种改进的面向宿主的嵌入式软件白盒测试方法
CN112783513B (zh) 一种代码风险检查方法、装置及设备
CN114064487A (zh) 一种代码缺陷检测方法
CN114936158B (zh) 一种基于图卷积神经网络的软件缺陷定位方法
CN114443506B (zh) 一种用于测试人工智能模型的方法及装置
CN116910526A (zh) 模型训练方法、装置、通信设备及可读存储介质
CN116361788A (zh) 一种基于机器学习的二进制软件漏洞预测方法
CN115907829A (zh) 基于人工智能的用户账户分析方法及系统
CN115221045A (zh) 一种基于多任务多视角学习的多目标软件缺陷预测方法
CN115640155A (zh) 基于语句依赖和补丁相似性的程序自动修复方法与系统
CN114936158A (zh) 一种基于图卷积神经网络的软件缺陷定位方法
CN114519187A (zh) 基于多维度混合特征的Android恶意应用检测方法及系统
CN113434408B (zh) 一种基于测试预言的单元测试用例排序方法
CN111737131B (zh) 一种基于概率对齐的代码错误定位方法
CN115098389B (zh) 一种基于依赖模型的rest接口测试用例生成方法
CN114896163A (zh) 基于GraphSAGE和MLP的软件缺陷定位方法
CN117349186B (zh) 一种基于语义流图的程序语言缺陷定位方法、系统及介质
CN114416421B (zh) 一种代码缺陷的自动定位与修复方法

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant