首页 / 专利库 / 计算机网络 / 软件缺陷 / 一种基于图卷积神经网络对软件缺陷预测方法

一种基于图卷积神经网络软件缺陷预测方法

阅读:715发布:2020-05-11

专利汇可以提供一种基于图卷积神经网络软件缺陷预测方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于图 卷积神经网络 的 软件 缺陷 预测方法,利用GCN 算法 训练模型对输入的代码文件进行缺陷类型的预测。本发明通过Bert模型将软件的源代码文件进行特征提取,并通过构建抽象语法树实现了源代码中的文件之间的关联,然后使用关联算法Apriori将代码中可能具有缺陷传递的文件进行关联,最后将源文件的 特征向量 与特征向量之间的关联关系作为邻接矩阵作为输入,实现了对GCN模型的训练。当判断 软件代码 文件是否存在缺陷时,将代码文件自动转化为其对应的特征向量向量作为模型的输入,GCN模型输出代码文件可能存在缺陷,从而大大减少了测试人员的工作量。,下面是一种基于图卷积神经网络软件缺陷预测方法专利的具体信息内容。

1.一种基于图卷积神经网络软件缺陷预测方法,其特征在于,具体操作步骤如下:
步骤1,将原始数据集复制为相同的两份,分别命名为data1、data2;
步骤2,将data1中的数据文件进行遍历读取,然后将文件中的数据进行格式化处理后保存到文件夹Pro-data1中;
步骤3,Pro-data1文件夹下的全部文件进行一次备份作为训练集;
步骤4,将步骤2中Pro-data1文件夹下的所有文件中的内容整合到文件total_data.txt中,形成Bert模型训练集数据;
步骤5,调用Embedding中流行的Bert模型,并初始化Bert模型权重参数;
步骤6,使用步骤4中total_data.txt中的数据优化步骤5中构建的Bert模型参数,生成最终的优化Bert模型;
步骤7,依次读取步骤3中训练集文件夹下的文件内容并输入到步骤6中构建的优化Bert模型中,然后对文件内容中每一词汇产生的特征向量进行相加,最后建立一张文件名、特征向量、缺陷标签的映射关系表table1;
步骤8,构建正则表达式对data2数据集中源文件内容进行提取,然后通过语法解析对data2项目源文件进行构建语法树,分析语法树中不同文件的调用关系,并将文件之间调用关系以邻接矩阵的方式存储为matrix1;
步骤9,依照步骤7中文件与特征向量的映射表与步骤8中形成的文件调用关系邻接矩阵分析特征向量之间的调用关系,并将调用关系存储为matrix2;
步骤10,对步骤7中产生的特征向量采用关联算法Apriori进行处理,通过关联算法判断特征向量之间是否存在因果关系,若存在因果关系,则在步骤9中特征向量关系矩阵matrix2中进行记录,不存在则不进行记录;
步骤11,构建GCN模型,并初始化模型中的参数;
步骤12,将步骤7中产生的特征向量和步骤9中的matrix2作为特征向量之间的拓扑信息输入到GCN模型中,然后训练GCN模型参数,得到训练好的GCN模型用于代码的缺陷预测;
步骤13,对软件具有缺陷的源文件进行读取,并采用步骤7中的方式形成表征测试集文件的特征向量,然后输入步骤12中训练好的GCN模型;GCN模型输出代码缺陷类型的预测结果。
2.根据权利要求1所述的基于图卷积神经网络的软件缺陷预测方法,其特征在于,步骤
13所述代码缺陷类型包括词法缺陷、语法缺陷、语义缺陷、可维护性缺陷四大类。
3.根据权利要求1所述的基于图卷积神经网络的软件缺陷预测方法,其特征在于,步骤
6中采用基于Embedding的方法,将项目源文件用特征向量表示,具体步骤如下:
步骤6.1,下载安装python第三方库Spacy;
步骤6.2,使用Spacy,并调用Bert模型;
步骤6.3,初始化Bert模型权重参数,使其本身具有一定语义理解能
步骤6.4,向步骤6.3中的Bert模型中加载步骤4中total_data.txt数据文件,开始对Bert模型的权重参数进行微调;
步骤6.5,保存训练完成的Bert模型。
4.根据权利要求1所述的基于图卷积神经网络的软件缺陷预测方法,其特征在于,步骤
7中采用基于Bert的方法,将项目源文件用特征向量表示,具体步骤如下:
步骤7.1,依次读取步骤3中训练集文件夹下的文件,并将文件中的缺陷标签与文件名保存到table1的一行中,最后为table1建立一列空白列;
步骤7.2,将步骤7.1中的读取到的文件内容以空格符为间隔,依次输入步骤6中的Bert模型中,输出对应字符串的字符向量;
步骤7.3,将步骤7.2每一个文件中输出的字符向量进行相加,最后形成一个表示该文件的特征向量;
步骤7.4,将步骤7.3中形成的特征向量追加到步骤7.1形成的table1中与之文件名对应空白单元格中。
5.根据权利要求1所述的基于图卷积神经网络的软件缺陷预测方法,其特征在于,步骤
8中采用基于抽象语法树的方式查看文件之间的调用关系,具体步骤如下:
步骤8.1,读取步骤7中构建的table1中的文件名;
步骤8.2,构建以步骤8.1中读取的文件名为行索引和列索引的邻接矩阵,将用其表示文件之间的调用关系,此时这个邻接矩阵为单位矩阵matrix1;
步骤8.3,设计正则表达式对源代码文件进行结构上的提取形成源代码的tokens;
步骤8.4,将数据集data2文件中的内容输入到步骤8.3中设计的正则表达式中并进行语法解析,输出data2中不同文件的调用关系;
步骤8.5,将步骤8.4中不同文件之间的调用关系进行记录,记录方式为在matrix1中有调用关系的文件名处的索引值改为1;
步骤8.6,通过步骤8.4中的调用关系不断的对步骤8.5中的matrix1的索引值进行修改,最终将这个修改后的邻接矩阵作为整个数据集中文件之间的拓扑结构。
6.根据权利要求1所述的基于图卷积神经网络的软件缺陷预测方法,其特征在于,步骤
11中通过训练图卷积神经网络模型实现对代码缺陷的预测,具体步骤如下:
步骤11.1:使用python三方库Keras定义基本的图卷积类,构建GCN各层配置信息;
步骤11.2:随机初始化GCN模型各种权重偏置参数;
步骤11.3:将步骤7中的文件特征向量和步骤10中的matrix2作为输入,训练GCN模型。

说明书全文

一种基于图卷积神经网络软件缺陷预测方法

技术领域

[0001] 本发明属于软件缺陷预测技术领域,具体涉及一种基于图卷积神经网络对软件缺陷预测方法。

背景技术

[0002] 从计算机来到这个世界,随着软件工程的迅速发展,软件系统复杂度提高,软件中潜在的、未被发现的缺陷势必影响软件质量。尽早地发现缺陷并对其进行处理将对软件质量的保障具有重要的意义,因此为维护软件安全,更加全面、精准的软件缺陷检测方法的提出迫在眉睫。软件测试是常用、有效的软件质量保障手段,对于大规模程序而言,如果测试程序的所有模则会消耗大量人物力,因此软件缺陷预测是一种可行的解决方法,它能够在系统开发初期,及时准确地预测软件模块是否包含缺陷,合理分配测试资源,针对性地对缺陷模块进行分析提高产品质量。目前关于对软件缺陷预测的方法主要是通过分析历史程序源代码或开发活动提取出与缺陷相关的度量元创建源数据集,然后运用机器学习等方法构建预测模型,最后使用该模型对目标软件项目的缺陷情况进行预测。相比与软件度量元信息,程序语义能够更加准确地对软件缺陷特征进行描述。面对着大量新的应用软件产生,软件缺陷预测技术将迎来自己的黄金期。

发明内容

[0003] 本发明的目的是提供一种基于图卷积神经网络对软件缺陷预测方法,利用Bert模型对软件代码源文件进行语义上的表示,通过构建抽象语法树将源代码中的各个文件进行关联,将表示文件的源代码的特征向量及特征向量之间的拓扑结构作为图卷积神经的网络输入,生成训练GCN网络模型,最后通过向GCN模型输入源代码文件实现对软件缺陷类型进行预测。
[0004] 本发明所采用的技术方案是,一种基于图卷积神经网络的软件缺陷预测方法,具体操作步骤如下:
[0005] 步骤1,将原始数据集复制为相同的两份,分别命名为data1、data2;
[0006] 步骤2,将data1中的数据文件进行遍历读取,然后将文件中的数据进行格式化处理后保存到文件夹Pro-data1中;
[0007] 步骤3,Pro-data1文件夹下的全部文件进行一次备份作为训练集;
[0008] 步骤4,将步骤2中Pro-data1文件夹下的所有文件中的内容整合到文件total_data.txt中,形成Bert模型训练集数据;
[0009] 步骤5,调用Embedding中流行的Bert模型,并初始化Bert模型权重参数;
[0010] 步骤6,使用步骤4中total_data.txt中的数据优化步骤5中构建的Bert模型参数,生成最终的优化Bert模型;
[0011] 步骤7,依次读取步骤3中训练集文件夹下的文件内容并输入到步骤6中构建的优化Bert模型中,然后对文件内容中每一词汇产生的特征向量进行相加,最后建立一张文件名、特征向量、缺陷标签的映射关系表table1;
[0012] 步骤8,构建正则表达式对data2数据集中源文件内容进行提取,然后通过语法解析对data2项目源文件进行构建语法树,分析语法树中不同文件的调用关系,并将文件之间调用关系以邻接矩阵的方式存储为matrix1;
[0013] 步骤9,依照步骤7中文件与特征向量的映射表与步骤8中形成的文件调用关系邻接矩阵分析特征向量之间的调用关系,并将调用关系存储为matrix2;
[0014] 步骤10,对步骤7中产生的特征向量采用关联算法Apriori进行处理,通过关联算法判断特征向量之间是否存在因果关系,若存在因果关系,则在步骤9中特征向量关系矩阵matrix2中进行记录,不存在则不进行记录;
[0015] 步骤11,构建GCN模型,并初始化模型中的参数;
[0016] 步骤12,将步骤7中产生的特征向量和步骤9中的matrix2作为特征向量之间的拓扑信息输入到GCN模型中,然后训练GCN模型参数,得到训练好的GCN模型用于代码的缺陷预测;
[0017] 步骤13,对软件具有缺陷的源文件进行读取,并采用步骤7中的方式形成表征测试集文件的特征向量,然后输入步骤12中训练好的GCN模型;GCN模型输出代码缺陷类型的预测结果。
[0018] 本发明的特点还在于,
[0019] 步骤13所述代码缺陷类型包括词法缺陷、语法缺陷、语义缺陷、可维护性缺陷四大类。
[0020] 步骤6中采用基于Embedding的方法,将项目源文件用特征向量表示,具体步骤如下:
[0021] 步骤6.1,下载安装python第三方库Spacy;
[0022] 步骤6.2,使用Spacy,并调用Bert模型;
[0023] 步骤6.3,初始化Bert模型权重参数,使其本身具有一定语义理解能力;
[0024] 步骤6.4,向步骤6.3中的Bert模型中加载步骤4中total_data.txt数据文件,开始对Bert模型的权重参数进行微调;
[0025] 步骤6.5,保存优化后的Bert模型;
[0026] 步骤7中采用基于Bert的方法,将项目源文件用特征向量表示,具体步骤如下:
[0027] 步骤7.1,依次读取步骤3中训练集文件夹下的文件,并将文件中的缺陷标签与文件名保存到table1的一行中,最后为table1建立一列空白列;
[0028] 步骤7.2,将步骤7.1中的读取到的文件内容以空格符为间隔,依次输入步骤6中的Bert模型中,输出对应字符串的字符向量。
[0029] 步骤7.3,将步骤7.2每一个文件中输出的字符向量进行相加,最后形成一个表示该文件的特征向量;
[0030] 步骤7.4,将步骤7.3中形成的特征向量追加到步骤7.1形成的table1中与之文件名对应空白单元格中;
[0031] 步骤8中采用基于抽象语法树的方式查看文件之间的调用关系,具体步骤如下:
[0032] 步骤8.1,读取步骤7中构建的table1中的文件名;
[0033] 步骤8.2,构建以步骤8.1中读取的文件名为行索引和列索引的邻接矩阵,将用其表示文件之间的调用关系,此时这个邻接矩阵为单位矩阵matrix1;
[0034] 步骤8.3,设计正则表达式对源代码文件进行结构上的提取形成源代码的tokens;
[0035] 步骤8.4,将数据集data2文件中的内容输入到步骤8.3中设计的正则表达式中并进行语法解析,输出data2中不同文件的调用关系;
[0036] 步骤8.5,将步骤8.4中不同文件之间的调用关系进行记录,记录方式为在matrix1中有调用关系的文件名处的索引值改为1;
[0037] 步骤8.6,通过步骤8.4中的调用关系不断的对步骤8.5中的matrix1的索引值进行修改,最终将这个邻接矩阵作为整个数据集中文件之间的拓扑结构。
[0038] 步骤11中通过训练图卷积神经网络模型实现对代码缺陷的预测,具体步骤如下:
[0039] 步骤11.1:使用python三方库Keras定义基本的图卷积类,构建GCN各层配置信息。
[0040] 步骤11.2:随机初始化GCN模型各种权重偏置参数。
[0041] 步骤11.3:将步骤7中的文件特征向量和步骤10中的matrix2作为输入,训练GCN模型。
[0042] 本发明的有益效果是:本发明的目的是提供一种基于图卷积神经网络软件缺陷预测方法,根据优化Bert模型对数据集中源代码进行向量化表示,通过构建语法树将源代码表示成的特征向量进行关联,通过关联算法Apriori将可能存在缺陷的代码文件进行关联。最后将特征向量作为输入训练GCN模型。当有缺陷的源代码文件表示成的特征向量作为GCN模型输入时,模型将预测输出代码文件中缺陷类型,从而减少测试人员的工作量和软件开发的进度。
附图说明
[0043] 图1为本发明一种基于图卷积神经网络软件缺陷预测方法的总流程图
[0044] 图2为本发明构建Bert模型识别程序语义的模型流程图;
[0045] 图3为本发明构建抽象语法树的流程图;
[0046] 图4为本发明训练GCN模型的流程图。

具体实施方式

[0047] 下面结合附图和具体实施方式对本发明进行详细说明。
[0048] 本发明的目的是提供一种基于图卷积神经网络对软件缺陷预测方法,利用优化后的Bert模型对软件代码源文件进行语义上的表示,通过构建抽象语法树将源代码中的各个文件进行关联,将表示文件的源代码的特征向量及特征向量之间的拓扑结构作为图卷积神经的网络输入,生成训练GCN网络模型,最后通过向GCN模型输入源代码文件实现对软件缺陷类型进行预测,包含以下步骤:
[0049] 步骤1,将原始数据集复制为相同的两份,分别命名为data1、data2。
[0050] 步骤2,将data1中的数据文件进行遍历读取,然后将文件中的数据进行格式化处理后保存到文件Pro-data1中。
[0051] 将源代码文件a1转化为b1(数据格式化),如下所示。
[0052]
[0053] 步骤3,Pro-data1文件下的全部文件进行一次备份作为训练集(train);
[0054] 步骤4,将步骤2中Pro-data1文件下的所有文件中的内容整合到文件total_data.txt中,形成Bert模型训练集数据;
[0055] 步骤5,调用Embedding中流行的Bert模型,并初始化模型权重参数;
[0056] 步骤6,使用步骤4中total_data.txt中的数据训练步骤5中构建的Bert模型,生成优化后的Bert模型(如图2所示)。
[0057] 步骤7,依次读取步骤3中训练集文件夹下的文件内容并输入到步骤6中构建的Bert模型中,然后对文件内容中每一词汇产生的特征向量进行相加,最后建立一张文件名、特征向量、缺陷标签的映射关系表table1;
[0058] 例如:在文件file1中只存在“print(‘hello word’)”,则产生最后的特征向量计算步骤如下:
[0059] “Print”经过Skip-gram产生的向量v1为:[0.1,0.1,0.1,0.1,0.1];
[0060] “(”经过Skip-gram产生的向量v2为:[0.2,0.2,0.2,0.2,0.2];
[0061] “‘hello word’”经过Skip-gram产生的向量v3为:[0.3,0.3,0.3,0.3,0.3];
[0062] “(”经过Skip-gram产生的向量v4为:[0.4,0.4,0.4,0.4,0.4];
[0063] 则最后表示该文件的特征向量表示为:v1+v2+v3+v4+v5=[1,1,1,1,1];
[0064] 在table1中的表达为:
[0065]
[0066] 步骤8,构建正则表达式对源代码文件内容进行提取,然后通过语法解析对步骤1中data2项目源文件进行构建抽象语法树(如图3所示),分析不同文件的调用关系,并将文件之间调用关系以邻接矩阵的方式存储为matrix1;
[0067] 步骤9,依照步骤7中文件与特征向量的映射表与步骤8中形成的文件调用关系邻接矩阵分析特征向量之间的调用关系,并将调用关系存储为matrix2;
[0068] 步骤10,对步骤7中产生的特征向量采用关联算法Apriori进行处理,通过关联算法判断特征向量之间是否存在因果关系,若存在因果关系,则在步骤9中特征向量关系矩阵matrix2中进行记录,不存在则不进行记录;
[0069] 步骤11,构建GCN模型,并初始化模型中的参数;
[0070] 步骤12,将步骤7中产生的特征向量作为节点特征和步骤9中的matrix2作为节点之间的拓扑信息输入到GCN模型中,然后训练GCN模型参数,得到训练好的GCN模型用于代码的缺陷预测(如图4所示);
[0071] 步骤13,对软件具有缺陷的源文件进行读取,并采用步骤7中的方式形成表征测试集文件的特征向量,然后输入步骤12中训练好的GCN模型,GCN模型将对代码缺陷结果进行类型预测,可分为:词法缺陷、语法缺陷、语义缺陷、可维护性缺陷四大类。
[0072] 步骤2,将data1中的数据文件进行遍历读取,然后将文件中的数据进行格式化处理后保存到文件Pro-data1中,其中
[0073] 步骤2伪代码如下:
[0074]
[0075] 步骤6中采用基于Embedding的方法,将项目源文件用特征向量表示,具体步骤如下:
[0076] 步骤6.1,下载安装python第三方库Spacy;
[0077] 步骤6.2,使用Spacy,并调用Bert模型(Bert模型是基于多层双向转换解码,其能够通过双向获取句子某个词的前后信息,并通过注意力机制获取到句子中的重要信息,是目前强大的一种特征提取器,本方法将其用作为文本到数据的转化器);
[0078] 步骤6.3,初始化Bert模型权重参数,使其本身具有一定语义理解能力;
[0079] 步骤6.4,向步骤6.3中的模型中加载步骤4中total_data.txt数据文件,开始对Bert模型的权重参数进行微调;
[0080] 步骤6.5,保存训练完成的Bert模型;
[0081] 步骤6伪代码如下:
[0082]
[0083] 步骤7中采用基于Bert的方法,将项目源文件用特征向量表示,具体步骤如下:
[0084] 步骤7.1,依次读取步骤3中训练集文件夹下的文件,并将文件中的缺陷标签与文件名保存到table1的一行中,最后为table1建立一列空白列;
[0085] 步骤7.2,将步骤7.1中的读取到的文件内容以空格符为间隔,依次输入步骤6中的Bert模型中,输出对应字符串的字符向量。
[0086] 步骤7.3,将步骤7.2每一个文件中输出的字符向量进行相加,最后形成一个表示该文件的特征向量;
[0087] 步骤7.4,将步骤7.3中形成的特征向量追加到步骤7.1形成的table1中与之文件名对应空白单元格中;
[0088] 步骤8中采用基于抽象语法树的方式查看文件之间的调用关系,具体操作步骤如下:
[0089] 步骤8.1,读取步骤7中构建的table1中的文件名;
[0090] 步骤8.2,构建以步骤8.1中读取的文件名为行索引和列索引的邻接矩阵,将用其表示文件之间的调用关系,此时这个邻接矩阵为单位矩阵matrix1;
[0091] 步骤8.3,设计正则表达式对源代码文件进行结构上的提取形成源代码的tokens;
[0092] 步骤8.4,将数据集data2文件中的内容输入到步骤8.3中设计正则表达式中并进行语法解析,输出data2中不同文件的调用关系;
[0093] 步骤8.5,将步骤8.4中不同文件之间的调用关系进行记录,记录方式为在matrix1中有调用关系的文件名处的索引值改为1;
[0094] 步骤8.6,通过步骤8.4中的调用关系不断的对步骤8.5中的matrix1的索引值进行修改,最终将这个邻接矩阵作为整个数据集中文件之间的拓扑结构。
[0095] 步骤10,对步骤7中产生的特征向量采用关联算法Apriori进行处理,使具有缺陷因果关系的特征向量进行关联,然后修改步骤9中的特征向量关系矩阵matrix2,使具有因果关系的特征向量进行连接;
[0096] 步骤10伪代码如下:
[0097]
[0098]
[0099] 步骤11中通过训练卷积神经网络模型实现对代码缺陷的预测,具体步骤如下:
[0100] 步骤11.1:使用python三方库Keras定义基本的图卷积类,构建GCN各层配置信息。
[0101] 步骤11.2:随机初始化GCN模型各种权重偏置参数。
[0102] 步骤11.3:将步骤7中的文件特征向量和步骤10中的matrix2作为输入,训练GCN模型。
[0103] 步骤11伪代码如下:
[0104]
[0105]
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈