基于图表示学习和知识蒸馏的半监督软件缺陷预测方法技术

技术编号:35576536 阅读:21 留言:0更新日期:2022-11-12 16:01
本发明专利技术公开了如下技术方案,首先从源代码中提取图结构和抽象语法树结构;接着通过编码抽象语法树信息得到词向量序列作为双向循环神经网络的输入以学习源代码的语义特征并将得到的语义特征与传统静态特征结合作为图节点的状态向量表示;然后利用源代码完整的图表示预训练教师集成网络模型;最后通过知识蒸馏技术将知识从之前预训练完成的教师集成网络模型中提取出来并注入到学生集成网络模型中。本发明专利技术借助图神经网络的先进性和知识蒸馏技术的思想,相较现有技术,使得生成的学生集成网络模型能够实现更高的软件缺陷检测率,而且集成网络的设计保证了该模型的健壮性和鲁棒性。性。性。

【技术实现步骤摘要】
基于图表示学习和知识蒸馏的半监督软件缺陷预测方法


[0001]本专利技术涉及一种基于图表示学习和知识蒸馏的半监督软件缺陷预测方法,属于软件工程中的软件分析及缺陷预测领域。

技术介绍

[0002]软件缺陷预测技术从20世纪70年代发展至今,一直是软件工程领域最活跃的内容之一,在分析软件质量、平衡软件成本方面起着重要的作用。近些年,随着海量存储能力的可用性、高速互联网以及物联网等设备的出现,软件已经成为影响国民经济、政治、军事乃至社会生活的重要因素。与此同时,现代软件系统的规模和复杂性都在增长,使得缺陷隐藏得更深、更复杂、检测更具挑战性。因此,基于人工审查方式的传统软件测试方法不仅需要开发人员在测试或调试过程中投入更多的成本和精力,而且很难保证软件测试的及时性和准确性。在这种情况下,学者们提出了软件缺陷预测技术来帮助开发人员确定软件中是否存在可能的缺陷问题,指导开发人员将有限的软件质量保证资源集中于高风险缺陷模块。与软件缺陷预测的相关专利主要有:一种基于代码表示学习的即时软件缺陷预测方法(公开号CN 111858323);基于深度神经网络和概率决策森林的软件缺陷预测模型(公开号CN 109446090);一种基于卷积神经网络的软件缺陷预测方法(公开号CN 108829607)等。
[0003]在之前的研究中,机器学习技术已广泛应用于软件的缺陷预测任务中,相关工作主要致力于设计并提取软件系统中的度量特征,例如用于度量代码复杂程度的McCabe度量特征,以此构建基于软件度量特征的预测分类模型。随着图神经网络在自然语言处理、推荐系统等诸多领域取得先进的性能,源代码在图上的表示和学习也得到了广泛的研究。2020年Wang等人通过图表示学习专注于源代码中的循环结构,通过构建区间图神经网络学习源代码在图上的表示,在一定程度上解决了图神经网络扩展到大图过程中的过平滑问题和消息传递策略导致的梯度消失问题,实验结果表明他们的工作有效提高了图神经网络在软件工程领域的工作性能。但是基于图神经网络的方法,由于消息传递策略和复杂的聚合操作等预测机制,导致始终无法充分利用基于结构和特征的先验知识,而基于结构和特征的先验知识在软件缺陷预测问题中往往十分重要,例如存在继承、调用等依赖关系的两个模块之间更加倾向于具有相同的类标签。

技术实现思路

[0004]本专利技术要解决的技术问题是提供一种基于图表示学习和知识蒸馏技术的半监督软件缺陷预测方法,本专利技术继承图神经网络的先进性,借助协同训练和知识蒸馏的思想解决监督学习中标签不足和图神经网络无法充分利用基于结构和特征的先验知识的问题。
[0005]本专利技术采用了以下技术方案:用于针对源代码进行软件缺陷预测;包括源代码的图表示学习方法以及基于知识蒸馏的半监督软件缺陷预测模型的构建方法;其中源代码的图表示学习方法步骤如下:
[0006]步骤A.选择预设数量的各类型源代码作为样本、并从源代码中提取抽象语法树结
构和图结构,进而通过静态代码分析工具获得源代码中各个模块的静态特征作为图结构和树结构中节点的初始向量表示,然后进入步骤B;
[0007]步骤B.将抽象语法树结构进一步划分为语句级树输入Word2vec模型中编码为词向量,进而将词向量作为双向循环神经网络的输入学习得到源代码的语义特征,然后进入步骤C;
[0008]步骤C.将步骤B中学习得到的语义特征与步骤A中提取的传统静态特征拼接为新的节点状态向量,并进行特征降维以去除冗余特征和噪声得到模块对应节点的最终表示,然后进入步骤D;
[0009]步骤D.将步骤C中得到的最终节点表示嵌入到步骤A中提取的图结构中作为节点的初始状态向量。
[0010]基于知识蒸馏的半监督软件缺陷预测模型的构建,按照如下步骤I至步骤
ⅣⅤ
,实现通过知识蒸馏技术将知识从教师集成网络模型中提出并注入学生集成网络模型中,进而使训练后的学生网络模型实现更高效、准确的软件缺陷预测:
[0011]步骤Ⅰ.通过基于差异的协同训练算法仅利用少量类别标签预训练教师集成网络模型,预训练的终止条件为教师集成网络模型中的所有子分类器性能不再提升或有标签数据集不再扩充,达到终止条件进入步骤Ⅱ;
[0012]步骤Ⅱ.将教师集成网络中的子分类器与学生集成网络中的分支逐一匹配,进行第一次知识蒸馏以训练学生集成网络中分支的内部参数,然后进入步骤Ⅲ;
[0013]步骤Ⅲ.将教师集成网络中子分类器产生的软标签加权聚合作为教师集成网络模型的最终结果,将教师集成网络的最终结果与学生集成网络的最终结果进行第二次知识蒸馏以训练学生集成网络中各个分支的权重。
[0014]作为本专利技术的一种优选技术方案,所述步骤A中分别根据源代码的词法分析和控制流图提取源代码的抽象语法树结构和图结构,包括如下子步骤:
[0015]步骤A1.应用javalang工具将程序源代码解析为抽象语法树结构,并从中切分出函数节点;
[0016]步骤A2.应用第三方工具understand根据源代码的控制流图构建邻接矩阵以表征模块之间的依赖关系得到源代码的图结构;
[0017]步骤A3.应用代码静态分析工具提取图结构和抽象语法树结构中节点对应模块的静态特征对节点状态向量进行初始化。
[0018]作为本专利技术的一种优选技术方案,所述步骤B通过Word2vec模型和双向循环神经网络按照如下步骤B1至B3学习源代码的语义特征:
[0019]步骤B1.遍历步骤A1中得到的抽象语法树结构,并将所有用户定义的名称映射为固定名称,并通过预排序遍历将AST转化为节点序列,利用这种方法,我们提取函数级代码,去除冗余信息,保留完整的语法信息,这种算法在处理大量的程序时非常有效;
[0020]步骤B2.通过word2vec模型将步骤B1中得到的语句级树映射为它们的词向量序列表示以便直接由神经网络进行训练;
[0021]步骤B3.将步骤B2中得到的词向量序列输入双向循环神经网络进行训练,最终得到源代码语义特征的向量表示。
[0022]作为本专利技术的一种优选技术方案,所述步骤C并非将传统静态特征和步骤B3中学
习到的语义特征进行简单的拼接,而是按照如下C1步骤至C2步骤执行,以达到保留重要特征信息的同时去除噪声和冗余特征从而提升数据处理速度的目的,具体子步骤如下:
[0023]步骤C1.将步骤A3中得到的传统静态特征与步骤B3中通过双向循环神经网络学习得到的指定维数的语义特征拼接成为一个新的向量表示;
[0024]步骤C2.应用SPSS软件对步骤C1中得到的向量表示进行数据标准化,接下来进行特征之间的相关性判定,然后设定主成分个数并根据主成分表达式执行执行主成分分析,最终得到降维后的特征向量作为节点的最终表示。
[0025]作为本专利技术的一种优选技术方案,所述步骤Ⅰ包括如下子步骤:
[0026]步骤Ⅰ1.将图节点划分两部分,分别为有标签数据集和无标签数据集;
[0027]步骤Ⅰ2.利用有标签数据集训练教师本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于图表示学习和知识蒸馏的半监督软件缺陷预测方法,其特征在于:其包括源代码的图表示方法和基于知识蒸馏的半监督软件缺陷预测模型的构建方法,所述的半监督软件缺陷预测模型的构建方法利用源代码的完整图表示预训练教师集成网络模型、通过知识蒸馏技术将知识从教师集成网络模型中提出并注入学生集成网络模型中。2.根据权利要求1所述的基于图表示学习和知识蒸馏的半监督软件缺陷预测方法,其特征在于:源代码的图表示方法,包括如下步骤:步骤A.选择预设数量的各类型源代码作为样本并从源代码中提取抽象语法树结构和图结构,通过静态代码分析工具获得源代码中各个模块的静态特征作为图结构和树结构中节点的初始向量表示,然后进入步骤B;步骤B.将抽象语法树结构进一步划分为语句级树,输入Word2vec模型中编码为词向量,将词向量作为双向循环神经网络的输入学习得到源代码的语义特征,然后进入步骤C;步骤C.将步骤B中学习得到的语义特征与步骤A中提取的传统静态特征拼接为新的节点状态向量,得到模块对应节点的最终表示,然后进入步骤D;步骤D.将步骤C中得到的最终节点表示嵌入到步骤A中提取的图结构中作为节点的初始状态向量。3.根据权利要求1所述的基于图表示学习和知识蒸馏的半监督软件缺陷预测方法,其特征在于:基于知识蒸馏的半监督软件缺陷预测模型的构建方法,包括如下步骤:步骤Ⅰ.通过基于差异的协同训练算法,仅利用少量类别标签预训练教师集成网络模型,预训练的终止条件为教师集成网络模型中的所有子分类器性能不再提升或有标签数据集不再扩充,达到终止条件进入步骤Ⅱ;步骤Ⅱ.将教师集成网络中的子分类器与学生集成网络中的分支逐一匹配,进行第一次知识蒸馏以训练学生集成网络中分支的内部参数,然后进入步骤Ⅲ;步骤Ⅲ.将教师集成网络中子分类器产生的软标签加权聚合作为教师集成网络模型的最终结果,将教师集成网络的最终结果与学生集成网络的最终结果进行第二次知识蒸馏以训练学生集成网络中各个分支的权重。4.根据权利要求2所述的基于图表示学习和知识蒸馏的半监督软件缺陷预测方法,其特征在于:所述步骤A包括如下子步骤:步骤A1.应用javalang工具将程序源代码解析为抽象语法树结构,并从中切分出函数节点;步骤A2.应用第三方工具understand根据源代码的控制流图构建邻接矩阵以表征模块之间的依赖关系得到源代码的图结构;步骤A3.应用代码静态分析工具提取图结构和抽象语法树结构中节点对应模块的静态特征对节点状态向量进行初始化。5.根据权利要求2所述的基于图表示学习和知识蒸馏的半监督软件缺陷预测方法,其特征在于:所述步骤B包括如下子步骤:步骤B1.遍历步骤A1中得到的抽象语法树结构,并将所有用户定义的名称映射为固定名称,并通过预排序遍历将AST转化为节点序列;步骤B2.通过word2vec模型将步骤B1中得到的语句级树映射为它们的词向量序列表示以便直接由神经网络进行训练;
步骤B3.将步骤B2中得到的词向量序列输入双向循环神经网络进行训练,最终得到源代码语义特征的向量表示。6.根据权利要求2所述的基于图表示学习和知识蒸馏的半监督软件缺陷预测方法,其特征在于:所述...

【专利技术属性】
技术研发人员:岳野刘望舒刘学军
申请(专利权)人:南京工业大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1