CN117290238A - 基于异质类关系图神经网络的软件缺陷预测方法和系统 - Google Patents

基于异质类关系图神经网络的软件缺陷预测方法和系统 Download PDF

Info

Publication number
CN117290238A
CN117290238A CN202311307585.7A CN202311307585A CN117290238A CN 117290238 A CN117290238 A CN 117290238A CN 202311307585 A CN202311307585 A CN 202311307585A CN 117290238 A CN117290238 A CN 117290238A
Authority
CN
China
Prior art keywords
software
node
relation
heterogeneous
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.)
Granted
Application number
CN202311307585.7A
Other languages
English (en)
Other versions
CN117290238B (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.)
Hubei University
Original Assignee
Hubei 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 Hubei University filed Critical Hubei University
Priority to CN202311307585.7A priority Critical patent/CN117290238B/zh
Publication of CN117290238A publication Critical patent/CN117290238A/zh
Application granted granted Critical
Publication of CN117290238B publication Critical patent/CN117290238B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/243Classification techniques relating to the number of classes
    • G06F18/24323Tree-organised classifiers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/02Knowledge representation; Symbolic representation
    • G06N5/022Knowledge engineering; Knowledge acquisition
    • 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)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于异质类关系图神经网络的软件缺陷预测方法和系统,包括:抽取软件类之间依赖关系和软件类之间的共改关系及其权重,构建一个异质类关系图;组合传统静态代码度量与网络嵌入度量来初始化节点属性,利用关系图神经网络模型R‑GCN学习异质信息网络,获得异质网络结构特征;训练一个分类器,用于缺陷预测。本发明的优点在于:充分利用了软件系统中类之间的依赖关系和共改关系,实现了更准确的缺陷预测。能够捕捉到更丰富的软件异质网络结构特征,从而提高了预测的准确性和可靠性。

Description

基于异质类关系图神经网络的软件缺陷预测方法和系统
技术领域
本发明涉及软件工程中缺陷预测技术领域,特别涉及一种基于异质类关系图神经网络的软件缺陷检测方法和系统。
背景技术
现代软件系统需求不断增多,系统日渐复杂,维护代码变得越来越费时费力,导致复杂软件系统的缺陷和漏洞难以避免。国内外历史上出现过多次由于软件缺陷而导致的重大事故,预测软件代码缺陷以有效保证软件可信性成为普遍关注的问题。软件缺陷预测是使用代码复杂性和变更历史等软件特征构建分类器以预测可能包含缺陷的代码区域的过程,该技术可提前发现潜在的缺陷和漏洞。
为了降低网络结构特征表示的复杂性,近年来网络嵌入算法研究取得重大进展。网络嵌入的核心思想是,在保持网络结构特性(一阶相似度、二阶相似度等)的同时,将高维稀疏的网络结构或者图结构映射到低维稠密的向量空间。这种嵌入后的网络特征便于输入到机器学习模型中。嵌入方法主要包括基于矩阵分解的方法、基于随机游走的方法、基于深度学习的方法。网络嵌入目前已应用到网络压缩、可视化、聚类、链路预测和节点分类等不同领域。近年来软件关联网络嵌入也开始应用于软件缺陷预测领域,然而,不同软件关联网络以及不同网络嵌入算法对缺陷预测性能的影响研究仍然很稀缺。
在早期的工作中,研究者们提出了各种各样的指标来建立预测模型,通常使用静态代码属性和缺陷位置来构建,通过这些手工定义的特征,如代码行数、先前的错误、文件中方法的数量等来预测缺陷,这些特征很容易使用自动化工具从源代码中获取。然而,传统人工设计的特征只是考虑了代码的复杂性,为了提取更丰富的源代码语义和语法信息,研究者们将软件源代码建模为类似于自然语言处理中的文本序列,例如基于抽象语法树的神经网络模型,能够很好的模拟源代码,同时也保留程序的结构信息,通过遍历抽象语法树,选取需要保留的节点类型,将每个源文件解析为一系列代码标记,输入到深度神经网络中,获得软件源代码的语义特征。
传统代码度量指标与语义特征的缺点是它们只关注单个元素,而很少考虑元素之间的交互信息,可以获取的信息内容是有限的。近年来,社会网络分析领域的概念衍生出来的网络度量指标引起了广泛研究者的关注。基于网络的分析将模块作为节点,提取模块之间的依赖关系作为边,构成软件源代码网络,利用获得的网络模型来建立预测模型。网络度量考虑模块之间的交互,从而对软件中的信息流与拓扑结构进行建模,这些是软件代码度量无法捕获的。
在软件工程领域中,采用的处理网络结构数据的嵌入学习模型有deepwalk,node2vec,struc2vec等,其原理是将网络结构转换成一系列节点序列,再使用词向量模型来学习节点表示。深度学习领域中的图神经网络模型同样可以捕获网络结构特征,现今已有研究将其应用到软件缺陷预测领域中。其思想是利用整体网络结构的邻接矩阵,与其原始的节点特征矩阵相乘,得到隐藏层的嵌入特征,依次迭代,从而实现多层网络。与传统的嵌入学习方法相比,图神经网络不仅可以学习每个节点及其邻域的结构关系,同时还可以将每个节点自身携带的特征属性融合到其中进行更全面的学习。
之前的研究中,根据源代码所提取到的图结构通常都是同质的,即只有单一类型的节点和连边关系。但在真实世界中,事物之间的相互作用关系构成的图结构往往是异质的,即节点和连边具有多种类型。例如,在社交网络中同时存在用户、贴文和评论等类型的节点和用户-贴文、用户-评论和贴文-评论等多种关系。边和节点的异质造成了节点间语义关系的多样性,同时,边和节点所具有的属性特征也位于不同的特征空间中,这些原因导致传统的图神经网络方法无法高效、准确地处理异质图.为了解决这些问题,Schlichtkrull[1]等人最早通过对不同类型的关系定义不同的系数矩阵,将GCN成功迁移到了异质图上;Hu[2]等人在此基础上,进一步使用注意力机制计算不同类型关系的重要程度;后续的Wang[3]等人则引入了元路径概念将异质图转化为同质图,再进行表示学习.这些方法被统一归纳为异质图神经网络(heterogeneous graph neural networks,HetGNNs)。异质图与同质图的一个显著区别是异质图中存在多种类型的边,从而定义了节点间的各种语义关系.而在图神经网络的卷积过程中,节点间的信息又是通过相连的边进行传递的。然而,在另一些研究工作中表明,将多个关系组合的异质图比单一关系的同质图更有优势。
参考文献
[1]Schlichtkrull M,Kipf TN,Bloem P,Van Den Berg R,Titov I,WellingM.Modeling relational data with graph convolutional networks.In:Gangemi A,ed.Proc.of the European Semantic Web Conf.Springer,2018.593-607;
[2]Hu Z,Dong Y,Wang K,Sun Y.Heterogeneous graph transformer.In:HuangY,ed.Proc.of the Web Conf.(WWW).New York:ACM,2020.27042710;
[3]Wang X,Ji H,Shi C,Wang B,Ye Y,Cui P,Yu PS.Heterogeneous graphattention network.In:Huang Y,ed.Proc.of the Web Conf.(WWW).New York:ACM,2019.20222032。
发明内容
本发明针对现有技术的缺陷,提供了一种基于异质类关系图神经网络的软件缺陷检测方法和系统,提取软件模块之间的依赖关系和修订历史记录中文件的共同修改关系,根据这两类关系构建一个异质类关系图,并且组合网络嵌入度量与传统度量来初始化节点属性,再利用关系图卷积网络(R-GCN)对其进行特征提取,进而用于预测缺陷,提高了预测的准确性。
为了实现以上发明目的,本发明采取的技术方案如下:
本发明提供一种基于异质类关系图神经网络的软件缺陷检测方法,具体包括以下步骤:
S1:使用开源工具解析软件源代码文件,抽取类之间的依赖关系;
S2:利用开源工具,获取软件修订历史,从中抽取出软件类之间的共改关系,并获取关系连边权重;
S3:根据获取到的依赖关系和共改关系,构建一个异质类关系图;
S4:使用node2vec方法学习得到软件依赖网络嵌入度量,并与传统静态代码度量进行结合,用以对节点属性进行初始化,以此得到带属性的异质类关系图;
S5:使用关系图神经网络模型学习异质类关系图,获得软件异质网络结构特征;
S6:根据软件异质网络结构特征,训练一个分类器,用于缺陷预测。
进一步地,S1具体包括以下子步骤:
S11:以Java语言开发的软件系统作为分析对象,通过Dependencyfinder工具对源代码编译后产生的.class文件、由源代码打包而成的.jar文件或者包含源代码的zip压缩包进行依赖关系扫描,并保存为XML文件;
S12:解析并提取各类文件之间的依赖关系,并提取依赖关系连边的权重。。具体依赖关系的提取方式如下:
1)继承,假如类vc1继承类vc2,或实现接口vc2,则存在边e12=(vc1,vc2);
2)聚合,假如类vc1包含类vc2的属性,则存在边e12=(vc1,vc2);
3)参数,假如类vc1的方法调用了类cc2的方法,则存在边e12=(vc1,vc2)。
其中,类之间的相互依赖次数代表了类之间的影响程度,连边权重的计算方式表示如下:
其中Wij表示节点vi和节点vj之间的权重,dij表示两节点之间的依赖次数,N(j)表示节点vj的邻居集合。
进一步地,S2具体包括以下子步骤:
S21:利用自定义的解析程序从软件演化历史中的共同修改记录中提取软件源文件之间的共同修改关系。
S22:根据源文件之间共同修改频次来获取共改关系连边的权重。首先,统计每对源文件之间的共同修改次数,然后,根据共同修改次数计算连边的权重。计算方式包括:简单计数法、归一化计数法和概率模型法。
进一步地,S3具体步骤如下:
基于依赖关系和共改关系,对软件系统进行图结构建模,生成软件图数据格式;
具体的软件图结构模型定义如下:
HCRG(Heterogeneous Class Relation Graph)被定义为一个无向加权网络HCRG=(V,E,R,W),其中V表示节点集合,E表示边关系集合,R表示边关系类型的集合,W表示连边关系的权重。
进一步地,S4具体包括以下子步骤:
S41:利用Node2vec方法,通过偏向性随机游走的方式学习将网络转换为节点序列,并将节点序列类比为自然语言处理中的文本序列;
S42:根据得到的节点序列,通过词向量模型skip gram去训练,得到节点的低维向量表示,即将网络中的每个节点vi(vi∈V)转化为d维的表征向量 |v|是节点的个数,其中某个目标节点v的表征向量为/>这些节点特征向量将与传统静态代码度量相结合以作为下一步关系图神经网络的初始特征输入。
进一步地,S5具体包括以下子步骤:
S51:将步骤S3中得到的无向加权网络HCRG=(v,E,R,W)、步骤S4中得到的节点初始嵌入向量与传统静态代码度量相结合的混合特征作为关系图神经网络的输入。
S52:通过RGCN使用卷积操作迭代更新节点向量模式,网络中的每个节点在迭代中对其邻居节点特征做聚合,并与自身在上一层迭代所得到的嵌入向量相结合,得到新的一层嵌入向量,每个节点依次迭代,直到最后一层输出,为了区分不同类型的边和节点之间的关系,R-GCN为每种关系类型都学习一个特定的权重矩阵。这些权重矩阵用于对不同关系类型的边进行不同的特征传递。得到更新后的节点特征,在每一层中,对于每个节点,将其邻居节点的特征与学习到的关系表示的权重矩阵进行加权求和,然后将结果作为该节点在下一层的新表示。这样,每个节点都可以考虑其邻居节点的特征和关系类型,RGCN的卷积层表示如下:
是第l层的节点vi的隐藏状态,σ(·)表示激活函数(比如Relu)。其中/>表示节点i在关系r∈R下的邻居集,ci,r是可以预先学习或选择的问题特定的归一化常数(例如),/>为关系r所连接节点对应的参数矩阵。
S53:最终得到每个节点的预测值。
进一步地,S6具体包括以下子步骤:
S61:根据每个项目中发布的缺陷,将每个.java文件标记为有缺陷或无缺陷。
S62:根据步骤S5得到的节点特征和预测值,对软件系统进行特征提取,将提取到的结构特征用于训练一个机器学习的分类器,采用的是随机森林作为预测模型。
S63:将训练好的模型用于预测新的实例是有缺陷的还是无缺陷的。当执行项目内缺陷预测时,训练集与测试集的实例来自于同一个项目,即项目A。当执行跨项目缺陷预测时,使用项目A中的实例训练预测模型,并使用该模型预测项目B中的测试实例。
本发明还公开了一种软件缺陷检测系统,该系统能够用于实施上述的软件缺陷检测方法,具体的,包括:
源代码解析模块:使用开源工具解析软件源代码文件,抽取类之间的依赖关系。
修订历史获取模块:利用开源工具,获取软件修订历史,从中抽取出软件类之间的共改关系,并获取关系连边权重。
异质类关系图构建模块:根据获取到的依赖关系和共改关系,构建一个异质类关系图。
节点属性初始化模块:使用node2vec方法学习得到软件依赖网络嵌入度量,并与传统静态代码度量进行结合,用以对节点属性进行初始化,以此得到带属性的异质类关系图。
关系图神经网络学习模块:使用关系图神经网络模型学习异质类关系图,获得软件异质网络结构特征。
缺陷预测分类器训练模块:根据软件异质网络结构特征,训练一个分类器,用于缺陷预测。
本发明还公开了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述软件缺陷检测方法。
本发明还公开了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述软件缺陷检测方法。
与现有技术相比,本发明的优点在于:
1.充分利用异质信息网络:从源代码和软件历史仓库中提取出依赖关系和共改关系,并构建了一个异质类关系图。通过这种方式,本发明能够充分利用复杂网络理论来描述软件的结构和演化情况,从而更全面地捕捉软件的特征。
2.综合节点属性信息:使用传统静态代码度量和node2vec方法获取的网络嵌入度量结合,对异质类关系图的节点属性进行初始化。这种综合性的节点属性初始化能够更好地反映软件类之间的关系和特征,从而提供更准确的输入数据给关系图神经网络模型。
3.学习网络结构特征:通过关系图神经网络模型,本发明能够学习软件异质网络的结构特征。相比传统的基于代码度量的方法,该方法能够更好地捕捉复杂的软件依赖关系和共改关系,从而提高缺陷预测的准确性和鲁棒性。
4.综合考虑软件演化历史:基于软件的修订历史,提取软件类之间的共改关系。通过综合考虑软件演化历史,本发明能够更好地捕捉软件的演化模式和变化趋势,从而提高缺陷预测的效果。
附图说明
图1是本发明实施例软件缺陷检测方法的框架图;
图2是本发明实施例构建异质类关系图的过程图;
图3是本发明实施例应用于缺陷预测的流程图;
图4是本发明实施例对比现有技术的实验结果对比图;其中,(a)为本发明与基线模型在跨版本任务中的预测结果,(b)为本发明与基线模型在跨项目任务中的预测结果。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下根据附图并列举实施例,对本发明做进一步详细说明。
如图1所示,一种基于异质类关系图神经网络的软件缺陷检测方法,包括以下步骤:
S1:使用开源工具解析软件源代码文件,抽取类之间的依赖关系;根据软件修订历史文件,抽取类之间的共改关系;基于以上两种关系构建一个异质类关系图,使用node2vec方法学习得到软件依赖网络嵌入度量,并与传统静态代码度量进行结合,用以对节点属性进行初始化,以此得到带属性的异质类关系图。
包括以下步骤:
A.利用开源工具解析软件源代码文件,抽取软件依赖关系,包括以下子步骤:
步骤A1,以Java语言开发的软件系统作为分析对象,通过DependencyFinder工具对源代码编译后产生的.class文件、由源代码打包而成的.jar文件或者包含源代码的zip压缩包进行依赖关系扫描,并保存为XML文件,XML文件中存放的是DependencyFinder对于Java源代码的分析结果,以一种嵌套的结构来表示源代码中包、类和方法三个粒度元素的基本信息和元素之间的依赖关系。最外层的<package>标签表示包,<class>表示类,<feature>表示方法/字段,最内层的<outbound>和<inbound>标签分别表示依赖与被依赖关系。本发明使用自主开发的解析程序对解析的XML文件进行标签解析,从中提取软件类之间依赖关系,并保存为.txt文件以便下游工作使用。
步骤A2,解析并提取各类之间的依赖关系,参照图2异质类关系图构建过程,图2(a)是5个Java文件代码片段,图2(b)是它们之间对应的软件依赖关系图示例,关系图中的每个节点代表一个类,边为两个类节点之间的依赖关系。例如,类B是类A的子类,根据两者的继承关系,则存在一条由B指向A的连边(B→A)。C→I代表接口实现关系,C→D代表参数类型依赖关系,A→C、D→A代表聚合关系。
步骤A3,根据软件类之间的相互依赖次数计算类依赖关系连边权重。类之间相互依赖次数代表了类之间的影响程度,每个节点对每个邻居节点的贡献值并不相同,本发明方法对连边权重的计算方式表示如下:
其中Wij表示节点vi和节点vj之间的权重,dij表示两节点之间的依赖次数,N(j)表示节点vj的邻居集合。
B.利用开源工具,获取软件修订历史,并从中抽取出软件类之间的共改关系,并获取关系连边权重,包括以下步骤
步骤B1,以软件演化历史(记录于软件的版本控制系统如Git)中的共同修改记录作为分析对象,使用自主开发的解析程序对共同修改记录txt文件进行解析,设置对历史修改记录的过滤阈值参数(一次提交所涉及的最大文件数),本发明方法设置过滤阈值为50,进而从中提取软件类之间的共改关系,并保存为.txt文件格式以便下游工作使用。
步骤B2,解析并提取共改关系,参照图2异质类关系图构建过程,图2(c)是软件修订历史中的4次提交记录,图2(d)是对应生成的软件共改关系图示例,关系图中的每个节点表示一个类,边为两个类节点之间的共改关系。例如,A.java和C.java在Commit 1和Commit3中都同时修改,所以在关系图中A.java和C.java中之间存在一条边。
C.根据获取到的两种关系,构建一个异质类关系图结构模型,包括以下步骤:
步骤C1,参照图2构建异质类关系图构建过程,图2(e)中的节点依照软件依赖关系图,增加节点之间的共改关系边,即在对共改关系进行解析提取时,保证提取的共改关系节点包含在依赖关系节点中。图2(e)中实线表示依赖关系,虚线表示共改关系。
D.利用网络嵌入方法,对其中软件依赖关系图进行学习,得到节点的嵌入向量,包括以下子步骤,
步骤D1,利用Node2vec方法,通过偏向性随机游走的方式学习将网络转换为节点序列,并将这种序列类比为自然语言处理中的文本序列;
步骤D2,根据步骤D1得到的节点序列,通过词向量模型skip gram去训练,得到节点的低维向量表示,即将网络中的每个节点vi(vi∈V)转化为d维的表征向量|V|是节点的个数,其中某个目标节点v的表征向量为/> 将获得的网络嵌入度量与传统静态代码度量组合起来作为异质信息网络中节点的初始属性,与异质信息网络一起送入R-GCN模型中训练。
S2:使用关系图神经网络模型学习异质类关系图,获得软件异质网络结构特征,用以缺陷预测,包括以下步骤:
步骤E1,将步骤C中得到的异质信息网络HCRG=(V,E,R,W)、步骤D中得到的节点初始嵌入向量与传统静态代码度量相结合的混合特征作为关系图神经网络的输入。
步骤E2,通过RGCN使用卷积操作迭代更新节点向量模式,网络中的每个节点在迭代中对其邻居节点特征做聚合,并与自身在上一层迭代所得到的嵌入向量相结合,得到新的一层嵌入向量,每个节点依次迭代,直到最后一层输出,为了区分不同类型的边和节点之间的关系,R-GCN为每种关系类型都学习一个特定的权重矩阵。这些权重矩阵用于对不同关系类型的边进行不同的特征传递。得到更新后的节点特征,在每一层中,对于每个节点,将其邻居节点的特征与学习到的关系表示的权重矩阵进行加权求和,然后将结果作为该节点在下一层的新表示。这样,每个节点都可以考虑其邻居节点的特征和关系类型,RGCN的卷积层表示如下:
其中是第l层的节点vi的隐藏状态,σ(·)表示激活函数(比如Relu)。其中/>表示节点i在关系r∈R下的邻居集,ci,r是可以预先学习或选择的问题特定的归一化常数(例如/>),Wr (l)为关系r所连接节点对应的参数矩阵。
步骤E3,最终得到每个节点的预测值,通过堆叠多个R-GCN层来得到节点的向量表示,再通过softmax激活函数得到输出,最后通过计算交叉熵函数来更新模型参数,最终的输出为:
其中,k是层数,是第l层的节点vi的隐藏状态。损失函数为:
其中是有标签的节点索引集合,/>是第i个有标签节点的网络输出的第k个条目,tik表示其各自的真实标签。
S3:将S2获得的结构特征作为下游任务输入,训练一个分类器,用于缺陷预测,包括以下步骤:
F.第一步根据每个项目中发布的缺陷,将每个.java文件标记为有缺陷或无缺陷。第二步根据S2对软件系统进行特征提取(图1),将提取到的结构特征用于训练一个机器学习的分类器,本发明采用的是随机森林作为预测模型。最后,将训练好的模型用于预测新的实例是有缺陷的还是无缺陷的。如图3所示,当执行跨项目的缺陷预测时,使用项目A中的实例训练预测模型,并使用该模型预测项目B中的测试实例。
如图4所示,图4(a)可以看出,本发明方法略优于基准模型,F1值取得最佳,为0.668,相较于基准模型提高了3.7%~32.8%,Recall值并未取得最佳,但七个基准模型中相较于5个模型有提高,平均提高了2.3%~47.9%。Precision值也并未取得最佳,但在七个基准模型中相较于6个模型有提高,平均提高了1.3%~36.6%。
图4(b)可以看出,本发明方法略优于基线模型,F1和Recall的平均值取得最佳,相较于基准模型平均提高了1.60%~15.7%、2.90%~19.0%。Precision值并未取得最佳,但在七个基准模型中相较于6个模型有提高,平均提高了1.3%~7.5%。
结果表明,与所有基线模型相比,本发明方法在F1值上表现最好,但相对于Recall和Precision表现较差。
本发明再一个实施例中,提供了一种软件缺陷检测系统,该系统能够用于实施上述的软件缺陷检测方法,具体的,包括:模块
源代码解析模块:使用开源工具解析软件源代码文件,抽取类之间的依赖关系。
修订历史获取模块:利用开源工具,获取软件修订历史,从中抽取出软件类之间的共改关系,并获取关系连边权重。
异质类关系图构建模块:根据获取到的依赖关系和共改关系,构建一个异质类关系图。
节点属性初始化模块:使用node2vec方法学习得到软件依赖网络嵌入度量,并与传统静态代码度量进行结合,用以对节点属性进行初始化,以此得到带属性的异质类关系图。
关系图神经网络学习模块:使用关系图神经网络模型学习异质类关系图,获得软件异质网络结构特征,最终得到每个节点的预测值。
缺陷预测分类器训练模块:根据软件异质网络结构特征,训练一个分类器,用于缺陷预测。
本发明再一个实施例中,提供了一种终端设备,该终端设备包括处理器以及存储器,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器用于执行所述计算机存储介质存储的程序指令。处理器可能是中央处理单元(Central ProcessingUnit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor、DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其是终端的计算核心以及控制核心,其适于实现一条或一条以上指令,具体适于加载并执行一条或一条以上指令从而实现相应方法流程或相应功能;本发明实施例所述的处理器可以用于软件缺陷检测方法的操作,包括以下步骤:
S1:使用开源工具解析软件源代码文件,抽取类之间的依赖关系;
S2:利用开源工具,获取软件修订历史,从中抽取出软件类之间的共改关系,并获取关系连边权重;
S3:根据获取到的依赖关系和共改关系,构建一个异质类关系图;
S4:使用node2vec方法学习得到软件依赖网络嵌入度量,并与传统静态代码度量进行结合,用以对节点属性进行初始化,以此得到带属性的异质类关系图;
S5:使用关系图神经网络模型学习异质类关系图,获得软件异质网络结构特征;
S6:根据软件异质网络结构特征,训练一个分类器,用于缺陷预测。
本发明再一个实施例中,本发明还提供了一种存储介质,具体为计算机可读存储介质(Memory),所述计算机可读存储介质是终端设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机可读存储介质既可以包括终端设备中的内置存储介质,当然也可以包括终端设备所支持的扩展存储介质。计算机可读存储介质提供存储空间,该存储空间存储了终端的操作系统。并且,在该存储空间中还存放了适于被处理器加载并执行的一条或一条以上的指令,这些指令可以是一个或一个以上的计算机程序(包括程序代码)。需要说明的是,此处的计算机可读存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。
可由处理器加载并执行计算机可读存储介质中存放的一条或一条以上指令,以实现上述实施例中有关软件缺陷检测方法的相应步骤;计算机可读存储介质中的一条或一条以上指令由处理器加载并执行如下步骤:
S1:使用开源工具解析软件源代码文件,抽取类之间的依赖关系;
S2:利用开源工具,获取软件修订历史,从中抽取出软件类之间的共改关系,并获取关系连边权重;
S3:根据获取到的依赖关系和共改关系,构建一个异质类关系图;
S4:使用node2vec方法学习得到软件依赖网络嵌入度量,并与传统静态代码度量进行结合,用以对节点属性进行初始化,以此得到带属性的异质类关系图;
S5:使用关系图神经网络模型学习异质类关系图,获得软件异质网络结构特征;
S6:根据软件异质网络结构特征,训练一个分类器,用于缺陷预测。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。

Claims (10)

1.一种基于异质类关系图神经网络的软件缺陷检测方法,其特征在于,具体包括以下步骤:
S1:使用开源工具解析软件源代码文件,抽取类之间的依赖关系;
S2:利用开源工具,获取软件修订历史,从中抽取出软件类之间的共改关系,并获取关系连边权重;
S3:根据获取到的依赖关系和共改关系,构建一个异质类关系图;
S4:使用node2vec方法学习得到软件依赖网络嵌入度量,并与传统静态代码度量进行结合,用以对节点属性进行初始化,以此得到带属性的异质类关系图;
S5:使用关系图神经网络模型学习异质类关系图,获得软件异质网络结构特征,最终得到每个节点的预测值;
S6:根据软件异质网络结构特征,训练一个分类器,用于缺陷预测。
2.根据权利要求1所述的软件缺陷检测方法,其特征在于:S1具体包括以下子步骤:
S11:以Java语言开发的软件系统作为分析对象,通过Dependencyfinder工具对源代码编译后产生的.class文件、由源代码打包而成的.jar文件或者包含源代码的zip压缩包进行依赖关系扫描,并保存为XML文件;
S12:解析并提取各类文件之间的依赖关系,并提取依赖关系连边的权重;;具体依赖关系的提取方式如下:
1)继承,假如类vc1继承类vc2,或实现接口vc2,则存在边e12=(vc1,vc2);
2)聚合,假如类vc1包含类vc2的属性,则存在边e12=(vc1,vc2);
3)参数,假如类vc1的方法调用了类cc2的方法,则存在边e12=(vc1,vc2);
其中,类之间的相互依赖次数代表了类之间的影响程度,连边权重的计算方式表示如下:
其中Wij表示节点vi和节点vj之间的权重,dij表示两节点之间的依赖次数,N(j)表示节点vj的邻居集合。
3.根据权利要求1所述的软件缺陷检测方法,其特征在于:S2具体包括以下子步骤:
S21:利用自定义的解析程序从软件演化历史中的共同修改记录中提取软件源文件之间的共同修改关系;
S22:根据源文件之间共同修改频次来获取共改关系连边的权重;首先,统计每对源文件之间的共同修改次数,然后,根据共同修改次数计算连边的权重;计算方式包括:简单计数法、归一化计数法和概率模型法。
4.根据权利要求1所述的软件缺陷检测方法,其特征在于:S3具体步骤如下:
基于依赖关系和共改关系,对软件系统进行图结构建模,生成软件图数据格式;
具体的软件图结构模型定义如下:
HCRG(Heterogeneous Class Relation Graph)被定义为一个无向加权网络HCRG=(V,E,R,W),其中V表示节点集合,E表示边关系集合,R表示边关系类型的集合,W表示连边关系的权重。
5.根据权利要求1所述的软件缺陷检测方法,其特征在于:S4具体包括以下子步骤:
S41:利用Node2vec方法,通过偏向性随机游走的方式学习将网络转换为节点序列,并将节点序列类比为自然语言处理中的文本序列;
S42:根据得到的节点序列,通过词向量模型skip gram去训练,得到节点的低维向量表示,即将网络中的每个节点vi(vi∈V)转化为d维的表征向量 |V|是节点的个数,其中某个目标节点v的表征向量为/>这些节点特征向量将与传统静态代码度量相结合以作为下一步关系图神经网络的初始特征输入。
6.根据权利要求5所述的软件缺陷检测方法,其特征在于:S5具体包括以下子步骤:
S51:将步骤S3中得到的无向加权网络HCRG=(V,E,R,W)、步骤S4中得到的节点初始嵌入向量与传统静态代码度量相结合的混合特征作为关系图神经网络的输入;
S52:通过RGCN使用卷积操作迭代更新节点向量模式,网络中的每个节点在迭代中对其邻居节点特征做聚合,并与自身在上一层迭代所得到的嵌入向量相结合,得到新的一层嵌入向量,每个节点依次迭代,直到最后一层输出,为了区分不同类型的边和节点之间的关系,R-GCN为每种关系类型都学习一个特定的权重矩阵;这些权重矩阵用于对不同关系类型的边进行不同的特征传递;得到更新后的节点特征,在每一层中,对于每个节点,将其邻居节点的特征与学习到的关系表示的权重矩阵进行加权求和,然后将结果作为该节点在下一层的新表示;这样,每个节点都可以考虑其邻居节点的特征和关系类型,RGCN的卷积层表示如下:
是第l层的节点vi的隐藏状态,σ(·)表示激活函数(比如Relu);其中/>表示节点i在关系r∈R下的邻居集,ci,r是可以预先学习或选择的问题特定的归一化常数,/>为关系r所连接节点对应的参数矩阵;
S53:最终得到每个节点的预测值。
7.根据权利要求6所述的软件缺陷检测方法,其特征在于:S6具体包括以下子步骤:
S61:根据每个项目中发布的缺陷,将每个.java文件标记为有缺陷或无缺陷;
S62:根据步骤S5得到的节点特征和预测值,对软件系统进行特征提取,将提取到的结构特征用于训练一个机器学习的分类器,采用的是随机森林作为预测模型;
S63:将训练好的模型用于预测新的实例是有缺陷的还是无缺陷的;当执行项目内缺陷预测时,训练集与测试集的实例来自于同一个项目,即项目A;当执行跨项目缺陷预测时,使用项目A中的实例训练预测模型,并使用该模型预测项目B中的测试实例。
8.一种软件缺陷检测系统,其特征在于:该系统能够用于实施权利要求1至7其中一项所述的软件缺陷检测方法,具体的,包括:
源代码解析模块:使用开源工具解析软件源代码文件,抽取类之间的依赖关系;
修订历史获取模块:利用开源工具,获取软件修订历史,从中抽取出软件类之间的共改关系,并获取关系连边权重;
异质类关系图构建模块:根据获取到的依赖关系和共改关系,构建一个异质类关系图;
节点属性初始化模块:使用node2vec方法学习得到软件依赖网络嵌入度量,并与传统静态代码度量进行结合,用以对节点属性进行初始化,以此得到带属性的异质类关系图;
关系图神经网络学习模块:使用关系图神经网络模型学习异质类关系图,获得软件异质网络结构特征,最终得到每个节点的预测值;
缺陷预测分类器训练模块:根据软件异质网络结构特征,训练一个分类器,用于缺陷预测。
9.一种计算机设备,其特征在于:包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现权利要求1至7其中一项所述软件缺陷检测方法。
10.一种计算机可读存储介质,其特征在于:其上存储有计算机程序,该程序被处理器执行时实现权利要求1至7其中一项所述软件缺陷检测方法。
CN202311307585.7A 2023-10-10 2023-10-10 基于异质类关系图神经网络的软件缺陷预测方法和系统 Active CN117290238B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311307585.7A CN117290238B (zh) 2023-10-10 2023-10-10 基于异质类关系图神经网络的软件缺陷预测方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311307585.7A CN117290238B (zh) 2023-10-10 2023-10-10 基于异质类关系图神经网络的软件缺陷预测方法和系统

Publications (2)

Publication Number Publication Date
CN117290238A true CN117290238A (zh) 2023-12-26
CN117290238B CN117290238B (zh) 2024-04-09

Family

ID=89240667

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311307585.7A Active CN117290238B (zh) 2023-10-10 2023-10-10 基于异质类关系图神经网络的软件缺陷预测方法和系统

Country Status (1)

Country Link
CN (1) CN117290238B (zh)

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111274134A (zh) * 2020-01-17 2020-06-12 扬州大学 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质
CN112257066A (zh) * 2020-10-30 2021-01-22 广州大学 面向带权异质图的恶意行为识别方法、系统和存储介质
CN112597063A (zh) * 2021-02-26 2021-04-02 北京北大软件工程股份有限公司 缺陷代码定位的方法、装置以及存储介质
US20210182031A1 (en) * 2020-12-23 2021-06-17 Intel Corporation Methods and apparatus for automatic detection of software bugs
US20210248443A1 (en) * 2020-02-06 2021-08-12 International Business Machines Corporation Fuzzy Cyber Detection Pattern Matching
CN114528221A (zh) * 2022-02-24 2022-05-24 北京航空航天大学 一种基于异质图神经网络的软件缺陷预测方法
CN115048316A (zh) * 2022-08-15 2022-09-13 中国电子科技集团公司第三十研究所 一种半监督的软件代码缺陷检测方法及装置
CN115629995A (zh) * 2022-12-21 2023-01-20 中南大学 基于多依赖lstm的软件缺陷定位方法、系统及设备
CN115757141A (zh) * 2022-11-21 2023-03-07 杭州电子科技大学 基于异构图表示学习的软件缺陷自动定位方法
CN115935372A (zh) * 2022-11-23 2023-04-07 杭州电子科技大学 一种基于图嵌入和双向门控图神经网络的漏洞检测方法
CN116010947A (zh) * 2021-09-03 2023-04-25 西安胡门网络技术有限公司 一种基于异质网络的Android恶意软件检测方法
CN116521560A (zh) * 2023-05-10 2023-08-01 湖北大学 一种基于图神经网络的多特征融合上帝类检测方法

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111274134A (zh) * 2020-01-17 2020-06-12 扬州大学 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质
US20210248443A1 (en) * 2020-02-06 2021-08-12 International Business Machines Corporation Fuzzy Cyber Detection Pattern Matching
CN112257066A (zh) * 2020-10-30 2021-01-22 广州大学 面向带权异质图的恶意行为识别方法、系统和存储介质
US20210182031A1 (en) * 2020-12-23 2021-06-17 Intel Corporation Methods and apparatus for automatic detection of software bugs
CN112597063A (zh) * 2021-02-26 2021-04-02 北京北大软件工程股份有限公司 缺陷代码定位的方法、装置以及存储介质
CN116010947A (zh) * 2021-09-03 2023-04-25 西安胡门网络技术有限公司 一种基于异质网络的Android恶意软件检测方法
CN114528221A (zh) * 2022-02-24 2022-05-24 北京航空航天大学 一种基于异质图神经网络的软件缺陷预测方法
CN115048316A (zh) * 2022-08-15 2022-09-13 中国电子科技集团公司第三十研究所 一种半监督的软件代码缺陷检测方法及装置
CN115757141A (zh) * 2022-11-21 2023-03-07 杭州电子科技大学 基于异构图表示学习的软件缺陷自动定位方法
CN115935372A (zh) * 2022-11-23 2023-04-07 杭州电子科技大学 一种基于图嵌入和双向门控图神经网络的漏洞检测方法
CN115629995A (zh) * 2022-12-21 2023-01-20 中南大学 基于多依赖lstm的软件缺陷定位方法、系统及设备
CN116521560A (zh) * 2023-05-10 2023-08-01 湖北大学 一种基于图神经网络的多特征融合上帝类检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
刘烨;黄金筱;马于涛;: "基于混合神经网络和注意力机制的软件缺陷自动分派方法", 计算机研究与发展, no. 03, 15 March 2020 (2020-03-15) *

Also Published As

Publication number Publication date
CN117290238B (zh) 2024-04-09

Similar Documents

Publication Publication Date Title
CN111581396B (zh) 一种基于多维特征融合与依存句法的事件图谱构建系统及方法
CN109657947B (zh) 一种面向企业行业分类的异常检测方法
CN111913702B (zh) 一种基于图神经网络的软件系统中关键类的识别方法
CN115357904B (zh) 一种基于程序切片和图神经网络的多类漏洞检测方法
CN114896388A (zh) 一种基于混合注意力的层级多标签文本分类方法
CN114816997A (zh) 一种基于图神经网络与双向gru特征抽取的缺陷预测方法
CN112711578B (zh) 用于云计算业务的大数据去噪方法及云计算金融服务器
CN110851654A (zh) 基于张量化数据降维的工业设备故障检测分类方法
CN111428513A (zh) 一种基于卷积神经网络的虚假评论分析方法
CN116151845A (zh) 基于工业物联网技术的产品全生命周期管理系统及其方法
CN112529071A (zh) 一种文本分类方法、系统、计算机设备和存储介质
CN115344863A (zh) 一种基于图神经网络的恶意软件快速检测方法
CN115577678A (zh) 文档级事件因果关系识别方法、系统、介质、设备及终端
CN116521560A (zh) 一种基于图神经网络的多特征融合上帝类检测方法
CN115374792A (zh) 联合预训练和图神经网络的政策文本标注方法及系统
CN116561748A (zh) 一种组件子序列相关性感知的日志异常检测装置
CN114428860A (zh) 院前急救病例文本的识别方法、装置、终端及存储介质
CN116541698A (zh) 一种基于XGBoost的网络异常入侵检测方法和系统
CN117151222B (zh) 领域知识引导的突发事件案例实体属性及其关系抽取方法、电子设备和存储介质
CN109670015A (zh) 数据分析方法、计算机可读存储介质及终端设备
CN117290238B (zh) 基于异质类关系图神经网络的软件缺陷预测方法和系统
CN116302088B (zh) 一种代码克隆检测方法、存储介质及设备
CN116956289A (zh) 动态调整潜在黑名单和黑名单的方法
CN115438190B (zh) 一种配电网故障辅助决策知识抽取方法及系统
CN116595537A (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