一种基于多维度代码联合图表示的软件缺陷预测方法技术

技术编号:39724314 阅读:9 留言:0更新日期:2023-12-17 23:29
本发明专利技术涉及一种基于多维度代码联合图表示的软件缺陷预测方法

【技术实现步骤摘要】
一种基于多维度代码联合图表示的软件缺陷预测方法


[0001]本专利技术涉及一种基于多维度代码联合图表示的软件缺陷预测方法,属于软件工程中的软件分析及软件缺陷预测的



技术介绍

[0002]随着软件规模的扩大和复杂度的不断提高
,
软件的质量问题成为关注的焦点,软件缺陷是软件质量的对立面,威胁着软件质量,如何在软件开发的早期挖掘出缺陷模块成为一个亟需解决的问题

软件缺陷预测通过挖掘软件历史仓库,设计出与缺陷相关的内在度量元,然后借助机器学习等方法来提前发现与锁定缺陷模块,从而合理地分配有限的资源

长期以来,软件缺陷预测一直是研究人员和行业从业者感兴趣的话题,因为知道预测的缺陷可能性有助于提高软件质量并降低成本

例如,开发人员可以使用软件缺陷来确定维护任务的优先级,规划活动以减少技术债务,估计项目质量保证工作的成本和所需资源,并通过了解导致缺陷发生的系统因素来改进整个开发过程

因此,软件缺陷预测是软件质量保证的重要途径之一

与软件缺陷预测相关的专利主要有:基于深度神经网络和概率决策森林的软件缺陷预测模型
(
公开号
CN109446090)
;一种基于长短期记忆网络和
LASSO
算法的软件缺陷预测方法
(CN113778862A)


[0003]近年来,提出了许多基于机器学习的方法和各种软件度量并将其应用于软件缺陷预测

大多数现有的工作试图理解程序的行为,通过抽取程序的度量特征来理解程序语义,以此来构建基于软件度量特征的预测分类模型

软件缺陷预测旨在预测软件工件中缺陷的可能性,通常是不同粒度的源代码元素
(
例如,方法



文件

组件
)
中的缺陷,从抽取程序的度量特征作为程序表示来预测源代码的缺陷

然而,现有的传统深度学习的软件预测方法中忽视了源代码存在着丰富的语义信息和结构信息,并且通过传统的特征提取方法可能无法很好地捕捉反映检测模式的语义特征
。2017

Kipf
等人提出的基于图结构的半监督学习模型已经被广泛用于软件缺陷预测的代码表示,用于解决源代码结构语义的问题

源代码的结构语义和属性不同于自然语言,传统的缺陷预测特征可能无法很好地捕捉到缺陷模式的特征并且模块中的一些缺陷可能不是由代码结构错误引起的,而是由代码功能错误引起的
。2018

Xuan Huo
等人将代码注释嵌入到用于软件缺陷预测的语义特征中,一定程度上解决了代码功能的表示问题


技术实现思路

[0004]本专利技术所要解决的技术问题是提供基于多维度代码联合图表示的软件缺陷预测方法,借助抽象语法树和程序依赖关系的思想,解决软件缺陷预测中代码缺少程序语法语义和注释之间的关联问题

能够有效提升软件缺陷预测的预测效率

[0005]为了解决上述技术问题采用以下技术方案:本专利技术设计了一种基于多维度代码联合图表示的软件缺陷预测方法,用于针对对应代码库中各软件源代码的内容和注释,实现代码缺陷预测以及代码缺陷预测模型构建方法

其中,软件缺陷预测模型构建方法和模型
训练过程包括如下步骤:
[0006]步骤
A.
将含有类标的源代码信息提交至存储库当中充当代码样本,将代码样本分解为不含注释的源代码和代码注释两个部分,其中不含有注释的源代码通常又包括若干子部分,如:函数和类的定义

变量和常量定义

控制流语句

错误处理和异常处理等,然后进入步骤
B

[0007]步骤
B.
针对代码样本中的上述两部分,从不含注释的源代码中抽取抽象语法树
AST
结构,获取抽象语法树节点,同时对抽象语法树进行遍历,获取其中的依赖关系表征数据和调用关系表征数据,最终获取其语法树节点

依赖关系

调用关系数据的特征序列,再从代码注释文本中抽取单词序列并对其进行编码,获取代码注释序列,然后进入步骤
C

[0008]步骤
C.
针对步骤
B
中分别获取的语法树节点和代码注释序列,通过
Word2vec
模型将新的序列转化为对应的向量:语法树节点向量和代码注释向量,然后进入步骤
D

[0009]步骤
D.
针对代码信息中获取的语法树节点向量和代码注释向量,将两者拼接成新的节点向量作为图结构的最终节点向量表示,并且利用步骤
B1.3

B1.4
解析的依赖关系和调用关系作为边构建完整的图结构表示,然后进入步骤
E

[0010]步骤
E.
将步骤
D
中获取的图结构表示输入到图卷积神经网络
(GCN)
中,在若干卷积层后使用池化操作来构建图集表示,通过两个全连接层综合网络中学习到的所有信息,最后使用
Softmax
分类器输出缺陷倾向,然后进入步骤
F。
[0011]步骤
F.
基于代码内容对应的
AST
词向量和代码注释对应的词向量构建的图结构预测模型,针对构建好的图卷积神经网络
GCN
模型执行训练任务,优化
GCN
模型参数,获得训练好的
GCN
预测模型,即获得软件缺陷预测的模型

[0012]在软件缺陷预测模型构建时,需要进一步执行步骤Ⅰ至步骤Ⅲ。
[0013]步骤Ⅰ.
收集源代码并分解成各个模块,需要先对各个模块进行缺陷标记处理,将有缺陷的模块进行标记,然后进入步骤
II

[0014]步骤
II.
将标注好的数据集分为训练集和测试集,源代码数据集中的
70
%和
30
%分别作为训练集和测试集,然后进入到步骤Ⅲ;
[0015]步骤Ⅲ.
针对已经划分好的数据集,输入到构建好的缺陷预测模型中去,让模型学习特征与标签之间的关系,并对模型进行优化和调整,从而获得更好的预测效果

[0016]作为本专利技术的一种优选技术方案:所述步骤
B
中针对代码内容信息按如下步骤
B1
抽取抽象语法树并解析语义结构关系,获取控制依赖关系和数据依赖关系,针对代码注释信息按如下步骤
B2
进行编码:
[0本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种基于多维度代码联合图表示的软件缺陷预测方法,其特征在于:针对对应代码库中的代码内容信息和代码注释信息构建软件缺陷预测模型,并运用到软件缺陷预测任务当中,实现缺陷预测,此过程包括如下步骤:步骤
A.
将含有类标的源代码信息提交至存储库当中充当代码样本,将代码样本分解为不含注释的源代码和代码注释两个部分,其中不含有注释的源代码包括子部分:函数和类的定义

变量和常量定义

控制流语句

错误处理和异常处理;步骤
B.
针对代码样本中的上述两部分,从不含注释的源代码中抽取抽象语法树
AST
结构,获取抽象语法树节点,同时对抽象语法树进行遍历,获取其中的依赖关系表征数据和调用关系表征数据,最终获取其语法树节点

依赖关系

调用关系数据的特征序列,再从代码注释文本中抽取单词序列并对其进行编码,获取代码注释序列;步骤
C.
针对步骤
B
中分别获取的语法树节点和代码注释序列,通过
Word2vec
模型将新的序列转化为对应的向量:语法树节点向量和代码注释向量;步骤
D.
针对代码信息中获取的语法树节点向量和代码注释向量,将两者拼接成新的节点向量作为图结构的最终节点向量表示,并且利用步骤
B
中获取的依赖关系和调用关系作为边构建完整的图结构表示;步骤
E.
将步骤
D
中获取的图结构表示输入到图卷积神经网络中,在若干卷积层后使用池化操作来构建图集表示,通过两个全连接层综合网络中学习到的所有信息,最后使用
Softmax
分类器输出缺陷倾向;步骤
F.
基于代码内容对应的
AST
词向量和代码注释对应的词向量构建的图结构预测模型,针对构建好的图卷积神经网络
GCN
模型执行训练任务,优化
GCN
模型参数,获得训练好的
GCN
预测模型,即获得软件缺陷预测的模型;基于软件缺陷预测模型的构建,按如下步骤Ⅰ至步骤Ⅲ,实现应用代码预测模型针对代码内容和代码注释的软件缺陷检测任务;步骤Ⅰ.
收集源代码并分解成各个模块,需要先对各个模块进行缺陷标记处理,将有缺陷的模块进行标记;步骤
II.
将标注好的数据集分为训练集和测试集,源代码数据集中的
70
%和
30
%分别作为训练集和测试集;步骤Ⅲ.
针对已经划分好的数据集,输入到构建好的缺陷预测模型中去,让模型学习特征与标签之间的关系,并对模型进行优化和调整,从而获得更好的预测效果得到最终预测模型
。2.
根据权利要求1所述的一种基于多维度代码联合图表示的软件缺陷预测方法,其特征在于:步骤
B1.
针对提交至代码库中的源代码内容抽取抽象语法树结构,并进行解析结构关系,获取控制依赖关系和调用关系,按照步骤
B1.1
至步骤
B1.4
:步骤
B1.1
词法分析过程按照预定的规则将源代码中的代码内容合并成
tokens
标识并去除代码语句中空白

注释等冗余信息,最后将所有合成的
tokens
标识分割进一个
tokens
列表中;步骤
B1.2
语法分析过程将步骤
B1.1
中获取的
tokens
列表转化成树型结构,同时验证是否存在语法上的错误,将有语法错误的部分抛出;
步骤
B1.3
在进行依赖关系解析时,对构建的语法树进行遍历,计算代码语句中的控制和数据依赖关系,获取依赖关系的表征数据;步骤
B1...

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

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

1