CN111209211A - 一种基于长短期记忆神经网络的跨项目软件缺陷预测方法 - Google Patents
一种基于长短期记忆神经网络的跨项目软件缺陷预测方法 Download PDFInfo
- Publication number
- CN111209211A CN111209211A CN202010046978.7A CN202010046978A CN111209211A CN 111209211 A CN111209211 A CN 111209211A CN 202010046978 A CN202010046978 A CN 202010046978A CN 111209211 A CN111209211 A CN 111209211A
- Authority
- CN
- China
- Prior art keywords
- neural network
- long
- term memory
- abstract syntax
- memory neural
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Abstract
本发明公开了一种基于长短期记忆神经网络的跨项目软件缺陷预测方法,包括以下步骤:分析项目的源代码文件,并从源代码中解析出对应的抽象语法树;对所提取的所有抽象语法树的节点转换为Token;将Token映射至词向量空间,使之可以输入至神经网络当中;遍历以词向量形式表示的抽象语法树,得到以词向量表示的抽象语法树节点序列;构建长短期记忆神经网络,并将词向量表示的抽象语法树节点序列按序输入至长短期记忆神经网络当中,提取抽象语法树的语义特征;将语义特征输入至逻辑回归分类器中,分析待检测的文件存在缺陷的概率。本发明结合深度学习自动化特征提取技术,解决传统软件缺陷预测方法中无法有效利用编程语言的语法语义信息的问题。
Description
技术领域
本发明涉及软件工程领域,特别涉及一种基于长短期记忆神经网络的跨项目软件缺陷预测方法。
背景技术
随着移动互联网技术迅猛发展,智能手机功能不断创新,移动应用呈现爆炸式增长,其功能也越来越丰富,从社交娱乐到生活理财,各式各样的应用程序都涵盖了我们生活的每一个方面,而软件的体积以及复杂程度也在与日俱增。软件复杂度的增加不可避免地导致了软件缺陷的出现,而软件缺陷的出现严重影响了软件的质量及其可靠性:轻则出现错误或异常提示,重则导致闪退崩溃甚至造成数据丢失,极大地降低了用户体验,缩短了软件的生命期。
为保障软件质量,软件测试是一种常规手段,但其成本高,过程繁琐复杂的特点也使得软件测试无法彻底涵盖软件开发的每一个模块。特别是在一些开发计划比较紧迫的项目中,进行全面的软件测试是不现实的,软件缺陷预测技术便应运而生。传统的软件缺陷预测技术主要基于机器学习算法,通过建立机器学习模型来学习项目源文件的静态手工特征与缺陷之间的关系,具体包括: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)提取语义特征后,被输入至逻辑回归分类器中给出断对应文件的缺陷概率。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
Claims (6)
1.一种基于长短期记忆神经网络的跨项目软件缺陷预测方法,其特征在于,包括以下步骤:
1)分析项目的源代码文件,并从源代码中解析出对应的抽象语法树;
2)对步骤1)所提取的所有抽象语法树的节点,按节点所包含信息的粗细粒度的不同,将所有节点转换为Token;
3)使用词嵌入技术,将步骤2)转换后的所有抽象语法树的节点的Token映射至词向量空间,使之可以输入至神经网络当中;
4)遍历步骤3)所得到的以词向量形式表示的抽象语法树,得到以词向量表示的抽象语法树节点序列;
5)构建长短期记忆神经网络,并将步骤4)所得到词向量表示的抽象语法树节点序列按序输入至长短期记忆神经网络当中,提取抽象语法树的语义特征;
6)将步骤5)提取的语义特征输入至逻辑回归分类器中,分析待检测的文件存在缺陷的概率。
2.根据权利要求1所述基于长短期记忆神经网络的跨项目软件缺陷预测方法,其特征在于,所述节点的类型包括:方法调用以及实例创建类节点、声明相关类节点、跳转控制类节点。
3.根据权利要求1所述基于长短期记忆神经网络的跨项目软件缺陷预测方法,其特征在于,步骤5)中,所述长短期记忆神经网络是双向的,能够从相反的两个方向来处理步骤4)得到的序列。
4.根据权利要求1所述基于长短期记忆神经网络的跨项目软件缺陷预测方法,其特征在于,步骤5)中,所述长短期记忆神经网络,其神经元包含了3种门单元:输入门、遗忘门、输出门;其中,输入门用来更新神经元的状态,先将先前隐藏状态的信息和当前输入的信息输入到Sigmoid函数,在0和1之间调整输出值来决定更新哪些信息,0表示不重要,1表示重要;输出门能决定下个隐藏状态的值,隐藏状态中包含了先前输入的相关信息,而遗忘门则能决定应丢弃或保留哪些信息。
5.根据权利要求1所述基于长短期记忆神经网络的跨项目软件缺陷预测方法,其特征在于,步骤5)中,所述长短期记忆神经网络的实现采用的是Pytorch工具。
6.根据权利要求1所述基于长短期记忆神经网络的跨项目软件缺陷预测方法,其特征在于,步骤6)中,所述逻辑回归分类器是通过采用开源代码库sklearn来实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010046978.7A CN111209211A (zh) | 2020-01-16 | 2020-01-16 | 一种基于长短期记忆神经网络的跨项目软件缺陷预测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010046978.7A CN111209211A (zh) | 2020-01-16 | 2020-01-16 | 一种基于长短期记忆神经网络的跨项目软件缺陷预测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111209211A true CN111209211A (zh) | 2020-05-29 |
Family
ID=70784465
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010046978.7A Pending CN111209211A (zh) | 2020-01-16 | 2020-01-16 | 一种基于长短期记忆神经网络的跨项目软件缺陷预测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111209211A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111881298A (zh) * | 2020-08-04 | 2020-11-03 | 上海交通大学 | 一种半结构化文本处理及分析方法 |
CN112597038A (zh) * | 2020-12-28 | 2021-04-02 | 中国航天系统科学与工程研究院 | 软件缺陷预测方法及系统 |
CN113419948A (zh) * | 2021-06-17 | 2021-09-21 | 北京邮电大学 | 一种基于gan网络的深度学习跨项目软件缺陷的预测方法 |
CN114528221A (zh) * | 2022-02-24 | 2022-05-24 | 北京航空航天大学 | 一种基于异质图神经网络的软件缺陷预测方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109885482A (zh) * | 2019-01-16 | 2019-06-14 | 重庆大学 | 基于少样本数据学习的软件缺陷预测方法 |
CN110442523A (zh) * | 2019-08-06 | 2019-11-12 | 山东浪潮人工智能研究院有限公司 | 一种跨项目软件缺陷预测方法 |
-
2020
- 2020-01-16 CN CN202010046978.7A patent/CN111209211A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109885482A (zh) * | 2019-01-16 | 2019-06-14 | 重庆大学 | 基于少样本数据学习的软件缺陷预测方法 |
CN110442523A (zh) * | 2019-08-06 | 2019-11-12 | 山东浪潮人工智能研究院有限公司 | 一种跨项目软件缺陷预测方法 |
Non-Patent Citations (1)
Title |
---|
于悦: "基于程序语义的软件缺陷预测技术研究与实现", 《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111881298A (zh) * | 2020-08-04 | 2020-11-03 | 上海交通大学 | 一种半结构化文本处理及分析方法 |
CN112597038A (zh) * | 2020-12-28 | 2021-04-02 | 中国航天系统科学与工程研究院 | 软件缺陷预测方法及系统 |
CN112597038B (zh) * | 2020-12-28 | 2023-12-08 | 中国航天系统科学与工程研究院 | 软件缺陷预测方法及系统 |
CN113419948A (zh) * | 2021-06-17 | 2021-09-21 | 北京邮电大学 | 一种基于gan网络的深度学习跨项目软件缺陷的预测方法 |
CN114528221A (zh) * | 2022-02-24 | 2022-05-24 | 北京航空航天大学 | 一种基于异质图神经网络的软件缺陷预测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111209211A (zh) | 一种基于长短期记忆神经网络的跨项目软件缺陷预测方法 | |
US20220058343A1 (en) | Written-modality prosody subsystem in a natural language understanding (nlu) framework | |
CN109697162B (zh) | 一种基于开源代码库的软件缺陷自动检测方法 | |
CN108984683B (zh) | 结构化数据的提取方法、系统、设备及存储介质 | |
CN107315737B (zh) | 一种语义逻辑处理方法及系统 | |
WO2018149326A1 (zh) | 一种自然语言问句答案的生成方法、装置及服务器 | |
CN111708539A (zh) | 一种应用程序代码转换方法、装置、电子设备和存储介质 | |
CN110134613B (zh) | 一种基于代码语义及背景信息的软件缺陷数据采集系统 | |
CN111258995B (zh) | 数据处理方法、装置、存储介质及设备 | |
CN111626049B (zh) | 多媒体信息的标题修正方法、装置、电子设备及存储介质 | |
CN109062904B (zh) | 逻辑谓词提取方法和装置 | |
CN111930906A (zh) | 基于语义块的知识图谱问答方法及装置 | |
CN111324708A (zh) | 一种基于人机交互的自然语言处理系统 | |
US20220414463A1 (en) | Automated troubleshooter | |
CN115238045B (zh) | 一种生成式事件论元抽取方法、系统及存储介质 | |
CN116661805B (zh) | 代码表示的生成方法和装置、存储介质及电子设备 | |
CN112015896B (zh) | 基于人工智能的情感分类方法、以及装置 | |
CN116010581A (zh) | 一种基于电网隐患排查场景的知识图谱问答方法及系统 | |
CN113919360A (zh) | 语义理解方法、语音交互方法、装置、设备及存储介质 | |
CN111553138A (zh) | 用于规范内容结构文档的辅助写作方法及装置 | |
CN115148212A (zh) | 一种语音交互方法、智能设备及系统 | |
CN111831792B (zh) | 一种电力知识库构建方法及系统 | |
CN112394973A (zh) | 一种基于伪孪生网络的多语言代码剽窃检测方法 | |
CN117112767A (zh) | 问答结果生成方法和商业查询大模型训练方法、及装置 | |
CN114372454A (zh) | 文本信息抽取方法、模型训练方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200529 |
|
RJ01 | Rejection of invention patent application after publication |