基于重构过滤和深度学习的软件代码特征依赖检测方法

文档序号:35793928发布日期:2023-10-21 21:52阅读:42来源:国知局
基于重构过滤和深度学习的软件代码特征依赖检测方法

本发明涉及一种特征依赖检测方法,具体涉及一种基于重构过滤和深度学习技术的特征依赖代码坏味检测方法,属于计算机软件缺陷定位和缺陷预测。


背景技术:

1、在计算机软件缺陷检测技术领域中,特征依赖是最著名和最深入研究的代码坏味类别之一。与特征依赖坏味相关的方法通常被称为特征依赖方法。这些方法对其他类的(特性)更感兴趣,而不是它们所在的类,因此应该将它们从所在类移动到它们感兴趣的类上,这种移动被称为移动方法(move method)重构。特征依赖方法通常会导致类之间不必要的耦合。

2、识别特征依赖方法最简单和直观的方法是手动设计一系列启发式规则,并使用这些预定义的规则来检测特征依赖方法,典型的基于启发式的特征依赖检测工具有jdeodorant和jmove等。虽然基于启发式的方法简单和直观,但很难定义全面和准确的启发式,即很难找到最优的启发阈值。

3、为此,研究人员利用传统的机器学习技术(如svm和决策树)来自动学习特征依赖检测的规则。传统的机器学习技术能够从带标签的小样本数据集学习简单的规则,但很难从源代码的复杂特征做特征依赖的预测复杂映射(特别是非线性映射)。为了学习这种复杂的映射(规则),一方面人们将更先进的深度学习技术引入特征依赖坏味检测,另一方面为了提高学习模型性能,人们尝试不同方法生成带有标签的高质量训练数据


技术实现思路

1、本发明的目的是针对现有技术存在的问题和不足,为了有效解决软件代码特征依赖检测的技术问题,创造性地提出基于重构过滤和深度学习的软件代码特征依赖检测方法。

2、本发明,首先利用重构工具从开源项目的演化历史中挖掘潜在的移动方法重构,然后通过基于启发式和基于学习的过滤方法从潜在的重构中去除误报,将剩余移动方法作为正样本,并将未涉及任何潜在移动重构的方法作为负样本。最后使用收集的正样本和负样本,训练一个基于神经网络的分类器,用于预测是否应该将给定方法移到另一个类中。

3、本方法通过如下机制保证检测准确率:训练模型时在使用软件实体间的标识符距离之外,新增方法与类之间的耦合度(cbmc)以及方法与类之间的消息传递耦合度(mcmc)两项度量指标,从而提高模型训练的准确率。

4、有益效果

5、本发明,对比现有技术,具有以下优点。

6、1.本发明使用真实世界的开源项目数据来训练和验证基于深度学习的特征依赖检测方法,基于本发明提出的重构检测工具和若干过滤器,成功收集了大量真实世界的特征依赖实例。

7、2.本发明引入新增多项关键度量指标,显著提高深度学习模型训练的准确率。在真实开源项目上的评估结果表明,所提方法在检测和解决特征依赖坏味方面显著提高,在不降低召回率的情况下,将准确率提高了34.5%。



技术特征:

1.基于重构过滤和深度学习的软件代码特征依赖检测方法,其特征在于:

2.如权利要求1所述的基于重构过滤和深度学习的软件代码特征依赖检测方法,其特征在于,利用重构工具,从开源项目的演化历史中挖掘潜在的移动方法重构,以同一个项目的两个版本作为输入,对不同版本的软件实体进行比较和匹配,并根据预先定义的规则列表生成移动方法重构项列表;

3.如权利要求1或2所述的基于重构过滤和深度学习的软件代码特征依赖检测方法,其特征在于,利用如下规则来排除测试方法、构造方法和重写方法:

4.如权利要求1所述的基于重构过滤和深度学习的软件代码特征依赖检测方法,其特征在于:基于学习的误报过滤,采用以下方法:

5.如权利要求1所述的基于重构过滤和深度学习的软件代码特征依赖检测方法,其特征在于:

6.如权利要求1所述的基于重构过滤和深度学习的软件代码特征依赖检测方法,其特征在于,进行特征依赖坏味的检测和解析时,将测试方法、构造方法和重写方法作为负样本;


技术总结
本发明提出了基于重构过滤和深度学习的软件代码特征依赖检测方法,属于计算机软件缺陷检测技术领域。首先利用重构工具从开源项目的演化历史中挖掘潜在的移动方法重构。然后通过基于启发式的过滤和基于学习的过滤从潜在的重构中去除误报,将剩余移动方法重构后被移动的方法作为正样本,将未涉及任何潜在移动方法重构的方法作为负样本。最后,使用收集的正样本和负样本,训练一个基于神经网络的分类器,利用该分类器预测是否应该将给定方法移到另一个类中。本发明利用真实世界的开源项目数据,训练和验证基于深度学习的特征依赖检测,显著提高了深度学习模型训练的准确率,有效解决了软件代码特征依赖检测问题。

技术研发人员:李光杰,唐艺,何焱,李维昊,张启磊,张丁介
受保护的技术使用者:中国人民解放军军事科学院国防科技创新研究院
技术研发日:
技术公布日:2024/1/15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1