预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

(19)国家知识产权局(12)发明专利申请(10)申请公布号CN115982037A(43)申请公布日2023.04.18(21)申请号202211735838.6(22)申请日2022.12.30(71)申请人北京工商大学地址100048北京市海淀区阜成路33号(72)发明人鲁书勉刘一非刘宏志(74)专利代理机构北京万象新悦知识产权代理有限公司11360专利代理师贾晓玲(51)Int.Cl.G06F11/36(2006.01)G06N3/042(2023.01)G06N3/0464(2023.01)G06N3/08(2023.01)权利要求书2页说明书5页附图2页(54)发明名称一种基于抽象语法树的软件缺陷预测方法(57)摘要本发明提供了一种基于抽象语法树的软件缺陷预测方法,属于深度学习领域和软件缺陷预测领域。本发明通过将源代码转换为抽象语法树的形式,保留其定义良好的结构信息与语义信息,使用图卷积网络(GCN)来学习语法树结构中的节点的特征和网络结构的信息;使用词嵌入将抽象语法树的节点序列转换成文本向量,然后使用BiGRU网络来学习上下文直接的语义关系以提取语义特征,最后将得到的两类特征基于注意力机制进行聚合得到代码的特征,将其输入分类器中以预测缺陷率。本发明充分利用了代码的语义和语法特征使用注意力机制为不同变量赋予不同的权重,减少了噪声干扰,提高了软件缺陷预测的准确率。CN115982037ACN115982037A权利要求书1/2页1.一种基于抽象语法树的软件缺陷预测方法,其特征在于,包括如下步骤:1)将源代码转换为抽象语法树;2)使用深度遍历算法将抽象语法树转换成文本向量,若抽象语法树的大小为n,则获得一个关于Y的文本向量:Y=[Y1,Y2,Y3,...,Yn](1)3)为抽象语法树的每个代码片段生成节点关系图AST,AST上的每个节点都有自己的特征,设这些节点的特征组成一个n×D维的矩阵,然后各个节点间的关系形成一个n×n维的邻接矩阵A:节点关系图AST用G=(S,E)表示,其中S中元素为顶点,E中元素为边;4)将文本向量转换为可以输入GRU的数字向量,建立一个映射字典表,将向量中的每个文本元素链接到一个整数,这些整数充当标记,唯一地标识AST中的每个文本元素,最终得到相应的嵌入矩阵x;x=[x1,x2,x3,...xn](3)5)将步骤3)中得到的节点关系图和相对应的节点作为图卷积网络GCN输入,对于GCN网络中的每个节点,它的层与层之间的传播方式是:其中hl为GCN网络每一层生成的隐藏表示,为单位矩阵,是的度矩阵,σ为非线性激活函数,Wl是第l层神经网络的权重矩阵,bl为偏置矩阵,通过层与层之间的传播最后得到GCN网络的输出表示6)使用步骤4)中得到的嵌入矩阵x作为BiGRU网络输入,BiGRU表示为两个单向的GRU网络,BiGRU()函数是对输入的嵌入矩阵x的非线性变换,将其编码成BiGRU网络的输出表示hc;7)使用注意力机制来聚合GCN层的输出表示和BiGRU网络的输出表示hc,从源代码中捕获着重的情感特征:其中是隐藏状态的第i个节点,是图隐藏表示的第j个节点,a为非线性激活函数LeakyReLU,||表示向量拼接操作;最终得到源代码的表达形式为:8)将源代码的表达形式r输入分类器,使用逻辑回归算法得到软件缺陷预测。2CN115982037A权利要求书2/2页2.如权利要求1所述的基于抽象语法树的软件缺陷预测方法,其特征在于,步骤1)中使用python的javalang库解析源代码为抽象语法树。3.如权利要求1所述的基于抽象语法树的软件缺陷预测方法,其特征在于,步骤4)中使用Gensim库将文本向量转换为可以输入GRU的数字向量。3CN115982037A说明书1/5页一种基于抽象语法树的软件缺陷预测方法技术领域[0001]本发明涉及深度学习领域和软件缺陷预测领域,可以帮助软件工程师和测试人员合理分配资源来定位错误,快速缩小软件代码库中最有可能存在缺陷的部分。背景技术[0002]随着软件系统在社会各个领域扮演着重要的角色,软件产生的缺陷对商业和人们的生活产生了重大的影响。然而,由于软件代码库在规模和复杂性上的显著增长,识别软件代码中的缺陷变得越来越困难。传统软件缺陷预测是以手工获取软件度量特征的基础进行分类学习,如机器学习技术已被广泛用于建立缺陷预测模型,这些技术从软件代码中提取出许多特征,并将它们输入到常见的分类器中,比较有代表性的如SVM支持向量机、随机森林、朴素贝叶斯和逻辑回归等。但是传统软件缺陷预测方法使用静态代码度量作为特征,这些特性并不能真正反映代码的语法和语义,这无疑会对缺陷预测造成影响。[0003]随着深度学习的发展,人们发现它在捕获源代码的语法和语义特征方面表现的很好。前人大量的实验已经证