`

BAD SMELL

阅读更多
拙劣设计的bad smells(坏味道、潜在问题、缺点)通常是违反了设计原则才出现的。
僵化性(rigidity):指难以对软件进行改动,即使是简单的改动。如果单一的改动会导致有依赖关系的模块的连锁改动,那么设计是僵化的。必须改动的模块越多,设计就越僵化。
脆弱性(fragility):指在进行一个改动时,程序的许多地方就可能出现问题。常常是,出现新问题的地方与改动的地方并没有概念上的关联。要修正这些问题会引起新的更多问题,从而使得开发团队象一只追逐自己尾巴的狗(忙的团团转)。
牢固性(immobility):指设计中包含了对其它系统有用的部分,但是要把这些部分从系统中分离出来所需的努力和风险是巨大的。这是一个令人遗憾的事,但却很常见。
n粘滞性(viscosity):包括软件和环境的粘滞性。当面临一个改动时,开发人员常常发现会有多种改动的方法。其中,一些方法会保持设计,而另一些会破坏设计。当那些可以保持设计的方法比那些破坏设计的方法更难应用时,就表明设计具有高的粘滞性。即做错的事容易,而做对的事却很难。我们希望在软件设计中,可以容易地进行那些保持设计地变动。 当开发环境迟钝、低效时,就会产生环境地粘滞性。例如:如果编译所花费的时间很长,那么开发人员就会被引诱去做不会导致大规模重编译的改动,即使那些改动不再保持设计。如果源代码控制系统需要几个小时去check in 仅仅几个文件,那么开发人员就会被引诱去做那些需要尽可能少check in 的改动,而不管改动是否会保持设计。
  不必要的复杂性:如果软件中包含有当前没有用的组成部分,它就含有不必要的复杂性。为过多的可能性做准备也许会带来回报,但更多的时候不会(因为引起混乱)。
不必要的重复:剪贴和粘贴也许是有用的文本编辑操作,但是他们却是灾难性的代码编辑操作。当相同的代码以稍微不同的形式一再出现是,就表示开发人员忽视了抽象。当系统中有重复的代码时,对系统的改动会变得困难。在一个重复的代码体中发现的错误必须在每个重复体中一一修正。 晦涩性:指模块难以理解。 代码可读性是一个很重要的因素。


分享到:
评论

相关推荐

    Code Bad Smell Detector-开源

    `Code Bad Smell Detector` 是一个基于Java的开源项目,其目标是自动检测代码中的不良味道,从而帮助开发者改善代码质量。 该项目遵循Martin Fowler在其1999年的著作《重构:改善既有代码的设计》中提出的五种主要...

    coca-master.zip

    它不仅能够检测代码中的不良实践(bad smell),进行代码行数统计,还能够分析代码的调用与依赖关系,同时提供Git分析功能,以及支持自动化重构,极大地提升了开发者的工作效率。 首先,让我们深入了解一下Coca如何...

    Findbug使用指南.docx

    Findbug 是一个开源的 Eclipse 代码检查工具,能够简单高效全面地帮助我们发现程序代码中存在的 bug、bad smell 以及潜在隐患。它提供了简单的修改意见供我们重构时进行参考,通过使用它,可以一定程度上降低我们 ...

    jmockit测试例子

    It indeed a bad smell, but before you refactor them, you may need to make them testable firstly. Now, jmockit comes to us. "Tests can easily be written that will mock final classes, static methods...

    java重构设计.doc

    **Java重构设计** 在软件开发过程中,重构是一个至关重要的步骤,它涉及到对现有代码的改进,以提高代码...实践中,我们应该时刻关注代码的"bad smell",并采取适当的重构策略来解决这些问题,以实现更好的软件设计。

    新概念英语第二册第27课课件PPT课件.pptx

    作为名词,它指的是气味,可以是好闻的(good smell)或难闻的(bad smell)。 3. **wonder**:动词"to wonder"意为感到好奇或想知道某事,相当于"want to know"。形容词"wonderful"则表示极好的,与great同义,...

    麻省理工18年春软件构造课程阅读04“代码评审” 1

    与此同时,评审过程也是对编程原则的一个重要检验,例如,是否有代码存在"难闻的"代码(bad smell),这通常指的是那些使代码难以理解或可能引发错误的代码结构,比如冗余的代码或者复杂的逻辑判断。 在进行代码...

    java重构设计java重构设计.doc

    7. **代码的不良模式(Bad Smell)及解决策略**: - **重复代码**:提取方法。 - **过长函数**:拆分为小型方法。 - **过大类**:拆分并提炼相关变量。 - **过长参数列表**:考虑传递对象。 - **发散式变化**:...

    dubbo开发者指南(非扫描有完整目录).pdf

    最后,文档中也提到了一些错误处理和版本升级的策略,例如对BadSmell代码的识别与修改、对调用参数的深入讨论等。这些都是为了提高代码质量,以及保障服务的平滑升级。 总体来说,Dubbo开发者指南为开发者提供了...

    java 初学者可以更好的了解它们的用法

    文件“badsmell.txt”可能包含了关于代码异味(Code Smell)的知识,这是识别和改进低质量代码的重要概念,通常涉及违反良好编程实践的情况。学习识别和修复代码异味是提升代码质量的关键步骤。

    一个项目团队的敏捷之旅

    代码复查成为日常流程的一部分,借助Jupiter等工具,及时发现并修正代码中的“Bad Smell”。这一举措有效提升了代码质量,培养了良好的编码习惯。尽管最初反馈循环频繁,但随着团队的适应与改进,复查效果显著,成员...

    江苏省沛县新华中学高三英语总复习单选题汇编2代词

    在 "Those who smoke heavily should remind themselves of health, the bad smell, and the feelings of other people." 中,"themselves" 强调抽烟者应该提醒他们自己。 7. **否定含义的"nothing"**:"Nothing" ...

    findbugs检查工具

    findbugs是一个开源的eclipse 代码检查工具;它可以简单高效全面地帮助我们发现程序代码中存在的bug,bad smell,以及潜在隐患. 下载的文件包含如下: 1.findbugs的eclipse插件source包 2.安装及使用说明文档

    软件测试中单元测试VS私有方法

    软件测试中单元测试VS私有方法软件测试前几天,NareshJain在ManagedChaos上发了篇博客,总结了一些测试中的badsmell。例如:●一个方法中有太多testcase——被测试的方法做了太多事情。●太多的setup/teardown——...

    备战2019年高考英语纠错笔记系列专题03形容词和副词含解析

    在例题1中,"smell"作为连系动词后面接形容词"bad"作为表语,而在"smell badly"中,"badly"作为副词修饰动词"smell"。 2. **形容词作表语** - 形容词可以作为谓语动词后的表语,如例题2中,"found dead"表示"被...

    Maven 常用插件的详细整理

    Maven 中的源码分析插件是通过 maven-pmd-plugin 实现的,该插件提供了对 Java 代码的静态分析功能,能够检测出代码中的错误、bug 和坏味道(bad smell)。通过该插件,开发者可以对代码进行静态分析,提高代码的...

    Smell-Spotter:用于检测python 3源代码中的安全气味的Visual Studio Code扩展项目

    Bad File Permission Command Injections Cross-site scripting Constructing SQL upon Input Debug Set to True in Deployment Exec Statement Empty Password Hard-coded Secrets Hard-coded IP Address Binding ...

    八年级英语上册Unit4Lessons22_24重点知识练习新版冀教版

    3. "(C) Although the police dogs smell _bad_, they smell _well_ in their tasks." "Smell bad" 指嗅觉不好,"smell well" 意为嗅觉灵敏,在任务中表现好。 4. "(D) He is busy _with_ his homework." "Be busy ...

    形容词和副词练习题.doc

    而当它表示闻起来如何时(连系动词),如"smell good/bad",则需用形容词作表语。因此,正确答案是D,"badly"修饰嗅觉能力,"bad"描述气味。 2. 题目2涉及的是英语习惯表达。"sure"在这里表示确定性,适合用在"sb. ...

Global site tag (gtag.js) - Google Analytics