CI checkstyle 让开发自动化: 持续重构
在过去的几年里,我曾看过很多项目的大量源代码,从精美的设计到像是用胶带绑定到一起的代码。我写过新的代码也维护过其他开发人员的源代码。我喜欢编写新的代码,但也喜欢采用一些现有的代码,以某种方法将其简化或将重复的代码提取到一个公共类中。在我早期的工作生涯中,许多人都认为如果不编写新的代码就不会有好的效率。幸好,在 20 世纪 90 年代末,Martin Fowler 编写了 Refactoring一书(参见 参考资料),它使得在不改变外部行为的前提下改进现有代码成为可能。
我在 本系列中所一直推崇的就是 效率:如何减少耗时过程的冗余度,更快速地执行它们。在本文的任务中,我一样推崇这个目标,并且将论述怎样更 有效地执行它们。
?
用清单 2 的 CheckStyle 规则文件、清单 3 的 Gant 例子来示范如何将 CheckStyle 作为一个自动构建的一部分来运行。(参见 什么是 Gant ?侧边栏):
清单 3. 使用 Gant 脚本来执行 CheckStyle 检查
单击 此处查看完整图。
在图 2 中,我:
- 创建了一个叫做
BeerType的 Java 界面 定义了一个通用的 showIngredients()方法 为每一个 BeerType创建了一个实现类 为了使文章保持简洁,我仅为每一个类提供一个方法的实现。显然,创建一个界面的方法可能不只一个。重构能够使代码更易于维护,如 Replace Conditional with Polymorphism 和 Extract Method(本文稍后将会讨论)。
?
清单 5 中的 min属性设置了 CheckStyle 将会标记出的最小重复行数,以供查阅。在这样的情况下,它将只指示出那些至少有 10 行类似或重复的代码块。
图 3 展示了自动构建运行后,清单 5 中的模块设置的结果:
图 3. CheckStyle 报告指示代码重复度过高
?
味道工具重构死代码PMDRemove Code临时字段PMDInline Temp不一致 / 拘谨(uncommunicative)的名称CheckStyle、PMDRename Method、Rename Field长参数列表PMDReplace Parameter with Method、Preserve Whole Object、Introduce Parameter Object本文提供了一种使代码味道与一种度量方法相关的模式,这种度量方法可以配置为通过自动静态分析工具标记。您可以使用或不使用特定的设计模式来进行重构。这为您提供了一个以可重复的方式一致地查找和修复代码味道的框架。我坚信本文的例子也有助于您使用静态分析工具来查找本文未涉及到代码味道。
<!-- CMA ID: 325238 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-document-html-6.0.xsl -->?
参考资料
学习
您可以参阅本文在 developerWorks 全球网站上的 英文原文。让开发自动化 (Paul Duvall,developerWorks):阅读整个系列的文章。“持续检查”(2006 年 8 月)以及 “用 Eclipse 插件提高代码质量”(2007 年 1 月)部分与本文的主题密切相关。
Smells to Refactorings:一个表格,其中列出了特定的代码味道的推荐重构方法。