
软件工程中代码异味检测方法的研究
李炎武
【摘要】在软件工程中,软件重构具有重要意义,它可以提高软件的可维护性、可扩
展性、可重用性,进而改善软件质量.图坦卡蒙法老 在软件重构中,代码异味检测是其中的重要组成
部分.目前,代码异味检测的相关研究划分为几个类别.在对基于搜索的代码异味检测
方法进行研究后,选择决策树算法来对四个代码异味进行检测,并取得不错的效果.
【期刊名称】《现代计算机(专业版)》
【年(卷),期】2017(000)005
【总页数】3页(P31-33)
【关键词】软件工程;软件重构;代码异味;决策树
【作者】李炎武
【作者单位】四川大学计算机学院,成都610065
【正文语种】中文
随着计算机科学的进步和发展,越来越多的行业和领域中需要使用计算机技术,各
个行业的相关软件也相继被开发出来。苹果商店的应用超过了百万,桌面软件和专
业软件数量更多。在软件开发中维护费用是开发成本的2-100倍[1]。因此,为了
降低软件开发中维护费用,改善软件的结构,提高软件的可扩展性和可重用性,有
必要进行软件重构[2]。在软件工程中,软件重构用于调整面向对象软件的内部结
构,提高软件的可维护性、可扩展性、可重用性,进而改善软件质量,同时软件的
外部行为保持不变[3-4]。软件经过重构,可以提高代码的可读性,改善内部结构
并且延长代码的生命周期。对于大型软件项目的开发,软件重构具有重要意义。在
软件重构中,需要先进行代码异味检测,代码异味会暴露出一些软件中的问题,根
据这些问题,工程师会做进一步检查和重构。在重构过程中,代码异味检测是重要
步骤。
代码异味检测的相关研究从1999年开始,至今有将近20年研究历史。随着计算
机学科的发展,对于代码异味检测的研究出现了不同的分支,主要分为以下几个类
别。
基于手工的代码异味检测方法,这个方法在代码异味研究早期使用。Travassos等
人创建了一个“阅读技术”的集合,通过在纸上列举清单,使用观察方法帮助动漫性感美女 人们
找到相关信息,并识别软件构件中的缺点,通过这种方式来改善软件质量[5]。但
这类方法具有一定缺点,对于大型系统来说,手工进行代码异味检测的效率低下。
基于度量的代码异味检测方法,通过使用如代码行数、参数个数、代码字符数等数
据作为度量来检测代码异味。Marinescu等人开发了一个Eclip插件,插件将设
计问题量化,根据问题设置相应的度量值,并用于检测4种代码异味。通过使用
插件能够持续评估系统质量,并帮助开发者进行软件重构[6]。基于度量的方法,
准确性依赖于阈值的选择,但对于标准阈值,现在没有一致的定论。并且该方法受
限于检测比较简单的代码异味,对于较复杂的代码异味不能直接用度量检测。
基于症状的代码异味检测方法,通过对代码异味定义和描述进行分析,提取特征和
标记,利用检测算法进行检测,判断是否具有代码异味。Moha等人通过分析获
取代码异味关键词列表,然后使用领域特殊语言形成规则卡片,最后根据建模生成
检测算法,对15个代码异味进行检测[7]。基于症状的方法和代码异味症状有关,
但是目前对于异味症状没有一致的标准定义,因此该方法受到一定的限制。
基于概率的代码异味检测方法,统计代码中类之间的属性和关系的数据,结合模糊
逻辑规则和数学分析来检测代码异味。Ananda等人提出一种量化方法,结合直接
关联和间接关联的数量关系,利用传播概率矩阵来检测2种重要代码异味[8]。这
类方法使用概率统计来分析检测代码异味,对于不方便量化的代码异味检测效果有
限。
基于可视化的代码异味检测方法,结合自动检测工具和人的手动检测来识别代码异
味。Emerson等人使用一个可交互的代码异味检测工具来快速观察和认识代码异
味,通过不同的角度来理解和可视化代码异味[9]。由于在方法中结合人的手动检
测,因此该类方法受限于人的效率,可扩展性不强。
基于搜索的代码异味检测方法,使用不同的算法直接从源代码中识别和检测代码异
味,其中大部分检测使用机器学习相关算法。对于机器学习方法,需要对输入进行
处理,根据标准输入来得到最后的分类输出结果。Fontana等人使用机器学习技
术进行代码异味检测,利用机器学习方法对代码异味进行分类,自动检测代码异味。
他们使用了16种机器学习算法,对4种代码异味DataClass,Large
Class,FeatureEnvy,LongMethod进行检测,并在软件系统中进行实验,并通过
人工确认来构造代码异味样本,把这些样本作为机器学习的标准输入,最后通过交
叉验证对实验结果进行评价[10]。基于搜索的方法的算法成功依赖于数据集和训练
集的质量,在处理未知和变化的代码异味时受到一定限制。
基于协作的代码异味检测方法,以合作的方式执行不同的活动来改善方法效果,提
高检测方法的准确性和性能。目前相关文献较少,Abdelmoez等人使用两个并行
算法加速搜索过程,减少搜索空间,使用风险评估来检测代码异味[11]。71年属什么 但这个方
法用于检测其他代码异味时,存在一些泛化问题。
本文选择基于搜索的代码异味检测方法,采用机器学习算法来对所选择的几种代码
异味进行识别。在选择代码异味时,主要考虑几个方面,代码异味有较高出现频率,
代码异味对于软件质量有较大负面影响,代码异味已经有相电脑音箱没声音 关研究文献和应用实现
[10]。根据要求,最后本文选择了DataClass,DuplicatedCode,
InappropriateIntimacy,LongMethod四个代码异味进行检测。通过对相关机
器学习算法的研究和比较,发现在代码异味检测中,决策树算法具有较好的分类效
果[10]。在本文中,使用J48决策树算法作为检测算法,对所选择的四个代码异味
进行识别。
本文使用k重交叉验证来对实验结果进行验证,通过算法的精确率,召回率以及
定义的到目标精确率平均距离来比较算法效果[12],公式如下:
其中,P表示精确率,R表示召回率,TP表示正确正类,FP表示错误正类,FN
表示错误负类,D表示到目标精确率平均距离,TAPi表示某个实验中精确率,
TAP表示目标精确率。
通过比较实验,可以知道,本文使用的异味检测方法,在选择的四种代码异味上具
有较好的识别效果。
现有的代码异味检测方法划分为几个类别,在对基于搜索的代码异味检测方法进行
研究后,本文选择决策树算法来对代码异味进行检测,并在选择的四种代码异味上
取得了不错的识别效果。
李炎武(1992-),男,四川宜宾人,硕士研究生,研究方向为数字娱乐与人机交
互
【相关文献】
[1]PalombaF,BavotaG,DiPentaM,ingBadSmellsinSourceCodeUsing
ChangeHistoryInformation[C].AutomatedSoftwareEngineering(ASE),2013IEEE/ACM
,2013:268-278.
[2]RasoolG,wofCodeSmellMiningTechniques[J].Journalof
Software:EvolutionandProcess,2015,27(11):867-895.
[3]MensT,TourwyofSoftwareRefactoring[J].IEEETransactionsonSoftware
Engineering,2004,30(2):126-139.
[4]oringObject-OrientedFrameworks[D].UniversityofIllinoisat
Urbana-Champaign,1992.
[5]TravassosG,ShullF,FredericksM,ingDefectsinObject-Oriented
Designs:UsingReadingTechniquestoIncreaSoftwareQuality[C].ACMSigplan
,1999,34(10):47-56.
[6]MarinescuR,GaneaG,:ContinuousQualityAsssmentand
Improvement[C].SoftwareMaintenanceandReengineering(CSMR)新鲜芡实 ,201014thEuropean
,2010:274-275.
[7]MohaN,GueheneucYG,DuchienL,:AMethodfortheSpecificationand
DetectionofCodeandDesignSmells[J].IEEETransactionsonSoftware
Engineering,2010,36(1):20-36.
[8]RaoAA,ingBadSmellsinObjectOrientedDesignUsingDesign
ChangePropagationProbabilityMatrix[J].Lectur魏晋南北朝服饰 eNotesinEngineering&Computer
Science,2008,2168(1).
[9]Murphy-HillE,ractiveAmbientVisualizationforCode
Smells[C].Proceedingsofthe5thInternationalSymposiumonSoftware
,2010:5-14.
[10]FontanaFA,MantylaMV,ZanoniM,ingandExperimentingMachine
LearningTechniquesforCodeSmellDetection[J].EmpiricalSoftwareEngineering,2016,21
(3):1143-1191.
[11]AbdelmoezW,KosbaE,-BadCodeSmellsDetectionTool[C].The
InternationalConferenceonComputingTechnologyandInformationManagement
(ICCTIM).SocietyofDigitalInformationandWirelessCommunication,2014:148.
[12]LiuH,LiuQ,NiuZ,candAutomaticFeedback-BadThresholdAdaptation
forCodeSmellDetection[J].IEEETransactionsonSoftwareEngineering,2016,42(6):1-1.
本文发布于:2023-03-27 18:08:14,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1679911695155607.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:软件工程代码.doc
本文 PDF 下载地址:软件工程代码.pdf
| 留言与评论(共有 0 条评论) |