基于深度学习的忽略成员的方法异味检测策略技术

技术编号:37464510 阅读:36 留言:0更新日期:2023-05-06 09:38
基于深度学习的忽略成员的方法异味检测策略,本发明专利技术涉及Android代码异味中忽略成员的方法检测策略。本发明专利技术的目的是为了解决传统检测工具在检测Android特有代码异味时,准确率较低的问题。基于深度学习的忽略成员的方法检测策略具体过程为:步骤一、获取数据集;步骤二、对数据集进行预处理,得到预处理后的数据集;步骤三、构建深度神经网络分类器,并得到训练好的深度神经网络分类器;步骤四、对待测Android特有代码异味输入训练好的深度神经网络分类器,输出待测Android特有代码异味中是否存在成员异味。本发明专利技术用于软件工程领域。本发明专利技术用于软件工程领域。本发明专利技术用于软件工程领域。

【技术实现步骤摘要】
基于深度学习的忽略成员的方法异味检测策略


[0001]本专利技术涉及Android代码异味中忽略成员的方法检测策略。

技术介绍

[0002]代码异味(Code Smell)又被称为代码坏味道,是由Martin Fowler于1999年提出的,表示存在于程序中的结构不良的代码段
[1]。代码异味对软件的可理解性和可维护性产生诸多负面影响。这种由Martin Fowler提出的异味也被称为面向对象代码异味
[2]。随着新技术的不断涌现和代码异味研究的持续发展,代码异味不再局限于表示面向对象代码中的潜在问题,已经拓展到众多领域
[3],如安卓/IOS应用程序
[4,5]、测试
[6]及SQL
[7]等代码异味。随着科学技术的迅猛发展,Android应用程序由于其开放性和易用性,被广泛应用到人们的日常生活中。研究表明,代码异味不仅仅存在于传统的桌面应用程序中,也存在于Android应用程序中
[2]。与传统桌面应用程序相比,Android应用程序没有主函数,程序执行入口是由Activity所提供的;Android应用程序没有J2SE、API、Swing和JavaFX,而且Android应用程序上的GUI是通过XML来声明的等。以上差异导致Android应用程序中不仅存在传统面向对象代码异味,还存在着Android特有的代码异味(Android

specific smells)。2014年Reimann
[4]等人提出了Android特有代码异味并给出了详细的异味列表。这种异味的存在对Android应用程序产生诸多负面影响,比如能耗、安全性、稳定性、内存和启用时间等,极大降低了用户体验,不利于Android应用程序的维护和演化
[8]。Manman等人的研究表明
[9],可以使用传统的桌面应用程序中代码异味检测工具检测Android应用程序中的面向对象代码异味。但是,研究表明
[10],由于Android应用程序与传统面向对象应用程序的结构不同,因此,传统检测工具不能检测Android特有代码异味。
[0003]Android特有代码异味共包括30种味道,相对于其他异味,忽略成员的方法不仅是存在于Android应用程序中数量最多的一种异味,也是被学者们关注最多的一种异味[2,10,11,12
,13];根据田迎晨等人提出的代码异味关键程度量化方法可知
[3],忽略成员的方法是30种Android特有代码异味中关键程度值最高的异味,应优先关注和重构;忽略成员的方法是某个类中的方法,该方法既不是空的方法,也不是静态方法,但该方法没有访问所在类的任何属性
[2];这种异味的存在增加Android程序的能耗,降低程序的可维护性
[11];重构方法是将受感染的方法转换成静态方法,从而移除味道。目前检测Android特有代码异味效果最好的工具是DAAP
[10],该工具采用传统检测工具普遍使用的程序静态分析技术,定义启发式检测规则,通过遍历抽象语法树,实现异味的检测。
[0004]随着深度学习在自然语言处理、图像分类和生物信息等领域的广泛应用;是否可以结合深度学习或者传统机器学习方法解决传统软件工程领域的问题,已经引起了许多学者的关注;近年来,很多学者尝试使用不同的机器学习甚至深度学习方法检测代码异味,取得了很好的效果
[8,14

18];机器学习是直接将结果输入模型,让机器学习数据从而获得知识,掌握检测规则,并经过多轮训练不断改善自身性能,达到提高检测精度的目的。然而,已有研究只关注传统的面向对象代码异味
[8,14

18],还没有使用深度学习算法检测Android特有
代码异味的相关研究。

技术实现思路

[0005]本专利技术的目的是为了解决传统检测工具在检测Android特有代码异味时,准确率较低的问题,而提出基于深度学习的忽略成员的方法检测策略。
[0006]基于深度学习的忽略成员的方法异味检测策略具体过程为:
[0007]步骤一、获取数据集;
[0008]步骤二、对数据集进行预处理,得到预处理后的数据集;
[0009]步骤三、构建深度神经网络分类器,并得到训练好的深度神经网络分类器;
[0010]步骤四、对待测Android特有代码异味输入训练好的深度神经网络分类器,输出待测Android特有代码异味中是否存在成员异味。
[0011]优选地,所述步骤一中获取数据集;具体过程为:
[0012]步骤一一、在开源代码库AndroZooOpen中下载Android应用程序;
[0013]步骤一二、使用工具RepoReapers去除低质量的Android应用程序,得到最终Android应用程序作为代码语料库,获取数据集。
[0014]优选地,所述步骤一二具体过程为:
[0015]步骤一二一、使用JavaParser将Android应用程序源代码解析生成代码的抽象语法树;
[0016]步骤一二二、使用工具ASSD对代码的抽象语法树进行MIM异味检测,输出MIM异味检测结果;将MIM异味检测结果中的漏检和误检移除;将移除漏检和误检后的检测结果中存在MIM异味的方法和不存在MIM异味的方法分别提取到单独的文件夹中,存在MIM异味的方法对应的代码语料库中的程序构成正样本集,不存在MIM异味的方法对应的代码语料库中的程序构成负样本集;
[0017]所述MIM为忽略成员的方法。
[0018]优选地,所述步骤一二二具体过程为:
[0019]步骤一二二一、使用工具ASSD对代码的抽象语法树进行MIM异味检测,输出MIM异味检测结果;
[0020]步骤一二二二、将步骤一二二一输出的MIM异味检测结果中的漏检和误检移除;具体过程为:
[0021]根据工具DAAP中检测规则遍历步骤一二二一输出的MIM异味检测结果中的类中的方法,判断MIM异味检测结果中的类中的方法是否为空方法,静态方法或者子类覆盖父类的方法,如果是,则将MIM异味检测结果中的类中的方法放入不含异味的方法的集合nonsmellySets中;如果不是,根据MIM异味检测结果中的类中的方法是否访问所在类的属性判断是否为MIM异味,如果没有访问所在类的属性,则是MIM异味,放入含异味的方法的集合smellySets中,如果访问所在类的属性,则不是MIM异味,放入不含异味的方法的集合nonsmellySets中;
[0022]步骤一二二三、将移除漏检和误检后的检测结果中存在MIM异味的方法和不存在MIM异味的方法分别提取到单独的文件夹中,存在MIM异味的方法对应的代码语料库中的程序构成正样本集,不存在MIM异味的方法对应的代码语料库中的程序构成负样本集。
[0023]优选地,所述步骤二中对数据集进行预处理,得到预处理后的数据集;具体过程为:
[0024]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述策略具体过程为:步骤一、获取数据集;步骤二、对数据集进行预处理,得到预处理后的数据集;步骤三、构建深度神经网络分类器,并得到训练好的深度神经网络分类器;步骤四、对待测Android特有代码异味输入训练好的深度神经网络分类器,输出待测Android特有代码异味中是否存在成员异味。2.根据权利要求1所述的基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述步骤一中获取数据集;具体过程为:步骤一一、在开源代码库AndroZooOpen中下载Android应用程序;步骤一二、使用工具RepoReapers去除低质量的Android应用程序,得到最终Android应用程序作为代码语料库,获取数据集;具体过程为:步骤一二一、使用JavaParser将Android应用程序源代码解析生成代码的抽象语法树;步骤一二二、使用工具ASSD对代码的抽象语法树进行MIM异味检测,输出MIM异味检测结果;将MIM异味检测结果中的漏检和误检移除;将移除漏检和误检后的检测结果中存在MIM异味的方法和不存在MIM异味的方法分别提取到单独的文件夹中,存在MIM异味的方法对应的代码语料库中的程序构成正样本集,不存在MIM异味的方法对应的代码语料库中的程序构成负样本集;所述MIM为忽略成员的方法。3.根据权利要求2所述的基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述步骤一二二具体过程为:步骤一二二一、使用工具ASSD对代码的抽象语法树进行MIM异味检测,输出MIM异味检测结果;步骤一二二二、将步骤一二二一输出的MIM异味检测结果中的漏检和误检移除;具体过程为:根据工具DAAP中检测规则遍历步骤一二二一输出的MIM异味检测结果中的类中的方法,判断MIM异味检测结果中的类中的方法是否为空方法,静态方法或者子类覆盖父类的方法,如果是,则将MIM异味检测结果中的类中的方法放入不含异味的方法的集合nonsmellySets中;如果不是,根据MIM异味检测结果中的类中的方法是否访问所在类的属性判断是否为MIM异味,如果没有访问所在类的属性,则是MIM异味,放入含异味的方法的集合smellySets中,如果访问所在类的属性,则不是MIM异味,放入不含异味的方法的集合nonsmellySets中;步骤一二二三、将移除漏检和误检后的检测结果中存在MIM异味的方法和不存在MIM异味的方法分别提取到单独的文件夹中,存在MIM异味的方法对应的代码语料库中的程序构成正样本集,不存在MIM异味的方法对应的代码语料库中的程序构成负样本集。4.根据权利要求3所述的基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述步骤二中对数据集进行预处理,得到预处理后的数据集;具体过程为:使用工具Tokenizer将样本集合中的代码语料转换为整数,用数字向量表示程序文本信息;删除程序文本信息中的重复样本;
将数字向量表示的程序文本信息进行归一化处理;将归一化处理后的数字向量表示的程序文本信息作为深度神经网络分类器的输入数据。5.根据权利要求4所述的基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述步骤三中深度神经网络分类器为改进卷积神经网络模型CNN、改进循环神经网络模型RNN、CNN与RNN相结合的模型CNN

LSTM、自编码全连接变体、自编码CNN变体中任意一个。6.根据权利要求5所述的基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述改进卷积神经网络模型CNN依次包括嵌入层、第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第三最大池化层、Dropout层、Flatten层、第一全连接层,第二全连接层、输出层;所述嵌入层中将mask_zero参数设置为True;所述Dropout层的脱落率设置为0.5;所述第一全连接层的激活函数为relu激活函数;所述第二全连接层的激活函数为sigmoid函数;改进卷积神经网络模型CNN损失函数为binary_crossentropy函数,优化器为RMSProp;将步骤二预处理后的数据集输入改进卷积神经网络模型CNN,训练N次,得到训练好的改进卷积神经网络模型CNN。7.根据权利要求5所述的基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述改进循环神经网络模型RNN依次包括嵌入层、一个长短时记忆网络LSTM、Flatte...

【专利技术属性】
技术研发人员:边奕心赵松李禹齐张子恒孙梦琪邢代鑫涂杰欧长艺
申请(专利权)人:哈尔滨师范大学
类型:发明
国别省市:

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

1