没有合适的资源?快使用搜索试试~ 我知道了~
沙特国王大学学报基于遗传算法和深度学习的大类恶臭检测自动化Ayad Tareq ImamBagh,Basma R.艾什?阿尔赫鲁卜?部Isra大学信息技术学院,约旦安曼11622阿提奇莱因福奥文章历史记录:2021年12月10日收到2022年3月5日修订2022年3月28日接受2022年4月4日在线发布保留字:软件质量评价大类差序遗传算法神经网络A B S T R A C T在软件工程(SE)中,度量用于检测软件设计问题(恶臭),如大型类恶臭,其中定义了许多不同的度量来找出类设计中存在的问题。这些度量的示例是大小度量、内聚度量和耦合度量。选择合适的指标来检测大类异味是一个常见的问题,它通常是手动完成的问题仍然存在:一个模块的两个指标的最佳组合如何确定这个双值阈值来推断这个问题的存在?本文提出了一种混合的方法来检测大类坏消息(HA-LCBS)。该方法利用遗传算法(GA)来自动组成检测模块,该检测模块由内聚度量类型和耦合度量类型组成,并将其产生的配对值传递给深度学习方法以自动检测大类异味。该方法的准确率达到94.21%。©2022作者(S)。由爱思唯尔公司出版代表沙特国王大学这是一个开放的访问CC BY-NC-ND许可证下的文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。1. 介绍拥有高质量的软件设计的条件是拥有积极影响软件产品质量属性的软件设计,例如可用性,可维护性,可扩展性,可移植性,安全性和可靠性(ISO/IEC,2011)。由于每个质量属性都会影响其他属性,因此必须遵循权衡方法,即,专注于由他人的背景和容忍度定义的质量属性(Sommerville,2015)。在面向对象范式(OOP)中,需要应用于发现详细设计错误的类设计的构成原则是(Suryanarayana等人, 2015年):层次是抽象*通讯作者。电 子 邮 件 地 址 : alzobaydi_ayad@iu.edu.jo ( A.T. Imam ) , Basma. iu.edu.jo(B.R.Al-Srour),aysh@iu.edu.jo(A. Alhroob)。沙特国王大学负责同行审查抽象是世界中对象之间的公共过程和数据(属性)的规范。模块化是程序部分的功能自主性,也称为质量,它衡量软件系统分解为模块和子功能的相对完成情况。封装是一种将属性(数据和进程/方法)打包在一起的技术,从而创建了一个称为类的基本开发单元。任何与类设计的基本原则相关的缺陷都会对主要质量因素产生负面影响。因此,系统进化对于面对软件老化现象(Blokdyk,2018)很重要,这将受到阻碍(Plösch等人,2016年)。一个可能的设计错误是大类缺陷(Plösch等人,2016),这阻碍了软件的可维护性或演进,这对于面对软件老化现象很重要(Blokdyk,2018)。Large类包含太多的方法、变量和代码行(Fontana等人,2012;Lanza andMarinescu,2010).太多的组件表明类执行的功能超过了单个类通常执行的功能(Fontana等人,2016; Maiga等人,2012年)。大班额,作为一个术语,https://doi.org/10.1016/j.jksuci.2022.03.0281319-1578/©2022作者。由爱思唯尔公司出版代表沙特国王大学这是一篇基于CC BY-NC-ND许可证的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。制作和主办:Elsevier可在ScienceDirect上获得目录列表沙特国王大学学报杂志首页:www.sciencedirect.com●●●●Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2622测试此类类时的困难,以及与其他系统检测大型类的异味是通过使用各种方法来实现的,其中设计度量-耦合是软件模块(类或方法)之间通过数据交换来表示的依赖关系,以完成模块化任务。测量耦合度是衡量程序质量的重要指标。已经开发了大量的指标,这使得为特定应用选择合适的指标成为一种挑战(Chidamber和Kemerer,2018)。凝聚力是单位独立工作的能力。凝聚力越高,单位规模大的问题就越严重。有几种内聚度量来度量该属性。作为一个原则,开发人员需要寻求低耦合和高内聚的设计(Husein和Oxley,2009)。由于OOP软件有许多耦合度量和内聚度量,因此有效地应用它们存在真正的实际问题(Tiwari和Rathore,2018)。利用遗传算法(GA),构造一个包含耦合度和内聚度度量的模块,并将该模块产生的量化结果传递给人工神经网络(ANN),以检测类设计中是否存在大类不良气味,从而实现大类不良气味的自动检测通过这项研究工作要回答的问题是:RQ1:是否可以自动而不是手动地形成具有两个度量的最佳组合的模块,用于检测大类异味问题RQ2:如何确定这个双值阈值来推断这个问题的存在?我们的研究工作结构如下:相关的作品,显示以前的方法来处理这个问题的讨论在第2节。在第3节中,提出了检测大类坏消息的混合方法(HA-LCBS),并详细解释了包括有关设计指标的简短文献。第4节讨论了拟定HA-LCBS的结果。最后,第5节总结了本文,并提出了未来可能的工作。1.1. 软件度量基本上,软件度量用于测量软件的可量化特性,如软件性能,软件生产力和许多其他特性。实际上,软件生命周期在软件开发生命周期(SDLC)的几乎所有阶段都是至关重要的.例如,在分析阶段,有软件度量来确认软件系统的需求和规范的一致性。在设计阶段,软件度量用于构建不同软件设计方法的比较研究,或帮助决定对复杂模块应用(或不应用)更多划分。在实现阶段,软件度量用于根据不同编程语言的特点对它们进行有意义的比较研究在测试阶段,软件度量用于分配测试资源。诸如此类(Rohit,2010;Sommerville,2015; Lanza and Marinescu,2010)。另一方面,软件度量的定义和推导大多基于预测,即,大多数软件度量依赖于估计的-而不是精确的-某些变量,这些变量通常具有不确定的值。此外,通过利用难以确认的历史和/或经验数据来实现软件度量的合理性最后,在某些情况下,软件度量的使用是昂贵和困难的(Rohit,2010;Sommerville,2015; Lanza和Marinescu,2010)。软件可根据系统的参与者进行分类。第一种类型是内部度量,用于为软件开发人员测量重要的软件属性,如代码行数(行数)度量。第二类是外部指标,用于衡量用户的重要软件属性,如可用性,可靠性,可移植性,功能性等。第三类是项目指标,项目经理使用这些指标来监控项目一般来说,如图所示。 1,对软件开发人员很重要的软件内部指标,前面提到过,分为两种类型(Chahal,2020):a) 产品寿命:可计算SDLC的几个阶段,以衡量各种软件产品特性,如软件的大小复杂性和软件的质量可靠性。b) 工艺流程:这可以被计算来衡量软件开发过程的特征(如故障检测)以及软件开发过程中使用的工具、方法和技术的特征。设计度量是一种静态的产品度量。图2说明了我们根据许多面向对象的范例注释建议的面向对象设计度量的分类。表1说明了用于评估类设计中可能存在的每个问题类型的矩阵这些指标单独使用或组合使用(更好)来评估类设计的良好性(Lanza和Marinescu,2010;Erickson,2009年)。在这些类中,评价类和对象质量的五个有意义的度量最受关注。这些指标是(Lanza和Marinescu,2010):1. 耦合性:是面向对象软件设计最重要的特征之一.类之间相互依赖的程度有多高?继承实现了牢固的耦合(在大多数情况下是一件坏事),但利用了抽象的重用(在大多数情况下是一件好事)。2. 内聚性:是面向对象软件设计的另一个最重要的特征一个类的状态和行为有多复杂抽象是否在问题空间中显示了一个持久的、相关的、整合的东西?3. 充分性:这个类是否抓住了所演示的事物中足够多的微妙元素来提供帮助?(DhavleeshRynn和Singh,2013; Alkharabsheh等人,2019年度)4. 完整性:类是否捕捉到了被证明可重用的事物的大部分难道不应该对类的未来用户(重复用户)说些什么吗?需要多少额外的时间才能完成?这是合理的,尽管所有的麻烦吗?(Dkillannis等人,(2003年)5. Primitive:直接观察到的指标,如项目的总开发时间,程序的大小(以时间为单位),或单元测试中的缺陷数量(Derezi n ′ska,201 8)。1.2. 遗传算法在这项工作中,遗传算法被用来自动选择一个凝聚力度量和耦合度量,形成或生成一个模块,用于检测可能存在于类设计中的大类坏气味。 GA是一个Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2623Fig. 1. 内部指标的分类(Chahal,2020)。图二、软件设计度量的分类(Lanza和Marinescu,2010)。用于在一组备选方案中选择最佳备选方案的优化算法。它模仿了进化的特征以实现最佳选择。 如图3所示,GA包括一组步骤,其开始于初始种群的开发,该初始种群表示星形节点对正在解决的问题的可能答案(备选方案)的集合。这些溶液以某种方式表示,称为染色体。第二步是检查现有的种群是否达到了定义的(所需的)属性(条件),如果是,将提供最佳解决方案,否则选择步骤将是下一个从种群中挑选最佳两个元素(染色体)的步骤。选择的两条染色体通过交叉和突变过程以创建更新的群体,该群体将进入停止标准以重复相同的一组步骤,直到满足停止定义的标准(Agbinya,2020)。1.3. 安它是一个计算模块,受生物神经网络的启发。人工神经网络是一种连接主义的方法,它是由相互连接的人工神经元形成的,以开发一种智能的用于识别目的的软件。ANN的实际应用主要集中在数据挖掘(DM)和数据预测(Krenek等人,2014年)。ANN是一个结构化模块,连接起来的神经元。连接是加权链接。每个神经元都有一个偏置函数,其中它的输入是所有神经元的输入(链接)乘以其权重后的总和。这些权重在ANN学习阶段进行调整,这应该在使用ANN之前进行。ANN的体系结构是一组三种不同类型的层:输入层,隐藏层和输出层,其中每一层都包含许多代表层大小的神经元。ANN中的层数从一个ANN到另一个ANN是不同的,但至少有一个输入层和一个输出层,并且隐藏层的数量范围从零到n。ANN输入数据被称为模式,其是数值的阵列结构,并且输出是ANN可能的决策,即它们中的一个将被选择作为输入数据模式的ANN处理的结果。输入层的大小与输入模式的大小有关,输出层的大小与ANN可以做出的可能决策的数量有关,隐藏层的大小与试错原则有关(Oleinik,2019)。Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2624表1类设计的一种方法。类度量大小 * 每个类的代码行数(LOCC)字段数(NOF)方法数(NOM)加权方法计数(WMC)方法数属性数(SIZE2)操作复杂度(OpCom)复杂性属性遗传因子(AIF)继承树深度(DIT)类层次结构(CH)度量类响应(RFC)操作参数复杂度(OAC)属性复杂度(AC)班级规模的衡量包数(NOP)类数(NOC)依赖数量(类间复杂度)内聚性-方法缺乏内聚性(LOCM)松散类内聚(LCC)紧密类内聚(TCC)调用类的数量(FANOUT)操作调用数(Call)类级耦合(CLC)子节点数(NOC)外部数据访问(AOFD)对象级耦合(OLC)对象间耦合(CBO)操作耦合(OpCpl)充分性弧数(ArcNbr)决策数(CndNbr)平均决策跨度(CndSpnAvg)节点数(KntNbr)循环数(LopNbr)函数出口数(NdsExtNbr)节点数(NdsNbr)平均嵌套级别(NsLvLAvg)独立路径数(PthIndNbr)控制语句数(StmCtLNbr)结构破坏数(StrBrcNbr)完整性如果没有任何组件缺失,则一个图表或一组图表已经完成。原始代码行(Primitive图三. GA的标准步骤ANN最有趣的特征之一是自适应特性,这意味着该信息处理模块可以在其学习阶段适应流入其中的数据(内部或外部)。实际上,ANN是一种非线性/统计数据建模工具,这意味着它用于将输入数据模式(特征集)映射到某个输出,或者换句话说,找到输入数据模式的身份(Krenek等人,2014年)。原则上,人工神经网络可用于处理信息,其中-在输入数据模式(也称为预测变量或独立变量)和ANN的输出(也称为预测变量或依赖变量)之间存在任何关系,而不管该关系是简单的(直接的)还是非常复杂的(间接的)由于人工神经网络有许多不同的模型,三个标准被用来分类这些模型。图4示出了基于不同标准的ANN的分类。第一个分类标准是用于开发ANN的神经元的类型,其将ANN分类为确定性/随机、线性/阈值/S形或高斯/SoftMax。第二个分类标准是网络拓扑,它可以是分层/非分层、前馈/递归或完全/部分连接网络。最后一个分类标准是学习方法,可以是批量/在线或监督/无监督/强化学习方法(Oleinik,2019)。有许多不同的软件工具用于开发人工神经网络,从那些专门用于模拟人工神经网络的工作,该软件致力于为某些应用开发ANN,如数据挖掘和机器学习,如Weka和RapidMiner。这样的软件工具为研究人员和开发人员提供了一种优秀和快速的方式来构建有效的软件并证明研究方法(Witten等人,2016年)。在这项研究工作中,我们使用了RapidMiner数据挖掘软件(Potoniec和Zhaawrynowicz,2011)。1.4. RapidMiner数据挖掘软件它是一个为数据挖掘提供软件工具的开源集成环境。RapidMiner可以通过使用不同类型的数据集格式(如Excel、CSV、XML等)执行数据分析、数据转换、优化、验证和可视化。RapidMiner利用各种聚类和分类算法来执行分析过程。RapidMiner最重要的功能之一是它能够在没有任何程序编码的情况下分析数据(Potoniec和Zhaawrynowicz,2011)。RapidMiner用于开发文本挖掘和预测分析等数据科学工作,这些工作反过来又用于开发研究,教育,培训甚至商业应用程序(Hofmann和Klinkenberg,2013)。为了设计和执行各种分析工作和应用程序,RapidMiner使用图形用户界面(GUI)策略并提供流程,这些流程是由多个链接运算符(或方法)组成的数据处理类-每个运算符都是一个单一的任务方法,将其输出作为后续运算符的输入。此外,开发人员可以将调用代码包含到RapidMiner的处理器中,或者将其用作程序中的API-知道RapidMiner提供了使用R和- Python脚本进行编码的能力。最后,RapidMiner中的命令行提供了调用和执行单个函数的能力(Norris,2013)。在这项工作中,我们使用RapidMiner工具包(神经网络操作器)开发了一个深度学习机器,即用于调查或2. 相关工作和方法测量代码行数的方法是用于检测大型类问题的最早和最简单的方法,但这种方法对类是否做得太多没有帮助(Fontana等人,2012年)。Xinghua等人(Liu和Zhang,2016)的工作增强了这种方法,该方法结合了文件长度(FL)的权重和每个文件的代码行数占项目代码总数的百分比(P)的权重:总重量<$4 FL重量<$P重量Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2625≤≥图四、人工神经网络的分类及其判据。随着用来评估OOP软件质量的设计度量的出现,检测软件中不良气味的方法开始依赖于这些度量。作为Husein等人的工作(Husein和Oxley,2009),提出了组成包含多个设计度量的模块来检测大类难闻气味的方法,以获得更准确和稳定的结果,这是一套称为CCMETRICS的内聚和耦合Sousa等人(Sousa等人,2017)使用了相同的方法,但将使用的设计指标扩展到17个而不是两个,并通过使用关系运算符(>,=<,和)将它们组合起来,以检测一些不好的气味,如大型类和功能嫉妒。对这种方法的批评是,没有灵活性的定制软件度量,或关于阈值的变化。因此,提出了使用遗传算法(GA)的优化方法来选择OO软件系统设计中的缺陷检测度量的阈值,例如Mihancea等人的工作(Mihancea和Marinescu,2005年),使用ATFD,WMC,TCC设计指标。将检测代码气味的机器学习方法与软件设计度量相结合,以产生更灵活的方法来检测软件设计的各种缺陷,包括大类坏气味。例如,决策树算法(Kreimer,2005)基于分类原则(存在/不存在)和分类的复杂性、大小、内聚性和耦合设计度量的阈值提出,用于发现Java编程语言代码中的设计缺陷支持向量机(SVM)算法,其由(Maiga et al.,2012)是使用面向对象的度量作为训练数据集来训练其SVM分类器的另一个示例。Fontana等人在74个软件系统上进行了一项关于16种分类机器学习算法的有益比较研究,以检测四种代码气味(包括大类)(Fontana et al.,2016年)。研究表明,所有算法在交叉验证数据集上都取得了较高的性能,其中随机森林和J48的性能最高(> 96%),SVM的性能最差,这是由于整个数据集的不平衡(代码气味频率较低)造成的,并且只需要100个训练样本就可以达到低于百分之九十五自动生成用于检测软件中的缺陷的模块的方法可以在Moha等人的工作中看到(Moha和Guéhéneuc,2007),其提出了一种被动代码生成器来自动生成检测模块作为一组手动可调整的产生式规则。从上述报告的方法可以得出的结论是,用于大类缺陷的检测工具从简单的手动计数发展到手动选择手动阈值的度量,以自动选择方法Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2626在此基础上,我们提出了一种新的方法,使用遗传算法来生成一个检测模块,包括凝聚力和并产生包括在该源代码中的类的文本形式Cparser方法的伪代码是:耦合指标,并使用深度学习方法来检测大类缺陷。GA是一种优化算法,用于选择将形成检测模块的内聚和耦合度量的最佳组合。使用具有多个度量的模块要求寻求一种技术来确定模块回想一下,具有两个阈值有时可能导致关于代码中存在难闻气味的矛盾或模糊指示,并且度量的阈值的确定是通过将建议的度量应用于一组对象类而经由手动经验研究来实现的。由包含多个度量的模块产生的难闻气味阈值的值的这种手动确定变得更加困难、更加复杂和耗时。在我们的工作中,深度学习被用来应对所有这些挑战。3. 建议的混合模块用于检测大类异味我们的工作旨在通过使用耦合度量类型和内聚度量类型的度量的组合来自动化大类异味这种自动化包括将该组合形成为模块的自动化,以及解释来自该模块的值以在类设计中存在或不存在大类坏气味的自动化。详细的HA-LCBS如图所示。 5从一个Java源代码开始,要检查它的任何一个类是否有大类异味的问题。这个过程从类的提取开始,这些类是将被检查的单元,以查看它们的设计是否有大类的臭味。然后根据预定的公开形式计算配对值这个偶数值被传递给ANN,以决定具有这个偶数值的类是否遭受大类的问题以下小节详细介绍了这些步骤。3.1. Java源代码这是用标准Java语言编写的程序代码的文本形式的文件。 图 6说明了这样一个Java源代码程序的文本文件。我们渴望有一个包含多个类的源程序。3.2. 提取类类的提取是自动发现大类异味问题的最基础的步骤。我们开发了一种提取方法,称为函数CParser(代码)开始While Not End_of_ File(Code)Read Line(当不是文件结束(代码)读取行时)Tokens [ ] =令牌化(行)For(I = 0; I Size_Of_Array(Tokens))如果Tokens [I]要删除Write_On_File(令牌[I])增量IEndWhileWrite_On_File(令牌[I])EndIfEndForEnd如图7所示,Cparser方法的算法被实现为一个命令按钮,标题为3.3. 类执行Cparser命令的结果是一组保存在某个文件夹中的Java文本文件(带有Java扩展名)。图8示出了从Java源代码提取的类的文件夹。3.4. 检测模块通过检测模块实现了一个配对值的计算,该配对值已被用作大类异味存在的指示器。此模块包含两个设计指标,每个指标来自不同的设计指标类型。检测模块的开发采用遗传算法自动完成,如图9所示。下面的章节详细介绍了自动生成检测模块的各个步骤元素3.4.1. 软件设计指标列表评价类设计优良性的组合技术要求选择适当的度量来形成这样的组合。虽然设计度量的分类最小化了要从中选择一个度量的度量的数量,但是需要知道如何在度量的类型下选择对象类的最高精度和最宽覆盖的度量。目前,该选择是根据开发人员的专业知识手动进行的图五. 提出了解决大类异味的步骤。Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2627见图6。 Java源代码文本文件。见图7。 Cparser方法的实现图8.第八条。第一章:第一章的故事基于上述相关研究,检测大型类异味的最佳组合是内聚和耦合设计度量。回顾这两种类型中的每一种都具有许多单独的度量,从时间和精力的角度来看,从每一种类型中选择某些单独的度量将是一项昂贵的任务。因此,自动选择最佳个体度量来组成检测模块将具有很大的意义。由于选择是一个优化过程,我们使用GA来自动选择最佳的个体指标,以组成检测模块,如下所示。3.4.1.1. 初始种群的发展。 如表2所示,初始群体是一组染色体,其中每个染色体表示包含内聚度量和耦合度量的检测模块。染色体的形成是基于研究人员提出的耦合和内聚度量的分类策略,以解决缺少耦合和内聚原则的统一定义导致大量度量的问题,这反过来又导致了选择可用于测量耦合和内聚的适当度量的问题(Husein和Oxley,2009)。如图10所示,内聚度量耦合度量的类是方法调用耦合(MIC)、全局数据耦合(GDC)、继承耦合(IC)(Offutt等人,2008)和数据抽象耦合(DAC)(Briand等人,一九九九年;Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2628Pð Þ ð Þ见图9。 自动生成检测模块的步骤。表2初始种群(编码染色体)。内聚度量内聚属性耦合度耦合属性适应度●●见图10。 内聚度量和耦合度量的类别。Bidve和Khare,2012年; Husein和Oxley,2009年)。然而,在我们的工作中,我们使用了一组50种不同的内聚度量和50种不同的耦合度量。这些指标的列表在本文的附录A中给出。每个染色体的适应度值通过简单地将来自不同参考文献的度量的属性和精度与它们的精度相加来计算。因此,种群的大小变成了50个染色体,每个染色体有10个基因(度量预期的组合是2500染色体。将染色体的初始群体集保存在Excel电子表格文件中。3.4.1.2. 停止标准。在这项工作中,我们选择了达到预定数量的代的条件,设置为100,作为三个不同终止条件中的停止条件,以在GA中产生新一代-其他两个存在:在迭代x期间没有人口改善和达到-设定染色体适应值的预定条件实际上,我们注意到值100是许多GA依赖性工作中使用的常见迭代值当调查选择这个数字背后的原因时,我们发现它是基于丰富的研究,通过近似GA中每种选择方法的接管时间来比较GA中的选择方法-详细信息请参阅参考文献(Goldberg和Deb,1991)。3.4.1.3. 选择. 在本文中,轮盘选择或所谓的适应度比例选择方法(Holland,1975)用于选择将被交叉/突变以产生其后代的染色体种群中的每条染色体在轮中占据一个区域该区域是统计概率,其表示染色体的适应度值与整个群体的染色体的适应度值之和成比例pifi3(Agbinya,2020年)。我们同意确定迭代的绝对次数是nj¼1 fj由于两个或三个原因,这在某种程度上是一种挑战,但是这种类型的停止标准(其是预定义的迭代次数的确定)是直接的和最简单的。基本上,没有绝对的迭代次数可以用于所有问题,此外,只要计算负担得起,进行数千次迭代是没有问题的。然而,为了防止夸大,迭代次数的选择可以考虑不同的因素,如评估的次数,而不其中:pi:染色体的概率(轮中的面积)。fi:染色体的适合度值。n:人口在轮停止旋转之后,由轮中由预设固定点指向的区域所表示的染色体将被选择为第一父代。执行相同的过程以选择第二个父节点。逻辑上,在轮上占据更大区域的染色体具有更大的概率被固定点指向,并且因此,染色体DDDMMMMICGDCICDAC1110110004.82010200104.33001310003.774001410004.15001511004.13●●●500015011003.92Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2629选择染色体作为亲本的关键作用。轮盘选择方法的伪代码是(Agbinya,2020):对于所有K个成员的人口%总和所有的适应度的个人sum +=个体k的适应度;对于所有的K族{概率=概率之和+(适应度k /所有K的总和);概率之和+=概率;}循环,直到新的填充已满{number p =对所有群体{如果数字p大于概率且小于下一个概率,则选择染色体}}程序交叉(父代1,父代2)开始子代1 =亲本1的连接内聚一半与亲本2的耦合一半;子代2 =亲本2的连接内聚一半与亲本1的耦合一半;将新的NChrom1和NChrom2添加到群体结束3.4.1.5. 突变 突变是染色体上的另一个多样性过程。这是一种随机的调整,可以逆转染色体中的基因(位)(Agbinya,2020)。由于我们选择交叉作为在研究工作中获得多样性的过程,因此我们没有将此过程应用于我们的研究工作群体,旨在尽可能简单地改变。3.4.1.6. 更新人口。这是一个取代较少使染色体与新产生的后代相匹配,lation.它是在计算后代的适应度函数并相应地对种群进行排序后完成的。最弱的染色体将从种群中移除(Pratihar,2015)。这过程是计算机化通过使用以下3.4.1.4. 交叉。从生物学上讲,交叉就是交换DNA 片段演算法:另一条染色体上的其他片段,这反过来又会在一定程度上改变染色体为了在计算上说明这一点,考虑图11所示的例子,其中存在亲本(1)染色体和亲本(2)染色体,交叉过程将通过交换它们的一半来产生这两个亲本的后代:亲本(1)的内聚(蓝色)一半将与亲本(2)的偶联(黄色)一半相关联,反之亦然。这是最简单的交叉形式,因为只有一个交叉点将每个染色体分成两半进行交叉(不包括适应值字段),因此它被称为一点交叉。交叉过程的伪代码为:功能更新人口开始计算子代将后代及其FitnessValue添加到种群中,基于其成员的FitnessValue进行DescendingSort(Population)删除种群中的最后两个成员结束见图11。 穿越过程。Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2630--3.4.1.7.最佳解决方案。这是满足停止标准后的剩余人群。它以染色体的形式代表了最好的进化检测模块。基于染色体的适应度值位于群体顶部的最佳模块是被决定为构成检测模块的内聚和耦合度量的最佳组合的模块。3.5. CC配对值这是两个值的向量,第一个是度量内聚值,第二个是给定类的度量耦合值,其中该向量由检测模块产生。‘Apply Metrics’ is the command button, which is illustrated by该方法利用了另外两个子方法,第一个是Jpeek库函数,其功能是将内聚度量应用于Java语言编写的类,第二个是CK工具,其功能是将耦合度量应用于Java语言编写的类Jpeek是一个现成的工具,只有7个内聚度量,即CAMC、LCOM、LCOM 2、LCOM 3、NHD、MMAC和OCC应用于用Java语言编写的类,并保存在文本文件中,并在XML文件(xxxx)中给出结果值得一提的是,我们通过添加更多指标(如SCOM,TCC,PCC,LCOM5,LCC等)来支持Jpeek工具。此外,为了满足HA-LCBS下一步(即人工神经网络输入模式的形成)所需的文件格式,我们将Jpeek生成的报告文件格式从xml改为csv。CK是一个用户自定义的工具,我们开发了它来计算耦合度量,如CBO,DIT,RFC,NOM,DAC,AC,AOFD,ADT,NOF,和COF,可以应用于Java语言编写的类,并保存在文本文件中,并在CSV文件中给出结果最后,将Jpeek工具和CK工具生成的值合并,并将新形成的值对保存在新的csv文件中。3.6. 深度学习模型这是我们提出的HA-LCBS的第二步。由于检测模块(其在早期通过使用GA开发)用于生成成对值(内聚值和耦合值),因此该值应被传递到深度学习机器,其功能是将该成对值与“大类”或“非大类”决策相关联3.6.1. 人工神经网络的建立与训练如图所示。 13,创建ANN部分的过程由“检测”命令按钮来完成,该命令按钮显示在我们为自动化HA-LCBS方法而制作的程序的GUI中。创建我们提出的HA-LCBS方法的ANN部分的过程通过了一系列步骤,这些步骤由使用RapidMiner软件工具如下:1) 首先,我们从“Set Role”操作中选择了predict函数的数据类型。接下来,我们通过“Select Attributes”操作指定了将用于预测的属性2) 下一步是数据准备过程。在这项研究中使用的数据收集从以前的引用的例子,使用的凝聚力和耦合度量与不同的类,有/没有大类的臭味。总共使用的数据量为698例。这些案例来自不同的项目,旨在用作培训和测试数据案例。类的数量(具有大类坏气味和没有大类坏气味的类)是平衡的;即,每个类别349例。已经进行了多个预处理步骤,以使数据集更具逻辑性、可理解性和更准确。例如,省略了某些非线性属性,忽略了数据的扭曲组合,以及使用替换算法填充不同名义行或数值行中的缺失值。确保所有属性均为数字形式,且标度相同(范围在1和+ 1之间)。我们还将数据集分离为训练数据集,该训练数据集包含(467)个标记的数据案例,并保存在名为“Training”的文件CSV’,文件名为3) 第三步是创建ANN模型本身。在这项工作中,多层感知器(MLP)前馈神经网络的开发,使用RapidMiner工具包(神经网络算子)。所选ANN利用S形激活函数,其要求属性反向传播算法用于训练MLP ANN,以将输入训练数据集映射到两个交替(大类/非大类)输出之一。4) 最后,通过使用“交叉验证”操作来进行ANN验证的设置以检查过优化见图12。 应用指标命令按钮。图十三.人工神经网络的创建和训练的触发Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2631¼¼¼如图14所示,其是使用RapidMiner对ANN的开发过程建模的屏幕截图从神经网络获得的最终结果,表明类是否有难闻的气味的问题被保存到一个.csv文件。3.7. 检测结果(大/不大)检测结果以报告的形式出现,并以文本文件格式保存,并显示在程序GUI中的空间中,该程序用于自动执行HA-LCBS方法,如图所示。十五岁4. 调查结果和讨论我们的目的是通过使用设计度量的最佳组合模块来对大类恶臭的检测做出系统的贡献,希望有助于软件工程师从设计角度评估软件质量的工作,其中设计质量通常是开发和销售软件的关键标准我们使用这种方法对我们有利,原因如下:1. 以往的相关工作都是采用“Bino- mial Classification”方法进行的,这有利于HA-LCBS2. 由于没有类似于HA-LCBS的自动化方法,这使得HA-LCBS唯一可以比较的方法是人类手动方法来测量二项式分类方法的准确性。3. 两者中的每一个都导致了存在/不存在的替代方案,这是同等重要的。4. ’Binomial Classification’ method is simple to understand bynon-technical二项分类包括精确度、召回率和F-度量以及准确度度量,如下所示(Kotsiantis,2007;Hammad和Labadi,2016):精度:评估正确的阳性分类实例的数量与数据集中阳性实例的总数精密度真阳性真阳性假阳性ð4Þ见图14。 RapidMinerRecall:它测量完整的分类器结果。召回率可以概括为分类实例的数量与真阳性实例的总数之比。回忆真阳性真阳性假阴性其中:ð5Þ- 真阳性:恶臭被正确归类为大类恶臭。- 假阳性:错误地将代码片段归类为具有大类难闻气味的问题。- 假阴性:大类异味被错误地归类为健康代码。图十五岁大类HA-LCBS报道基于此,上述精确度和召回率等式可以重新表述如下:精度检测到大类异味\现有大类异味检测到的大类不良气味ð6Þ●●Ayad Tareq Imam,B.R. Al-Srour和A. 阿尔鲁布沙特国王大学学报2632¼---.联系我们召回检测到的LargeClassBadSmells\现有的LargeClassBadSmells消除大类坏气味ð7ÞF-Measure:它是精确度和召回率的平均值。F-Measure很重要,因为它可以提高系统的查全率或查准率。F措施2精确回忆回忆8精度准确性:它是分类过程的通用衡量标准。它可以被视为正确识别的实例在实例总数中的比例。准确度正确预测等级100 9总测试类仅耦合度量的准确性、仅相干度量的准确性和CCC-LCBS的准确性(它们是最接近的先前方法)已被用于与我们提出的HA-LCBS进行比较。通过使用两个度量的组合,使用单个度量检测大类问题的准确性通过使用(8)计算并在图中描绘。 十六岁HA-LCBS方法可以扩展到其他软件坏气味,并且可以在智能计算机辅助软件工程(I-CASE)工具的开发中起到很大的辅助作用(Imam等人, 2015年)。这意味着可以使用这种方法来研究NLP之外的深度学习类型,甚至是另一种机器学习(ML)技术通过使用GA的每个组成最佳两个-内聚和耦合类型-度量的自动化最后,我们可以通过以下几点来说明我们研究论文的发现:通过使用深度学习自动检测面向对象设计缺陷的建议的成功,深度学习利用了两个软件设计指标的模块的配对值。原则上,使用ANN检测问题克服了指定指示该问题存在的阈值的问题。两个最佳软件设计度量模块的自动化成功用于面向对象设计缺陷检测准确性的显著提高与相关途径和方法相一致。证明高内聚和低耦合是设计能够产生优化的,灵活的,更有效的软件工程工具,特别是通过使用I-CASE原则的测试和评估过程。这些发现通过在优化的计算机化模块中使用GA结果自动生成基于度量的模块来证明,此外,使用深度学习而不是基于规则的方法用于检测目的,导致比先前提出的方法更灵活和更有效的方法。HA-LCBS可以被看作是一个主动代码生成器,不需要后续的手动修改,不像Décor发布的被动代码生成器,这在某种程度上是HA-LCBS5. 对有效性的有效性威胁是一种特殊情况,它对研究的正确性产生负面影响。关于SE中的实证定量研究,对有效性威胁的分析使我们能够将客观性、主观性和创造性结合到科学工作中。有四种类型的威胁,它们是:内部,外部,结构和结论(Cruzes和Othmane,2018)。5.1. 对内部效度的测量在给定研究中,一个证据支持因果关系假设的置信度。 对内部效度的威胁是使用一组因素来实现的,这些因素证明了因果关系推断的置信度,如表3所示(Shadish et al., 2002),其显示了对HA-LCBS的内部有效性的威胁。很明显,HA-LCBS方法提供了针对模糊时间优先威胁、选择、历史、硬件、内部可信度威胁的辅助和
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功