七款代码味道识别工具【简介】

更新时间:2023-05-11 20:28:01 阅读: 评论:0

七款代码味道识别⼯具【简介】
也欢迎⼤家转载本篇⽂章。分享知识,造福⼈民,实现我们中华民族伟⼤复兴!
代码味道识别⼯具 (Code Smell Detection Tools, CSDT)既可以应⽤于软件开发阶段,也可以应⽤于软件维护阶段。⽬前⼤部分IDE 都集成了⾃动或者半⾃动重构⼯具,但是根据国外研究⼈员的调查发现,真正在软件开发和维护中使⽤重构⼯具的⼈并不多,其中有⼀个很重要的原因是不知道何时该重构,也就是说找不准重构时机,因此重构时机的⾃动识别具有很⼤的实⽤价值。很多代码味道本⾝就是重构时机的指⽰器,如果能够⾃动发现这些代码味道,就说明代码中存在⼀些不恰当的设计⽅案或者程序代码,在此时再实施重构将有利于提⾼代
码质量。
当前⼤部分CSDT在发现代码味道之后并不能实施⾃动重构(在接下来要介绍的七款⼯具中,只有JDeodorant提供了重构功能),还好现代IDE都⾃带了重构功能,尽管很多重构还是需要⽤户参与,只是半⾃动重构,但是这已经⽐⼈⼯重构好很多了。⼈⼯重构主要存在两个问题:
(1) 重构效率低。特别是对于⼀些较为复杂的重构,如果全部按照Martin Fowler书中的⽰例⼀步步操作,效率很低,使得重构这⼀⾮创造性⼯作耗费⼤量的时间和精⼒,划不来,不可取。
(2) ⼈⼯重构容易犯错。只要程序本⾝正确,并能够通过严格的正确性和可靠性测试,⾃动重构的结果往往⽐⼈⼯重构的结果很准确,⽽⼈⼯重构的质量需要取决于重构⼈员本⾝的经验,⼀不⼩⼼就会存在⼀些错误的重构或者重构不完整。
本⽂将对七款CSDT进⾏简要的介绍(如果有时间的话在后续博客中再对这些⼯具分别进⾏详细的说明),并提供了下载链接,没有⽤过的童鞋可以试着⽤⽤,使⽤过的童鞋也欢迎与Sunny交流使⽤⼼得,特别是对这些⼯具有什么意见和建议,这对Sunny当前的研究⼯作很
有帮助,。
(1) Checkstyle
Checkstyle是⼀款知名度很⾼的静态代码分析⼯具,⽤于帮助程序员按照⼀些代码标准来编写Java代码,它内置了许多规则,可以验证Java代码是否符合这些预定义的规则。Checkstyle可以检测Large Class,Long Method,Long Parameter List和Duplicated Code 四种代码味道。
(2) DECOR
DECOR由Moha等⼈设计和开发,它定义了⼀组⽅法⽤于⾃动检测设计和代码味道(⼜称为反模式Anti-Pattern)。他们使⽤定制的语⾔描述了⼋种代码味道(分别是Data Class,Large Class,Long Method,Long Parameter List,Message Chains,Refud Bequest,Speculative Generality,Tradition Breaker),并使⽤模板⾃动⽣成它们的探测算法,最后依据精确率(Precision)和召回率(Recall)来验证这些算法,在DECOR中实现了这些⽤于软件分析的算法。DECOR既是Moha等提出的⽅法的名字,也是他们所开发的代码味道检测⼯具的名字。
【注:获取DECOR的安装程序需要向作者(PtidejTeam)发电⼦邮件,邮箱地址:】
(3) iPlasma
iPlasma是⼀个⽤于评估⾯向对象系统质量的集成平台,它涉及模型提取、⾼层度量分析等多个⽅⾯。iPlasma⽤于检测⼀些作者预先定义的代码问题,这些问题主要分为三类:⾝份问题(Identity Dish
armonies)、协作问题 (Collaboration Disharmonies)和分类问题(Classification Disharmonies),关于这些问题的详细介绍可以参考Object-Oriented Metrics in Practice: Using Software Metrics to Characterize, Evaluate, and Improve the Design of Object-Oriented Systems⼀书,这些问题中包括不少代码味道,例如Duplicated Code(在iPlasma中叫做Significant Duplication),God Class,Feature Envy和Refud Bequest等。当然,iPlasma 并没有实现Object-Oriented Metrics in Practice中所有问题的探测,在Object-Oriented Metrics in Practice⼀书中,⾝份问题(Identity Disharmonies)包括God Class,Feature Envy,Data Class,Brain Method,Brain Class和Significant Duplication,协作问题 (Collaboration Disharmonies)包括Intensive Coupling,Disperd Coupling和Shotgun Surgery,分类问题(Classification Disharmonies)包括Refud Parent Bequest和Tradition Breaker。对这些味道及其详细说明感兴趣的童鞋可以看看Refactoring: Improving the Design of Existing Code和Object-Oriented Metrics in Practice: Using Software Metrics to Characterize, Evaluate, and Improve the Design of Object-Oriented Systems这两本书。
(4) inFusion
inFusion是iPlasma的商业版本,因此inFusion的功能⽐iPlasma更加强⼤,不过因为它是⼀款商业软件,所以很多功能需要购买正式
版才能使⽤,⽽且价格还不便宜,下图是最新的价格表,价格单位是欧元哦,欧元!inFusion能够探测超过20中代码味道和代码缺陷,在本⽂所介绍的七种⼯具中是最多的,不过也就它要钱,它能够探测到的代码味道包括重复代码,破坏封装的类(如数据类或者万能类),⾼耦合的⽅法和类,以及⼀些设计不合理的类继承结构。
(5) JDeodorant
从学术的⾓度来说,JDeodorant是⼀款很强⼤的⼯具,催⽣了多篇⾼⽔平研究论⽂的诞⽣。它是⼀个
Eclip插件,可以⽤于⾃动识别Java程序中存在的Feature Envy,God Class,Long Method和Switch Statement(在JDeodorant中称为Type Checking)等代码味道。针对识别到的代码问题,JDeodorant将向⽤户提供多种合适的重构⽅案,并按照它们对设计的影响进⾏排序,然后将排序结果呈现给开发⼈员以供开发⼈员选择,最后还能够⾃动实施所选择的重构⼿段。
(6) PMD
PMD在代码静态分析领域知名度⾮常⾼,它可以扫描Java源代码并寻找代码中潜在的问题或者可能存在的bug,例如dead code(死代码),empty try/catch/finally/switch statement(空的语句块),unudlocal variables or parameters(没有使⽤的局部变量或参数)和duplicated code(重复代码)
等。PMD也可以探测⼀些代码味道,例如Large Class,Long Method,Long Parameter List 和Duplicated Code等,它允许⽤户在探测这些代码味道时设置⼀些探测度量因⼦的阈值,例如Large Class和Long Method的代码⾏数,Long Parameter List的⽅法参数个数,Duplicated Code中重复代码的数量等,这些都可以由⽤户⾃⼰来设定。
(7) Stench Blossom
Stench Blossom是⼀个提供了交互式可视化环境的味道识别⼯具,它可以向程序员快速提供⼀个代码味道的⾼层视图以及味道的来源。Stench Blossom也是⼀个Eclip插件,它向程序员提供了三个不同的视图,通过这三个视图逐步以可视化⽅式提供更多关于这些代码味道的信息。它最终以可视化⽅式返回⼀个综合的反馈结果,在IDE中以花瓣图的⽅式来表⽰代码单元,花瓣的⼤⼩与某⼀代码单元中存在的味道“强度”成正⽐,也就是说存在的代码味道越多,对应的花瓣越⼤。寻找这些代码味道的唯⼀可能⽅法就是⼈⼯审查源代码,主要是分析那些存在代码味道的⼤花瓣。Stench Blossom可以探测到8种代码味道,分别是Data Clumps,Feature
Envy,Instanceof,Large Class,Long Method,Message Chains,Switch Statement和Typecast。这些味道有些并不属于Martin Flower所定义的22种经典代码味道。
表1对这七个⼯具的⼀些基本特征进⾏了总结,不难看出:所有的⼯具都可以对Java代码进⾏味道识
别,部分⼯具可以识别C/C++中的代码味道;有⼀些⼯具作为单机版(Standalone)发布,也有⼀些⼯具作为Eclip插件(Plugin)发布;只有JDeodorant提供了⾃动重构(Refactoring)功能;部分⼯具只能检测到代码中存在的味道,但是没有对所识别到的味道进⾏定位。具体情况如表1所⽰:
表2对这七个⼯具所能够探测到的代码味道进⾏了统计,作为商业⼯具的inFusion所能够识别到的代码味道最多(12种),其次是iPlasma(11种)。
表2中⼀共包括21种代码味道,但并⾮所有味道都是Martin Fowler在《重构》⼀书中定义的那22种代码味道。本⽂所介绍的七种⼯具最多也就能够识别⼀半味道多⼀点,不知道新版本是否可以识别更多的味道。如果能够识别到更多的味道(除了这21种外,还有⼀些其
他的代码味道),⽽且识别速度还过得去,我想应该可以开发出更强⼤的代码味道识别⼯具,。
由于不同的代码味道识别⼯具的实现原理不同,因此,对于同⼀种代码味道,不同的⼯具的识别结果并不⼀定相同,有国外学者对这些⼯具的准确率进⾏了⽐较,不同的⼯具对于某种(些)味道可能具有⼀些优势,但对于其他味道可能效果并不是最好。缺乏统⼀的标准和规范,这也是当前代码味道识别所⾯临的⼀个问题,国内从事相关研究和⼯具开发的⼈较少,很多企业对于代码质量的重视程度不够,导致代
码味道识别⼯具的推⼴和使⽤并不太给⼒,希望在将来会有所好转。
除上述七款⼯具之外,还有⼀些⽤于探测代码味道的⼯具和⽅法。例如CodeVizard (基于Object-Oriented Metrics in Practice⼀书所定义的探测规则),inCode(基于inFusion的Eclip插件),ExC
op (for ),Analyst (for Java,商业软件),JCosmo (for Linux),CloneDigger和ConQat(⽤于克隆检测),其中,克隆检测⼯具应该是最多的,Sunny计划整理⼀篇专门的博⽂来介绍常⽤的克隆检测⼯具。
本⽂中所介绍的这些⼯具⼤家都可以试着⽤⽤,结合Eclip中的Refactoring菜单⼀起使⽤应该有利于提⾼代码质量。如有代码味道
识别和重构⽅⾯的问题,欢迎与Sunny交流讨论!
参考⽂献:
[1] F. A. Fontana, P. Braione, M. Zanoni. Automatic detection of bad smells in code: An experimental asssment [J].Journal of Object Technology, 2012, 11(2): 1-38.
[2] F. A. Fontana, E. Mariani, A.Morniroli, et al. An Experience Report on Using Code Smells Detection Tools[C]. 2011 IEEE Fourth International Conference on Software Testing, Verification and Validation Workshops (ICSTW), Berlin, Germany, 2011: 450-457.

本文发布于:2023-05-11 20:28:01,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/104912.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:代码   味道   重构
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图