一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于复杂网络和图神经网络的软件缺陷预测方法

2022-08-13 14:03:41 来源:中国专利 TAG:


1.本发明涉及软件缺陷领域,具体涉及一种基于复杂网络和图神经网络的软件缺陷预测方法


背景技术:

2.软件和我们的生活息息相关,软件质量的保障是非常重要的一环。而软件缺陷预测能够及时的发现软件中的缺陷,软件缺陷预测的关键点之一就是软件缺陷预测模型的设计。数据挖掘技术的发展直接影响着软件缺陷预测模型。如机器学习中的算法,利用svm、决策树和bp等技术直接利用软件缺陷度量元来进行缺陷预测。还有深度学习中的算法,如cnn、rnn和lstm等,希望通过深度学习中的算法来学习软件中更深层次的特征信息,并利用这些信息来进行软件缺陷预测。但是上述算法都只是将软件中的每个模块分开来进行处理,并没有考虑模块之间的联系。所以从复杂网络的角度来看待软件,即考虑模块本身的特征信息,又考虑模块之间的联系。为了更好地得到模块之间的联系,决定将类视为需要研究的模块。这样就将软件映射为一个图结构,该图结构以类为节点,类的软件缺陷度量元作为节点的属性,类之间的联系为边。考虑到软件是由各个功能组成的,而每个功能由多个类共同实现。所以希望先通过复杂网络中的社区检测算法对软件的图结构进行分解,得到多个子图,子图之间的节点联系少,子图内的节点联系紧密。最后将这些子图输入到图神经网络模型中,为每个类贴上标签,这样就能够得到有缺陷的类。


技术实现要素:

3.要解决的技术问题
4.为解决当前软件缺陷预测模型忽略软件的内部结构的问题,本发明提出一种基于复杂网络和图神经网络的软件缺陷预测方法。
5.技术方案
6.一种基于复杂网络和图神经网络的软件缺陷预测方法,其特征在于,步骤如下:
7.步骤1:将软件映射为图结构,通过静态代码分析工具对软件的源代码进行分析,从源代码中获取类之间依赖关系,构建一个以类之间的依赖为边,类为节点的图结构;
8.步骤2:获取节点的属性,将节点本身的缺陷度量元看作是节点的属性,得到一个包含节点属性的图结构;
9.步骤3:将软件的图结构分解为多个子图,通过复杂网络中的社区划分算法将一个复杂的软件图结构划分为以社区为单位的多个子图;
10.步骤4:构建图神经网络模型,根据步骤3可以得知模型的输入是多个子图以及子图的结构信息,构建模型时每个子图对应一个图卷积层,子图之间没有信息的传递,每个子图都经过4次图卷积,会得到5层节点表征向量,其中包括一层节点软件缺陷度量元和四层图卷积特征信息,每一层的节点表征向量经过一个多层感知机来进行缺陷预测,则每个节点都会有5个结果,给每个结果一个权重,再将这5个结果相加得到节点最后分类结果;
11.步骤5:训练图神经网络模型,软件中已知的类和其相应的标签输入到步骤4构建的图神经网络模型中,将得到的结果和真实结果经过交叉熵损失函数计算,并利用梯度下降算法来训练模型中设置的可训练参数,最终得到一个训练好的图神经网络模型;
12.步骤6:通过模型进行预测,将需要进行测试的类输入到模型中,模型将会返回一个是否有缺陷的标签。
13.有益效果
14.(1)从复杂网络的角度来对软件进行处理,将软件抽象为一个图结构,考虑到软件源代码中数据的流动与类之间依赖相关,将类之间的依赖视为图的边,类作为图结构中的节点,并且将类的软件缺陷度量元作为节点的属性,本发明即考虑了软件的图结构信息,又考虑了节点本身的软件缺陷信息;
15.(2)进一步简化软件的图结构,通过复杂网络中的社区划分算法将软件的图结构划分为多个子图,子图之间的联系较少,子图内的节点联系紧密;
16.(3)构建一个图神经网络模型来学习子图的结构信息,本图神经网络模型能够同时输入多个子图,每个子图都经过多次图卷积,为了利用好所有的特征向量,决定将每层的特征信息都用于预测,并且给予每一层的结果一个权重并相加得到最后的结果。
17.(4)本发明提出的软件缺陷预测方法结合结构信息和缺陷度量元信息来进行软件缺陷预测,解决了当前模型忽略软件结构信息的问题。
附图说明
18.图1基于复杂网络和图神经网络的软件缺陷预测方法的流程图
19.图2图神经网络模型图
20.图3软件的图结构
21.图4软件的子图
22.图5实验结果图
具体实施方式
23.现结合实例、附图对本发明作进一步描述:
24.本发明提出一种基于复杂网络和图神经网络的软件缺陷预测方法,本方法的流程图如图1所示,在本发明的本实施例中,软件缺陷预测方法包括以下步骤:
25.步骤1:将软件映射为图结构,通过静态代码分析工具对软件的源代码进行分析,从源代码中获取类之间依赖关系,构建一个以类之间的依赖为边,类为节点的图结构。
26.其中,在本实施例中,步骤1具体包括:
27.步骤1-1:根据understand静态代码分析工具对软件的源代码进行分析,得到源代码中类依赖关系,并将其输出为csv文件;
28.步骤1-2:读取csv文件,将文件中的类名看作软件中的节点,并用一个一维数组v来存储软件中的节点,将文件中的类依赖关系看作软件的边,并用邻接矩阵a来存储软件中的边;
29.步骤1-3:将软件的图结构记为g(v,a)。
30.其中,软件会存在一些孤立的点,与其它的节点没有联系,在进行预测时就不考虑
它的结构信息。
31.步骤2:获取节点的缺陷度量元信息作为节点本身的属性,用一个二维数组x来存储节点的属性,其中第几行表示软件图结构中的第几个节点,每一列都是度量元中的一个特征信息,软件用图g(v,a,x)来表示。
32.在本实施例中,选择软件缺陷预测中的ck度量元作为节点的属性。
33.步骤3:通过复杂网络中的社区划分算法将软件图结构进一步简化,软件的图结构g(v,a,x)由多个子图组成,子图的表示如下gi(vi,ai,xi),vi、ai和xi分别表示子图中的节点,边的邻接矩阵,节点的软件缺陷度量元。
34.在本实施例中,使用louvain算法实现对软件图结构的划分。
35.步骤4:构建一个图神经网络模型如图2所示,从步骤3可以得知模型的输入将是多个子图以及子图中的图结构信息,针对输入数据来构建图神经网络模型,通过构建的模型将会给输入的类一个值0或者1,0表示没有缺陷,1表示有缺陷。
36.其中,在本实施例中,步骤4具体包括:
37.步骤4-1:图神经网络模型的输入设置为多个子图,软件的图结构g={g1,g2,...,gn};
38.步骤4-2:为每个子图都设置一个图卷积层graph convolutional layer,图卷积层由节点聚合函数aggregation和非线性变换relu组成,通过图卷积层来更新每个节点的表征向量,每个子图之间的图卷积过程互不干扰。
39.步骤4-3:让每个子图都经过4层图卷积,这样将会得到5层节点的表征向量,其中包括一层节点软件缺陷度量元和四层图卷积特征信息,每一层表征向量由如下公式表示:
[0040][0041][0042]
其中,l
l
表示第l层的所有节点的表征向量,表示第l次图卷积后,第i个子图的所有节点的表征向量,为第i个子图的软件缺陷度量元xi,num_subgraph表示一个软件的所有子图个数,num_gcn表示图卷积层的层数,新的表征向量由该子图上一层的表征向量和其邻接矩阵ai输入到图卷积层中得到,cat函数把所有子图的节点表征向量拼接为一个整体,gcn为步骤4-2设置的图卷积层;
[0043]
步骤4-4:接下来要对5层节点表征向量进行预测,每一层都通过mlp进行预测,并为每一层的结果都设置一个权重,最后相加,具体公式如下:
[0044][0045]
其中,wj是一个可学习参数,初始值设置为mlp为多层感知机,每一层表征向量都设置一个mlp,l为每一层的表征向量由公式(1)可得,j表示第几层,num_gcn表示图卷积层的层数,out表示节点经过模型后得到的标签。
[0046]
在本实施例中,节点的聚合函数是通过对相邻节点求和而得。
[0047]
步骤5:训练图神经网络模型,软件中已知的类和其相应的标签输入到步骤4构建
的图神经网络模型中,将得到的结果和真实结果经过交叉熵损失函数计算,并利用梯度下降算法来训练模型中设置的可训练参数,最终得到一个训练好的图神经网络模型。
[0048]
其中,在本实施例中,步骤5的具体步骤:
[0049]
步骤5-1:获取软件中已知标签的类,使用下采样算法对这些数据进行处理,得到一个平衡数据集d;
[0050]
步骤5-2:对模型进行多次迭代训练,每次迭代都先打乱平衡数据集d的顺序得到数据集d',将数据集d'输入到模型中,利用模型输出的标签和真实标签通过交叉熵损失函数计算得到值,再通过梯度下降算法返回去修改那些可训练参数。
[0051]
其中,对数据进行类不平衡处理的下采样算法采用的是nearmiss算法。
[0052]
步骤6:通过模型进行预测,将需要进行测试的类输入到模型中,模型将会返回一个是否有缺陷的标签。
[0053]
下面使用tera-promise数据集中的ant、camel、lucene、synapse、velocity和ivy项目来验证本发明的软件缺陷预测方法的可行性。首先通过步骤1将软件映射为图结构,可得到图3,图中红色的节点为有缺陷的节点,绿色和蓝色的节点为无缺陷节点,绿色节点是通过nearmiss算法得到。通过步骤2,每个节点得到相应的属性。通过步骤3可得图4,软件被分解为多个子图。然后训练已经构建好的图神经网络,如步骤5所介绍的方法,利用nearmiss算法对数据集进行类不平衡处理,将得到的数据打乱分为10份,其中9份用于训练模型,1份用来验证。实验的结果如图5所示,图中三种颜色红、蓝、绿分别为评价指标准确率、f1值、mcc,行为所有项目评价指标的平均值,列表示不同的方法,如svm、bp、gin以及本发明提出的方法com_gin_mlp;从图中可以看多本发明提出的方法缺陷能够从软件图结构中找到有用的特征信息。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献