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

基于GraphSAGE和MLP的软件缺陷定位方法与流程

2022-08-13 22:44:47 来源:中国专利 TAG:

基于graphsage和mlp的软件缺陷定位方法
技术领域
1.本发明属于计算机应用技术领域,涉及一种基于graphsage和mlp的软件缺陷定位方法。


背景技术:

2.在软件开发过程中,程序缺陷是不可避免的。开发人员往往会花很多时间在软件测试和调试中,并且测试和调试可占开发成本的75%。为了提高调试的效率,研究人员提出软件自动化缺陷定位技术。它旨在生成缺陷定位报告帮助开发人员进行调试,进而节省调试时间。
3.目前,已经有多种研究方法用于自动化定位软件缺陷。传统的缺陷定位方法依赖于执行信息进行预测。其中基于频谱的缺陷定位方法(sbfl)通过分析测试用例的覆盖信息以及执行结果,设计可疑度计算公式去得到语句可疑排名。静态缺陷定位通常从代码结构、语法信息进行分析,例如使用抽象语法树(abstract syntax tree,ast)结构。抽象语法树是一种描述代码结构的树状表示方式,基于ast的神经网络模型可以更好地表示源代码。在此基础上,图嵌入学习通过聚集和结构信息,将每个节点表示成向量。与词嵌入相比,它不仅提高了性能,还提供了一种考虑语义和结构关系的新方法。


技术实现要素:

4.本发明目的在于提供一种基于graphsage和mlp的软件缺陷定位方法,该方法可以自动预测有缺陷代码实体的位置。
5.本发明的思想为:提出基于深度学习的软件缺陷预测方法,即借助图神经网络和mlp构建分类模型,本发明提出的方法在数据集defects4j上的性能优于已有方法。
6.本发明提出了一种基于graphsage和mlp的软件缺陷定位方法,包括以下步骤:
7.s1.使用defects4j数据集,搜集各项目程序的源代码和缺陷报告后进行处理,获取源代码属性x、邻接矩阵d和错误标签y,构成缺陷数据集,将所述缺陷数据集分为训练集和验证集;
8.所述处理具体包括以下步骤:
9.s11.将所述源代码转化成抽象语法树a,来表示源代码的语法结构;
10.s12.对抽象语法树a进行剪枝操作,得到剪枝后的抽象语法树a1;
11.s13.根据抽象语法树a1的节点连接信息,得到表示其结构的邻接矩阵d;
12.s14.对抽象语法树a1中的所有节点进行词嵌入操作,得到各节点的节点属性x1;
13.s15.根据缺陷报告中的错误信息,对抽象语法树a1中的节点进行错误标记,得到标签y;
14.s16.收集源代码覆盖信息和测试用例执行结果tr,并根据覆盖信息和执行结果tr,统计抽象语法树a1中每个节点被失败测试用例覆盖的次数x2;
15.s17.使用t-sne对节点属性x1进行降维,得到降维后的节点属性x3;
16.s18.将抽象语法树a1的节点属性x3与覆盖次数x2进行特征融合,得到源代码属性x;
17.s2.将源代码属性x、错误标签y与邻接矩阵d输入graphsage中,通过聚合函数聚合信息,输出得到每个节点的节点属性x’;
18.s3.对节点属性x’进行tanh线性转换并取均值,输出语句的属性x”及标签y’;
19.s4.将语句的属性x”及标签y’输入多层感知机中,通过softmax函数输出值在[0,1]区间的概率,得到语句有错误的概率p;
[0020]
s5.根据所述验证集中节点的缺陷概率p和标签y’,计算模型在验证集上的准确率;
[0021]
s6.重复步骤s2至s5,重复次数为100~200次,将准确率最高的模型作为软件缺陷定位模型m;
[0022]
s7.采用软件缺陷定位模型m对待检测软件进行缺陷定位,对每个语句的错误概率进行排序并生成缺陷报告。
[0023]
进一步的,所述对抽象语法树a进行剪枝操作,具体为:将抽象语法树a中的每行语句用其父节点类型作为节点名称,去除其他token级别的节点,若节点为控制流节点,则不进行处理,得到剪枝后的抽象语法树a1。
[0024]
进一步的,所述准确率的计算公式如下:
[0025][0026]
其中,precision表示准确率,tp表示验证集中成功预测错误语句的数量,fp表示将错误语句预测为正确语句的数量。
[0027]
进一步的,所述成功预测错误语句的判断方式为:当缺陷概率p≥0.5且y’=1时,认为成功预测错误语句。
[0028]
进一步的,所述将错误语句预测为正确语句的数量的判断方式为:当缺陷概率p<0.5且y’=1时,认为将错误语句预测为正确语句。
[0029]
与现有技术相比,本发明有以下创新之处:
[0030]
1)选择对抽象语法树中的控制流块进行数据处理;
[0031]
2)基于图神经网络对抽象语法树提取代码的深层语义特征表示;
[0032]
3)使用tanh线性转换处理语句存在多个节点的情况;
[0033]
4)通过mlp和softmax激活函数,输出各语句的概率并生成缺陷定位报告。
附图说明
[0034]
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
[0035]
图1为本发明实施例的框架图。
具体实施方式
[0036]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,进一步阐述本发明。此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0037]
实施例1
[0038]
参照附图1,本发明提供其技术方案为,一种基于graphsage和mlp的软件缺陷定位方法,具体包括以下步骤:
[0039]
1.使用defects4j数据集,搜集其中各项目程序中的源代码和缺陷报告,此数据集所包含的代码均为java代码;
[0040]
表1显示了defects4j各项目的错误版本个数以及代码长度等信息,其中错误版本数是指各项目中所包含的错误代码个数,测试用例数指用于测试代码的输入数据个数,代码行数指在项目中所有错误代码的总行数,例如在项目lang中,包含65个版本的错误,这些错误代码共有两万两千行;
[0041]
表1实验对象信息表
[0042][0043]
2.首先使用javalang工具,将源代码转换为抽象语法树(ast)。此操作将源代码中的语句解析到token级别并且将节点分成多个类型节点,得到抽象语法树a。
[0044]
3.对步骤2的抽象语法树a进行剪枝操作,得到剪枝后的抽象语法树a1。
[0045]
剪枝具体操作为:对于非控制流节点(例如声明语句、赋值语句等),将划分粒度调整为语句粒度,即将每行语句用其父节点类型作为节点名称;对于控制流节点(例如if、for语句等)不做处理。该过程主要功能是减小图结构规模,避免数据冗余;
[0046]
4.根据步骤3得到的抽象语法树a1,构造可以表示图结构的邻接矩阵d。
[0047]
具体操作为:遍历a1中各节点之间的连接信息,构造v*v的矩阵d(v指a1中节点总个数),当节点a与节点b相连,则矩阵d[a][b]=1。
[0048]
5.为了将词转换成数值形式,使用word2vec对步骤3得到的抽象语法树a1中的节点进行词嵌入,得到节点特征x1。
[0049]
词嵌入过程具体操作为:将源代码中的所有词作为语料库,选择skip-gram来计算抽象语法树a1中各节点之间的相似度,最后将得到的词向量作为节点的特征属性,得到节点属性为x1,x1是v*d的矩阵,其中d表示特征向量的维度,v为节点数量,在本实施例中,d=256。节点词向量属性x1用于表示节点的上下文信息,为源代码的静态信息。
[0050]
6.根据缺陷报告将步骤3得到的抽象语法树a1中的节点分为有错误和无错误两类节点,并用0或1进行标记,得到错误标签y,其中0表示无错误,1表示有错误;
[0051]
7.使用gzoltar工具对defects4j中的程序进行自动调试,收集各程序的测试用例结果以及覆盖信息,得到代码覆盖信息和测试用例执行结果tr。其中测试用例结果指给定测试用例的输入数据,判断输出数据与预期结果是否一致,若一致则用√表示,反之则用
×
表示。覆盖信息指被测程序在执行过程中每个语句是否执行,若语句执行则用1表示,反之则用0表示。以一个待测试程序为例,表2显示了各语句的覆盖信息和测试用例执行结果,第一列为语句编号,第三列至第五列为测试用例t1、t2、t3在各语句中的覆盖信息,最后一列为各语句的覆盖次数,最后一行为测试用例的执行结果;
[0052]
表2测试用例结果信息表
[0053][0054]
8.利用步骤7得到的覆盖信息和测试用例执行结果tr,统计抽象语法树a1中每个节点被失败的测试用例覆盖的次数x2,当节点没有被失败的测试用例覆盖,则其覆盖次数为0。节点的覆盖次数用于表示源代码的动态信息。
[0055]
具体操作为:当抽象语法树a1中的节点a属于语句b时,则节点a的覆盖次数为语句b的覆盖次数。
[0056]
9.高维度的向量在graphsage中不一定有很好的效果,也会对运行设备的内存有较高要求。所以,使用t-sne方法对步骤5中a1的节点属性x1进行降维,得到降维后的节点属性x3,x3是v*d’的矩阵,在本实施例中,d’=3。
[0057]
10.将步骤9每个节点的节点属性x3与步骤8的节点覆盖次数x2进行特征融合,得到抽象语法树a1节点的源代码属性x,x是v*d”的矩阵,本实施例中d”=4。源代码属性x结合了源代码的静态信息x3与动态信息x2,可以更好地表示源代码;
[0058]
特征融合具体操作为:节点属性x3与节点覆盖次数x2为一一对应关系,故第i节点的属性xi=x3i∨x2i。
[0059]
11.将缺陷数据集按比例划分成训练集、验证集和测试集,同时构建模型。
[0060]
在本发明的优选实施例中,将缺陷数据集按照4∶3∶2(训练:验证:测试)的比例进行划分,其对应的序号分别为id_train,id_val,id_test;
[0061]
12.graphsage提出了三种聚合函数,为pooling aggregator,mean aggregator和lstm。pooling aggregator和mean aggregator分别指取相关节点的最大值和均值作为聚合结果;lstm指将相关节点输入长短期记忆网络(lstm)方法,然后把输出结果作为聚合结果。考虑到运行时间,本发明实施例使用mean aggregator作为聚合函数,将步骤10的节点属性x、标签y与邻接矩阵d输入graphsage。最终,经过k层聚合后得到每个节点属性x’,在本实施例中,k=2。
[0062]
节点聚合具体操作为:节点v和邻居节点的第k-1层属性拼接并取均值,然后将得到的结果进行非线性变换,产生节点v在第k层属性。每个节点属性通过以下公式聚合其邻居节点的属性:
[0063][0064]
其中w指每一层要学习的权值矩阵,k指当前所在模型隐藏层的第k层,指节点v经过k次聚合后的节点属性,u指节点v的邻居节点u,指节点v的邻居节点集合,指邻居节点u的第k-1层向量,σ指非线性变换,mean指聚合函数mean aggregator。
[0065]
13.经过graphsage后,得到了每个节点的节点属性x’。由于步骤3对ast的处理,导致一行语句会有一个或多个节点。所以,对步骤12的节点属性x’进行tanh线性转换并取均
值,作为语句的属性x”并得到标签y’。
[0066]
具体操作为:语句的所有节点属性通过tanh线性转换,最后取平均值作为语句属性。假设语句j有n个节点,则该语句以权重和的形式进行融合,具体公式如下:
[0067][0068]
x
′i指节点i的属性,n指语句所包含的节点个数,w指神经网络的权重矩阵,b为偏置,tanh指激活函数,x
″j指语句j的属性。
[0069]
14、将步骤13得到的语句属性x”及标签y’输入多层感知机(mlp)中,利用softmax函数输出各语句的概率p,其中每个语句的概率均在[0,1]区间。
[0070]
15.利用步骤14得到的语句错误概率p,通过比较p[id_val]、y’[id_val]数值,来统计验证集中成功预测错误语句类型的数量tp,以及将错误语句预测为正确语句的数量fp。当p[id_val][i]≥0.5以及y’[id_val][i]=1时,则表示成功预测错误语句类型;当p[id_val][i]<0.5以及y’[id_val][i]=1时,则表示将错误语句预测为正确语句的数量,其中i=1,2...n,n为所有语句的数量。最后,利用下式计算模型在验证集上的准确率(precision):
[0071][0072]
16.重复执行步骤12至15,重复次数为100次,选取在验证集中准确率最高的模型作为软件缺陷定位模型m,最后使用测试集数据在最优模型m上的准确率作为模型m的准确率。
[0073]
软件缺陷定位模型m最优参数如下:
[0074]
软件缺陷定位模型的隐藏层数为2层;
[0075]
软件缺陷定位模型的学习率为0.004;
[0076]
软件缺陷定位模型的dropout概率为0.25;
[0077]
17.采用软件缺陷定位模型m对待检测软件进行缺陷定位,输出每个语句的错误概率p_t。表3为输出结果信息,第二列的概率指对应语句为错误语句的概率,概率值越大,语句出错的可能性就越大。
[0078]
表3语句概率信息表
[0079][0080]
最后,将输出结果p_t作为语句的可疑值并对其排序生成缺陷定位错误报告,表4为缺陷定位报告信息。
[0081]
表4缺陷定位报告信息表
[0082][0083]
18.在相同的数据集上对本发明方法和已有缺陷定位方法进行评估,使用来自本研究领域的两个性能指标(即top-k和mar)来评估本方法的有效性。top-k是指错误语句在缺陷定位报告中排在前k的错误程序数量。mar是指错误的平均排名。
[0084]
表4呈现了在数据集defects4j中各方法的结果。第一列是defects4j项目的名称,第二列是缺陷定位方法的名称,其余列为评测指标top-1、top-3、top-5、mar的结果。结果表明本发明方法优于或接近相比的方法,在top-1,top-2,top-3指标上,成功地定位了262个错误程序中的160个,204个,217个。具体来说,本发明方法在top-1中比ochiai多找到94个缺陷,比fluccs多了42个,比deepfl多14个,比grace多12个,并且最大改进58.75%。此外,本发明方法在5个项目中有3个项目的mar最好。
[0085]
表4本发明方法和其他方法之间的有效性比较
[0086]
[0087][0088]
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

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

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

相关文献