CN111913702A - 一种基于图神经网络的软件系统中关键类的识别方法 - Google Patents

一种基于图神经网络的软件系统中关键类的识别方法 Download PDF

Info

Publication number
CN111913702A
CN111913702A CN202010801717.1A CN202010801717A CN111913702A CN 111913702 A CN111913702 A CN 111913702A CN 202010801717 A CN202010801717 A CN 202010801717A CN 111913702 A CN111913702 A CN 111913702A
Authority
CN
China
Prior art keywords
node
network
nodes
software
class
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
CN202010801717.1A
Other languages
English (en)
Other versions
CN111913702B (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 CN202010801717.1A priority Critical patent/CN111913702B/zh
Publication of CN111913702A publication Critical patent/CN111913702A/zh
Application granted granted Critical
Publication of CN111913702B publication Critical patent/CN111913702B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • 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/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Evolutionary Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于图神经网络的软件系统中关键类识别的方法,包括:(1)利用开源工具解析软件源代码文件,提取类之间的各种关联关系,并根据这些关系构建类之间的加权软件网络模型;(2)利用网络嵌入方法,对加权软件网络中的节点进行学习,得到节点的嵌入向量;(3)构建基于图神经网络的排序模型(4)利用pairwise排序损失训练模型,以实现对网络中节点重要性排序。本发明的优点在于:在确保识别精度的情况下,可以在极低的时间复杂度内对大型软件系统进行分析,并从中识别出潜在的关键类。可以为开发者们理解软件结构,提高软件系统稳定性提供帮助。

Description

一种基于图神经网络的软件系统中关键类的识别方法
技术领域
本发明涉及软件工程软件网络分析技术领域,特别涉及一种基于图神经网络的软件系统中关键类的识别方法。
背景技术
随着网络的规模不断扩大,软件系统的复杂度随之不断提升,软件中存在缺陷是在所难免的。发现这些缺陷也变得愈发困难,这些缺陷一旦在软件使用过程中暴露出来,影响到的往往不仅是缺陷所在的模块本身,有可能是整个软件系统崩溃。有研究指出,软件系统中的缺陷与疾病的传播模型类似,会随着软件系统中的各种模块间依赖关系,例如方法调用和参数传递等,传播到其它没有缺陷的模块中,导致无缺陷的模块最后也同样出现问题。但软件系统的高复杂性已经成为现代软件的一个基本特征,所以软件行业必须以软件高度复杂为前提,设法提升软件质量。然而,软件开发者们的精力和时间是有限的,必须优先发现可能对系统造成致命打击的缺陷和漏洞。研究表明,大部分软件缺陷能给系统带来的影响是极为有限的,但处于软件系统中关键位置的类如果存在缺陷,造成系统出现重大故障的概率会更大。因此,如果可以使用自动化的方式挖掘软件系统中关键类,着重对这些关键类给予关注和完善,降低它们出现缺陷和遭到恶意攻击可能性,可以有效增加软件系统的稳定性与可靠性。
从上世纪90年代开始,人们发现网络结构非常适合表示现实世界中高度复杂的系统,将现实世界中存在的各种复杂系统抽象为网络而得到的模型被称之为复杂网络(complex network)。学者们逐渐认识到可以通过分析复杂网络来对复杂系统的复杂性进行量化,为系统科学的研究提供了全新的角度,而这与软件工程对于量化软件系统复杂度的需求不谋而合。复杂网络是描述和研究现实世界中对象之间相互作用的有力方法,是复杂系统的抽象。在软件工程领域,学者们也开始尝试将软件系统抽象为网络结构,即将软件系统的元素(包括模块、包、类、方法等)视为节点,元素之间的交互关系(包括依赖、调用等)视为连边,简称软件网络(software network)。早期研究成果已证实,软件网络中同样存在着“无标度”特性和“小世界”特性,说明软件网络也是复杂网络中典型的一种。因此,将复杂网络中节点重要性度量的方法引入软件网络,为识别软件系统中的关键类带来了一种新的视角。
在复杂网络中,存在一些“特殊节点”的节点。与其他节点相比,关键的(有影响的)节点包含更多的全局或局部网络信息。当网络中这部分节点失效时,将可能影响到整个网络。已有研究表明:在复杂网络中,如果10%左右的重要节点受到攻击时,将导致整个网络瘫痪。因此,确定网络节点的影响能力和识别有影响的节点具有重要的理论和现实意义。为此,提出一种软件网络中关键类识别的方法。
现有技术已有的编码器使用节点的度或直接使用节点的one-hot编码作为节点的初始特征输入,但只考虑了节点的少量局部信息。
现有技术已有的节点重要性排序方法有基于节点邻居的排序方法、基于路径的排序方法、基于特征向量的排序方法和基于节点移除和收缩的排序方法。以上方法在计算节点的重要性时,大部分是基于节点的局部信息,一部分基于全局信息的方法在真实的大规模网络中计算复杂度高。此外,以上方法都是建立在人工构建度量指标的基础上开展,还未有利用图神经网络来自动学习网络的全局结构信息,并将学习结果应用于软件系统的关键类识别研究。
发明内容
本发明针对现有技术的缺陷,提供了一种基于图神经网络的软件系统中关键类的识别方法,解决了现有技术中存在的缺陷。
为了实现以上发明目的,本发明采取的技术方案如下:
一种基于图神经网络的软件网络中关键类识别的方法,包括以下步骤:
A.解析软件代码源文件,构建加权网络模型,包括以下子步骤,
步骤A1,以Java语言开发的软件系统为例,运用Dependencyfinder工具对源代码编译后产生的.class文件、由源代码打包而成的.jar文件或者包含源代码的zip压缩包进行依赖关系扫描,并保存为XML文件;
步骤A2,从得到的XML文件中,提取源代码中类之间的各种依赖关系,并生成网络数据格式,具体的软件网络模型定义如下:
类级别软件网络CSN(Class-level Software Network)定义为一个有向加权网络CSN=(V,E,W),其中节点vi(vi∈V)代表软件系统的一个类或者接口,如果两个节点之间存在依赖关系,则它们之间存在一条连边eij(eij=(vi,vj)∈E),连边权重wij(wij=(vi,vj)∈W)表示连边eij的权值;在CSN的建模过程中,类节点依赖关系主要涉及下面三种:
(1)继承,假如类i与类j之间存在继承或接口实现关系,则它们对应的类节点vi和vj之间存在一条连边eij
(2)聚合,假如类i包含类j的属性,则它们对应的类节点vi和vj之间存在一条连边eij
(3)参数,假如类i中的方法调用了类j的方法,则它们对应的类节点vi和vj之间存在一条连边eij
在软件网络建模过程中使用类之间的依赖次数作为连接两个类节点边的权重,两个类之间每存在一次以上三种依赖关系,则连接两个类节点的边权重增加1,类节点之间的连边权重并不直接决定节点的重要性,而是代表了两个类之间的紧密程度;
B.利用网络嵌入方法,对加权软件网络中的节点进行学习,得到节点的嵌入向量,包括以下子步骤:
步骤B1,将网络中节点之间的连边关系通过偏向性随机游走转化为节点序列,并将这种序列类比为自然语言处理中的文本序列;
步骤B2,根据步骤B1得到的节点序列,通过词向量模型Skip-gram方法来学习网络节点的特征向量,即将网络中每个节点v转化为一个c维的表征向量Xv
Figure BDA0002627639110000041
C.构建基于图神经网络的排序模型,包括以下子步骤:
在软件网络CSN=(V,E,W)定义基础上,令N(v)={u∈V|(v,u)∈E)表示节点v的直接邻居节点集,
Figure BDA0002627639110000042
表示节点v通过网络嵌入学习方法获得的网络嵌入向量,c为向量维度。
Figure BDA0002627639110000043
表示目标节点v在模型第k层的隐含嵌入向量,d为隐含嵌入向量的维度,初始时,让
Figure BDA0002627639110000044
为了简化模型,本发明保持不同层中隐含嵌入向量的维度d一样。
步骤C1,构建一个编码器,通过图神经网络使用迭代更新模式,网络中每一个节点在迭代中都进行加权平均的领域聚合其邻居节点在上一层迭代中的嵌入向量,并与自身在上一层迭代中的嵌入向量相结合,得到新一层的嵌入向量,以此获得网络全局的隐藏特征。表示如下:
Figure BDA0002627639110000045
Figure BDA0002627639110000046
其中k表示当前层,
Figure BDA0002627639110000051
表示目标节点v的邻居节点在k-1层的嵌入向量,
Figure BDA0002627639110000052
为目标节点v的所有邻居节点k-1层嵌入向量的聚合表示,
Figure BDA0002627639110000053
表示目标节点v在当前第k层的嵌入向量,是由目标节点v在k-1层的嵌入向量
Figure BDA0002627639110000054
和其邻居节点在当前层聚合向量
Figure BDA0002627639110000055
通过COMBINE函数组合而成,σ是一个激活函数,如ReLU。
Figure BDA0002627639110000056
Figure BDA0002627639110000057
分别为节点v和u的加权度,即节点的所有连边的权值之和,表示为
Figure BDA0002627639110000058
Figure BDA0002627639110000059
为节点v的邻居节点u在第k-1层的嵌入向量。初始特征向量
Figure BDA00026276391100000510
L为迭代层数,权重矩阵
Figure BDA00026276391100000511
在编码器的最顶端设置一个跳跃连接层,在此选择对每一个节点在每一层产生的嵌入向量取均值作为最终嵌入向量,因此,最后节点v的嵌入向量可表示为:
Figure BDA00026276391100000512
zv为节点的最终嵌入向量,
Figure BDA00026276391100000513
表示目标节点v在当前第k层的嵌入向量,是由目标节点v在k-1层的嵌入向量
Figure BDA00026276391100000514
和其邻居节点在当前层聚合向量
Figure BDA00026276391100000515
通过COMBINE函数组合而成。
步骤C1运用一种改进的加权平均方法进行邻居节点的聚合处理,之所以使用节点的度作为权重处理,是因为节点的度计算检点,并且可以有效的描述节点在网络中的拓扑角色。使用这种聚合方法时,节点将会聚合更多拥有高权值连边的邻居节点的特征,而聚合低权值连边的邻居节点的特征将会减少,最终节点的特征向量将更加接近其拥有高权值连边的邻居节点。在编码器最顶端设置一个跳跃连接层主要目的是缓解因为节点在网络中位置的不同导致邻域聚合范围差异对邻域聚合效果造成的影响。
步骤C2,构建一个包含一个隐藏层的简单多层感知机(Multilayer Perceptron,MLP)的解码器,以编码器输出的节点嵌入向量Z为输入,隐藏层与输入层通过全连接,输出为f(WZ+b),W为连接系数,b是偏置,用LeakyReLU作为激活函数,最后节点转为标量yv,表示如下:
yv=LeakyReLU(Wzv+b);
其中yv为节点转化的标量,Wzv为嵌入向量的连接系数,b是偏置。
步骤C2中选用LeakyReLU作为激活函数,是因为该函数对负值的输入依然具有较小的梯度,可以缓解梯度消失等问题。
D.利用pairwise排序损失训练模型,以实现对网络中节点重要性排序,步骤如下:
对于节点对(vi,vj),假设他们的真实重要性分别为Ii、Ij,而模型学习到的值分别为yi和yj,则需要的是yij=yi-yj的相对排序顺序与Iij=Ii-Ij保持一致,可通过二元交叉熵代价函数Ci,j来推断yij,表示为:
Ci,j=-g(Iij)*logσ(yij)-(1-g(Iij))*log(1-σ(yij))
Figure BDA0002627639110000061
其中g(x)=1/(1+e-x),确保排序损失函数Loss最小。
节点对(vi,vj),真实重要性分别为Ii、Ij,模型学习到的值分别为yi和yj,相对排序顺序yij=yi-yj,相对排序顺序Iij=Ii-Ij,g(Iij)为期望输出,σ(yij)为神经元的实际输出值,Ci,j为二元交叉熵代价函数。
步骤D利用pairwise排序损失训练模型,是为了训练编码器中的聚合和组合参数,以及解码器中的连接系数和偏置,需要尽可能使得模型输出的节点标量值排序与采用节点收缩法得到的节点重要性排序一致。
进一步地,步骤A2中在构建类之间的加权软件网络时,运用类级别软件网络CSN定义一个有向网络,使用类之间的依赖次数作为连接两个边的权重。
进一步地,步骤B1中利用网络嵌入学习思想,在随机游走过程中考虑上一步游走节点对下一步游走的影响,使用两个参数返回概率p和远离概率q控制下一步游走的策略。
与现有技术相比,本发明的优点在于:
(1)利用复杂网络理论,将软件系统抽象为软件网络,再结合无监督网络节点嵌入学习以及邻域聚合的方式,构建一个编码-解码(Encoder-Decoder)框架,提取软件系统中类节点的表征向量。最后利用pairwise排序训练,实现网络中节点的重要性排序,从而实现软件系统中关键类的识别。(2)提出了一个改进的图自动编码器,对软件网络进行全局结构的嵌入学习,尽可能的保留了网络的全局结构的信息。(3)利用图神经网络来自动学习网络的全局结构信息,并将学习结果应用于软件系统的关键类识别。
附图说明
图1是本发明实施例软件网络中关键类识别的方法框架图;
图2是本发明实施例编码器的构建图;
图3是本发明实施例感知机结构图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下根据附图并列举实施例,对本发明做进一步详细说明。
实施例是选择以Java语言开发的软件系统作为研究对象,因为在模型训练过程中,由于真实的软件系统规模比较大,训练起来耗时较长,考虑到软件网络满足复杂网络基本特性,所以利用人工生成的复杂网络作为样本进行模型训练,并采用节点收缩法作为标注训练样本网络节点重要性的参考依据。最后将训练得到的模型用于真实软件系统的关键类识别,并采用网络鲁棒性指标来评价关键类识别的精度。
利用NetworkX1的最新版本,选取网络节点规模分别为50、100、200、300、400个节点,网络中度分布的幂指数为3,随机各生成1600个复杂网络用于训练,生成40个复杂网络用于测试,并重复上述过程10次,根据验证性能采用提前停止选择最佳模型。模型测试阶段中,选取两组开源项目数据集,第一组数据来自本发明作者自己从下载的软件项目Maven和Vuze,这两个软件数据中没有专家标注的关键类信息。第二组数据来自互联网公开的Ant-1.6.1和JMeter-2.0.1数据集,数据中含有专家已标注好的关键类信息,且已在文献中被采用,其中Ant中拥有10个专家识别的关键类,JMeter中拥有14个专家识别的关键类。
如图1所示,一种基于图神经网络的软件网络中关键类识别的方法,包括以下步骤:
A.利用开源工具解析软件代码源文件,构建加权网络模型,包括以下子步骤;
步骤A1,选择以Java语言开发的软件系统作为分析对象,通过Dependencyfinder工具对源代码编译后产生的.class文件、由源代码打包而成的.jar文件或者包含源代码的zip压缩包进行依赖关系扫描,并保存为XML文件,XML文件中存放的是DependencyFinder对于Java源代码的分析结果,以一种嵌套的结构来表示源代码中包、类和方法三个粒度元素的基本信息和元素之间的依赖关系。最外层的<package>标签表示包,<class>表示类,<feature>表示方法/字段,最内层的<outbound>和<inbound>标签分别表示依赖与被依赖关系。本发明使用自主开发的解析程序对解析的XML文件进行标签解析,从中提取软件类之间依赖关系,并保存为.net网络文件格式以便下游工作使用。
步骤A2,利用解析并提取源代码中类之间的各种依赖关系,并且根据类之间的依赖程度生成网络数据格式。
B.利用网络嵌入方法,对加权软件网络中的节点进行学习,得到节点的嵌入向量,包括以下子步骤:
步骤B1,利用Node2vec方法,将网络中节点之间的连边关系通过偏向性随机游走转化为节点序列,并将这种序列类比为自然语言处理中的文本序列;
步骤B2,根据步骤B1得到的节点序列,通过词向量模型Skip-gram方法来学习网络节点的特征向量,即将网络中每个节点v转化为一个c维的表征向量Xv
Figure BDA0002627639110000091
令u为随机游走的起始节点,ci表示游走过程中的第i步选择的游走节点,则有:
Figure BDA0002627639110000092
其中Z为标准化常数,αpq(t,x)为非标准化转移概率,通过参数p和q对随机游走进行引导。αpq(t,x)定义为:
Figure BDA0002627639110000093
其中dtx表示节点t和节点x的距离,dtx=0表示节点t和节点x是同一个节点,dtx=1表示节点x是节点t的邻居节点,dtx=2表示节点x与节点t没有直接关系。当p较大q较小时,随机游走偏向深度优先搜索,而当p较小q较大时,随机游走偏向广度优先搜索。本发明方法在四个真实软件网络上可以取得最好效果,说明在下p=1,q=3的参数组合下初始网络嵌入可以较好的捕捉软件网络中的结构特性。
通过偏向性随机游走获得的节点序列可以类比为自然语言处理中的上下文,网络嵌入学习的目标是给定所有节点,使得其邻节点出现的概率最大,表示为:
Figure BDA0002627639110000101
其中N(u)∈V为节点u的邻域节点集合,
Figure BDA0002627639110000102
为节点u的特征向量,则由特征向量
Figure BDA0002627639110000103
得到邻域N(u)的概率为
Figure BDA0002627639110000104
定义为:
Figure BDA0002627639110000105
在此基础上,定义节点的特征向量在此节点作为源节点和邻域节点具有对称性,即节点在作为源节点和邻域节点计算时使用同一套特征向量。在给定节点u的情况下,生成节点ni的条件概率可以通过对节点特征向量的内积进行SoftMax运算得到:
Figure BDA0002627639110000106
可得到最终优化函数:
Figure BDA0002627639110000107
Node2vec使用负采样技术计算式中的
Figure BDA0002627639110000108
部分,并使用随机梯度下降进行训练,最终得到每一个节点的特征向量。这些特征向量将作为下一节中图神经网络方法的初始输入。
C.构建基于图神经网络的排序模型,采用邻域聚合的方式设计一个编码器Encoder,而解码器Decoder设计成一个多层感知机。以网络嵌入学习得到的向量为输入,编码器Encoder利用网络结构将每个节点进一步编码成一个特征向量,该特征向量可捕获节点的重要结构信息。译码器Decoder再将每个节点的特征向量进一步转化为标量,然后利用pairwise排序损失训练模型,以实现对网络中节点重要性排序。包括以下子步骤,
步骤C1,构建一个编码器(图2),通过GNN使用迭代更新模式,网络中每一个节点在迭代中都进行加权平均的领域聚合其邻居节点在上一层迭代中的嵌入向量,并与自身在上一层迭代中的嵌入向量相结合,得到新一层的嵌入向量,以此获得网络全局的隐藏特征。
在软件网络CSN=(V,E)定义基础上,令N(v)={u∈V|(v,u)∈E)表示节点v的直接邻居节点集,
Figure BDA0002627639110000111
表示节点v通过网络嵌入学习方法获得的网络嵌入向量,c为向量维度。
Figure BDA0002627639110000112
表示目标节点v在模型第k层的隐含嵌入向量,d为隐含嵌入向量的维度,初始时,让
Figure BDA0002627639110000113
为了简化模型,本文保持不同层中隐含嵌入向量的维度d一样。
为了让网络中的节点获得网络全局结构的隐藏特征,需要将每个节点的特征与网络中其它节点的特征相结合。GNN使用迭代更新模式完成这一目标,网络中每一个节点在迭代中都会聚合(Aggregate)其邻居节点在上一层迭代中的嵌入向量,并与自身在上一层迭代中的嵌入向量相结合(Combine),得到新一层的嵌入向量。表示如下:
Figure BDA0002627639110000114
Figure BDA0002627639110000115
其中k表示当前层,
Figure BDA0002627639110000116
表示目标节点v的邻居节点在k-1层的嵌入向量,
Figure BDA0002627639110000117
为目标节点v的所有邻居节点k-1层嵌入向量的聚合表示,AGGREAGE为网络中局部结点的信息聚合函数,
Figure BDA0002627639110000118
表示目标节点v在当前第k层的嵌入向量,是由目标节点v在k-1层的嵌入向量
Figure BDA0002627639110000119
和其邻居节点在当前层聚合向量
Figure BDA00026276391100001110
通过COMBINE函数组合而成,σ是一个激活函数,如ReLU。
常见的AGGREAGE函数有求和(sum)[88]、平均值(mean)和最大值(max)等,这些方法通常不考虑节点连边的权值,而本发明使用的软件网络为加权网络,因此,在邻居节点嵌入向量聚合过程中,本发明提出一种改进的加权平均方法进行邻居节点的聚合处理,定义为:
Figure BDA0002627639110000121
其中
Figure BDA0002627639110000122
Figure BDA0002627639110000123
分别为节点v和u的加权度,即节点的所有连边的权值之和,表示为
Figure BDA0002627639110000124
Figure BDA0002627639110000125
为节点v的邻居节点u在第k-1层的嵌入向量。之所以采用节点的度来作为权重处理,是因为节点度计算起来简单,且可有效地描述节点在网络中的拓扑角色。使用这种聚合方法时,节点将会聚合更多拥有高权值连边的邻居节点的特征,而聚合低权值连边的邻居节点的特征将会减少,最终节点的特征向量将更加接近其拥有高权值连边的邻居节点。这与本发明对于软件网络边权的定义一致,即节点间的连边拥有高权值说明节点间联系的紧密程度更高。
COMBINE函数负责组合目标节点的邻居节点在前一层嵌入向量的聚合结果与目标节点自身在前一层生成的嵌入向量,得到节点在本层的新嵌入向量。常用函数有求和[88]、拼接[106]和门控循环单位(Gated Recurrent Units,GRU)[85]等。在此本发明采取拼接作为组合函数,即以节点v的邻居节点在第k层的聚合向量
Figure BDA0002627639110000126
为输入,而节点v自身在第k-1层的嵌入向量
Figure BDA0002627639110000127
为隐含状态,于是节点v在第k层的新嵌入向量可表示为:
Figure BDA0002627639110000128
在编码器的最顶端设置了一个跳跃连接层,将模型前L层中每一层产生的嵌入向量都连接到跳跃连接层进行聚合,聚合方式可以选择最大池化、拼接或递归神经网络LSTM等。本发明在此选择对每一个节点在每一层产生的嵌入向量取均值作为最终嵌入向量,因此跳跃连接层相当于一个平均池化操作的聚合层,该操作简单而且不会引入任何参数学习任务。设置跳跃连接层的主要目的是缓解因为节点在网络中位置的不同导致邻域聚合范围差异对邻域聚合效果造成的影响。因此,最后节点v的嵌入向量可表示为:
Figure BDA0002627639110000131
步骤C2,构建一个包含一个隐藏层的简单三层感知机(Multilayer Perceptron,MLP)的解码器(图3),以编码器输出的节点嵌入向量Z为输入,隐藏层与输入层通过全连接,输出为f(WZ+b),W为连接系数,b是偏置,函数f可以是常用的sigmoid函数、tanh函数和ReLU函数。近年来,ReLU函数的改进方法LeakyReLU函数得到了广泛的应用,该函数对负值的输入依然具有较小的梯度,可以缓解梯度消失等问题,因此,本发明选用LeakyReLU作为激活函数,最后节点转为为标量yv,表示如下:
yv=LeakyReLU(Wzv+b);
D.利用pairwise排序损失训练模型,以实现对网络中节点重要性排序,步骤如下:
对于节点对(vi,vj),假如他们的真实重要性分别为Ii、Ij,而模型学习到的值分别为yi和yj,则我们需要的是yij=yi-yj的相对排序顺序与Iij=Ii-Ij保持一致,可通过二元交叉熵代价函数Ci,j来推断yij,表示为:
Ci,j=-g(Iij)*logσ(yij)-(1-g(Iij))*log(1-σ(yij))
Figure BDA0002627639110000132
其中g(x)=1/(1+e-x),确保排序损失函数Loss最小。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。

Claims (3)

1.一种基于图神经网络的软件网络中关键类识别的方法,其特征在于,包括以下步骤:
A.解析软件代码源文件,构建加权网络模型,包括以下子步骤,
步骤A1,以Java语言开发的软件系统为例,运用Dependencyfinder工具对源代码编译后产生的.class文件、由源代码打包而成的.jar文件或者包含源代码的zip压缩包进行依赖关系扫描,并保存为XML文件;
步骤A2,从得到的XML文件中,提取源代码中类之间的各种依赖关系,并生成网络数据格式,具体的软件网络模型定义如下:
类级别软件网络CSN定义为一个有向加权网络CSN=(V,E,W),其中节点vi(vi∈V)代表软件系统的一个类或者接口,如果两个节点之间存在依赖关系,则它们之间存在一条连边eij(eij=(vi,vj)∈E),连边权重wij(wij=(vi,vj)∈W)表示连边eij的权值;在CSN的建模过程中,类节点依赖关系主要涉及下面三种:
(1)继承,假如类i与类j之间存在继承或接口实现关系,则它们对应的类节点vi和vj之间存在一条连边eij
(2)聚合,假如类i包含类j的属性,则它们对应的类节点vi和vj之间存在一条连边eij
(3)参数,假如类i中的方法调用了类j的方法,则它们对应的类节点vi和vj之间存在一条连边eij
在软件网络建模过程中使用类之间的依赖次数作为连接两个类节点边的权重,两个类之间每存在一次以上三种依赖关系,则连接两个类节点的边权重增加1,类节点之间的连边权重并不直接决定节点的重要性,而是代表了两个类之间的紧密程度;
B.利用网络嵌入方法,对加权软件网络中的节点进行学习,得到节点的嵌入向量,包括以下子步骤:
步骤B1,将网络中节点之间的连边关系通过偏向性随机游走转化为节点序列,并将这种序列类比为自然语言处理中的文本序列;
步骤B2,根据步骤B1得到的节点序列,通过词向量模型Skip-gram方法来学习网络节点的特征向量,即将网络中每个节点v转化为一个c维的表征向量
Figure FDA0002627639100000021
Figure FDA0002627639100000022
C.构建基于图神经网络的排序模型,包括以下子步骤:
在软件网络CSN=(V,E,W)定义基础上,令N(v)={u∈V|(v,u)∈E)表示节点v的直接邻居节点集,
Figure FDA0002627639100000023
表示节点v通过网络嵌入学习方法获得的网络嵌入向量,c为向量维度;
Figure FDA0002627639100000024
表示目标节点v在模型第k层的隐含嵌入向量,d为隐含嵌入向量的维度,初始时,让
Figure FDA0002627639100000025
为了简化模型,本发明保持不同层中隐含嵌入向量的维度d一样;
步骤C1,构建一个编码器,通过图神经网络使用迭代更新模式,网络中每一个节点在迭代中都进行加权平均的领域聚合其邻居节点在上一层迭代中的嵌入向量,并与自身在上一层迭代中的嵌入向量相结合,得到新一层的嵌入向量,以此获得网络全局的隐藏特征;表示如下:
Figure FDA0002627639100000026
Figure FDA0002627639100000027
其中k表示当前层,
Figure FDA0002627639100000028
表示目标节点v的邻居节点在k-1层的嵌入向量,
Figure FDA0002627639100000029
为目标节点v的所有邻居节点k-1层嵌入向量的聚合表示,
Figure FDA00026276391000000210
表示目标节点v在当前第k层的嵌入向量,是由目标节点v在k-1层的嵌入向量
Figure FDA0002627639100000031
和其邻居节点在当前层聚合向量
Figure FDA0002627639100000032
通过COMBINE函数组合而成,σ是一个激活函数,如ReLU;
Figure FDA0002627639100000033
Figure FDA0002627639100000034
分别为节点v和u的加权度,即节点的所有连边的权值之和,表示为
Figure FDA0002627639100000035
Figure FDA0002627639100000036
为节点v的邻居节点u在第k-1层的嵌入向量;初始特征向量
Figure FDA0002627639100000037
L为迭代层数,权重矩阵
Figure FDA0002627639100000038
在编码器的最顶端设置一个跳跃连接层,在此选择对每一个节点在每一层产生的嵌入向量取均值作为最终嵌入向量,因此,最后节点v的嵌入向量表示为:
Figure FDA0002627639100000039
zv为节点的最终嵌入向量,
Figure FDA00026276391000000310
表示目标节点v在当前第k层的嵌入向量,是由目标节点v在k-1层的嵌入向量
Figure FDA00026276391000000311
和其邻居节点在当前层聚合向量
Figure FDA00026276391000000312
通过COMBINE函数组合而成;
步骤C2,构建一个包含一个隐藏层的简单多层感知机的解码器,以编码器输出的节点嵌入向量Z为输入,隐藏层与输入层通过全连接,输出为f(WZ+b),用LeakyReLU作为激活函数,最后节点转为为标量yv,表示如下:
yv=LeakyReLU(Wzv+b);
其中yv为节点转化的标量,Wzv为嵌入向量的连接系数,b是偏置;
D.利用pairwise排序损失训练模型,以实现对网络中节点重要性排序,步骤如下:
对于节点对(vi,vj),假设他们的真实重要性分别为Ii、Ij,而模型学习到的值分别为yi和yj,则需要的是yij=yi-yj的相对排序顺序与Iij=Ii-Ij保持一致,通过二元交叉熵代价函数Ci,j来推断yij,表示为:
Ci,j=-g(Iij)*logσ(yij)-(1-g(Iij))*log(1-σ(yij))
Figure FDA0002627639100000041
其中g(x)=1/(1+e-x),确保排序损失函数Loss最小;
节点对(vi,vj),真实重要性分别为Ii、Ij,模型学习到的值分别为yi和yj,相对排序顺序yij=yi-yj,相对排序顺序Iij=Ii-Ij,g(Iij)为期望输出,σ(yij)为神经元的实际输出值,Ci,j为二元交叉熵代价函数。
2.根据权利要求1所述的软件网络中关键类识别的方法,其特征在于:步骤A2中在构建类之间的加权软件网络时,运用类级别软件网络CSN定义一个有向网络,使用类之间的依赖次数作为连接两个边的权重。
3.根据权利要求1所述的软件网络中关键类识别的方法,其特征在于:步骤B1中利用网络嵌入学习思想,在随机游走过程中考虑上一步游走节点对下一步游走的影响,使用两个参数返回概率p和远离概率q控制下一步游走的策略。
CN202010801717.1A 2020-08-11 2020-08-11 一种基于图神经网络的软件系统中关键类的识别方法 Active CN111913702B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010801717.1A CN111913702B (zh) 2020-08-11 2020-08-11 一种基于图神经网络的软件系统中关键类的识别方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010801717.1A CN111913702B (zh) 2020-08-11 2020-08-11 一种基于图神经网络的软件系统中关键类的识别方法

Publications (2)

Publication Number Publication Date
CN111913702A true CN111913702A (zh) 2020-11-10
CN111913702B CN111913702B (zh) 2022-04-01

Family

ID=73283855

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010801717.1A Active CN111913702B (zh) 2020-08-11 2020-08-11 一种基于图神经网络的软件系统中关键类的识别方法

Country Status (1)

Country Link
CN (1) CN111913702B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113111224A (zh) * 2021-03-17 2021-07-13 中山大学 一种基于拓扑感知文本表征的网络嵌入学习方法
CN113469450A (zh) * 2021-07-14 2021-10-01 润联软件系统(深圳)有限公司 一种数据分类方法、装置、计算机设备及存储介质
CN113708891A (zh) * 2021-08-12 2021-11-26 电子科技大学 一种采用深度学习cs译码器的通信系统
CN114860246A (zh) * 2022-03-29 2022-08-05 湖北大学 一种图中图卷积神经网络的软件系统中类交互关系预测方法
CN115314398A (zh) * 2022-09-29 2022-11-08 南昌航空大学 一种评估异质信息网络关键节点的方法
CN115794196A (zh) * 2023-02-13 2023-03-14 中科南京软件技术研究院 EdgeX的关键软件识别方法、装置、设备及存储介质
CN117311806A (zh) * 2023-11-30 2023-12-29 南昌航空大学 基于加权有向耦合网络的软件结构风险识别方法与装置
CN117315381A (zh) * 2023-11-30 2023-12-29 昆明理工大学 一种基于二阶有偏随机游走的高光谱图像分类方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105045574A (zh) * 2015-06-24 2015-11-11 广东电网有限责任公司电力科学研究院 一种基于复杂网络故障传播的软件关键函数辨识方法
CN108536471A (zh) * 2018-03-21 2018-09-14 北京航空航天大学 一种基于复杂网络的软件结构重要模块识别方法
CN110110529A (zh) * 2019-05-20 2019-08-09 北京理工大学 一种基于复杂网络的软件网络关键节点挖掘方法
US20200160154A1 (en) * 2018-11-15 2020-05-21 Element Ai Inc. Systems and methods for assessing item compatibility

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105045574A (zh) * 2015-06-24 2015-11-11 广东电网有限责任公司电力科学研究院 一种基于复杂网络故障传播的软件关键函数辨识方法
CN108536471A (zh) * 2018-03-21 2018-09-14 北京航空航天大学 一种基于复杂网络的软件结构重要模块识别方法
US20200160154A1 (en) * 2018-11-15 2020-05-21 Element Ai Inc. Systems and methods for assessing item compatibility
CN110110529A (zh) * 2019-05-20 2019-08-09 北京理工大学 一种基于复杂网络的软件网络关键节点挖掘方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
NANXUN QIN等: "COP9 signalosome: Discovery, conservation,activity, and function", 《JOURNAL OF INTEGRATIVE PLANT BIOLOGY》 *
PAN W F等: "Identiying key classes in objet-oriented software using generalized k-core decomposition", 《FUTURE GENERATION COMPUTER SYSTEM》 *
周燕萍等: "基于pairwise-Given-MF的准正交空时分组码译码算法研究", 《通信技术》 *

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113111224A (zh) * 2021-03-17 2021-07-13 中山大学 一种基于拓扑感知文本表征的网络嵌入学习方法
CN113111224B (zh) * 2021-03-17 2023-08-18 中山大学 一种基于拓扑感知文本表征的网络嵌入学习方法
CN113469450B (zh) * 2021-07-14 2024-05-10 华润数字科技有限公司 一种数据分类方法、装置、计算机设备及存储介质
CN113469450A (zh) * 2021-07-14 2021-10-01 润联软件系统(深圳)有限公司 一种数据分类方法、装置、计算机设备及存储介质
CN113708891A (zh) * 2021-08-12 2021-11-26 电子科技大学 一种采用深度学习cs译码器的通信系统
CN114860246A (zh) * 2022-03-29 2022-08-05 湖北大学 一种图中图卷积神经网络的软件系统中类交互关系预测方法
CN115314398A (zh) * 2022-09-29 2022-11-08 南昌航空大学 一种评估异质信息网络关键节点的方法
CN115314398B (zh) * 2022-09-29 2022-12-23 南昌航空大学 一种评估异质信息网络关键节点的方法
CN115794196A (zh) * 2023-02-13 2023-03-14 中科南京软件技术研究院 EdgeX的关键软件识别方法、装置、设备及存储介质
CN117315381A (zh) * 2023-11-30 2023-12-29 昆明理工大学 一种基于二阶有偏随机游走的高光谱图像分类方法
CN117315381B (zh) * 2023-11-30 2024-02-09 昆明理工大学 一种基于二阶有偏随机游走的高光谱图像分类方法
CN117311806B (zh) * 2023-11-30 2024-03-29 南昌航空大学 基于加权有向耦合网络的软件结构风险识别方法与装置
CN117311806A (zh) * 2023-11-30 2023-12-29 南昌航空大学 基于加权有向耦合网络的软件结构风险识别方法与装置

Also Published As

Publication number Publication date
CN111913702B (zh) 2022-04-01

Similar Documents

Publication Publication Date Title
CN111913702B (zh) 一种基于图神经网络的软件系统中关键类的识别方法
CN113641586B (zh) 软件源代码缺陷检测方法、系统、电子设备及储存介质
CN112541180B (zh) 一种基于语法特征和语义特征的软件安全漏洞检测方法
CN111312329B (zh) 基于深度卷积自动编码器的转录因子结合位点预测的方法
CN113342318B (zh) 基于多视图代码特征的细粒度代码自动生成方法及系统
US20200167659A1 (en) Device and method for training neural network
Wang et al. Knowledge transfer for structural damage detection through re-weighted adversarial domain adaptation
KR102456987B1 (ko) 건물 외벽의 균열을 탐지하는 방법
CN110162972B (zh) 一种基于语句联合编码深度神经网络的uaf漏洞检测方法
CN113904844B (zh) 基于跨模态教师-学生网络的智能合约漏洞检测方法
CN109376535A (zh) 一种基于智能化符号执行的漏洞分析方法及系统
CN117290238B (zh) 基于异质类关系图神经网络的软件缺陷预测方法和系统
CN118013529A (zh) 基于人工智能实现代码漏洞识别处理的方法、装置、处理器及其计算机可读存储介质
Çiftçioğlu RAGN-L: a stacked ensemble learning technique for classification of fire-resistant columns
CN117725592A (zh) 一种基于有向图注意力网络的智能合约漏洞检测方法
CN116595537A (zh) 一种基于多模态特征的生成式智能合约的漏洞检测方法
CN116720185A (zh) 一种代码的多维图张量融合表示与嵌入方法
Şahin The role of vulnerable software metrics on software maintainability prediction
CN111562943A (zh) 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置
Duan et al. A structure-aware framework for learning device placements on computation graphs
CN117971355B (zh) 基于自监督学习的异构加速方法、装置、设备及存储介质
CN118410498B (zh) 一种细粒度混合语义漏洞检测方法及系统
Wu Robustness evaluation of deep neural networks with provable guarantees
Zhao et al. Joining datasets via data augmentation in the label space for neural networks
CN118709191A (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