一种基于长短期记忆神经网络的跨项目软件缺陷预测方法与流程

文档序号:20917575发布日期:2020-05-29 13:43阅读:272来源:国知局
本发明涉及软件工程领域,特别涉及一种基于长短期记忆神经网络的跨项目软件缺陷预测方法。
背景技术
::随着移动互联网技术迅猛发展,智能手机功能不断创新,移动应用呈现爆炸式增长,其功能也越来越丰富,从社交娱乐到生活理财,各式各样的应用程序都涵盖了我们生活的每一个方面,而软件的体积以及复杂程度也在与日俱增。软件复杂度的增加不可避免地导致了软件缺陷的出现,而软件缺陷的出现严重影响了软件的质量及其可靠性:轻则出现错误或异常提示,重则导致闪退崩溃甚至造成数据丢失,极大地降低了用户体验,缩短了软件的生命期。为保障软件质量,软件测试是一种常规手段,但其成本高,过程繁琐复杂的特点也使得软件测试无法彻底涵盖软件开发的每一个模块。特别是在一些开发计划比较紧迫的项目中,进行全面的软件测试是不现实的,软件缺陷预测技术便应运而生。传统的软件缺陷预测技术主要基于机器学习算法,通过建立机器学习模型来学习项目源文件的静态手工特征与缺陷之间的关系,具体包括:1)从项目源文件中提取静态手工特征;2)利用提取的手工特征建立对应的机器学习模型;3)使用带缺陷标注的数据集训练模型;4)从待检测的项目源文件中提取同类静态手工特征并输入至训练好的模型,来预测每一个源文件的缺陷概率。然而传统的基于机器学习的软件缺陷预测方法不能利用代码本身的语法和语义信息,导致预测结果非常不理想。长短期记忆神经网络,作为一种深度学习算法,能够从输入的序列中自动学习任意两个输入时刻之间的关系,使之在自然语言处理领域方面被广泛地使用。与自然语言类似,编程语言也蕴含了丰富的的语法语义信息,如果能够从编程语言中提取这些语法和语义信息用于软件缺陷预测,将能够弥补传统基于静态手工特征缺陷预测的不足。技术实现要素:本发明的主要目的在于克服现有技术的缺点与不足,提供一种基于长短期记忆神经网络的跨项目软件缺陷预测方法,该方法结合深度学习自动化特征提取技术,解决传统软件缺陷预测方法中无法有效利用编程语言的语法语义信息的问题。本发明的目的通过以下的技术方案实现:一种基于长短期记忆神经网络的跨项目软件缺陷预测方法,包括以下步骤:1)分析项目的源代码文件,并从源代码中解析出对应的抽象语法树;2)对步骤1)所提取的所有抽象语法树的节点,按节点所包含信息的粗细粒度的不同,将所有节点转换为token;3)使用词嵌入技术,将步骤2)转换后的所有抽象语法树的节点的token映射至词向量空间,使之可以输入至神经网络当中;4)遍历步骤3)所得到的以词向量形式表示的抽象语法树,得到以词向量表示的抽象语法树节点序列;5)构建长短期记忆神经网络,并将步骤4)所得到词向量表示的抽象语法树节点序列按序输入至长短期记忆神经网络当中,提取抽象语法树的语义特征;6)将步骤5)提取的语义特征输入至逻辑回归分类器中,分析待检测的文件存在缺陷的概率。步骤2)中,对步骤1)所提取的所有抽象语法树节点,按节所包含信息的粗细粒度的不同,将所有节点转换为token。由于不同类型的抽象语法树节点所包含的信息不同,并且在粒度上存在差异。某些信息对于软件缺陷预测至关重要,因此对于不同的抽象语法树,本发明选取不同的粒度的信息来进行标记,将其转换为token,然后采用词嵌入技术将token映射至词向量空间中,并对抽象语法树进行遍历,得到序列形式输入至长短期记忆神经网络中进行抽象语义特征提取。所述节点的类型包括:方法调用以及实例创建类节点、声明相关类节点、跳转控制类节点。步骤5)中,所述长短期记忆神经网络是双向的,能够从相反的两个方向来处理步骤4)得到的序列。能够更好地让神经网络学习到抽象语法树节点之间的上下文关系,使提取的抽象语义特征能够更好地保留抽象语法树所包含的语法语义信息,用于后续步骤的分类器进行软件缺陷概率的判断。步骤5)中,所述长短期记忆神经网络,其神经元包含了3种门单元:输入门、遗忘门、输出门;其中,输入门用来更新神经元的状态,先将先前隐藏状态的信息和当前输入的信息输入到sigmoid函数,在0和1之间调整输出值来决定更新哪些信息,0表示不重要,1表示重要;输出门能决定下个隐藏状态的值,隐藏状态中包含了先前输入的相关信息,而遗忘门则能决定应丢弃或保留哪些信息。步骤5)中,所述长短期记忆神经网络的实现采用的是pytorch工具。通过pytorch可以非常便捷地构建双向长短期记忆神经网络,并对抽象语法树的进行语义特征提取。步骤6)中,所述逻辑回归分类器是通过采用开源代码库sklearn来实现。本发明与现有技术相比,具有如下优点和有益效果:本发明适用于跨项目的软件缺陷预测,使用成熟稳定且带有缺陷标注的项目源代码,作为训练数据集来训练缺陷预测模型。将待检测项目的源代码输入至训练好缺陷预测模型,分析出每一个文件的缺陷概率并呈现给软件开发人员。与传统的静态代码检测工具比较,本方法能够充分利用代码中的抽象语义特征用于缺陷预测,可以提高缺陷检测的成功率,以及帮助软件开发人员快速定位和排查软件潜在的缺陷。附图说明图1是本发明所述一种基于长短期记忆神经网络的跨项目软件缺陷预测方法的流程图。图2是本发明所述双向长短期记忆神经网络提取语义特征的流程图。图3是本发明所述一种基于长短期记忆神经网络的跨项目软件缺陷预测方法的工作示意图。具体实施方式下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。如图1-3,一种基于长短期记忆神经网络的跨项目软件缺陷预测方法,包含以下步骤:步骤1)分析项目的源代码文件,并从源代码中解析出对应的抽象语法树。具体实施方式如下:本发明使用一个名为javalang(https://github.com/c2nes/javalang)的开源代码库来分析源代码,并从源代码中解析出其对应的语法树。由于语法中节点类型较多,并且不是所有节点都有利于后续的软件缺陷预测,因此本发明选取了一部分类型的节点,并将其余的节点舍弃。如表1所示,本发明主要选取了三种类型的节点用于缺陷预测:1)方法调用以及实例创建类节点;2)声明相关类节点;3)跳转控制类节点。表1:所保留的节点类别以及其类型步骤2)对步骤1)所提取的所有抽象语法树节点,按节所包含信息的粗细粒度的不同,将所有节点转换为token。由于不同类型的抽象语法树节点所包含的信息不同,并且在粒度上存在差异。某些信息对于软件缺陷预测至关重要,因此对于不同的抽象语法树,本发明选取不同的粒度的信息来进行标记,将其转换为token,具体转换的方式如表2所示:对于字段声明节点、方法声明节点、类声明节点、变量声明节点、类声明节点和构造器声明节点这6种节点,本发明采用其访问修饰符和节点名称来标记这些节点;对于if节点、while节点、for节点和增强的for语句节点这4种节点,本发明使用循环终止条件来标记;对于synchronized语句节点本发明使用该语句的同步对象来进行标记;对于方法调用节点和父类方法调用节点本发明使用方法名称和参数名称来进行标记;其余节点采用节点名称进行标记。表2:对不同节点的标记方式步骤3)使用词嵌入技术,将步骤2)转换后的所有抽象语法树节点的token映射至词向量空间,使之可以输入至神经网络当中。由于神经网络需要接受数值向量的输入,但抽象语法树节点在经过步骤2)转换为token之后还不是数值向量,无法直接输入至神经网络当中。为了能够让节点之间的上下文关系得到保留,在此步骤中本发明采用词嵌入技术,将骤2)转换后所有token都映射到词向量空间中,并且在后续的训练过程中,神经网络可以不断优化每种token的词向量表示,使之更好地保留节点之间的上下文关系。步骤4)遍历步骤3)所得到的以词向量形式表示的抽象语法树,得到以词向量表示的抽象语法树节点序列。在经过步骤2)和3)之后,源代码所对应的抽象语法树被转换成了向量的表示,但由于抽象语法树是树形结构,无法直接输入到长短期记忆神经网络中,并且长短期记忆神经网络需要接收序列形式的输入,因此本发明对抽象语法树进行遍历。遍历抽象语法树不仅能够将其换为序列形式输入到神经网络中,还能够一定程度上保留节点之间的先后关系。步骤5)构建长短期记忆神经网络,并将步骤4)所得到词向量表示的抽象语法树节点序列按序输入至长短期记忆神经网络当中,提取抽象语法树的语义特征。具体来说,本发明的长短期记忆神经网络的神经元主要包含了3种门单元:1)输入门;2)遗忘门和3)输出门。输入门用来更新神经元的状态,先将先前隐藏状态的信息和当前输入的信息输入到sigmoid函数,在0和1之间调整输出值来决定更新哪些信息,0表示不重要,1表示重要。输出门能决定下个隐藏状态的值,隐藏状态中包含了先前输入的相关信息,而遗忘门则能决定应丢弃或保留哪些信息。为了能够更好地让神经网络学习到抽象语法树节点之间的上下文关系,在构建长短期记忆神经网络时,本发明采用双向的长短期记忆神经网络,从相反的两个方向来处理步骤4)得到的序列。本发明的长短期记忆神经网络的实现采用的是pytorch(https://pytorch.org/)工具。通过pytorch可以非常便捷地构建双向长短期记忆神经网络,并对抽象语法树的进行语义特征提取。步骤6)将步骤5)提取的语义特征输入至逻辑回归分类器中,分析待检测的文件存在缺陷的概率。本步骤采用开源代码库sklearn(https://scikit-learn.org/stable/)实现逻辑回归分类器。抽象语法树经步骤5)提取语义特征后,被输入至逻辑回归分类器中给出断对应文件的缺陷概率。上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1