CN115982037A - 一种基于抽象语法树的软件缺陷预测方法 - Google Patents
一种基于抽象语法树的软件缺陷预测方法 Download PDFInfo
- Publication number
- CN115982037A CN115982037A CN202211735838.6A CN202211735838A CN115982037A CN 115982037 A CN115982037 A CN 115982037A CN 202211735838 A CN202211735838 A CN 202211735838A CN 115982037 A CN115982037 A CN 115982037A
- Authority
- CN
- China
- Prior art keywords
- syntax tree
- abstract syntax
- matrix
- network
- node
- 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.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种基于抽象语法树的软件缺陷预测方法,属于深度学习领域和软件缺陷预测领域。本发明通过将源代码转换为抽象语法树的形式,保留其定义良好的结构信息与语义信息,使用图卷积网络(GCN)来学习语法树结构中的节点的特征和网络结构的信息;使用词嵌入将抽象语法树的节点序列转换成文本向量,然后使用BiGRU网络来学习上下文直接的语义关系以提取语义特征,最后将得到的两类特征基于注意力机制进行聚合得到代码的特征,将其输入分类器中以预测缺陷率。本发明充分利用了代码的语义和语法特征使用注意力机制为不同变量赋予不同的权重,减少了噪声干扰,提高了软件缺陷预测的准确率。
Description
技术领域
本发明涉及深度学习领域和软件缺陷预测领域,可以帮助软件工程师和测试人员合理分配资源来定位错误,快速缩小软件代码库中最有可能存在缺陷的部分。
背景技术
随着软件系统在社会各个领域扮演着重要的角色,软件产生的缺陷对商业和人们的生活产生了重大的影响。然而,由于软件代码库在规模和复杂性上的显著增长,识别软件代码中的缺陷变得越来越困难。传统软件缺陷预测是以手工获取软件度量特征的基础进行分类学习,如机器学习技术已被广泛用于建立缺陷预测模型,这些技术从软件代码中提取出许多特征,并将它们输入到常见的分类器中,比较有代表性的如SVM支持向量机、随机森林、朴素贝叶斯和逻辑回归等。但是传统软件缺陷预测方法使用静态代码度量作为特征,这些特性并不能真正反映代码的语法和语义,这无疑会对缺陷预测造成影响。
随着深度学习的发展,人们发现它在捕获源代码的语法和语义特征方面表现的很好。前人大量的实验已经证明,将代码转换成抽象语法树的形式能够很好的保留代码的结构,目前主流的软件缺陷预测模型都有这一步,该类方法的关键思想是将源代码的抽象语法树中提取的token向量用来生成源代码的语义特征表示,并利用生成的特征建立更精确的分类模型。然而要获取更精准的语义特征以使模型更准确,还需要一种方法来更好的利用抽象语法树中定义良好的结构信息和丰富的语义。
发明内容
本发明基于抽象语法树的表现形式,提供一种基于GCN网络和双向GRU网络结合的方法获取源代码的语义特征,并加入了注意力机制来提高模型的性能。
本发明提供的技术方案如下:
一种基于抽象语法树的软件缺陷预测方法,包括如下步骤:
1)解析源代码为抽象语法树;
2)使用深度遍历算法将抽象语法树转换成文本向量,如果抽象语法树的大小为n,则获得一个关于Y的文本向量:
Y=[Y1 ,Y2 ,Y3,...,Yn ] (1)
3)为抽象语法树的每个代码片段生成节点关系图,AST上的每个节点都有自己的特征,设这些节点的特征组成一个n×D维的矩阵,然后各个节点间的关系也会形成一个n×n维的邻接矩阵A:
图用G=(S,E)表示,其中S中元素为顶点,E中元素为边;
4)词嵌入过程。使用Gensim库将文本向量转换为可以输入GRU的数字向量,建立一个映射字典表,将向量中的每个文本元素链接到一个整数,这些整数充当标记,唯一地标识AST中的每个文本元素。通过这种方法,可以将节点序列中的每个元素都被替换成数字符号,并且保持它们的顺序不变。通过步骤(2)给定的文本向量,最终可以得到相应的嵌入矩阵x。
x=[x1,x2,x3,...xn] (3)
对于数据中的类不平衡问题,使用随机过采样-SMOTE方法来处理。
5)将步骤3)中得到的数据输入图卷积网络中,在GCN网络中,节点关系图和相对应的节点作为其输入,对于GCN网络中的每个节点,需要考虑其所有邻居以及自身所包含的特征信息。它的层与层之间的传播方式是:
BiGRU可以表示为两个单向的GRU网络,BiGRU()函数是对输入的嵌入矩阵x的非线性变换,将其编码成BiGRU网络的输出表示hc。
因此,经过对数据的一系列处理,最终可以得到源代码的表达形式为:
8)将源代码的表达形式r输入分类器,使用逻辑回归算法得到软件缺陷预测,即逻辑回归是一种预测二元结果的算法,得到的结果为Negative和Positive两种,在软件缺陷预测中应用非常广泛。它使用交叉熵作为损失函数,计算每个类别对应的两个标签的概率,对应类别的预测标签即为有高概率得分的标签。
本发明的技术效果是:
本发明考虑到使用传统机器学习方法来预测软件缺陷问题的不足,难以获取代码真正的语义和语法特征,使用了抽象语法树方法来获取代码特征。本发明以图卷积网络(GCN)和双向GRU网络为核心模型,将抽象语法树转换为向量节点后,利用GCN通过整合每个节点自身及其邻居节点包含的特征信息来获取本节点的隐藏表示。利用BiGRU将通过词嵌入获取的数字向量转换成节点的隐藏表示,以此来捕捉序列之间的关系特征,解决了RNN不能长期记忆和反向传播的梯度问题。同时将两种网络得到的特征进行聚合,使用了注意力机制来为不同特征赋予不同的权重,从而体现不同特征的重要性。并在此基础上对得到的源代码特征进行计算,预测其缺陷率。
附图说明:
图1为本发明的系统框架图;
图2为本发明中简要的节点关系图;
图3为本发明中GRU网络的模型图;
图4为采用本发明和其它预测方法的预测结果示意图。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
本发明基于抽象语法树的表现形式,提供一种基于GCN网络和双向GRU网络结合的方法获取源代码的语义特征,并加入了注意力机制来提高模型的性能。如图1所示,本发明基于抽象语法树的软件缺陷预测方法,包括如下步骤:
1)使用python的javalang库,将源代码转换为抽象语法树;
2)获取解析的AST后,为了能更好的反映AST节点的层次关系,使用深度遍历算法(DFT)对向量的元素进行标记,这样每一个AST节点都会变成向量的元素,使用这种方法将抽象语法树转换成文本向量,如果抽象语法树的大小为n,可以获得一个关于Y的文本向量:
Y=[Y1 ,Y2 ,Y3,...,Yn ] (1)
3)为抽象语法树的每个代码片段生成节点关系图,简要关系图如图2所示,邻接矩阵为n阶方阵,n为顶点数量,SiSj表示节点关系图中的边。AST上的每个节点都有自己的特征,设这些节点的特征组成一个n×D维的矩阵,然后各个节点间的关系也会形成一个n×n维的邻接矩阵A:
4)词嵌入过程。使用Gensim库将文本向量转换为可以输入GRU的数字向量,它使用无监督的方式从原始的非结构化文本当中来学习到文本隐藏层的主题向量表达,建立一个映射字典表,将向量中的每个文本元素链接到一个整数,使用这些整数充当标记,可以让AST中的每个文本元素都只对应一个数字符号。例如将static对应1,public对应2。通过这种方法,可以将节点序列中的每个元素都被替换成数字符号,并且保持它们的顺序不变。通过步骤(2)给定的文本向量,最终可以得到相应的嵌入矩阵x。
x=[x1,x2,x3,...xn] (3)
在软件中无缺陷的模块一般都会多于有缺陷的模块,对源数据直接进行训练的话容易偏向多数的部分,对模型预测结果造成影响,因此使用随机过采样-SMOTE方法来处理数据中的类不平衡问题。
5)将步骤(3)中得到的数据输入图卷积网络中,在GCN网络中,节点关系图和相对应的节点作为其输入,每一层的输出都作为下一层的输入,对于GCN网络中的每个节点,需要考虑其所有邻居以及自身所包含的特征信息。它的层与层之间的传播方式是:
由于A是没有归一化的矩阵,与特征矩阵相乘时会改变特征的分布且会遗漏A本身的信息,可能会导致梯度爆炸或者梯度消失,所以对A进行标准化处理,让矩阵A加上单位矩阵后再乘以度矩阵的逆,最终得到一个对称且归一化的矩阵。
hc是双向GRU网络每一层生成的隐藏表示,它使用步骤四中得到的嵌入矩阵x作为输入:
BiGRU可以表示为两个单向的GRU网络,BiGRU()函数是对输入的嵌入矩阵x的非线性变换,将其编码成BiGRU网络的输出表示hc。
BiGRU层用于提取输入文本向量的文本深层特征,BiGRU模型由一个前向的GRU和一个反向GRU组成,GRU模型如图3所示,输入为步骤(4)中获得的词向量矩阵xt和从上一个节点传输下来的隐状态ht-1,通过更新门z和重置门r来得到传递给下一节点的隐状态ht。通过BiGRU特征提取后,可以更加充分的学习文本中的上下文之间的关系。
因此,经过对数据的一系列处理,最终可以得到源代码的表达形式为:
6)最后将源代码的表达形式r输入分类器,使用逻辑回归算法得到软件缺陷预测,逻辑回归是一种预测二元结果的算法,得到的结果为Negative和Positive两种,在软件缺陷预测中应用非常广泛。它使用交叉熵作为损失函数,计算每个类别对应的两个标签的概率,对应类别的预测标签即为有高概率得分的标签。
7)选用比较常用的准确率(Precision),召回率(Recall)和F1分数(F1-score)来衡量预测的结果。
Precision=TP/(TP+FP) (9)
Recall=TP/(TP+FN) (10)
TP表示实际有缺陷样本被预测为有缺陷;TN表示实际无缺陷样本被预测为无缺陷;FP表示实际无缺陷样本被预测为有缺陷;FN为实际有缺陷样本被预测为无缺陷。
准确率为实际缺陷样本占预测为缺陷样本的比例;召回率为被预测为有缺陷的样本占实际缺陷样本的比例;F1为准确率和召回率的调和平均值。参考图4,AUC被定义为ROC曲线下与坐标轴围成的面积,ROC为接收者操作特征曲线,该曲线的横坐标是FP,纵坐标是TP。这个面积的数值不会大于1,AUC越接近1,检测方法真实性越高。本发明以camel、jedit、log4j、lucence、poi、synapse、velocity和xalan等数据集为例,采用现有的预测方法如DT、DBN、CNN、LSTM等方法来和本方法来进行实验比较,从本发明GCRU(基于GCN网络和双向GRU网络结合)得到的结果来看,采用本发明预测效果优于其它预测方法。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (3)
1.一种基于抽象语法树的软件缺陷预测方法,其特征在于,包括如下步骤:
1)将源代码转换为抽象语法树;
2)使用深度遍历算法将抽象语法树转换成文本向量,若抽象语法树的大小为n,则获得一个关于Y的文本向量:
Y=[Y1,Y2,Y3,...,Yn] (1)
3)为抽象语法树的每个代码片段生成节点关系图AST,AST上的每个节点都有自己的特征,设这些节点的特征组成一个n×D维的矩阵,然后各个节点间的关系形成一个n×n维的邻接矩阵A:
节点关系图AST用G=(S,E)表示,其中S中元素为顶点,E中元素为边;
4)将文本向量转换为可以输入GRU的数字向量,建立一个映射字典表,将向量中的每个文本元素链接到一个整数,这些整数充当标记,唯一地标识AST中的每个文本元素,最终得到相应的嵌入矩阵x;
x=[x1,x2,x3,...xn] (3)
5)将步骤3)中得到的节点关系图和相对应的节点作为图卷积网络GCN输入,对于GCN网络中的每个节点,它的层与层之间的传播方式是:
6)使用步骤4)中得到的嵌入矩阵x作为BiGRU网络输入,
BiGRU表示为两个单向的GRU网络,BiGRU()函数是对输入的嵌入矩阵x的非线性变换,将其编码成BiGRU网络的输出表示hc;
8)将源代码的表达形式r输入分类器,使用逻辑回归算法得到软件缺陷预测。
2.如权利要求1所述的基于抽象语法树的软件缺陷预测方法,其特征在于,步骤1)中使用python的javalang库解析源代码为抽象语法树。
3.如权利要求1所述的基于抽象语法树的软件缺陷预测方法,其特征在于,步骤4)中使用Gensim库将文本向量转换为可以输入GRU的数字向量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211735838.6A CN115982037A (zh) | 2022-12-30 | 2022-12-30 | 一种基于抽象语法树的软件缺陷预测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211735838.6A CN115982037A (zh) | 2022-12-30 | 2022-12-30 | 一种基于抽象语法树的软件缺陷预测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115982037A true CN115982037A (zh) | 2023-04-18 |
Family
ID=85967791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211735838.6A Pending CN115982037A (zh) | 2022-12-30 | 2022-12-30 | 一种基于抽象语法树的软件缺陷预测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115982037A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117251376A (zh) * | 2023-10-09 | 2023-12-19 | 湖北大学 | 一种软件缺陷预测方法和系统 |
-
2022
- 2022-12-30 CN CN202211735838.6A patent/CN115982037A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117251376A (zh) * | 2023-10-09 | 2023-12-19 | 湖北大学 | 一种软件缺陷预测方法和系统 |
CN117251376B (zh) * | 2023-10-09 | 2024-03-19 | 湖北大学 | 一种软件缺陷预测方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Abdullah et al. | Fake news classification bimodal using convolutional neural network and long short-term memory | |
CN112241481B (zh) | 基于图神经网络的跨模态新闻事件分类方法及系统 | |
CN111783100A (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
CN113191148B (zh) | 一种基于半监督学习和聚类的轨道交通实体识别方法 | |
CN112215013B (zh) | 一种基于深度学习的克隆代码语义检测方法 | |
CN110851176B (zh) | 一种自动构造并利用伪克隆语料的克隆代码检测方法 | |
CN114896388A (zh) | 一种基于混合注意力的层级多标签文本分类方法 | |
CN115081437B (zh) | 基于语言学特征对比学习的机器生成文本检测方法及系统 | |
CN116416480B (zh) | 一种基于多模板提示学习的视觉分类方法和装置 | |
CN113516198A (zh) | 一种基于记忆网络和图神经网络的文化资源文本分类方法 | |
CN110008699A (zh) | 一种基于神经网络的软件漏洞检测方法及装置 | |
CN114722835A (zh) | 基于lda和bert融合改进模型的文本情感识别方法 | |
CN116205482A (zh) | 重点人员风险等级评估方法及相关设备 | |
CN115982037A (zh) | 一种基于抽象语法树的软件缺陷预测方法 | |
CN114818719A (zh) | 一种基于复合网络与图注意力机制的社区话题分类方法 | |
CN114064487A (zh) | 一种代码缺陷检测方法 | |
CN117688488A (zh) | 一种基于语义向量化表示的日志异常检测方法 | |
CN117271701A (zh) | 一种基于tggat和cnn的系统运行异常事件关系抽取方法及系统 | |
CN116663499A (zh) | 智能化工业数据处理的方法及系统 | |
CN111737107B (zh) | 一种基于异质信息网络的重复缺陷报告检测方法 | |
CN115129818A (zh) | 基于知识驱动多分类的情绪原因对提取方法及系统 | |
CN114610882A (zh) | 一种基于电力短文本分类的异常设备编码检测方法和系统 | |
CN113988083A (zh) | 一种用于航运新闻摘要生成的事实性信息编码与评估方法 | |
CN113326371A (zh) | 一种融合预训练语言模型与抗噪声干扰远程监督信息的事件抽取方法 | |
CN111431863B (zh) | 基于关系网络的主机入侵检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |