CN116049016B - 基于深度学习的忽略成员的方法异味检测策略 - Google Patents
基于深度学习的忽略成员的方法异味检测策略 Download PDFInfo
- Publication number
- CN116049016B CN116049016B CN202310189142.6A CN202310189142A CN116049016B CN 116049016 B CN116049016 B CN 116049016B CN 202310189142 A CN202310189142 A CN 202310189142A CN 116049016 B CN116049016 B CN 116049016B
- Authority
- CN
- China
- Prior art keywords
- layer
- full
- odor
- mim
- detection
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 247
- 238000000034 method Methods 0.000 title claims abstract description 212
- 238000013135 deep learning Methods 0.000 title claims abstract description 41
- 238000013528 artificial neural network Methods 0.000 claims abstract description 58
- 230000008569 process Effects 0.000 claims abstract description 31
- 238000007781 pre-processing Methods 0.000 claims abstract description 5
- 238000013527 convolutional neural network Methods 0.000 claims description 118
- 230000006870 function Effects 0.000 claims description 108
- 238000011176 pooling Methods 0.000 claims description 62
- 230000004913 activation Effects 0.000 claims description 52
- RRAWMVYBOLJSQT-ABZYKWASSA-N (2r,3s)-5-[6-amino-8-(pyren-2-ylamino)purin-9-yl]-2-(hydroxymethyl)oxolan-3-ol Chemical compound C=1C(C2=C34)=CC=C3C=CC=C4C=CC2=CC=1NC1=NC=2C(N)=NC=NC=2N1C1C[C@H](O)[C@@H](CO)O1 RRAWMVYBOLJSQT-ABZYKWASSA-N 0.000 claims description 48
- 210000002569 neuron Anatomy 0.000 claims description 46
- 238000012549 training Methods 0.000 claims description 46
- 238000003062 neural network model Methods 0.000 claims description 30
- 239000013598 vector Substances 0.000 claims description 21
- 125000004122 cyclic group Chemical group 0.000 claims description 20
- 230000003068 static effect Effects 0.000 claims description 16
- 238000012545 processing Methods 0.000 claims description 13
- 230000015654 memory Effects 0.000 claims description 9
- 238000010606 normalization Methods 0.000 claims description 6
- 238000005070 sampling Methods 0.000 claims description 6
- 235000019645 odor Nutrition 0.000 description 134
- 230000035943 smell Effects 0.000 description 76
- 230000000694 effects Effects 0.000 description 32
- 238000010801 machine learning Methods 0.000 description 21
- 238000011160 research Methods 0.000 description 19
- 238000012360 testing method Methods 0.000 description 14
- 238000004422 calculation algorithm Methods 0.000 description 13
- 239000000796 flavoring agent Substances 0.000 description 11
- 230000000306 recurrent effect Effects 0.000 description 9
- 238000004458 analytical method Methods 0.000 description 8
- 238000002474 experimental method Methods 0.000 description 8
- 235000019640 taste Nutrition 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000005265 energy consumption Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 238000007637 random forest analysis Methods 0.000 description 6
- 238000012795 verification Methods 0.000 description 6
- 238000013136 deep learning model Methods 0.000 description 5
- 239000000284 extract Substances 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000003058 natural language processing Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 238000005259 measurement Methods 0.000 description 3
- 230000006403 short-term memory Effects 0.000 description 3
- 241000288113 Gallirallus australis Species 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000001627 detrimental effect Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000004880 explosion Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 240000004160 Capsicum annuum Species 0.000 description 1
- 235000008534 Capsicum annuum var annuum Nutrition 0.000 description 1
- 206010013911 Dysgeusia Diseases 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013476 bayesian approach Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000001511 capsicum annuum Substances 0.000 description 1
- 230000019771 cognition Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000002790 cross-validation Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013400 design of experiment Methods 0.000 description 1
- 230000008034 disappearance Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000013401 experimental design Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011002 quantification Methods 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 238000003168 reconstitution method Methods 0.000 description 1
- 238000004645 scanning capacitance microscopy Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 238000012706 support-vector machine Methods 0.000 description 1
- 238000011426 transformation method Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Biomedical Technology (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Computer Hardware Design (AREA)
- Biophysics (AREA)
- Quality & Reliability (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Image Analysis (AREA)
Abstract
基于深度学习的忽略成员的方法异味检测策略,本发明涉及Android代码异味中忽略成员的方法检测策略。本发明的目的是为了解决传统检测工具在检测Android特有代码异味时,准确率较低的问题。基于深度学习的忽略成员的方法检测策略具体过程为:步骤一、获取数据集;步骤二、对数据集进行预处理,得到预处理后的数据集;步骤三、构建深度神经网络分类器,并得到训练好的深度神经网络分类器;步骤四、对待测Android特有代码异味输入训练好的深度神经网络分类器,输出待测Android特有代码异味中是否存在成员异味。本发明用于软件工程领域。
Description
技术领域
本发明涉及Android代码异味中忽略成员的方法检测策略。
背景技术
代码异味(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特有代码异味。
Android特有代码异味共包括30种味道,相对于其他异味,忽略成员的方法不仅是存在于Android应用程序中数量最多的一种异味,也是被学者们关注最多的一种异味[2,10,11,12,13];根据田迎晨等人提出的代码异味关键程度量化方法可知[3],忽略成员的方法是30种Android特有代码异味中关键程度值最高的异味,应优先关注和重构;忽略成员的方法是某个类中的方法,该方法既不是空的方法,也不是静态方法,但该方法没有访问所在类的任何属性[2];这种异味的存在增加Android程序的能耗,降低程序的可维护性[11];重构方法是将受感染的方法转换成静态方法,从而移除味道。目前检测Android特有代码异味效果最好的工具是DAAP[10],该工具采用传统检测工具普遍使用的程序静态分析技术,定义启发式检测规则,通过遍历抽象语法树,实现异味的检测。
随着深度学习在自然语言处理、图像分类和生物信息等领域的广泛应用;是否可以结合深度学习或者传统机器学习方法解决传统软件工程领域的问题,已经引起了许多学者的关注;近年来,很多学者尝试使用不同的机器学习甚至深度学习方法检测代码异味,取得了很好的效果[8,14-18];机器学习是直接将结果输入模型,让机器学习数据从而获得知识,掌握检测规则,并经过多轮训练不断改善自身性能,达到提高检测精度的目的。然而,已有研究只关注传统的面向对象代码异味[8,14-18],还没有使用深度学习算法检测Android特有代码异味的相关研究。
发明内容
本发明的目的是为了解决传统检测工具在检测Android特有代码异味时,准确率较低的问题,而提出基于深度学习的忽略成员的方法检测策略。
基于深度学习的忽略成员的方法异味检测策略具体过程为:
步骤一、获取数据集;
步骤二、对数据集进行预处理,得到预处理后的数据集;
步骤三、构建深度神经网络分类器,并得到训练好的深度神经网络分类器;
步骤四、对待测Android特有代码异味输入训练好的深度神经网络分类器,输出待测Android特有代码异味中是否存在成员异味。
优选地,所述步骤一中获取数据集;具体过程为:
步骤一一、在开源代码库AndroZooOpen中下载Android应用程序;
步骤一二、使用工具RepoReapers去除低质量的Android应用程序,得到最终Android应用程序作为代码语料库,获取数据集。
优选地,所述步骤一二具体过程为:
步骤一二一、使用JavaParser将Android应用程序源代码解析生成代码的抽象语法树;
步骤一二二、使用工具ASSD对代码的抽象语法树进行MIM异味检测,输出MIM异味检测结果;将MIM异味检测结果中的漏检和误检移除;将移除漏检和误检后的检测结果中存在MIM异味的方法和不存在MIM异味的方法分别提取到单独的文件夹中,存在MIM异味的方法对应的代码语料库中的程序构成正样本集,不存在MIM异味的方法对应的代码语料库中的程序构成负样本集;
所述MIM为忽略成员的方法。
优选地,所述步骤一二二具体过程为:
步骤一二二一、使用工具ASSD对代码的抽象语法树进行MIM异味检测,输出MIM异味检测结果;
步骤一二二二、将步骤一二二一输出的MIM异味检测结果中的漏检和误检移除;具体过程为:
根据工具DAAP中检测规则遍历步骤一二二一输出的MIM异味检测结果中的类中的方法,判断MIM异味检测结果中的类中的方法是否为空方法,静态方法或者子类覆盖父类的方法,如果是,则将MIM异味检测结果中的类中的方法放入不含异味的方法的集合nonsmellySets中;如果不是,根据MIM异味检测结果中的类中的方法是否访问所在类的属性判断是否为MIM异味,如果没有访问所在类的属性,则是MIM异味,放入含异味的方法的集合smellySets中,如果访问所在类的属性,则不是MIM异味,放入不含异味的方法的集合nonsmellySets中;
步骤一二二三、将移除漏检和误检后的检测结果中存在MIM异味的方法和不存在MIM异味的方法分别提取到单独的文件夹中,存在MIM异味的方法对应的代码语料库中的程序构成正样本集,不存在MIM异味的方法对应的代码语料库中的程序构成负样本集。
优选地,所述步骤二中对数据集进行预处理,得到预处理后的数据集;具体过程为:
使用工具Tokenizer将样本集合中的代码语料转换为整数,用数字向量表示程序文本信息;
删除程序文本信息中的重复样本;
将数字向量表示的程序文本信息进行归一化处理;
将归一化处理后的数字向量表示的程序文本信息作为深度神经网络分类器的输入数据。
优选地,所述步骤三中深度神经网络分类器为改进卷积神经网络模型CNN、改进循环神经网络模型RNN、CNN与RNN相结合的模型CNN-LSTM、自编码全连接变体、自编码CNN变体中任意一个。
优选地,所述改进卷积神经网络模型CNN依次包括嵌入层、第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第三最大池化层、Dropout层、Flatten层、第一全连接层,第二全连接层、输出层;
所述嵌入层中将mask_zero参数设置为True;
所述Dropout层的脱落率设置为0.5;
所述第一全连接层的激活函数为relu激活函数;
所述第二全连接层的激活函数为sigmoid函数;
改进卷积神经网络模型CNN损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集输入改进卷积神经网络模型CNN,训练N次,得到训练好的改进卷积神经网络模型CNN。
优选地,所述改进循环神经网络模型RNN依次包括嵌入层、一个长短时记忆网络LSTM、Flatten层、第一全连接层、第二全连接层、第三全连接层、输出层;
所述第一全连接层神经元个位为64;
所述第二全连接层神经元个位为32;
所述第三全连接层神经元个位为1;
所述第一全连接层、第二全连接层激活函数为relu函数;
所述第三全连接层激活函数为sigmoid函数;
所述LSTM层的输出维度设置为128;
所述第三全连接层的输出为一维向量;
所述循改进环神经网络模型RNN损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集输入改进循环神经网络模型RNN,训练M次,得到训练好的改进循环神经网络模型RNN。
优选地,所述CNN与RNN相结合的模型CNN-LSTM依次包括嵌入层、第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第三最大池化层、一个长短时记忆网络LSTM、一个Dropout层、一个Flatten层、第一全连接层、第二全连接层、第三全连接层、输出层;
所述第一卷积层过滤器个数为32,内核大小为3;
所述第一最大池化层窗口大小为2;
所述第二卷积层过滤器个数为64,内核大小为3;
所述第二最大池化层窗口大小为2;
所述第三卷积层过滤器个数为64,内核大小为3;
所述第三最大池化层窗口大小为2;
所述LSTM层的输出维度设置为128;
所述Dropout层的脱落率设置为0.5;
所述第一全连接层神经元个数分别为64;
所述第二全连接层神经元个数分别为32;
所述第三全连接层神经元个数分别为1;
所述第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第三最大池化层、第一全连接层和第二全连接层激活函数为relu激活函数;
所述第三全连接层激活函数为sigmoid激活函数;
所述CNN与RNN相结合的模型CNN-LSTM损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集输入CNN与RNN相结合的模型CNN-LSTM,训练K次,得到训练好的CNN与RNN相结合的模型CNN-LSTM。
优选地,自编码全连接变体包括编码部分和解码部分;
编码部分依次包括第一全连接层、第二全连接层、第三全连接层;
解码部分依次包括第四全连接层、第五全连接层、第六全连接层;
编码部分:
所述第一全连接层神经元个位为1024,激活函数为tanh;
所述第二全连接层神经元个位为512,激活函数为relu;
所述第三全连接层神经元个位为256,激活函数为relu;
解码部分:
所述第四全连接层神经元个位为512,激活函数为relu;
所述第五全连接层神经元个位为1024,激活函数为tanh;
所述作为输出层第六全连接层神经元个位为1024,激活函数为sigmoid;
所述自编码全连接变体损失函数为regularizers.L1函数,优化器为RMSProp;
将步骤二预处理后的数据集输入自编码全连接变体,训练L(20)次,得到训练好的自编码全连接变体。
优选地,自编码CNN变体包括编码部分和解码部分;
编码部分依次包括嵌入层、第一卷积层、第一最大池化层、第二卷积层、第二最大池化层;
解码部分依次包括第三卷积层、第一上采样层、第四卷积层、第二上采样层、Fatten层和全连接层;
编码部分:
所述第一卷积层过滤器个数为32,内核大小为3;
所述第一最大池化层窗口大小为2;
所述第二卷积层过滤器个数为64,内核大小为3;
所述第二最大池化层窗口大小为2;
解码部分:
所述第三卷积层过滤器个数为8,内核大小为3;
所述第一上采样层窗口大小为2;
所述第四卷积层过滤器个数为64,内核大小为3;
所述第二上采样层窗口大小为2;
所述全连接层神经元个位为1;
所述第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第一上采样层、第四卷积层、第二上采样层、Fatten层和全连接层的激活函数为relu激活函数;
所述自编码CNN变体损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集分别输入自编码CNN变体,训练Q(20)次,得到训练好的自编码CNN变体。
本发明的有益效果为:
Android特有代码异味共包括30种味道,本发明针对其中一种异味,忽略成员的方法,展开深入研究,研究其自动化检测方法;本发明提出基于深度学习的忽略成员的方法检测策略,该方法将程序文本信息作为特征集对模型进行训练,目的是避免模型因受限于度量信息,无法学习到度量之外的特征,以提高模型的检测效果。然后,使用五种深度神经网络分类器进行检测。
本发明的主要贡献包括以下3个方面:
1)选取卷积神经网络CNN和循环神经网络RNN作为基础分类器,构建改进卷积神经网络模型CNN、改进循环神经网络模型RNN、CNN与RNN相结合的模型CNN-LSTM、自编码全连接变体和自编码CNN变体实现忽略成员的方法的异味检测;
2)提出一种基于Android项目构建正负样本的方法;通常情况下,深度学习模型需要大量的标记数据作为训练样本,虽然在图像处理领域,研究者可以免费获得这些数据;但在代码异味检测研究中,目前还没有类似的资源可供使用[18]。手工标记样本数据不仅耗时费力,准确率低,而且难以收集足够的训练样本[16]。因此,为了快速、准确获得深度学习模型所需的大量标签数据,本发明提出了一种基于开源Android项目构造正负样本的方法并实现工具ASSD,实现从异味检测到样本生成自动完成。该工具在DAAP的基础上,对其功能进行扩展,首先,对基于程序分析的检测工具的输出结果进行漏检处理和误检移除操作,以提高检测工具的精度,然后,提取检测工具的输出结果,实现忽略成员的方法样本的自动生成和标注。
3)使用开源Android数据集进行实验验证;实验结果表明,通过对比五种深度神经网络分类器的检测效果,得出综合性能最优的是改进CNN模型,并以此为基础模型与已有基于程序分析的检测方法对比。同时,参考面向对象代码异味检测的结果,选取性能最优的四种传统的机器学习模型与本发明提出的基于深度学习的检测方法进行对比,进一步验证了方法的有效性。
附图说明
图1为基于深度学习的MIM检测方法图;图2为一个MIM异味实例图;图3为自动生成正负样本的流程图;图4为Tokenizer标记MIM示例图;图5为文本信息数据格式图;图6为基于CNN的神经网络分类器流程图;图7为基于RNN的深度神经网络分类器流程图;图8为基于CNN与RNN相结合的深度神经网络分类器CNN-LSTM流程图;图9为自编码深度神经网络分类器的变体流程图,(a)为使用全连接层的自编码深度神经网络分类器的变体流程图,(b)为使用CNN层的自编码深度神经网络分类器的变体流程图;图10为不同检测工具在不同模型下MIM异味检测结果F1值示意图。
具体实施方式
具体实施方式一:本实施方式基于深度学习的忽略成员的方法检测策略具体过程为:
本发明使用深度学习方法检测忽略成员的方法这种Android特有代码异味。首先,分析大量源码,从类中提取忽略成员的方法,并将源代码转换成数字信息作为模型输入的特征集,然后,使用改进卷积神经网络模型CNN、改进循环神经网络模型RNN、CNN与RNN相结合的模型CNN-LSTM、改进第一自编码模型和改进第二自编码模型共五种深度神经网络分类器进行检测。接着,在保证模型输入的特征集相同的情况下,对比四种机器学习模型的检测效果。实验结果表明,基于深度学习的检测方法不仅可以检测Android特有代码异味,而且检测效果优于基于机器学习的方法和基于程序静态分析的检测方法。此外,为了快速、准确生成深度学习模型所需的大量训练集和测试集,本发明提出了一种利用开源Android应用程序自动构建正负样本的工具的方法并实现工具ASSD,工具ASSD对检测工具的输出结果进行误检和漏检移除操作,提高检测结果的精度,并能提取检测结果自动生成正负样本集。
从2014年Android应用程序中代码异味相关研究出现至今,不断有优秀的科研成果和自动化检测工具被提出,在Android应用程序特有代码异味研究领域,依旧有无尽探索空间。目前,本发明主要从异味检测的角度只对忽略成员的方法这种关键程度值最高的Android代码异味进行检测,提出了基于深度学习的异味检测方法,为MIM检测方法研究提供了一种新的思路和途径,研究结果也显示了深度学习在检测异味MIM上的优势。
1.1、Android特有代码异味
Android特有代码异味,也被称为安卓代码坏味[3],是Android应用程序中存在设计缺陷的代码段[2].2014年Reimann等人[4]提出“质量味道”的概念,用以表示Android应用程序中影响软件质量的代码结构,并具体列出了30种质量味道.这些质量味道被后续的研究称为Android特有代码异味[2,3,10,13].这种异味对Android应用程序产生了诸多负面影响,比如能耗、安全性、稳定性、内存和启用时间等,不利于Android应用程序的维护和演化[14].根据Manman等人的研究[9],传统检测工具不能检测Android特有代码异味。目前检测Android特有代码异味的开源工具主要有3个,如表1所示。
表1仅支持Android特有代码异味检测的工具
3个检测工具的对比如下:
(1)3个工具所检测的异味均来自Reimann等人[3]提出的异味列表。
(2)3个工具都利用抽象语法树当作中间形式来解析Java程序。不同的是,DAAP针对存在于XML程序中的代码异味,使用文档对象模型(Document Object Model,模型)来解析XML程序。PAPRIKA则是使用Soot框架[19]及其Dexpler模块[20]来分析APK文件。
(3)PAPRIKA除了可以检测Android特有代码异味,还可以检测4种面向对象的代码异味[5,21,22],aDoctor和DAAP则只能检测Android特有代码异味。
(4)aDoctor除了能够检测异味,还可以对其中5种与能耗相关的异味进行重构[11],而DAAP和PAPRIKA不能进行重构操作。
1.2、忽略成员的方法
忽略成员的方法(Member Ignoring Method,简称MIM)是一种Android特有代码异味,这种代码异味是Reimann等人[4]提出的30种Android特有代码异味的一种,研究表明MIM是存在于Android应用程序中数量最多的一种异味,也是最受学术界关注的异味[2,10,11,12,13],因此,根据代码异味关键程度量化方法可知[3],忽略成员的方法是30种Android特有代码异味中关键程度值最高的异味,关键程度越高,表明其影响越大,应该得到关注与重构的优先级越高,MIM的存在对Android应用程序有诸多负面影响,比如,增加程序的能耗,降低程序的可维护性等,MIM是某个类中的方法,该方法既不是空方法,也不是静态方法,同时也不包括子类覆盖父类的方法,但该方法没有访问所在类的任何属性[2],如图2所示为Android应用程序中的一段含有MIM异味的代码段,onClick的方法体中没有使用其所在类AppChooser的任何属性,MIM异味增加Android程序的能耗,不利于程序的维护[23],作为Android应用程序中关键程度值最高的异味,使用工具aDoctor和DAAP都可以检测。
综上所述,已有的检测方法主要采用传统的程序静态分析技术,依赖于不同的代码度量以及相应的阈值检测包括MIM在内的Android特有代码异味,然而,这种基于规则的检测方法,往往需要做大量的校准工作,目的是为每个度量找到合适的阈值,而不同工具之间的选择阈值缺乏一致性,这将导致不同检测方法的检测结果存在较大的差异[23];此外,与传统面向对象异味检测工具类似,Android代码异味检测工具存在较多的误检和漏检现象,为后续异味的重构带来隐患。
1.3使用机器学习方法检测代码异味
随着机器学习技术的迅速发展,以及以Github开源代码库为支撑的“Big Code”的出现[18],软件工程领域的学者们尝试使用机器学习或者深度学习方法检测代码异味,Khomh等人[8]使用贝叶斯信念网络模型对代码异味进行检测,Abdou等人[14]使用支持向量机检测代码异味,Fontana等人[12]使用16种机器学习模型(SVM、J48、朴素贝叶斯和随机森林等)对4种面向对象代码异味进行检测,对比不同算法检测代码异味的效果,艾成豪等人[24]提出基于Stacking集成学习模型的代码异味检测方法,这种方法通过将不同机器学习算法集成到统一的框架下,从而提高单一模型的泛化能力;以上研究使用的特征集都是传统的代码度量。
为了学习更为复杂的逻辑关系,以获得更好的检测效果,学者们在机器学习研究的基础上,将深度学习技术用于代码异味检测,刘辉等人[17]提出一种基于卷积神经网络的方法检测依恋情结异味,获得了很好的检测结果;在此基础上,他们将卷积神经网络和长短时记忆网络相结合,检测4种代码异味[25],以上两项研究在训练模型时,不仅使用了传统的代码度量,还结合了代码文本信息(变量的标识符);Sharma等人[18]分别使用卷积神经网络、循环神经网络和自编码器对4种代码异味进行检测,Sharma认为使用代码度量作为模型的输入,机器学习算法受限于度量信息,无法获得度量以外的源代码特征,影响模型的学习效果,此外,即便使用相同的度量,因为阈值的不同,导致不同检测方法的检测结果存在较大的差异[18],另外,度量选取的主观性也会影响检测效果[18],因此,Sharma没有使用任何传统的度量信息,而是使用程序文本信息作为模型的输入,Sharma使用的程序文本信息不同于刘辉[17]使用的文本信息(仅标识符),Sharma将源代码转换为整数,以数字向量形式表示程序的文本信息,这种文本信息涵盖了程序的全部信息。本发明借鉴这种方法,获取源代码文本特征。
综上所述,已有使用机器学习或者深度学习的方法都只关注传统面向对象代码异味,没有使用机器学习方法检测Android特有代码异味的相关研究。本发明提出一种基于深度学习的MIM检测策略;首先,在训练集的收集方面,现有方法需要经过多个中间转换过程[18],不能自动完成,过程繁琐,浪费时间,同时也存在引入样本噪音的可能[16],为了快速、准确获得深度学习模型所需的标签数据,本发明提出一种基于Android开源代码构建正负样本集的方法,并实现工具ASSD,自动生成模型需要的大量标签数据。
步骤一、获取数据集;
步骤二、对数据集进行预处理,得到预处理后的数据集;
步骤三、构建深度神经网络分类器,并得到训练好的深度神经网络分类器;
步骤四、对待测Android特有代码异味输入训练好的深度神经网络分类器,输出待测Android特有代码异味中是否存在成员异味。
具体实施方式二:本实施方式与具体实施方式一不同的是,所述步骤一中获取数据集;具体过程为:
步骤一一、在开源代码库AndroZooOpen[26]中下载Android应用程序;
步骤一二、使用工具RepoReapers[27]去除低质量的Android应用程序,得到最终Android应用程序作为代码语料库,获取数据集;具体过程为:
步骤一二一、使用JavaParser将Android应用程序源代码解析生成代码的抽象语法树;
步骤一二二、使用工具ASSD对代码的抽象语法树进行MIM异味检测,输出MIM异味检测结果;将MIM异味检测结果中的漏检和误检移除;将移除漏检和误检后的检测结果中存在MIM异味的方法和不存在MIM异味的方法分别提取到单独的文件夹中,存在MIM异味的方法对应的代码语料库中的程序构成正样本集,不存在MIM异味的方法对应的代码语料库中的程序构成负样本集;
所述MIM为忽略成员的方法。
其它步骤及参数与具体实施方式一相同。
具体实施方式三:本实施方式与具体实施方式一或二不同的是,所述步骤一二二具体过程为:
步骤一二二一、使用工具ASSD对代码的抽象语法树进行MIM异味检测,输出MIM异味检测结果;
步骤一二二二、由于DAAP输出的MIM异味检测结果中存在许多漏检和误检;
将步骤一二二一输出的MIM异味检测结果中的漏检和误检移除;具体过程为:
如算法1所示,根据工具DAAP中检测规则遍历步骤一二二一输出的MIM异味检测结果中的类中的方法,判断MIM异味检测结果中的类中的方法是否为空方法,静态方法或者子类覆盖父类的方法,如果是,则将MIM异味检测结果中的类中的方法放入不含异味的方法的集合nonsmellySets中;如果不是,根据MIM异味检测结果中的类中的方法是否访问所在类的属性判断是否为MIM异味,如果没有访问所在类的属性,则是MIM异味,放入含异味的方法的集合smellySets中,如果访问所在类的属性,则不是MIM异味,放入不含异味的方法的集合nonsmellySets中;
DAAP是一个检测工具,DAAP的输出结果就是代码异味,这种代码异味是方法级别的,就是一个方法,一个方法,这些方法都在类中。
比如Java程序中有很多类,每个类中也有很多方法,假如有十个方法,可能有五个方法是异味,另外五个方法就不是异味,那我就要找这五个是异味的。
步骤一二二三、将移除漏检和误检后的检测结果中存在MIM异味的方法和不存在MIM异味的方法分别提取到单独的文件夹中,存在MIM异味的方法对应的代码语料库中的程序构成正样本集,不存在MIM异味的方法对应的代码语料库中的程序构成负样本集。
2忽略成员的方法检测策略
为了自动检测MIM,本发明提出了一种基于深度学习的检测方法;
2.1方法概述
本发明提出的基于深度学习的MIM检测方法如图1所示;首先,以开源的Android应用程序作为实验所需的代码语料库。使用工具ASSD对语料库中的程序进行MIM异味检测,并将每个正样本(含有MIM的方法)和负样本(没有MIM的方法)分别从Java源程序中自动提取到单独的文件中,生成标签样本集,即正样本集合与负样本集合;然后,使用工具Tokenizer将标签样本集中的源代码转换为整数,以数字向量的形式表示程序的文本信息,作为模型输入的特征集;深度神经网络分类器的预期输出为样本的标签(即是否为MIM代码异味);经过50次训练验证后,最终获得被训练好的分类器。然后通过测试集测试分类器性能,并给出代码异味的检测结果。
2.2正负样本构建方法
目前可以检测Android特有代码异味的工具只有aDoctor、DAAP和PAPRIKA三个。但是,针对方法级异味MIM的检测,三个检测工具都存在一定的不足,不利于构建本发明研究所需的大量数据集。其中aDoctor从同一个类中只能提取一个MIM异味实例,而实际程序中,在一个类中可能存在多个MIM异味。DAAP虽然可以从同一个类中提取多个MIM异味实例,但它的检测结果只能定位到其所在类,无法精准定位到具体的方法。PAPRIKA同样不利于构建本发明研究所需的大量数据集。
为此,本节提出了新的检测工具ASSD,本发明使用的工具ASSD是在检测工具DAAP的基础上对其功能进行扩展,实现从异味检测到样本生成自动完成。首先,使用JavaParser将待分析的Android应用程序源代码解析生成抽象语法树,然后根据异味检测规则遍历语法树,输出异味;由于DAAP输出的异味中存在许多漏检和误检,所以,首先需要处理异味的漏检和移除误检;然后,将每个正样本和负样本分别从Java源程序中自动提取到单独的文件中,生成大量标签样本集;图3中实线框包含部分为异味检测工具ASSD,虚线框包含部分为DAAP工具,虚线框外的功能是本发明在DAAP基础上扩展的功能,以实现误检和漏检的移除和正负样本自动分离。
DAAP是目前检测异味种类最多,无论在检测的异味种类还是检测精度方面,都优于知名的检测工具aDoctor[10]并且,目前,检测准确度最好的Android特有代码异味检测工具.DAAP可以检测包括MIM在内的25种Android特有代码异味,无论在检测的异味种类还是检测精度方面都优于检测工具aDoctor[10];此外,DAAP的源代码完全公开,使用者不仅可以免费获得,还可以在其基础上进行功能扩展,以满足不同的需求;因此,本发明选择DAAP检测MIM异味;但是,通过实际使用DAAP检测代码异味,我们发现DAAP检测出的MIM异味中存在很多漏检和误检;首先,对于每个类中的方法,如果DAAP检测出一个有MIM异味的方法,则跳出循环,不再检测类中的其他方法,而类中其他方法中也可能存在MIM异味,因而引起漏检;其次,根据MIM的定义[2],MIM是非空非静态的方法,子类覆盖父类的方法也不属于MIM,但是,DAAP输出的异味中,包含空方法和子类覆盖父类的方法,误检率很高;这些漏检和误检对检测结果造成了严重的干扰,成为样本噪音[16];为了减少这种样本噪音对后续神经网络分类器训练结果的影响,本发明在DAAP的基础上,对其功能进行扩展,提出基于Android开源代码构建正负样本集的方法并实现工具ASSD;它不仅可以处理漏检和移除误检,提高检测结果的精度,还可以将检测结果中每个存在MIM的方法和不存在MIM的方法提取到单独的文件夹中,生成正负样本集;因此,ASSD从异味检测到样本生成完全自动完成;算法1所示为移除漏检和误检的过程;算法2所示为正负样本自动生成的过程。
算法1.移除漏检和误检;
/>
如算法1所示,对于类中的每个方法,首先判断该方法是否为空方法,静态方法或者子类覆盖父类的方法,如果是,则将该方法放入不含异味的方法的集合nonsmellySets.如果不是,根据方法是否访问所在类的属性判断是否为MIM异味,如果没有使用所在类的属性,则是MIM异味,放入smellySets,如果使用所在类的属性,则不是MIM异味,放入nonsmellySets。
算法2.正负样本自动生成;
在开源代码库AndroZooOpen[26]中下载Android应用程序,作为备选的代码语料库.AndroZooOpen是一个公开的Android应用程序集合,包括Gitbub、F-Droid和GooglePlay在内的多个数据来源。AndroZooOpen目前包含76,466个由不同语言开发的Android应用程序;本发明选择的Android应用程序主要是由Java语言开发。
首先,从AndroZooOpen下载110个开源Android应用程序;然后,使用工具RepoReapers[27]去除低质量的Android应用程序;RepoReapers可以从8个方面对AndroZooOpen中的程序质量进行评分(分别是体系结构、社区、持续集成、文件、提交历史、许可证、问题和单元测试)。如果待选应用程序在7个方面的评分均大于零,则选取该程序;经过筛选,最终确定70个Android应用程序作为代码语料库,这70个应用程序共包含747264行代码,9574个类和87320个方法。
在深度学习的传统应用领域,研究者可以免费获得大量带有标签的图像数据集,用以构建模型的训练集。而在代码异味检测研究中,目前还没有类似的资源可供研究者使用[16]。为了解决这个问题,刘辉团队和Sharma团队利用已有代码异味检测工具的输出结果,构建模型的训练集。本发明借鉴这种方法,使用工具ASSD检测异味MIM并自动生成正、负样本集。
其它步骤及参数与具体实施方式一或二相同。
具体实施方式四:本实施方式与具体实施方式一至三之一不同的是,所述步骤二中对数据集进行预处理,得到预处理后的数据集;具体过程为:
使用工具Tokenizer[18]将样本集合中的代码语料转换为整数,用数字向量表示程序文本信息;
删除程序文本信息中的重复样本;
将数字向量表示的程序文本信息进行归一化处理;
将归一化处理后的数字向量表示的程序文本信息作为深度神经网络分类器的输入数据。
异味检测工具ASSD的输出结果是程序代码,而深度学习模型需要的输入是数字向量,因此,为了使用深度学习算法进行异味检测,需要将程序代码转换成数字向量;Sharma等人[18]认为,只使用代码度量作为特征集,模型受限于度量信息,无法学习到度量之外的程序特征;因此,Sharma使用工具Tokenizer[18]将源代码转换为整数,用数字向量表示程序文本信息,并将这些数字向量作为模型的输入数据;Tokenizer是一种开源工具,它提供了可以将源代码转换为整数的功能,其中不同的代码信息匹配不同的整数,图4所示为一个MIM异味方法的java源代码由Tokenizer转化成相对应的整数。
本发明参考Sharma等人的方法,将ASSD分离出的标签样本集中的源代码转换成数字向量,用这些数字向量表示代码文本信息,作为模型输入的特征集,其数据集格式如图5所示。
通过对Tokernizer提取的代码文本特征统计和分析中发现,80%的方法中不会超过61个元素;为了避免因特征过多而导致的维度***,本发明将模型输入的单个样本中的代码文本特征个数固定在61个,即只针对被检测方法中的61个元素进行预处理,将方法中元素少于61个以零填补;
2.4数据归一化
在构建模型之前,由于数据的来源不同,需将不同形式的数据进行归一化处理;数据归一化可以增强分类器的性能,提高模型的质量[28];本发明选择常用的Min-Max标准化对数据进行归一化;对于一个样本数X={x1,x2,…xn},Min-Max变换方法如公式(1)所示,其中Xi *∈[0,1];
/>
其它步骤及参数与具体实施方式一至三之一相同。
具体实施方式五:本实施方式与具体实施方式一至四之一不同的是,所述步骤三中深度神经网络分类器为改进卷积神经网络模型CNN、改进循环神经网络模型RNN、CNN与RNN相结合的模型CNN-LSTM、自编码全连接变体、自编码CNN变体中任意一个。
常规认知针对自然语言处理(文本)和代码处理循环神经网络模型RNN要优于卷积神经网络模型CNN;但本发明验证针对代码处理改进卷积神经网络模型CNN优于改进循环神经网络模型RNN;但改进卷积神经网络模型CNN或改进循环神经网络模型RNN对代码处理结果都优于传统卷积神经网络模型CNN或循环神经网络模型RNN;
2.5深度神经网络分类器
本发明使用五种常用的深度神经网络模型进行异味检测,分别为改进卷积神经网络模型CNN、改进循环神经网络模型RNN、CNN与RNN相结合的模型CNN-LSTM、自编码全连接变体和自编码CNN变体。其中CNN与RNN两种模型既是经典的深度神经网络模型,也是在异味检测中使用频率最高的模型[29]。
其它步骤及参数与具体实施方式一至四之一相同。
具体实施方式六:本实施方式与具体实施方式一至五之一不同的是,所述改进卷积神经网络模型CNN依次包括嵌入层、第一卷积层(Convolution 1D(1维))、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第三最大池化层、Dropout层、Flatten层、第一全连接层,第二全连接层、输出层;
所述嵌入层中将mask_zero参数设置为True;
所述Dropout层的脱落率设置为0.5;
所述第一全连接层的激活函数为relu激活函数;
所述第二全连接层的激活函数为sigmoid函数;
改进卷积神经网络模型CNN损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集输入改进卷积神经网络模型CNN,训练50次,得到训练好的改进卷积神经网络模型CNN。
2.5.1卷积神经网络模型
卷积神经网络(Convolutional Neural Networks,CNN)是深度学习的代表算法之一,是一种包含卷积计算的前馈神经网络。本发明使用的CNN模型结构如图6所示,表2为CNN模型结构各层数选定的参数值。首先,将文本信息转换成数值信息,然后,输入到嵌入层(Embedding),进行重新编码等操作。为了避免输入数组中填充零产生的噪声,在嵌入层中将mask_zero参数设置为True,只考虑输入数据的有意义部分。接着,进入到卷积层(Convolution 1D)和最大池化层(Max pooling),卷积层根据指定的滤波器(filter)和内核参数进行卷积运算,相应地计算到下一层的网络权重,最大池化层降低了矩阵的维度进而减小计算量和消除了数据噪音。最后一个池化层的输出连接到Dropout层,根据相应的概率删除一部分的神经元,然后开始训练,更新没有被删除的神经元以及权重的参数将其保留,以防止过度拟合等问题。该层的脱落率设置为0.5,表示要被拿掉的神经元是随机选择的,概率为0.5。Dropout层的输出被输入到Flatten层把多维的数据一维化,最后输入到第一个全连接层(Dense),本全连接层激活函数为relu函数输出一组包含800个输出的数据。再由一层全连接层映射到最终的Sigmoid输出层,输出层激活函数为sigmoid函数,输出维度为1,以便根据所调查的异味来预测一个实例是否属于该异味。最终选取的模型损失函数(loss function)为binary_crossentropy函数,优化器(optimizer)为RMSProp,迭代次数(epoch)为50次。
表2CNN模型层数参数值
{2239,8,66}代表Embedding层真值,2239种字符空间,数据里面的数字种类一共2239种,对每种字符重新编译8维的编码,输入数据最大长度66;
{32,64}代表Convolution层真值,32个卷积核,64个卷积核;
{2,3}代表卷积层内核大小为2和3,内核的大小控制着卷积窗口的大小;
{2}代表Max pooling层真值,对邻域内特征点取最大2,池化窗口的大小控制着池化操作过程中的降采样窗口的大小。
其它步骤及参数与具体实施方式一至五之一相同。
具体实施方式七:本实施方式与具体实施方式一至五之一不同的是,所述改进循环神经网络模型RNN依次包括嵌入层、一个长短时记忆网络LSTM、Flatten层、第一全连接层、第二全连接层、第三全连接层、输出层;
所述第一全连接层神经元个位为64;
所述第二全连接层神经元个位为32;
所述第三全连接层神经元个位为1;
所述第一全连接层、第二全连接层激活函数为relu函数;
所述第三全连接层为sigmoid函数;
所述LSTM层的输出维度设置为128;
所述第三全连接层的输出为一维向量;
所循改进环神经网络模型RNN损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集输入改进循环神经网络模型RNN,训练50次,得到训练好的改进循环神经网络模型RNN。
2.5.2循环神经网络模型
循环神经网络(Recurrant Neural Networks,RNN)也是深度学习的代表算法之一,用以处理序列数据。如图7所示为检测MIM异味的RNN模型的体系结构图,表3为RNN模型结构各层数选定的参数值,该结构受到自然语言建模中RNN模型的启发,由一个嵌入层、一个长短时记忆网络(long short-term memory,简称LSTM)、Flatten层和全连接层组成。同CNN模型类似,以数值信息作为输入经过嵌入层进入到LSTM层。原始的RNN在训练中,随着训练时间的加长以及网络层数的增多,容易出现梯度***或梯度消失的问题,导致无法处理较长序列数据,从而无法获取长距离数据的信息,为了解决这些问题,本发明选用了长短时记忆网络。将LSTM层的输出维度设置成128,经过Flatten层输入到三个全连接层,前两层激活函数为relu函数,最后输出层激活函数为sigmoid函数,最终输出一维向量。与CNN模型一样(选取的模型损失函数(loss function)为binary_crossentropy函数,优化器(optimizer)为RMSProp,迭代次数(epoch)为50次)。
表3RNN模型层数参数值
{64,32,1}代表全连接层由三层构成,每层神经元个位分别为64,32,1。
其它步骤及参数与具体实施方式一至五之一相同。
具体实施方式八:本实施方式与具体实施方式一至五之一不同的是,所述CNN与RNN相结合的模型CNN-LSTM依次包括嵌入层、第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第三最大池化层、一个长短时记忆网络LSTM、一个Dropout层、一个Flatten层、第一全连接层、第二全连接层、第三全连接层、输出层;
所述第一卷积层过滤器个数为32,内核大小为3;
所述第一最大池化层窗口大小为2;
所述第二卷积层过滤器个数为64,内核大小为3;
所述第二最大池化层窗口大小为2;
所述第三卷积层过滤器个数为64,内核大小为3;
所述第三最大池化层窗口大小为2;
所述LSTM层的输出维度设置为128;
所述Dropout层的脱落率设置为0.5;
所述第一全连接层神经元个数分别为64;
所述第二全连接层神经元个数分别为32;
所述第三全连接层神经元个数分别为1;
所述第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第三最大池化层、第一全连接层和第二全连接层激活函数为relu激活函数;
所述第三全连接层激活函数为sigmoid激活函数;
所述CNN与RNN相结合的模型CNN-LSTM损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集输入CNN与RNN相结合的模型CNN-LSTM,训练K(50)次,得到训练好的CNN与RNN相结合的模型CNN-LSTM。
卷积神经网络与循环神经网络相结合的模型CNN-LSTM
卷积神经网络CNN擅长处理图像数据,循环神经网络RNN擅长处理文本数据。两种经典的神经网络模型相结合后生成新的神经网络模型CNN-LSTM,用以检测MIM异味。如图8所示为检测MIM异味的CNN-LSTM模型的体系结构图,表4所示为CNN-LSTM模型结构各层数选定的参数值,该结构由一个嵌入层、一个卷积层、一个最大池化层、一个长短时记忆网络(long short-term memory,简称LSTM)、一个Dropout层、一个Flatten层和全连接层组成。
表4CNN-LSTM模型层数参数值
其它步骤及参数与具体实施方式一至五之一相同。
具体实施方式九:本实施方式与具体实施方式一至五之一不同的是,所述自编码全连接变体包括编码部分和解码部分;
编码部分依次包括第一全连接层、第二全连接层、第三全连接层;
解码部分依次包括第四全连接层、第五全连接层、第六全连接层;
编码部分:
所述第一全连接层神经元个位为1024,激活函数为tanh;
所述第二全连接层神经元个位为512,激活函数为relu;
所述第三全连接层神经元个位为256,激活函数为relu;
解码部分:
所述第四全连接层神经元个位为512,激活函数为relu;
所述第五全连接层神经元个位为1024,激活函数为tanh;
所述作为输出层第六全连接层神经元个位为1024,激活函数为sigmiod;
所述自编码全连接变体损失函数为regularizers.L1函数,优化器为RMSProp;
将步骤二预处理后的数据集输入自编码全连接变体,训练L(20)次,得到训练好的自编码全连接变体。
所述自编码全连接变体使用全连接层作为其编码与解码层的主要组成部分。
其它步骤及参数与具体实施方式一至五之一相同。
具体实施方式十:本实施方式与具体实施方式一至五之一不同的是,所述自编码CNN变体包括编码部分和解码部分;
编码部分依次包括嵌入层、第一卷积层、第一最大池化层、第二卷积层、第二最大池化层;
解码部分依次包括第三卷积层、第一上采样层、第四卷积层、第二上采样层、Fatten层和全连接层;
编码部分:
所述第一卷积层过滤器个数为32,内核大小为3;
所述第一最大池化层窗口大小为2;
所述第二卷积层过滤器个数为64,内核大小为3;
所述第二最大池化层窗口大小为2;
解码部分:
所述第三卷积层过滤器个数为8,内核大小为3;
所述第一上采样层窗口大小为2;
所述第四卷积层过滤器个数为64,内核大小为3;
所述第二上采样层窗口大小为2;
所述全连接层神经元个位为1;
所述第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第一上采样层、第四卷积层、第二上采样层、Fatten层和全连接层的激活函数为relu激活函数;
所述自编码CNN变体损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集分别输入自编码CNN变体,训练Q(20)次,得到训练好的自编码CNN变体。
自编码CNN变体使用CNN作为其编码与解码层的主要组成部分。
其它步骤及参数与具体实施方式一至五之一相同。
研究表明,自编码模型可以有效检测出面向对象代码异味。但对于Android代码异味的检测效果,还是未知。本文使用自编码模型的2种变体,分别为以全连接层和CNN层作为主要组成部分。
如图9所示为检测MIM异味的自编码模型的2种变体的体系结构图。
实验设计与分析
实验环境如下:操作***是windows 10,处理器是Intel Core i7-7500U,内存是12GB,实验工具分别为PyCharm、IntelliJ IDEA和weka,编程语言为Python和Java。此外,实验相关工具(ASSD)和数据已上传至https://github.com/18745332164/MIMDetection.
研究问题
本发明围绕以下研究问题(Research question,简称RQ),展开实验研究:
RQ1:使用深度学习的方法是否能准确有效检测出MIM;如果可以检测,我们使用相同数据集作为模型输入,基于深度学习的检测方法是否优于基于传统机器学习的检测方法;
RQ2:本发明对DAAP进行误检和漏检消除的操作效果如何;与直接从DAAP输出的MIM异味结果相比,准确率是否有提升;
RQ3:基于深度学习的检测方法是否优于现有的基于程序静态分析的检测方法;
RQ4:本发明所提出的方法的效率如何;训练基于神经网络的分类器需要多长时间,利用已经训练好的模型做出预测又需要多长时间;
RQ1关注深度神经网络分类器和传统机器学习分类器检测异味的能力和差异性。在相同输入的前提下,使用查准率、查全率和F1值3个指标来评估不同分类器的有效性。对6种分类器的检测效果进行比较。
RQ2关注DAAP检测MIM时存在的问题。DAAP只对该类中的方法是否静态和是否使用了成员变量进行检测,但忽略了诸如空方法和子类覆盖父类的方法等情况。同时DAAP检测规则只在该类中检测出一个有MIM异味的方法后跳出循环,不再检测类中的其他方法,而类中其他方法中也可能存在MIM异味,因此会对样本造成误检和漏检从而产生数据噪声影响检测结果.
RQ3关注本发明方法与现有基于静态程序分析的检测方法检测MIM异味上的差异。为了回答这个问题,本发明选择DAAP作为评估阶段的对比实验对象。之所以选择DAAP,是因为DAAP是目前检测Android特有代码异味种类最多、检测准确度最好的工具。
RQ4关注本发明所提方法时间性能的具体表现。针对数据集上70个开源程序,记录了在整个检测MIM异味上的耗时情况。基于深度学习的方法通常需要很长时间来训练深度神经网络。然而,一旦神经网络被预先训练好,模型会很快给出预测结果,所以可以根据模型在训练数据和预测数据中所消耗的时间来探讨基于深度学习的方法在时间性能上的表现。
模型评价指标
本发明使用常用的查准率(Precision)、查全率(Recall)和F1值(F1-score)对模型进行评估,如公式(2)、(3)和(4)所示:
其中,公式中的TP(True Positive)为被检测为正的正样数,表示实际上阳性样本的数量;FP(False Positive)为被检测为正的负样本数,表示实际上是阴性样本但被判定为阳性样本的样本数量;FN(False Negative)为被检测为负的正样本数,表示实际上是阳性样本但被判定为阴性样本的样本数量;TN(True Negative)表示实际上是负样本的样本数量,也被判定为阴性样本。
实验设计
实验一:为了回答RQ1,构建程序文本数据集作为9种模型的输入,以相同的正负样本训练模型。在训练深度神经网络分类器时,即(卷积神经网络(CNN)、循环神经网络(RNN))。首先,将数据集按7:3的比例分成训练数据和测试数据,其中使用测试数据的判别效果来估计模型在实际使用时的泛化能力,然后,将训练数据再按8:2的比例划分为训练集和验证集,根据验证集上的性能来进行模型选择和调参,进行50次训练验证和1次测试得到检测结果。同时,使用工具weka完成基于传统机器学习的代码异味检测,其中,参考Fontana等人[15]的研究结果,选取其中性能最好的4种传统机器学习模型,即随机森林(RF)、J48、JRip、朴素贝叶斯(NB),作为本次实验的基础模型,然后,使用十折交叉验证对模型进行验证。最后,使用查准率、查全率、F1值对相同特征输入的6种模型分类器的检测效果进行比较。
实验二:为了回答RQ2,我们分别使用工具DAAP和ASSD检测MIM异味,然后对两组检测使用相同的方法进行筛选和预处理,接着分别输入9种模型进行检测。最后,以F1值作为标准,对比不同检测工具检测MIM异味的差异性。
实验三:为了回答RQ3,首先,从Palomba等人[15]提出的一个开源Android应用程序数据集(共60个Android应用程序)中选取10个开源Android应用程序作为测试程序.这10个应用程序与模型训练阶段的70个应用程序没有重叠;表5所示为使用的10个开源Android项目的详细信息;然后,将新的测试集输入已训练好的神经网络分类器中进行MIM异味检测;此外,为了进行对比,本发明使用检测工具DAAP对这10个应用程序进行MIM异味检测;为准确评价该工具的检测结果,本发明以Palomba等人[8]提出的MIM异味目录作为参考,使用查准率、查全率和F1值对检测方法的检测效果进行比较;
实验四:为了回答RQ4,本发明在普通配置的笔记本电脑(12GB RAM,Intel CoreCPU i7-7500)上运行实验的全部流程,并记录了耗时情况(以分钟为单位),对所提出方法的时间性能进行分析。
表5测试集所用的10个Android应用程序
实验结果与分析
RQ1:表6所示为深度神经网络分类器和传统机器学习分类器在输入相同特征的检测结果。
表6不同分类器在相同特征下的MIM检测结果
根据表6所示结果可以看出:
(1)在五种神经网络模型中,改进CNN和改进RNN神经网络模型的查准率、查全率和F1值都较高,因此使用深度神经网络检测缓慢循环异味是可行的,且检测效果很好,同时,改进CNN模型的检测效果均略优于改进RNN模型。在深度学习的传统应用领域,由于RNN模型更擅长处理文本,因此在自然语言处理领域有着广泛的应用。但Sharma等人认为[18],程序源代码与自然语言文本有很多不同之处,这些差异可能导致擅长处理自然语言文本的方法在处理程序源代码时表现不佳。同时他们的研究结果表明[18],在检测面向对象代码异味时,RNN模型的检测效果因味道的不同而发生变化,不一定比CNN检测效果好。根据表6结果,在检测MIM这种Android代码异味时,需要判断该方法是否为静态方法和是否使用了成员变量等情况,在判断识别能力上,改进CNN与改进RNN模型都较强,但改进RNN模型略逊色于改进CNN模型。在检测MIM这种异味时,CNN-LSTM模型的检测效果没有改进RNN好,由此表明,将两种模型相结合并没有增强神经网络的检测能力。此外,两种自编码模型的变体在检测这种味道时,其性能也没有改进CNN和改进RNN好。Sharma等人[18]的研究表明,在检测面向对象代码异味时,自编码网络的检测性能优于CNN与RNN模型。但如表6所示,在检测MIM这种Android代码异味时,自编码模型的性能逊色于改进CNN和改进RNN模型。
(2)分类器对MIM的检测性能综合排名为:改进卷积神经网络(CNN)>改进循环神经网络(RNN)>CNN与RNN相结合的神经网络(CNN-LSTM)>随机森林(RF)>J48>自编码CNN变体(Auto-Conv)>自编码全连接变体(Auto-Dense)>JRip>朴素贝叶斯(NB)。本发明所使用的深度神经网络模型检测结果普遍优于传统机器学***均提高了6.21%=(72.51%-66.3%)。
RQ2:表7分别列出了工具DAAP和ASSD在6种分类器下MIM的检测结果。
表7不同分类器在不同工具输出下的检测结果
根据表7的结果可以看出,除JRip外,工具ASSD的MIM异味效果均优于工具DAAP检测MIM异味的效果。其中,改进卷积神经网络的检测效果提高最为明显,其F1值提高了4.39%=(72.51%-68.12%)。如图10所示为两种工具在6种模型检测下F1值的对比结果。
由于检测规则自身的局限性,检测工具在检测异味的过程中会产生一定数量的误检及漏检。因此,本发明将工具DAAP和ASSD检测MIM异味的输出结果作为6种分类器的输入,通过对比检测结果的F1值可知,工具ASSD的检测精度高于DAAP。对比Sharma等人[18]采用人工复检数据的方法,本发明通过采用机器学习分类器的方法不仅大大节省了人力和物力,而且确保了数据的准确性。
RQ3:对表5中的10个Android应用程序,表8分别列出了五种深度神经网络分类器与基于静态程序分析检测工具DAAP的检测结果。
表8不同检测方法的结果比较
根据表8的结果可以看出,在相同测试程序的前提下,基于深度学***均提高了46.5%=(88.50%-42.00%);
RQ4:由于篇幅限制,表4仅列出了10个Android应用程序生成训练集所花费的时间,全部70个应用程序所消耗时间的详细信息请已上传至https://github.com/18745332164/MIMDetection;为了从70个Android应用程序中提取训练集数据,累计花费了1061分钟(约17.7小时),平均每个项目需要15.16分钟;其中,耗时最多的项目是AndroidChromium(类数=1007、方法数=1183、代码行数=89051,消耗149分钟),耗时最少的项目是xCalc(类数=33、方法数=201、代码行数=1548,耗时9分钟)。
表9生成训练集数据消耗的时间
与耗费17个多小时的训练集生成过程相比,深度神经网络分类器在70个开源项目上的训练过程消耗时间分别为:卷积神经网络为22.7s,循环神经网络为223.6s;使用训练好的分类器在10个开源APP上测试过程消耗的时间分别为:卷积神经网络为0.2s,循环神经网络为0.8s。CNN-LSTM为0.91s,自编码全连接变体为0.28s,自编码CNN变体为0.27s。因为自动生成训练集数据是可以提前实现的,所以并不需要在每次进行MIM异味检测时生成训练集。同时,改进CNN模型仅考虑当前输入,而改进RNN模型考虑当前输入以及先前接收的输入,故从时间上对比改进CNN模型在数据集训练上所需要的时间更少。
基于所提出的深度学习方法效率高的一个可能原因是,所采用的神经网络比广泛应用于图像或自然语言处理的神经网络要小得多,例如谷歌翻译器。例如,我们用于MIM异味检测的循环神经网络只有6层,最大层仅包含128个神经元。因此,这种网络的训练可以比由数百万个神经元组成的复杂深度神经网络要快得多。提高效率高的另一个原因是训练数据相当小。对于所检测的代码异味,我们生成的项目不超过3000条数据用于训练,所以要训练的神经网络相当小。
本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,本领域技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
参考文献
[1]Martin Fowler.Refactoring:improving the design of existing code(Second Edtion)[M].Beijing,China,Posts&Telecom Press,2019.
[2]Dario Di Nucci,Fabiano Pecorelli,Annibale Panichella,etal.Lightweight Detection of Android-specific Code Smells:the aDoctor Project[C]//Proceedings of IEEE International Conference on Software Analysis.IEEE,2017:487-491.
[3]Tian YC,Li KJ,Wang TM,Jiao QQ,Li GJ,Zhang YX,Liu H.Survey on codesmells[J].Journal of Software,2021:1-21.http://www.jos.org.cn/jos/article/abstract/6431?st=search[doi:10.13328/j.cnki.jos.006431]
[4]Jan Reimann,Martin Brylski,Uwe Amann.A Tool-Supported QualitySmell Catalogue For Android Developers[C]//Proceedings of WorkshopModellbasierte und modellgetriebene Softwaremodernisierung.2014.
[5]Habchi S,Hecht G,Rouvoy R,Moha N.Code smells in ios apps:how dothey compare to android?[C]//Proceedings of IEEE/ACM 4th InternationalConference on Mobile Software Engineering and Systems,MOBILESoft 2017,2017:110-121.
[6]Greiler M,Van Deursen A,Storey MA.Automated detection of testfixture strategies and smells[C]//Proceedings of IEEE 6th InternationalConference on Software Testing,Verification andValidation,ICST 2013,IEEE,2013:322-331.
[7]Nagy C,Cleve A.A static code smell detector for sql queriesembedded in java code[C]//Proceedings ofIEEE 17th International WorkingConference on Source Code Analysis and Manipulation,SCAM 2017,2017-Octob:147-152.
[8]Foutse Khomh,St′ephane Vaucher,Yann-Ga··el Gu′eh′eneuc,et al.ABayesian Approach for the Detection of Code and Design Smells[C]//Proceedingsof 2009Ninth International Conference on Quality Software.IEEE,2009:305-314.
[9]Umme Ayda Mannan,Iftekhar Ahmed,Rana Abdullah M Almurshed,DannyDig and Carlos Jensen.Understading code smells in Android applications[C].IEEE/ACM International Conference on Mobile Software Engineering and Systems(MOBILESoft),2016:225-236.
[10]Rasool,Ghulam,Azhar Ali.Recovering Android Bad smells fromAndroid Applications[J].Arabian Journal for Science and Engineering,2020,45(4):3289-3315.
[11]Iannone E,Pecorelli F,Nucci D D,et al.RefactoringAndroid-specificEnergy Smells:A Plugin for Android Studio[C]//ICPC'20:28th InternationalConference on Program Comprehension.2020:451-455
[12]Oumayma Hamdi,Ali Ouni,Eman Abudllah AlOmar,Mohamed WiemMkaouer.An empirical study on code smells co-occurrences in Androidapplications[C]//ACM International Conference onAutomated SoftwareEngineering Workshops(ASEW).36th IEEE,2021:26-33
[13]Fabio Palomba,Dario Di Nucci,Annibale Panichella,et al.On theimpact of code smells on the energy consumption of mobile applications[J].Information and Software Technology,2019,105(1):43-55
[14]Maiga A,Ali N,Bhattacharya N,et al.SMURF:A SVM-based IncrementalAnti-pattern DetectionApproach[C].Proceedings of201219th Working Conferenceon Reverse Engineering.IEEE,2012:466-475
[15]Fontana F A,Mika V.Zanoni M,et al.Comparing andexperimenting machine learning techniques for code smell detection[J].Empirical Software Engineering,2016,21(3):1143-1191
[16]Bu Yifan,Liu Hui,Li Guangjie.Deep Learning Based God ClassDetection[J].Journal of Software,201,30(5):1359-1374(in Chinese)
卜依凡,刘辉,李光杰.一种基于深度学习的上帝类检测方法.软件学报,2019,30(05):1359-1374
[17]Liu Hui,Xu Zhi-feng,Zou Yan-zhen.Deep Learning Based Feature EnvyDetection[C].Proceedings of the 33rd ACM//IEEE International Conference onAutomated Software Engineering,2018:385-396
[18]Tushar Sharma,Vasiliki Efstathiou,Panos Louridas,et al.Code smelldetection by deep direct-learning and transfer-learning[J].Journal ofSystemsand Software,2021,176(4):110-936[19]Vallée-Rai R,Co P,Gagnon E,et al.Soot:AJava bytecode optimization framework[M]//CASCON First Decade High ImpactPapers.2010:214-224.
[20]Bartel A,Klein J,Le Traon Y,et al.Dexpler:converting androiddalvik bytecode tojimple for static analysis with soot[C]//Proceedings oftheACM SIGPLAN International Workshop on State oftheArt in Java Programanalysis.2012:27-38.
[21]Carette A,Younes M A A,Hecht G,et al.Investigating the energyimpact of android smells[C]//2017IEEE 24th International Conference onSoftware Analysis,Evolution and Reengineering(SANER).IEEE,2017:115-126.
[22]Grano G,Di Sorbo A,Mercaldo F,et al.Android apps and userfeedback:a dataset for software evolution and quality improvement[C]//The 2ndACM SIGSOFT international workshop on app market analytics.2017:8-11.
[23]Zhang Y,Dong CH,Liu H,Ge CY.Code smell detection approach basedon pre-training model and multi-level information[J].Ruan Jian Xue Bao//Journal of Software.2022,33(5):1-19(in Chinese)http://www.jos.org.cn/1000-9825/6548.htm[doi:10.13328/j.cnki.jos.006548]张杨,东春浩,刘辉,葛楚妍.基于预训练模型和多层次信息的代码坏味检测方法.软件学报,2022,33(5):1-19
[24]Ai Chenghao,GAO Jianhua,HUANG Zijie.Code Smell Detection Drivenby Hybrid Feature Selection and Ensemble Learning[M].2022,ComputerEngineering,DOI:10.19678/j.issn.1000-3428.0062165(in Chinese)艾成豪,高建华,黄子杰.混合特征选择和集成学习驱动的代码异味检.2022.计算机工程.doi:10.19678/j.issn.1000-3428.0062165
[25]Liu Hui,Jin Jia-hao,Xu Zhi-feng,et al.Deep learning based codesmell detection[C].IEEE Transactions on Software Engineering,2021,47(9):1811-1837
[26]Liu P,Li L,Zhao Y,et al.AndroZooOpen:Collecting Large-scale OpenSource Android Apps for the Research Community[C]//MSR'20:17th InternationalConference on Mining Software Repositories.2020:548-552
[27]Nuthan Munaiah,Steven Kroh,Craig Cabrey,et al.Curating github forengineered software projects[J].Empirical Software Engineering,2017,22(6):3219-3253
[28]Feng Yi,Wang Dujuan,Yin Yunqiang,et al.An XGBoost-based casualtyprediction method for terrorist attacks[J].Complex&Intelligent Systems,2020,6(3):721-740
[29]Kreimer J.Adaptive Detection of Design Flaws[J].Electronic Notesin Theoretical Computer Science,2005,141(4):117-136.
Claims (4)
1.基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述策略具体过程为:
步骤一、获取数据集;
步骤二、对数据集进行预处理,得到预处理后的数据集;
步骤三、构建深度神经网络分类器,并得到训练好的深度神经网络分类器;
步骤四、对待测Android特有代码异味输入训练好的深度神经网络分类器,输出待测Android特有代码异味中是否存在成员异味;
所述步骤一中获取数据集;具体过程为:
步骤一一、在开源代码库AndroZooOpen中下载Android应用程序;
步骤一二、使用工具RepoReapers去除低质量的Android应用程序,得到最终Android应用程序作为代码语料库,获取数据集;具体过程为:
步骤一二一、使用JavaParser将Android应用程序源代码解析生成代码的抽象语法树;
步骤一二二、使用工具ASSD对代码的抽象语法树进行MIM异味检测,输出MIM异味检测结果;将MIM异味检测结果中的漏检和误检移除;将移除漏检和误检后的检测结果中存在MIM异味的方法和不存在MIM异味的方法分别提取到单独的文件夹中,存在MIM异味的方法对应的代码语料库中的程序构成正样本集,不存在MIM异味的方法对应的代码语料库中的程序构成负样本集;
所述MIM为忽略成员的方法;
所述步骤一二二具体过程为:
步骤一二二一、使用工具ASSD对代码的抽象语法树进行MIM异味检测,输出MIM异味检测结果;
步骤一二二二、将步骤一二二一输出的MIM异味检测结果中的漏检和误检移除;具体过程为:
根据工具DAAP中检测规则遍历步骤一二二一输出的MIM异味检测结果中的类中的方法,判断MIM异味检测结果中的类中的方法是否为空方法,静态方法或者子类覆盖父类的方法,如果是,则将MIM异味检测结果中的类中的方法放入不含异味的方法的集合nonsmellySets中;如果不是,根据MIM异味检测结果中的类中的方法是否访问所在类的属性判断是否为MIM异味,如果没有访问所在类的属性,则是MIM异味,放入含异味的方法的集合smellySets中,如果访问所在类的属性,则不是MIM异味,放入不含异味的方法的集合nonsmellySets中;
步骤一二二三、将移除漏检和误检后的检测结果中存在MIM异味的方法和不存在MIM异味的方法分别提取到单独的文件夹中,存在MIM异味的方法对应的代码语料库中的程序构成正样本集,不存在MIM异味的方法对应的代码语料库中的程序构成负样本集;
所述步骤三中深度神经网络分类器为改进卷积神经网络模型CNN、改进循环神经网络模型RNN、CNN与RNN相结合的模型CNN-LSTM、自编码全连接变体、自编码CNN变体中任意一个;
所述CNN与RNN相结合的模型CNN-LSTM依次包括嵌入层、第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第三最大池化层、一个长短时记忆网络LSTM层、一个Dropout层、一个Flatten层、第一全连接层、第二全连接层、第三全连接层、输出层;
所述第一卷积层过滤器个数为32,内核大小为3;
所述第一最大池化层窗口大小为2;
所述第二卷积层过滤器个数为64,内核大小为3;
所述第二最大池化层窗口大小为2;
所述第三卷积层过滤器个数为64,内核大小为3;
所述第三最大池化层窗口大小为2;
所述LSTM层的输出维度设置为128;
所述Dropout层的脱落率设置为0.5;
所述第一全连接层神经元个数分别为64;
所述第二全连接层神经元个数分别为32;
所述第三全连接层神经元个数分别为1;
所述第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第三最大池化层、第一全连接层和第二全连接层激活函数为relu激活函数;
所述第三全连接层激活函数为sigmoid激活函数;
所述CNN与RNN相结合的模型CNN-LSTM损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集输入CNN与RNN相结合的模型CNN-LSTM,训练K次,得到训练好的CNN与RNN相结合的模型CNN-LSTM;
所述自编码全连接变体包括编码部分和解码部分;
编码部分依次包括第一全连接层、第二全连接层、第三全连接层;
解码部分依次包括第四全连接层、第五全连接层、第六全连接层;
编码部分:
所述第一全连接层神经元个位为1024,激活函数为tanh;
所述第二全连接层神经元个位为512,激活函数为relu;
所述第三全连接层神经元个位为256,激活函数为relu;
解码部分:
所述第四全连接层神经元个位为512,激活函数为relu;
所述第五全连接层神经元个位为1024,激活函数为tanh;
所述输出层第六全连接层神经元个位为1024,激活函数为sigmiod;
所述自编码全连接变体损失函数为regularizers.L1函数,优化器为RMSProp;
将步骤二预处理后的数据集输入自编码全连接变体,训练L次,得到训练好的自编码全连接变体;
所述自编码CNN变体包括编码部分和解码部分;
编码部分依次包括嵌入层、第一卷积层、第一最大池化层、第二卷积层、第二最大池化层;
解码部分依次包括第三卷积层、第一上采样层、第四卷积层、第二上采样层、Fatten层和全连接层;
编码部分:
所述第一卷积层过滤器个数为32,内核大小为3;
所述第一最大池化层窗口大小为2;
所述第二卷积层过滤器个数为64,内核大小为3;
所述第二最大池化层窗口大小为2;
解码部分:
所述第三卷积层过滤器个数为8,内核大小为3;
所述第一上采样层窗口大小为2;
所述第四卷积层过滤器个数为64,内核大小为3;
所述第二上采样层窗口大小为2;
所述全连接层神经元个位为1;
所述第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第一上采样层、第四卷积层、第二上采样层、Fatten层和全连接层的激活函数为relu激活函数;
所述自编码CNN变体损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集分别输入自编码CNN变体,训练Q次,得到训练好的自编码CNN变体。
2.根据权利要求1所述的基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述步骤二中对数据集进行预处理,得到预处理后的数据集;具体过程为:
使用工具Tokenizer将样本集合中的代码语料转换为整数,用数字向量表示程序文本信息;
删除程序文本信息中的重复样本;
将数字向量表示的程序文本信息进行归一化处理;
将归一化处理后的数字向量表示的程序文本信息作为深度神经网络分类器的输入数据。
3.根据权利要求2所述的基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述改进卷积神经网络模型CNN依次包括嵌入层、第一卷积层、第一最大池化层、第二卷积层、第二最大池化层、第三卷积层、第三最大池化层、Dropout层、Flatten层、第一全连接层,第二全连接层、输出层;
所述嵌入层中将mask_zero参数设置为True;
所述Dropout层的脱落率设置为0.5;
所述第一全连接层的激活函数为relu激活函数;
所述第二全连接层的激活函数为sigmoid函数;
改进卷积神经网络模型CNN损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集输入改进卷积神经网络模型CNN,训练N次,得到训练好的改进卷积神经网络模型CNN。
4.根据权利要求3所述的基于深度学习的忽略成员的方法异味检测策略,其特征在于:所述改进循环神经网络模型RNN依次包括嵌入层、一个长短时记忆网络LSTM层、Flatten层、第一全连接层、第二全连接层、第三全连接层、输出层;
所述第一全连接层神经元个位为64;
所述第二全连接层神经元个位为32;
所述第三全连接层神经元个位为1;
所述第一全连接层、第二全连接层激活函数为relu函数;
所述第三全连接层为sigmoid函数;
所述LSTM层的输出维度设置为128;
所述第三全连接层的输出为一维向量;
所循改进环神经网络模型RNN损失函数为binary_crossentropy函数,优化器为RMSProp;
将步骤二预处理后的数据集输入改进循环神经网络模型RNN,训练M次,得到训练好的改进循环神经网络模型RNN。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310189142.6A CN116049016B (zh) | 2023-03-01 | 2023-03-01 | 基于深度学习的忽略成员的方法异味检测策略 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310189142.6A CN116049016B (zh) | 2023-03-01 | 2023-03-01 | 基于深度学习的忽略成员的方法异味检测策略 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116049016A CN116049016A (zh) | 2023-05-02 |
CN116049016B true CN116049016B (zh) | 2024-02-06 |
Family
ID=86118398
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310189142.6A Active CN116049016B (zh) | 2023-03-01 | 2023-03-01 | 基于深度学习的忽略成员的方法异味检测策略 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116049016B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108256629A (zh) * | 2018-01-17 | 2018-07-06 | 厦门大学 | 基于卷积网络和自编码的eeg信号无监督特征学习方法 |
CN108664269A (zh) * | 2018-05-14 | 2018-10-16 | 北京理工大学 | 一种基于深度学习的特征依恋代码异味检测方法 |
CN110245869A (zh) * | 2019-06-18 | 2019-09-17 | 哈尔滨师范大学 | 面向不同领域的可定制开源软件选择方法 |
EP3614645A1 (en) * | 2018-08-21 | 2020-02-26 | Deutsche Telekom AG | Embedded dga representations for botnet analysis |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11934947B2 (en) * | 2019-11-08 | 2024-03-19 | Dell Products L.P. | Microservice management using machine learning |
-
2023
- 2023-03-01 CN CN202310189142.6A patent/CN116049016B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108256629A (zh) * | 2018-01-17 | 2018-07-06 | 厦门大学 | 基于卷积网络和自编码的eeg信号无监督特征学习方法 |
CN108664269A (zh) * | 2018-05-14 | 2018-10-16 | 北京理工大学 | 一种基于深度学习的特征依恋代码异味检测方法 |
EP3614645A1 (en) * | 2018-08-21 | 2020-02-26 | Deutsche Telekom AG | Embedded dga representations for botnet analysis |
CN110245869A (zh) * | 2019-06-18 | 2019-09-17 | 哈尔滨师范大学 | 面向不同领域的可定制开源软件选择方法 |
Non-Patent Citations (4)
Title |
---|
Feature Envy Detection with Deep Learning and Snapshot Ensemble;Minnan Zhang等;《2022 9th International Conference on Dependable Systems and Their Applications (DSA)》;1-9 * |
基于抽象语法树的安卓代码异味的重构方法研究;毛晨光;《中国优秀硕士学位论文全文数据库 信息科技辑》;I138-410 * |
基于集成学习的忽略成员的方法检测策略研究;王露颖;《中国优秀硕士学位论文全文数据库 信息科技辑》;第I138-15 页 * |
深度学习策略下缓慢循环异味检测方法;边奕心;《小型微型计算机***》;第1-10页 * |
Also Published As
Publication number | Publication date |
---|---|
CN116049016A (zh) | 2023-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wang et al. | Detecting code clones with graph neural network and flow-augmented abstract syntax tree | |
CN110232280B (zh) | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 | |
Caram et al. | Machine learning techniques for code smells detection: a systematic mapping study | |
CN116361801B (zh) | 基于应用程序接口语义信息的恶意软件检测方法及*** | |
Wang et al. | Detecting code clones with graph neural networkand flow-augmented abstract syntax tree | |
Wang et al. | Application of fuzzy cluster analysis for medical image data mining | |
Feng et al. | BNGBS: an efficient network boosting system with triple incremental learning capabilities for more nodes, samples, and classes | |
CN113076545A (zh) | 一种基于深度学习的内核模糊测试序列生成方法 | |
More et al. | An experimental assessment of random forest classification performance improvisation with sampling and stage wise success rate calculation | |
Rao et al. | An enhanced novel dynamic data processing (ENDDP) algorithm for predicting heart disease in machine learning | |
Englert et al. | Sensing Higgs boson cascade decays through memory | |
Zhang et al. | CPVD: Cross project vulnerability detection based on graph attention network and domain adaptation | |
CN116049016B (zh) | 基于深度学习的忽略成员的方法异味检测策略 | |
Qian et al. | AGFL: a graph convolutional neural network-based method for fault localization | |
Lu et al. | Student program classification using gated graph attention neural network | |
CN116662991A (zh) | 基于人工智能的智能合约意图检测方法 | |
Silpa et al. | Designing of augmented breast cancer data using enhanced firefly algorithm | |
Ho et al. | Fusion of deep convolutional and LSTM recurrent neural networks for automated detection of code smells | |
CN114218580A (zh) | 一种基于多任务学习的智能合约漏洞检测方法 | |
Han et al. | A novel malware detection approach based on behavioral semantic analysis and LSTM model | |
Kolukisa et al. | A comparative analysis on medical article classification using text mining & machine learning algorithms | |
Fan et al. | High-frequency keywords to predict defects for android applications | |
Zhou et al. | Towards selective data enhanced implicit discourse relation recognition via reinforcement learning | |
Tan et al. | Diff Feature Matching Network in Refactoring Detection | |
Li et al. | An attention-based cnn with batch normalization model for network intrusion detection |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |