CN115617694A - 基于信息融合的软件缺陷预测方法、系统、设备及介质 - Google Patents

基于信息融合的软件缺陷预测方法、系统、设备及介质 Download PDF

Info

Publication number
CN115617694A
CN115617694A CN202211516666.3A CN202211516666A CN115617694A CN 115617694 A CN115617694 A CN 115617694A CN 202211516666 A CN202211516666 A CN 202211516666A CN 115617694 A CN115617694 A CN 115617694A
Authority
CN
China
Prior art keywords
node
graph
control flow
fusion
feature vector
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.)
Granted
Application number
CN202211516666.3A
Other languages
English (en)
Other versions
CN115617694B (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.)
Central South University
Original Assignee
Central South University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Central South University filed Critical Central South University
Priority to CN202211516666.3A priority Critical patent/CN115617694B/zh
Publication of CN115617694A publication Critical patent/CN115617694A/zh
Application granted granted Critical
Publication of CN115617694B publication Critical patent/CN115617694B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了基于信息融合的软件缺陷预测方法、系统、设备及介质,本方法通过获取待预测软件程序对应的抽象语法树、控制流图以及程序依赖图;采用主题模型LDA和Node2vec方法,获取抽象语法树的语义特征;采用优化后的Node2vec方法和Sent2vec模型,获取控制流图的控制流特征和程序依赖图的代码依赖特征;通过图注意力网络获得训练后的语义特征、训练后的控制流特征和训练后的代码依赖特征;将训练后的语义特征、训练后的控制流特征以及训练后的代码依赖特征进行特征融合,获得融合特征矩阵;采用分类器对融合特征矩阵进行分类,获得待预测软件程序的分类结果。本发明能够提高特征表达能力,软件缺陷预测的准确率。

Description

基于信息融合的软件缺陷预测方法、系统、设备及介质
技术领域
本发明涉及软件缺陷检测技术领域,尤其是涉及基于信息融合的软件缺陷预测方法、系统、设备及介质。
背景技术
现有的深度学习模型利用抽象语法树(AST)将源代码语义信息保存起来,再将抽象语法树的节点映射为深度学习模型可以接收的语义特征向量,通过深度学习模型来训练源代码的语义信息。但忽略了源代码的结构信息与与代码依赖信息,从而无法识别结构信息与代码依赖信息不同的源代码。如果直接对文件过大的源代码解析为AST,那么AST种会有大量的节点。也就是说,AST种会存在源代码的冗余信息,从而导致软件缺陷预测模型的准确率低。
现有技术采用 word2vec来生成词向量的模型,虽然 word2vec会采用LDA为源代码生成词序列,解决存在源代码的冗余信息的问题。但基于word2vec的特征生成方法是基于窗口大小生成样本,这种基于局部相邻位置生成的样本未能从全局性出发,导致模型的拓展性低,从而影响特征表达能力。
现有的Node2vec在对图结构数据进行随机游走前,默认所有节点之间的边权重都是相同的。Node2vec在作随机游走时,会无法区分节点之间的联系强弱度,从而影响随机游走的概率。比如有些节点之间不仅仅具有控制流关系,而且具有程序依赖关系。因为随机游走概率的有偏性,从而导致最终生成的游走序列样本有效性低。
发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出基于信息融合的软件缺陷预测方法、系统、设备及介质,能够提高特征表达能力,软件缺陷预测的准确率。
第一方面,本发明实施例提供了一种基于信息融合的软件缺陷预测方法,所述基于信息融合的软件缺陷预测方法包括:
获取待预测软件程序对应的抽象语法树、控制流图以及程序依赖图;
采用主题模型LDA和Node2vec方法,获取所述抽象语法树的语义特征向量;
对Node2vec方法进行边权重优化,获得边权重优化后的Node2vec方法;
采用所述边权重优化后的Node2vec方法和Sent2vec模型,获取所述控制流图的控制流特征向量和所述程序依赖图的代码依赖特征向量;
通过图注意力网络对所述语义特征向量进行训练,获得训练后的语义特征向量;通过所述图注意力网络对所述控制流特征向量进行训练,获得训练后的控制流特征向量;通过所述图注意力网络对所述代码依赖特征向量进行训练,获得训练后的代码依赖特征向量;
将所述训练后的语义特征向量、所述训练后的控制流特征向量以及所述训练后的代码依赖特征向量进行特征融合,获得融合特征矩阵;
采用分类器对所述融合特征矩阵进行分类,获得所述待预测软件程序的分类结果。
与现有技术相比,本发明第一方面具有以下有益效果:
本方法通过获取待预测软件程序对应的抽象语法树、控制流图以及程序依赖图;采用主题模型LDA和Node2vec方法,获取抽象语法树的语义特征向量;对Node2vec方法进行边权重优化,获得边权重优化后的Node2vec方法;采用边权重优化后的Node2vec方法和Sent2vec模型,获取控制流图的控制流特征向量和程序依赖图的代码依赖特征向量;通过图注意力网络对语义特征向量进行训练,获得训练后的语义特征向量;通过图注意力网络对控制流特征向量进行训练,获得训练后的控制流特征向量;通过图注意力网络对代码依赖特征向量进行训练,获得训练后的代码依赖特征向量;将训练后的语义特征向量、训练后的控制流特征向量以及训练后的代码依赖特征向量进行特征融合,获得融合特征矩阵;采用分类器对融合特征矩阵进行分类,获得待预测软件程序的分类结果。本方法采用主题模型LDA和Node2vec方法,获取抽象语法树的语义特征向量,能够减少源代码冗余信息,提升特征信息的表达能力;采用边权重优化后的Node2vec方法和Sent2vec模型,获取控制流图的控制流特征向量和程序依赖图的代码依赖特征向量,能够提升训练样本的拓展性;并且边权重优化后的Node2vec能够提升训练样本的有效性。本方法将训练后的语义特征向量、训练后的控制流特征向量以及训练后的代码依赖特征向量进行特征融合,获得融合特征矩阵;采用分类器对融合特征矩阵进行分类,获得待预测软件程序的分类结果,能够提高软件缺陷预测的准确率。
根据本发明的一些实施例,所述获取待预测软件程序对应的抽象语法树,包括:
采用开源的JavaParser包来对所述待预测软件程序的源代码进行解析,获得所述待预测软件程序对应的抽象语法树。
根据本发明的一些实施例,所述采用主题模型LDA和Node2vec方法,获取所述抽象语法树的语义特征向量,包括:
通过所述主题模型LDA将所述待预测软件程序的源代码生成词序列;
将所述词序列通过Python内置的nx库构建网络图;
采用所述Node2vec方法中的带权随机游走策略对所述网络图进行随机游走,获得所述网络图中每个词对应的随机游走序列;
根据所述随机游走序列和Skip-Gram模型,获得所述抽象语法树的语义特征向量。
根据本发明的一些实施例,所述对Node2vec方法进行边权重优化,获得边权重优化后的Node2vec方法,包括:
所述Node2vec方法通过如下公式获取邻居序列:
Figure 339916DEST_PATH_IMAGE002
其中,x和
Figure 945472DEST_PATH_IMAGE004
表示当前节点,
Figure 787526DEST_PATH_IMAGE006
和v表示下一节点,P表示所述当前节点到所述下一节点的概率,
Figure 261364DEST_PATH_IMAGE008
表示边权重所述当前节点到所述下一节点的转移概率,Z表示归一化常数,E表示所述当前节点到所述下一节点组成的边;
计算所述转移概率
Figure 138053DEST_PATH_IMAGE008
Figure 507986DEST_PATH_IMAGE010
其中,
Figure 102915DEST_PATH_IMAGE012
表示边权重,
Figure 583706DEST_PATH_IMAGE014
表示边,p和q表示超参数,
Figure 783744DEST_PATH_IMAGE016
表示通过p和q两个参数进行随机游走的概率;
在所述控制流图中两个节点之间存在控制流关系,并且在所述程序依赖图中所述两个节点之间没有构成边,则优化所述边权重
Figure 308266DEST_PATH_IMAGE012
为:
Figure 593754DEST_PATH_IMAGE018
其中,i和j表示所述两个节点,f(i)表示节点i的度,f(j)表示节点j的度,CFG表示所述控制流图,
Figure 347077DEST_PATH_IMAGE020
表示优化后的边权重;
在所述控制流图中两个节点之间存在控制流关系,并且在所述程序依赖图中所述两个节点之间有构成边,则优化所述边权重
Figure 339304DEST_PATH_IMAGE012
为:
Figure 51039DEST_PATH_IMAGE022
其中,PDG表示所述程序依赖图;
根据所述优化后的边权重,获得边权重优化后的Node2vec方法。
根据本发明的一些实施例,所述采用所述边权重优化后的Node2vec方法和Sent2vec模型,获取所述控制流图的控制流特征向量,包括:
采用所述边权重优化后的Node2vec方法对所述控制流图中的节点进行随机游走,获得所述控制流图的节点表示;
将所述控制流图的节点表示输入至所述Sent2vec模型进行训练,获得所述控制流图的控制流特征向量。
根据本发明的一些实施例,所述采用所述边权重优化后的Node2vec方法和Sent2vec模型,获取所述程序依赖图的代码依赖特征向量,包括:
采用所述边权重优化后的Node2vec方法对所述程序依赖图中的节点进行随机游走,获得所述程序依赖图的节点表示;
将所述程序依赖图的节点表示输入至所述Sent2vec模型进行训练,获得所述程序依赖图的控制流特征向量。
根据本发明的一些实施例,所述将所述训练后的语义特征向量、所述训练后的控制流特征向量以及所述训练后的代码依赖特征向量进行特征融合,获得融合特征,包括:
若当前抽象语法树的节点为单词型节点,对所述当前抽象语法树的节点进行补零操作;
若当前抽象语法树的节点为语句型节点,并且所述当前抽象语法树的节点的位置和当前控制流图的节点的位置相同,将所述当前抽象语法树的节点和所述当前控制流图的节点进行拼接,获得第一融合特征;
在获得所述第一融合特征后,若当前抽象语法树的节点为单词型节点,对所述当前抽象语法树的节点进行补零操作;
若当前抽象语法树的节点为语句型节点,并且所述当前抽象语法树的节点的位置和当前程序依赖图的节点的位置相同,将所述第一融合特征和所述当前程序依赖图的节点进行拼接,获得第二融合特征;
将所述第二融合特征保存在矩阵中,获得融合特征矩阵。
第二方面,本发明实施例还提供了一种基于信息融合的软件缺陷预测系统,所述基于信息融合的软件缺陷预测系统包括:
数据获取单元,用于获取待预测软件程序对应的抽象语法树、控制流图以及程序依赖图;
第一特征获取单元,用于采用主题模型LDA和Node2vec方法,获取所述抽象语法树的语义特征向量;
边权重优化单元,用于对Node2vec方法进行边权重优化,获得边权重优化后的Node2vec方法;
第二特征获取单元,用于采用所述边权重优化后的Node2vec方法和Sent2vec模型,获取所述控制流图的控制流特征向量和所述程序依赖图的代码依赖特征向量;
特征训练单元,用于通过图注意力网络对所述语义特征向量进行训练,获得训练后的语义特征向量;通过所述图注意力网络对所述控制流特征向量进行训练,获得训练后的控制流特征向量;通过所述图注意力网络对所述代码依赖特征向量进行训练,获得训练后的代码依赖特征向量;
特征融合单元,用于将所述训练后的语义特征向量、所述训练后的控制流特征向量以及所述训练后的代码依赖特征向量进行特征融合,获得融合特征矩阵;
结果获取单元,用于采用分类器对所述融合特征矩阵进行分类,获得所述待预测软件程序的分类结果。
第三方面,本发明实施例还提供了一种基于信息融合的软件缺陷预测设备,包括至少一个控制处理器和用于与所述至少一个控制处理器通信连接的存储器;所述存储器存储有可被所述至少一个控制处理器执行的指令,所述指令被所述至少一个控制处理器执行,以使所述至少一个控制处理器能够执行如上所述的一种基于信息融合的软件缺陷预测方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如上所述的一种基于信息融合的软件缺陷预测方法。
可以理解的是,上述第二方面至第四方面与相关技术相比存在的有益效果与上述第一方面与相关技术相比存在的有益效果相同,可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1是本发明一实施例的一种基于信息融合的软件缺陷预测方法的流程图;
图2是本发明另一实施例的一种基于信息融合的软件缺陷预测方法的流程图;
图3是本发明一实施例的边权重优化的Node2vec+Sent2vec生成CFG节点向量流程图;
图4是本发明一实施例的边权重优化的Node2vec+Sent2vec生成PDG节点向量流程图;
图5是本发明一实施例的 Node2vec+LDA生成AST节点向量流程图;
图6是本发明一实施例的边权重优化的Node2vec生成游走序列流程图;
图7是本发明一实施例的CFG的边权重优化流程图;
图8是本发明一实施例的GAT学习图结构数据流程图;
图9是本发明一实施例的源代码示意图;
图10是本发明一实施例的源代码的AST示意图;
图11是本发明一实施例的源代码的CFG图;
图12是本发明一实施例的源代码的PDG示意图;
图13是本发明一实施例的图结构中节点同质性与结构性说明示意图;
图14是本发明一实施例的图结构中取值示意图;
图15是本发明一实施例的一种基于信息融合的软件缺陷预测系统的结构图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,如果有描述到第一、第二等只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
在本发明的描述中,需要理解的是,涉及到方位描述,例如上、下等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
本发明的描述中,需要说明的是,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。
现有的深度学习模型利用抽象语法树(AST)将源代码语义信息保存起来,再将抽象语法树的节点映射为深度学习模型可以接收的语义特征向量,通过深度学习模型来训练源代码的语义信息。但忽略了源代码的结构信息与与代码依赖信息,从而无法识别结构信息与代码依赖信息不同的源代码。如果直接对文件过大的源代码解析为AST,那么AST种会有大量的节点。也就是说,AST种会存在源代码的冗余信息,从而导致软件缺陷预测模型的准确率低。
现有技术采用 word2vec来生成词向量的模型,虽然 word2vec会采用LDA为源代码生成词序列,解决存在源代码的冗余信息的问题。但基于word2vec的特征生成方法是基于窗口大小生成样本,这种基于局部相邻位置生成的样本未能从全局性出发,导致模型的拓展性低,从而影响特征表达能力。
为解决上述技术问题,本发明通过获取待预测软件程序对应的抽象语法树、控制流图以及程序依赖图;采用主题模型LDA和Node2vec方法,获取抽象语法树的语义特征向量;对Node2vec方法进行边权重优化,获得边权重优化后的Node2vec方法;采用边权重优化后的Node2vec方法和Sent2vec模型,获取控制流图的控制流特征向量和程序依赖图的代码依赖特征向量;通过图注意力网络对语义特征向量进行训练,获得训练后的语义特征向量;通过图注意力网络对控制流特征向量进行训练,获得训练后的控制流特征向量;通过图注意力网络对代码依赖特征向量进行训练,获得训练后的代码依赖特征向量;将训练后的语义特征向量、训练后的控制流特征向量以及训练后的代码依赖特征向量进行特征融合,获得融合特征矩阵;采用分类器对融合特征矩阵进行分类,获得待预测软件程序的分类结果。本发明采用主题模型LDA和Node2vec方法,获取抽象语法树的语义特征向量,能够减少源代码冗余信息,提升特征信息的表达能力;采用边权重优化后的Node2vec方法和Sent2vec模型,获取控制流图的控制流特征向量和程序依赖图的代码依赖特征向量,能够提升训练样本的拓展性;并且边权重优化后的Node2vec能够提升训练样本的有效性。本发明将训练后的语义特征向量、训练后的控制流特征向量以及训练后的代码依赖特征向量进行特征融合,获得融合特征矩阵;采用分类器对融合特征矩阵进行分类,获得待预测软件程序的分类结果,能够提高软件缺陷预测的准确率。
参照图1至图2,本发明实施例提供了一种基于信息融合的软件缺陷预测方法,本基于信息融合的软件缺陷预测方法包括:
步骤S100、获取待预测软件程序对应的抽象语法树、控制流图以及程序依赖图。
具体的,采用开源的JavaParser包来对待预测软件程序的源代码进行解析,获得待预测软件程序对应的抽象语法树。获取待预测软件程序对应的控制流图,控制流图(CFG)是一个程序的抽象表现,是用在编译器中的一个抽象数据结构。获取待预测软件程序对应的程序依赖图,程序依赖图(PDG)是源代码程序的一种图形表示,是源代码程序间控制依赖关系和数据依赖关系的图形表示,是带有标记的有向图。采用开源的JavaParser包来对待预测软件程序的源代码进行解析具体为:
基于JAVA语言开发出抽象语法树解析工具,使用一款开源的JavaParser包来对源代码进行解析,开源的JavaParser包提供了一个基于JAVA语言的规范词法分析器和解析器,用于构建源代码的抽象语法树。首先,对源代码进行词法分析,也就是扫描。就是调用next()方法,逐个读取字符,生成对应的token(例如,‘if’、‘>’和‘for’等)。token是一个不可分割的最小单元,最终整个源代码文件会被分割为一个token列表。然后,语法分析器将token列表转化为具有语义信息的抽象语法树。
在本实施例中提出将源代码解析为抽象语法树,抽象语法树保存了源代码的语义信息,从而可以有效的区分语义不同的源代码。
步骤S200、采用主题模型LDA和Node2vec方法,获取抽象语法树的语义特征向量。
具体的,参照图5,通过主题模型LDA将待预测软件程序的源代码生成词序列;
将词序列通过Python内置的nx库构建网络图;
采用Node2vec方法中的带权随机游走策略对网络图进行随机游走,获得网络图中每个词对应的随机游走序列;
根据随机游走序列和Skip-Gram模型,获得抽象语法树的语义特征向量。具体为:
由于抽象语法树(AST)的初始节点不能被图卷积网络接收,所以要进行将节点映射为数值向量(特征向量)这一操作,再将由特征向量表示的抽象语法树作为图数据输入到图卷积网络中学习其语义特征向量。由于源代码的语料库很大,对于软件缺陷检测样本来说,存在冗余信息,针对此问题,本实施例提出通过LDA为源代码生成词序列,从而消除源代码的冗余信息。
由于word2vec对词生成特征向量时带有样本空间局限性问题,本实施例提出通过Node2vec解决此问题。Node2vec通过带权随机游走策略为词序列中的每个词生成一个随机游走序列,这个随机游走序列就是词的一个样本。也就是说,如果词序列中有N个词,那么最终的样本就是一个N×F的样本矩阵,其中,F表示设定的特征向量维度。将样本矩阵输入到Skip-Gram模型中训练,最终生成每个词的特征表示。然后将词序列中的词与每个词生成的特征向量组成key-value字典。抽象语法树通过自身节点作为key,通过字典映射为特征向量。在上述操作完成后,抽象语法树便可以作为图卷积网络接收的图数据,从而完成图卷积网络对抽象语法树的语义特征向量的学习。
由于Node2vec是基于图结构上做随机游走,本实施例提出将LDA生成的词序列通过Python内置的nx库构建网络结构图。网络结构图中的节点是词序列中的词,节点之间的边由nx库生成。在通过Node2vec得到节点的特征向量集合后,由词序列中的词作为key,节点对应的特征向量作为value组成字典。抽象语法树将节点作为key来映射特征向量value。
在本实施例中,Node2vec基于相邻节点的关系,将目的顶点映射为稠密向量,以数值向量化的方式表达图结构中的信息,以便用于下游任务。
具体地,本实施例通过LDA为源代码生成主题词序列,目的是减少源代码中的冗余信息。通过对主题词序列建立网格结构,再通过Node2vec在此网格结构中作随机游走,生成随机游走序列。目的是通过Node2vec算法中的BFS及DFS探索网格结构中节点之间的同质性与结构性,使得生成的样本序列中,节点之间具有同质性与结构性,从而提升生成特征信息的表达能力,其中,节点之间的同质性与结构性可参照图13。
步骤S300、对Node2vec方法进行边权重优化,获得边权重优化后的Node2vec方法。
具体的,Node2vec方法通过如下公式获取邻居序列:
Figure 823823DEST_PATH_IMAGE002
其中,x和
Figure 426843DEST_PATH_IMAGE004
表示当前节点,
Figure 352205DEST_PATH_IMAGE006
和v表示下一节点,P表示当前节点到下一节点的概率,
Figure 218529DEST_PATH_IMAGE008
表示边权重当前节点到下一节点的转移概率,Z表示归一化常数,E表示当前节点到下一节点组成的边;
计算转移概率
Figure 167025DEST_PATH_IMAGE008
Figure 776998DEST_PATH_IMAGE010
其中,
Figure 806134DEST_PATH_IMAGE012
表示边权重,
Figure 108939DEST_PATH_IMAGE014
表示边,p和q表示超参数,
Figure 75889DEST_PATH_IMAGE016
表示通过p和q两个参数进行随机游走的概率;
在控制流图中两个节点之间存在控制流关系,并且在程序依赖图中两个节点之间没有构成边,则优化边权重
Figure 489553DEST_PATH_IMAGE012
为:
Figure 373195DEST_PATH_IMAGE018
其中,i和j表示两个节点,f(i)表示节点i的度,f(j)表示节点j的度,CFG表示控制流图,
Figure 846902DEST_PATH_IMAGE020
表示优化后的边权重;
在控制流图中两个节点之间存在控制流关系,并且在程序依赖图中两个节点之间有构成边,则优化边权重
Figure 566727DEST_PATH_IMAGE012
为:
Figure 315241DEST_PATH_IMAGE022
其中,PDG表示程序依赖图;
根据优化后的边权重,获得边权重优化后的Node2vec方法。在对CFG、PDG进行边权重的优化过程之后,开始在CFG、PDG上分别作Node2vec的随机游走。具体为:
本实施例基于Node2vec算法提出一种带权的随机游走算法。该算法可以使训练出的特征向量同时满足节点之间同质性与结构性相似假设。在Node2vec算法原理中,假设给定一个源节点u,随机游走的步长为固定长度L,从源节点u开始,使用如下公式分布产生邻居序列:
Figure 318969DEST_PATH_IMAGE002
上述公式表达的是当前节点x到下一节点v的转移概率。如果要优化Node2vec算法,其重点必然是对Wvx的表达式进行优化。在介绍优化Wvx之前,要先了解初始的Node2vec的转移概率如何计算。
Node2vec定义一个带有p和q的二阶随机游走来控制游走。假设随机游走要经过边E(t,x),当前节点处于节点v。游走到下一步时需要计算从节点v经过边E(t,x)的转移概率。其中,t表示上一个节点,v代表当前节点,x为下一个可能的节点。dtx表示上一个节点与待访问节点的距离,例如dtx=0表示从当前节点返回上一个访问节点,即,”t--v---t”。
参照图14,由于dtx表示的是上一个节点与待访问节点的距离。由图14可知,当前节点为v,上一个节点为t,则t与v之间的dtx为t(上一个节点)与t(待访问节点)之间的距离为0。同理,x1与v之间的dtx为t(上一个节点)与x1(待访问节点)之间的距离为1。x2与v之间的dtx为t(上一个节点)与x2(待访问节点)之间的距离为2。
假如dtx=0,那么
Figure 776626DEST_PATH_IMAGE024
则为1。
假如dtx=1,那么
Figure 249327DEST_PATH_IMAGE024
则为1/p。
假如dtx=2,那么
Figure 332689DEST_PATH_IMAGE024
则为1/q。
在Node2vec算法中,计算转移概率
Figure 676077DEST_PATH_IMAGE026
Figure 491586DEST_PATH_IMAGE028
Node2vec算法在作图结构的随机游走时,认为图结构中每两个节点之间的µ都是相同的,这会使得那些不仅仅具有控制关系,而且具有依赖关系的节点之间的µ和其他节点之间的µ相同,在一定程度上,降低了生成的随机游走序列的正确性。基于此问题,本专利提出一种边权重(µ)的优化算法,以此提高随机游走序列的正确性。
在图结构中,边权重用来表示一条边两端节点之间相互关系的强弱。例如在CFG中,节点之间相互关系的强弱性肯定有区别,所以Node2vec在进行图结构的随机游走时,必然要考虑边权重的情况。
假设当前的一条边是节点i与节点j构成,那么节点i与节点j的关联程度用边权重来描述。边权重的值越大,那么边两端的节点的关联程度越高。
参照图7,本实施例提出用节点乘积度作为CFG、PDG中边权重的定义。节点的度指的是与该节点相关联的边数。特别的,如果CFG中某两个节点不仅仅存在有控制流关系,而且这两个节点在PDG中具有依赖关系,我们认为这两个节点之间不仅仅存在控制流关系,而且存在代码依赖关系。所以,在控制流图中两个节点之间存在控制流关系,并且在程序依赖图中两个节点之间没有构成边,则优化边权重
Figure 435272DEST_PATH_IMAGE012
为:
Figure 276320DEST_PATH_IMAGE018
在控制流图中两个节点之间存在控制流关系,并且在程序依赖图中两个节点之间有构成边,则优化边权重
Figure 723482DEST_PATH_IMAGE012
为:
Figure 522941DEST_PATH_IMAGE022
在本实施例中,边权重优化的目的是在Node2vec作随机游走时,能够赋以联系紧密的语句型节点之间的边权重,从而提高联系紧密的语句型节点的转移概率,以此来提高随机样游走列的准确性,从而增强特征信息生成的表达能力。因此,本实施例的边权重优化的目的是能够区分出节点之间的联系强弱度,从而提高Node2vec作随机游走中转移概率的正确性,进一步提升生成样本序列的有效性。在现有技术的Node2vec中,默认图结构中所有节点之间的边权重都是一样的。这就会导致Node2vec作随机游走时,无法区分节点之间的联系强弱度,从而使得随机游走的转移概率低,进一步导致生成的样本序列有效性低。本实施例通过提出一种新的边权重优化的Node2vec方法,对控制流图、程序依赖图两种图结构中节点之间的边权重进行合理赋权。用节点度的方式体现节点之间的关联强弱,并且,优化那些同时具有控制流关系和代码依赖关系的边,从而提高随机游走的转移概率。
步骤S400、采用边权重优化后的Node2vec方法和Sent2vec模型,获取控制流图的控制流特征向量和程序依赖图的代码依赖特征向量。
具体的,采用边权重优化后的Node2vec方法对控制流图中的节点进行随机游走,获得控制流图的节点表示。具体为:
控制流图是一个程序的抽象表现,是用在编译器中的一个抽象数据结构。CFG代表了一个程序执行过程中会遍历到的所有路径。CFG用图的方式表示一个程序内所有基本块执行的可能流向。本实施例提出通过边权重优化后的Node2vec完成对CFG的节点表示。CFG作为图结构,边权重优化后的Node2vec可以从CFG做随机游走,生成节点表示向量的流程图,该流程图可以参照图3。
通过本实施例提出的边权重优化后的Node2vec方法对控制流图(CFG)的图结构数据进行边权重的赋值,以此来提高随机游走转移概率的正确率。然后本实施例提出通过Node2vec方法对控制流图中的节点进行随机游走,从而获得控制流图的节点表示;将控制流图的节点表示输入至Sent2vec模型进行训练,获得控制流图的控制流特征向量,参照图6。
采用边权重优化后的Node2vec方法对程序依赖图中的节点进行随机游走,获得程序依赖图的节点表示。具体为:
PDG是源代码程序的一种图形表示,是源代码程序间控制依赖关系和数据依赖关系的图形表示,是带有标记的有向图。PDG作为一种图结构,边权重优化后的Node2vec可以在PDG上做随机游走,获得程序依赖图的节点表示,为PDG节点生成特征向量。
通过本实施例提出的边权重优化后的Node2vec方法对程序依赖图(PDG)的图结构数据进行边权重的赋值,以此来提高随机游走转移概率的正确率。然后本实施例提出通过Node2vec方法对程序依赖图中的节点进行随机游走,从而获得程序依赖图的节点表示;将程序依赖图的节点表示输入至Sent2vec模型进行训练,获得程序依赖图的控制流特征向量,该流程图可以参照图4。
在本实施例中,采用边权重优化后的Node2vec在CFG、PDG上作随机游走的目的是为了探索CFG、PDG图数据中语句之间的同质性与结构性,从而将语句之间的关系体现到训练样本中,以此提高语句型节点的特征表达能力。
步骤S500、通过图注意力网络对语义特征向量进行训练,获得训练后的语义特征向量;通过图注意力网络对控制流特征向量进行训练,获得训练后的控制流特征向量;通过图注意力网络对代码依赖特征向量进行训练,获得训练后的代码依赖特征向量。
具体的,通过图注意力网络对语义特征向量进行训练,获得训练后的语义特征向量;通过图注意力网络对控制流特征向量进行训练,获得训练后的控制流特征向量;通过图注意力网络对代码依赖特征向量进行训练,获得训练后的代码依赖特征向量。具体为:
图卷积神经网络的卷积过程主要包括三步:第一步每一个节点将自身的特征信息经过变换后发送给邻居节点,这一步是在对节点的特征信息进行抽取变换;第二步将邻居节点的特征信息聚合起来,这一步是在对节点的局部结构信息进行融合;第三步将聚合后的特征信息做非线性变换。
假设图卷积神经网络的输入是一个N×F的特征矩阵X以及一个N×N的邻接矩阵A。其中N为图数据中的节点个数,F为每个节点的特征维度。图卷积神经网络的隐藏层的公式如下所示:
Figure 485081DEST_PATH_IMAGE030
其中,Hi表示第i隐藏层,初始层H0为特征矩阵X,f表示一种传播规则,每一个隐藏层都对应一个维度为N×F的特征矩阵,该矩阵的每一行都是某个节点的特征表征,在每一层中,图卷积神经网络层会用传播规则将这些f聚合起来,从而形成下一层的特征表示。最终经过n轮的传播之后,输出为一张新的N×F的特征矩阵M。
在GCN引入注意力机制构成图注意力网络(GAT),具体为:
图卷积神经网络的局限是难分配合适的权重给不同的邻居节点,这限制了神经网络的表达能力,从而使软件缺陷预测的效率降低。针对此问题,本实施例在图卷积神经网络中引入注意力机制,主要目的是对不同的邻居节点学习分配的合适的权重,这提高了图神经网络的表达能力,从而提高了软件缺陷预测模型的性能。
参照图8,在图卷积神经网络中,引入注意力机制的过程如下:
本实施例先对所有节点训练一个共享权重矩阵W,得到每个邻居节点的权重,这个权重矩阵就是输入的特征和输出的特征的关系,起映射作用。计算注意力值Eij时,将节点i和节点j分别使用W映射,并将其输出的特征向量拼接起来,之后使用前馈神经网络将拼接向量映射到一个实数上,并用LeakyReLU函数激活,经归一化后得到最终的注意力系数。其中,注意力值Eij的计算公式如下所示:
Figure 926558DEST_PATH_IMAGE032
其中,hi表示节点i的特征向量,hj表示节点j的特征向量,
Figure 493806DEST_PATH_IMAGE034
表示权重向量
Figure 933008DEST_PATH_IMAGE036
的转置。
注意力系数
Figure 585707DEST_PATH_IMAGE038
的计算公式如下所示:
Figure 486666DEST_PATH_IMAGE040
softmax函数归一化的计算公式如下所示:
Figure 659153DEST_PATH_IMAGE042
其中,K表示节点i的邻居节点,N表示当前节点的所有邻居节点。
在得到注意力系数后,节点i对它所有的邻居节点加权求和,得到最终更新后的特征信息。在图注意力网络中,节点i最终更新后的特征向量hi的计算公式如下所示:
Figure 987366DEST_PATH_IMAGE044
其中,
Figure 924098DEST_PATH_IMAGE046
表示向量聚合函数。
在本实施例中,在完成AST、CFG、PDG三种图结构的节点表示后,分别将AST、CFG、PDG送入GAT中学习,目的是为了GAT学习AST的语义特征向量信息、CFG的控制流特征向量信息、PDG的代码依赖特征向量信息。
步骤S600、将训练后的语义特征向量、训练后的控制流特征向量以及训练后的代码依赖特征向量进行特征融合,获得融合特征矩阵。
具体的,若当前抽象语法树的节点为单词型节点,对当前抽象语法树的节点进行补零操作;
若当前抽象语法树的节点为语句型节点,并且当前抽象语法树的节点的位置和当前控制流图的节点的位置相同,将当前抽象语法树的节点和当前控制流图的节点进行拼接,获得第一融合特征;
在获得第一融合特征后,若当前抽象语法树的节点为单词型节点,对当前抽象语法树的节点进行补零操作;
若当前抽象语法树的节点为语句型节点,并且当前抽象语法树的节点的位置和当前程序依赖图的节点的位置相同,将第一融合特征和当前程序依赖图的节点进行拼接,获得第二融合特征;
将第二融合特征保存在矩阵中,获得融合特征矩阵。具体为:
首先用GAT分别对AST、CFG、PDG进行训练,训练完成后,通过本实施例提出的特征融合算法生成特征融合矩阵。特征融合算法的具体步骤包括:
外循环是对AST的节点遍历,内循环是对CFG的节点遍历。如果当前AST的节点为单词型节点,那么将此AST节点做一次补零操作。如果当前AST节点为语句型节点,并且当前节点的位置信息与CFG节点的位置相同,那么将此AST节点与当前CFG节点做一次向量拼接操作。当外循环完成后,AST与CFG完成了节点的向量融合。
在AST与CFG完成节点信息融合后,再将AST与CFG融合后的AST与PDG融合。外循环是对AST的节点遍历,内循环是对PDG的节点遍历。如果当前AST的节点为单词型节点,那么将此AST节点再做一次补零操作。如果当前AST节点为语句型节点,并且当前节点的位置信息与PDG节点的位置相同,那么将此AST节点与当前PDG节点做一次向量拼接操作。当外层循环完成后,便完成了AST、CFG、PDG的节点信息融合,流程图可以参照图2。例如:
参照图9,图9中为一段程序代码,这个代码共由4个语句。标号分别为3、4、6、7。AST中有语句型节点和单词型节点,图10为上述源代码的AST。
由图10可知,在AST中,有语句型节点,例如‘DECL’和‘PRED’等,也有单词型节点,例如‘x’、‘=’和‘int’等。语句型节点会融入CFG、PDG的节点表示,单词型节点会进行补0操作。图11为上述图9源代码的CFG,图12为上述图9源代码的PDG。PDG有两个部分,一个是数据依赖,表示变量之间的依赖,例如,图11中”if(i > 0)”和“int y =i * i”,数据依赖于inti = 2;依赖变量为i。另外一个则是控制依赖,表示条件之间的依赖,例如,图12中Ctrue表示条件为真执行,即if代码块中所有的语句会控制依赖于if条件中的语句,Dy表示数据依赖,依赖变量为y,Dx表示数据依赖,依赖变量为x。
在完成三种特征信息融合后,对AST节点进行特征提取,将提取的特征保存在融合特征矩阵Q中,即完成融合特征矩阵的生成(即,图2中的信息融合特征矩阵),其中,Q为初始的特征融合矩阵,Q的大小为M(节点数量)*K(三种特征的维度相加)。
本实施例的特征融合算法在于,分别将控制流图、程序依赖图中的控制流信息、代码依赖信息与抽象语法树的语义信息通过向量拼接的方式融合为特征矩阵。具体的,因为控制流图和程序依赖图中的节点都是语句型节点,所以在进行特征信息融合时,对抽象语法树中的语句型节点进行向量拼接。为了保证最终的特征矩阵维度一致,需要对抽象语法树中的非语句型节点进行补零操作。
在本实施例中,将AST、CFG、PDG三种图结构中的特征作融合。主要目的是在融合AST中的语义信息、CFG中的控制流信息以及PDG的代码依赖信息。使得特征不单单具有源代码语义信息,以此提升软件缺陷预测的准确率。
步骤S700、采用分类器对融合特征矩阵进行分类,获得待预测软件程序的分类结果。
具体的,采用分类器对融合特征矩阵进行分类,获得待预测软件程序的分类结果。即,通过分类器可以获得待预测软件程序是否有缺陷。
需要说明的是,本实施例的分类器为现有技术,本实施例不做详述。
参照图15,本发明实施例还提供了一种基于信息融合的软件缺陷预测系统,本基于信息融合的软件缺陷预测系统包括数据获取单元100、第一特征获取单元200、边权重优化单元300、第二特征获取单元400、特征训练单元500、特征融合单元600以及结果获取单元700,其中:
数据获取单元100,用于获取待预测软件程序对应的抽象语法树、控制流图以及程序依赖图;
第一特征获取单元200,用于采用主题模型LDA和Node2vec方法,获取抽象语法树的语义特征向量;
边权重优化单元300,用于对Node2vec方法进行边权重优化,获得边权重优化后的Node2vec方法;
第二特征获取单元400,用于采用边权重优化后的Node2vec方法和Sent2vec模型,获取控制流图的控制流特征向量和程序依赖图的代码依赖特征向量;
特征训练单元500,用于通过图注意力网络对语义特征向量进行训练,获得训练后的语义特征向量;通过图注意力网络对控制流特征向量进行训练,获得训练后的控制流特征向量;通过图注意力网络对代码依赖特征向量进行训练,获得训练后的代码依赖特征向量;
特征融合单元600,用于将训练后的语义特征向量、训练后的控制流特征向量以及训练后的代码依赖特征向量进行特征融合,获得融合特征矩阵;
结果获取单元700,用于采用分类器对融合特征矩阵进行分类,获得待预测软件程序的分类结果。
需要说明的是,由于本实施例中的一种基于信息融合的软件缺陷预测系统与上述的一种基于信息融合的软件缺陷预测方法基于相同的发明构思,因此,方法实施例中的相应内容同样适用于本系统实施例,此处不再详述。
本发明实施例还提供了一种基于信息融合的软件缺陷预测设备,包括:至少一个控制处理器和用于与至少一个控制处理器通信连接的存储器。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
实现上述实施例的一种基于信息融合的软件缺陷预测方法所需的非暂态软件程序以及指令存储在存储器中,当被处理器执行时,执行上述实施例中的一种基于信息融合的软件缺陷预测方法,例如,执行以上描述的图1中的方法步骤S100至步骤S700。
以上所描述的系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个控制处理器执行,可使得上述一个或多个控制处理器执行上述方法实施例中的一种基于信息融合的软件缺陷预测方法,例如,执行以上描述的图1中的方法步骤S100至步骤S700的功能。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
以上是对本申请实施例的较佳实施进行了具体说明,但本申请实施例并不局限于上述实施方式,熟悉本领域的技术人员在不违背本申请实施例精神的前提下还可作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请实施例权利要求所限定的范围内。

Claims (10)

1.一种基于信息融合的软件缺陷预测方法,其特征在于,所述基于信息融合的软件缺陷预测方法包括:
获取待预测软件程序对应的抽象语法树、控制流图以及程序依赖图;
采用主题模型LDA和Node2vec方法,获取所述抽象语法树的语义特征向量;
对Node2vec方法进行边权重优化,获得边权重优化后的Node2vec方法;
采用所述边权重优化后的Node2vec方法和Sent2vec模型,获取所述控制流图的控制流特征向量和所述程序依赖图的代码依赖特征向量;
通过图注意力网络对所述语义特征向量进行训练,获得训练后的语义特征向量;通过所述图注意力网络对所述控制流特征向量进行训练,获得训练后的控制流特征向量;通过所述图注意力网络对所述代码依赖特征向量进行训练,获得训练后的代码依赖特征向量;
将所述训练后的语义特征向量、所述训练后的控制流特征向量以及所述训练后的代码依赖特征向量进行特征融合,获得融合特征矩阵;
采用分类器对所述融合特征矩阵进行分类,获得所述待预测软件程序的分类结果。
2.根据权利要求1所述的基于信息融合的软件缺陷预测方法,其特征在于,所述获取待预测软件程序对应的抽象语法树,包括:
采用开源的JavaParser包来对所述待预测软件程序的源代码进行解析,获得所述待预测软件程序对应的抽象语法树。
3.根据权利要求1所述的基于信息融合的软件缺陷预测方法,其特征在于,所述采用主题模型LDA和Node2vec方法,获取所述抽象语法树的语义特征向量,包括:
通过所述主题模型LDA将所述待预测软件程序的源代码生成词序列;
将所述词序列通过Python内置的nx库构建网络图;
采用所述Node2vec方法中的带权随机游走策略对所述网络图进行随机游走,获得所述网络图中每个词对应的随机游走序列;
根据所述随机游走序列和Skip-Gram模型,获得所述抽象语法树的语义特征向量。
4.根据权利要求1所述的基于信息融合的软件缺陷预测方法,其特征在于,所述对Node2vec方法进行边权重优化,获得边权重优化后的Node2vec方法,包括:
所述Node2vec方法通过如下公式获取邻居序列:
Figure 356959DEST_PATH_IMAGE002
其中,x和
Figure 898799DEST_PATH_IMAGE004
表示当前节点,
Figure 148646DEST_PATH_IMAGE006
和v表示下一节点,P表示所述当前节点到所述下一节点的概率,
Figure 775936DEST_PATH_IMAGE008
表示边权重所述当前节点到所述下一节点的转移概率,Z表示归一化常数,E表示所述当前节点到所述下一节点组成的边;
计算所述转移概率
Figure 549857DEST_PATH_IMAGE008
Figure 80023DEST_PATH_IMAGE010
其中,
Figure 750039DEST_PATH_IMAGE012
表示边权重,
Figure 864626DEST_PATH_IMAGE014
表示边,p和q表示超参数,
Figure 130653DEST_PATH_IMAGE016
表示通过p和q两个参数进行随机游走的概率;
在所述控制流图中两个节点之间存在控制流关系,并且在所述程序依赖图中所述两个节点之间没有构成边,则优化所述边权重
Figure 443823DEST_PATH_IMAGE012
为:
Figure 284740DEST_PATH_IMAGE018
其中,i和j表示所述两个节点,f(i)表示节点i的度,f(j)表示节点j的度,CFG表示所述控制流图,
Figure 699672DEST_PATH_IMAGE020
表示优化后的边权重;
在所述控制流图中两个节点之间存在控制流关系,并且在所述程序依赖图中所述两个节点之间有构成边,则优化所述边权重
Figure 175915DEST_PATH_IMAGE012
为:
Figure 750115DEST_PATH_IMAGE022
其中,PDG表示所述程序依赖图;
根据所述优化后的边权重,获得边权重优化后的Node2vec方法。
5.根据权利要求1所述的基于信息融合的软件缺陷预测方法,其特征在于,所述采用所述边权重优化后的Node2vec方法和Sent2vec模型,获取所述控制流图的控制流特征向量,包括:
采用所述边权重优化后的Node2vec方法对所述控制流图中的节点进行随机游走,获得所述控制流图的节点表示;
将所述控制流图的节点表示输入至所述Sent2vec模型进行训练,获得所述控制流图的控制流特征向量。
6.根据权利要求1所述的基于信息融合的软件缺陷预测方法,其特征在于,所述采用所述边权重优化后的Node2vec方法和Sent2vec模型,获取所述程序依赖图的代码依赖特征向量,包括:
采用所述边权重优化后的Node2vec方法对所述程序依赖图中的节点进行随机游走,获得所述程序依赖图的节点表示;
将所述程序依赖图的节点表示输入至所述Sent2vec模型进行训练,获得所述程序依赖图的控制流特征向量。
7.根据权利要求1所述的基于信息融合的软件缺陷预测方法,其特征在于,所述将所述训练后的语义特征向量、所述训练后的控制流特征向量以及所述训练后的代码依赖特征向量进行特征融合,获得融合特征,包括:
若当前抽象语法树的节点为单词型节点,对所述当前抽象语法树的节点进行补零操作;
若当前抽象语法树的节点为语句型节点,并且所述当前抽象语法树的节点的位置和当前控制流图的节点的位置相同,将所述当前抽象语法树的节点和所述当前控制流图的节点进行拼接,获得第一融合特征;
在获得所述第一融合特征后,若当前抽象语法树的节点为单词型节点,对所述当前抽象语法树的节点进行补零操作;
若当前抽象语法树的节点为语句型节点,并且所述当前抽象语法树的节点的位置和当前程序依赖图的节点的位置相同,将所述第一融合特征和所述当前程序依赖图的节点进行拼接,获得第二融合特征;
将所述第二融合特征保存在矩阵中,获得融合特征矩阵。
8.一种基于信息融合的软件缺陷预测系统,其特征在于,所述基于信息融合的软件缺陷预测系统包括:
数据获取单元,用于获取待预测软件程序对应的抽象语法树、控制流图以及程序依赖图;
第一特征获取单元,用于采用主题模型LDA和Node2vec方法,获取所述抽象语法树的语义特征向量;
边权重优化单元,用于对Node2vec方法进行边权重优化,获得边权重优化后的Node2vec方法;
第二特征获取单元,用于采用所述边权重优化后的Node2vec方法和Sent2vec模型,获取所述控制流图的控制流特征向量和所述程序依赖图的代码依赖特征向量;
特征训练单元,用于通过图注意力网络对所述语义特征向量进行训练,获得训练后的语义特征向量;通过所述图注意力网络对所述控制流特征向量进行训练,获得训练后的控制流特征向量;通过所述图注意力网络对所述代码依赖特征向量进行训练,获得训练后的代码依赖特征向量;
特征融合单元,用于将所述训练后的语义特征向量、所述训练后的控制流特征向量以及所述训练后的代码依赖特征向量进行特征融合,获得融合特征矩阵;
结果获取单元,用于采用分类器对所述融合特征矩阵进行分类,获得所述待预测软件程序的分类结果。
9.一种基于信息融合的软件缺陷预测设备,其特征在于,包括至少一个控制处理器和用于与所述至少一个控制处理器通信连接的存储器;所述存储器存储有可被所述至少一个控制处理器执行的指令,所述指令被所述至少一个控制处理器执行,以使所述至少一个控制处理器能够执行如权利要求1至7任一项所述的基于信息融合的软件缺陷预测方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1至7任一项所述的基于信息融合的软件缺陷预测方法。
CN202211516666.3A 2022-11-30 2022-11-30 基于信息融合的软件缺陷预测方法、系统、设备及介质 Active CN115617694B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211516666.3A CN115617694B (zh) 2022-11-30 2022-11-30 基于信息融合的软件缺陷预测方法、系统、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211516666.3A CN115617694B (zh) 2022-11-30 2022-11-30 基于信息融合的软件缺陷预测方法、系统、设备及介质

Publications (2)

Publication Number Publication Date
CN115617694A true CN115617694A (zh) 2023-01-17
CN115617694B CN115617694B (zh) 2023-03-10

Family

ID=84880250

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211516666.3A Active CN115617694B (zh) 2022-11-30 2022-11-30 基于信息融合的软件缺陷预测方法、系统、设备及介质

Country Status (1)

Country Link
CN (1) CN115617694B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115827496A (zh) * 2023-02-13 2023-03-21 北京邮电大学 代码的异常检测方法、装置、电子设备及存储介质
CN116881172A (zh) * 2023-09-06 2023-10-13 南昌航空大学 一种基于图卷积网络的软件缺陷预测方法
CN117573084A (zh) * 2023-08-02 2024-02-20 广东工业大学 一种基于逐层融合抽象语法树的代码补全方法

Citations (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107220180A (zh) * 2017-06-08 2017-09-29 电子科技大学 一种基于神经网络语言模型的代码分类方法
CN107835113A (zh) * 2017-07-05 2018-03-23 中山大学 一种基于网络映射的社交网络中异常用户检测方法
CN109558166A (zh) * 2018-11-26 2019-04-02 扬州大学 一种面向缺陷定位的代码搜索方法
CN110597735A (zh) * 2019-09-25 2019-12-20 北京航空航天大学 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法
CN110704636A (zh) * 2019-09-27 2020-01-17 吉林大学 一种改进的基于Node2vec的知识图谱向量表示方法
US20200076840A1 (en) * 2018-09-05 2020-03-05 Oracle International Corporation Malicious activity detection by cross-trace analysis and deep learning
US20200076841A1 (en) * 2018-09-05 2020-03-05 Oracle International Corporation Context-aware feature embedding and anomaly detection of sequential log data using deep recurrent neural networks
US20200311115A1 (en) * 2019-03-29 2020-10-01 Knowtions Research Inc. Method and system for mapping text phrases to a taxonomy
CN112597063A (zh) * 2021-02-26 2021-04-02 北京北大软件工程股份有限公司 缺陷代码定位的方法、装置以及存储介质
CN112733156A (zh) * 2021-01-29 2021-04-30 中国人民解放军国防科技大学 基于代码属性图的软件脆弱性智能检测方法、系统及介质
CN112883378A (zh) * 2021-03-30 2021-06-01 北京理工大学 图嵌入与深度神经网络相融合的安卓恶意软件检测方法
CN113055372A (zh) * 2021-03-09 2021-06-29 重庆邮电大学 一种恶意软件的传播预测方法
CN113254652A (zh) * 2021-07-01 2021-08-13 中南大学 一种基于超图注意力网络的社交媒体贴文真实性检测方法
CN113554100A (zh) * 2021-07-28 2021-10-26 湖南科技大学 异构图注意力网络增强的Web服务分类方法
CN114356641A (zh) * 2022-03-04 2022-04-15 中南大学 一种增量式的软件缺陷预测方法、系统、设备及存储介质
WO2022088972A1 (zh) * 2020-10-30 2022-05-05 广州大学 面向带权异质图的恶意行为识别方法、系统和存储介质
CN114816997A (zh) * 2022-03-29 2022-07-29 湖北大学 一种基于图神经网络与双向gru特征抽取的缺陷预测方法
CN114925203A (zh) * 2022-05-24 2022-08-19 国家计算机网络与信息安全管理中心 一种基于图嵌入方法的冲突文本预测方法
CN114936158A (zh) * 2022-05-28 2022-08-23 南通大学 一种基于图卷积神经网络的软件缺陷定位方法
CN115048316A (zh) * 2022-08-15 2022-09-13 中国电子科技集团公司第三十研究所 一种半监督的软件代码缺陷检测方法及装置
CN115238073A (zh) * 2022-07-20 2022-10-25 湖南科技大学 一种融合异构信息网络与生成对抗网络的服务分类方法

Patent Citations (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107220180A (zh) * 2017-06-08 2017-09-29 电子科技大学 一种基于神经网络语言模型的代码分类方法
CN107835113A (zh) * 2017-07-05 2018-03-23 中山大学 一种基于网络映射的社交网络中异常用户检测方法
US20200076840A1 (en) * 2018-09-05 2020-03-05 Oracle International Corporation Malicious activity detection by cross-trace analysis and deep learning
US20200076841A1 (en) * 2018-09-05 2020-03-05 Oracle International Corporation Context-aware feature embedding and anomaly detection of sequential log data using deep recurrent neural networks
CN109558166A (zh) * 2018-11-26 2019-04-02 扬州大学 一种面向缺陷定位的代码搜索方法
US20200311115A1 (en) * 2019-03-29 2020-10-01 Knowtions Research Inc. Method and system for mapping text phrases to a taxonomy
CN110597735A (zh) * 2019-09-25 2019-12-20 北京航空航天大学 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法
CN110704636A (zh) * 2019-09-27 2020-01-17 吉林大学 一种改进的基于Node2vec的知识图谱向量表示方法
WO2022088972A1 (zh) * 2020-10-30 2022-05-05 广州大学 面向带权异质图的恶意行为识别方法、系统和存储介质
CN112733156A (zh) * 2021-01-29 2021-04-30 中国人民解放军国防科技大学 基于代码属性图的软件脆弱性智能检测方法、系统及介质
CN112597063A (zh) * 2021-02-26 2021-04-02 北京北大软件工程股份有限公司 缺陷代码定位的方法、装置以及存储介质
CN113055372A (zh) * 2021-03-09 2021-06-29 重庆邮电大学 一种恶意软件的传播预测方法
CN112883378A (zh) * 2021-03-30 2021-06-01 北京理工大学 图嵌入与深度神经网络相融合的安卓恶意软件检测方法
CN113254652A (zh) * 2021-07-01 2021-08-13 中南大学 一种基于超图注意力网络的社交媒体贴文真实性检测方法
CN113554100A (zh) * 2021-07-28 2021-10-26 湖南科技大学 异构图注意力网络增强的Web服务分类方法
CN114356641A (zh) * 2022-03-04 2022-04-15 中南大学 一种增量式的软件缺陷预测方法、系统、设备及存储介质
CN114816997A (zh) * 2022-03-29 2022-07-29 湖北大学 一种基于图神经网络与双向gru特征抽取的缺陷预测方法
CN114925203A (zh) * 2022-05-24 2022-08-19 国家计算机网络与信息安全管理中心 一种基于图嵌入方法的冲突文本预测方法
CN114936158A (zh) * 2022-05-28 2022-08-23 南通大学 一种基于图卷积神经网络的软件缺陷定位方法
CN115238073A (zh) * 2022-07-20 2022-10-25 湖南科技大学 一种融合异构信息网络与生成对抗网络的服务分类方法
CN115048316A (zh) * 2022-08-15 2022-09-13 中国电子科技集团公司第三十研究所 一种半监督的软件代码缺陷检测方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
YI GAO等: "TECCD: A Tree Embedding Approach for Code Clone Detection" *
郑显达: "基于知识图谱和表示学习的软件缺陷预测系统设计与实现" *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115827496A (zh) * 2023-02-13 2023-03-21 北京邮电大学 代码的异常检测方法、装置、电子设备及存储介质
CN117573084A (zh) * 2023-08-02 2024-02-20 广东工业大学 一种基于逐层融合抽象语法树的代码补全方法
CN117573084B (zh) * 2023-08-02 2024-04-12 广东工业大学 一种基于逐层融合抽象语法树的代码补全方法
CN116881172A (zh) * 2023-09-06 2023-10-13 南昌航空大学 一种基于图卷积网络的软件缺陷预测方法
CN116881172B (zh) * 2023-09-06 2024-02-23 南昌航空大学 一种基于图卷积网络的软件缺陷预测方法

Also Published As

Publication number Publication date
CN115617694B (zh) 2023-03-10

Similar Documents

Publication Publication Date Title
CN115617694B (zh) 基于信息融合的软件缺陷预测方法、系统、设备及介质
US11526424B2 (en) Automated program repair tool
CN112541180B (zh) 一种基于语法特征和语义特征的软件安全漏洞检测方法
US9928040B2 (en) Source code generation, completion, checking, correction
CN112597063B (zh) 缺陷代码定位的方法、装置以及存储介质
CN113849162B (zh) 一种利用模型驱动和深度神经网络相结合的代码生成方法
Ferreira et al. Premise selection in natural language mathematical texts
US11269760B2 (en) Systems and methods for automated testing using artificial intelligence techniques
CN105786715A (zh) 一种程序静态自动分析方法
Meilong et al. An approach to semantic and structural features learning for software defect prediction
CN114691148A (zh) 模型推理加速方法、装置、电子设备及存储介质
CN115934147A (zh) 软件自动修复方法、系统、电子设备及存储介质
Pira Using knowledge discovery to propose a two-phase model checking for safety analysis of graph transformations
Karakati et al. Software code refactoring based on deep neural network‐based fitness function
CN116861269A (zh) 工程领域的多源异构数据融合及分析方法
Bauer et al. MLFMF: Data Sets for Machine Learning for Mathematical Formalization
CN114153447B (zh) 一种自动化生成ai训练代码的方法
CN114818682A (zh) 基于自适应实体路径感知的文档级实体关系抽取方法
CN112560441B (zh) 自下而上规则结合神经网络的成分句法分析树构造方法
KR102273136B1 (ko) 멀티 홉 이웃을 이용한 제로샷 지식 그래프 완성 방법 및 장치
CN115879868B (zh) 一种专家系统与深度学习相融合的智能合约安全审计方法
US20240184891A1 (en) Directed fuzzing for vulnerability detection
Hussain Readle: A Formal Framework for Designing AI-based Edge Systems
CN117171013A (zh) 基于元启发式算法的智能合约测试用例生成方法及装置
CN112698977A (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
GR01 Patent grant
GR01 Patent grant