`
sunxboy
  • 浏览: 2870386 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

[转帖] 让开发自动化: 用 Eclipse 插件提高代码质量

阅读更多

开发<nobr>软件</nobr>时,我的主要目标之一是:要么防止将缺陷引入<nobr>代码</nobr>库,要么限制缺陷的生存期;换言之,要尽早找到缺陷。很显然,越是了解如何编写更好的代码以及如何有效<nobr>测试软件</nobr>,就越能及早地捕捉到缺陷。我也很想要一张能发现潜在缺陷的安全之网。

在本系列 八月份 的那期文章中,我得出了这样的结论:将检验<nobr>工具</nobr>集成到构建过程(例如,使用 Ant 或 Maven)中,能够建立起一种寻找潜在缺陷的方法。尽管这种方法使一致性成为可能并超越了 IDE,但它也有一点反作用。必须在本地构建软件或等待 Continuous Integration 构建的运行。如果使用 Eclipse <nobr>插件</nobr>,就可以在通过 Continuous Integration 构建或集成 发现一些这样的冲突。这就促成了我称为渐进编程 的编程方式,在这种方式下,允许在编码过程中进行一定程度的质量检验 —— 再也不能比这个更早了!

本文涵盖了我所认为的 “五大” 代码分析领域:

  • 编码标准
  • 代码重复
  • 代码覆盖率
  • 依赖项分析
  • 复杂度监控

可以用接下来的几个灵活的 Eclipse 插件来揭示这些分析领域:

  • CheckStyle:用于编码标准
  • PMD 的 CPD:帮助发现代码重复
  • Coverlipse:<nobr>测量</nobr>代码覆盖率
  • JDepend:提供依赖项分析
  • Eclipse Metric 插件:有效地查出复杂度
Eclipse 不是您的构建系统
使用 Eclipse 插件与您将这些检验工具用于构建过程并不矛盾。事实上,您想要确保的是:下列使用 Eclipse 插件的规则就是应用到构建过程中的规则。

安装 Eclipse 插件

安装 Eclipse 插件再简单不过了,只需要几个步骤。在开始之前,最好把该插件下载站点的 URL 准备好。表 1 是本文用到的插件的列表:


表 1. 代码改进插件和相应的下载站点 URL
工具 目的 Eclipse 插件的 URL
 
CheckStyle 编码标准分析 http://eclipse-cs.sourceforge.net/update/
Coverlipse 测试代码覆盖率 http://coverlipse.sf.net/update
CPD 复制/粘贴检验 http://pmd.sourceforge.net/eclipse/
JDepend 包依赖项分析 http://andrei.gmxhome.de/eclipse/
Metrics 复杂度监控 http://metrics.sourceforge.net/update

知道了这些有用插件的下载地址后,安装插件就是一个极简单的过程。启动 Eclipse,然后遵循下列步骤:

  1. 选择 Help | Software Updates | Find and Install,如图 1 所示:



    图 1. 寻找并安装 Eclipse 插件
    寻找并安装 Eclipse 插件



  2. 选择 Search for new features to install 单选按钮,单击 Next

  3. 单击 New Remote Site,输入要安装的插件名和 URL(参见图 2),单击 OK,然后单击 Finish 来显示 Eclipse 更新管理器。



    图 2. 配置新的远程站点
    配置新的远程站点



  4. 在 Eclipse 更新管理器中,有一个查看插件各方面特性的选项。我通常选择顶级项,如图 3 所示。选择您需要的选项并单击 Finish。Eclipse 现在安装该插件。您需要重启 Eclipse 实例。



    图 3. 安装 Eclipse 插件
    安装 Eclipse 插件

请遵循上述这些步骤来安装其他的 Eclipse 插件;只需改变插件名和相应的下载位置即可。

用 CheckStyle 校正标准

代码库的可维护性直接影响着软件的整个成本。另外,不佳的可维护性还会让开发人员十分头痛(进而导致开发人员的缺乏)—— 代码越容易修改,就越容易添加新的产品特性。像 CheckStyle 这样的工具可以协助寻找那些可影响到可维护性、与编码标准相冲突的地方,比方说,过大的类、太长的方法和未使用的变量等等。

有关 PMD
另一个叫做 PMD 的开源工具提供的功能和 CheckStyle 类似。我偏爱 CheckStyle,但 PMD 也有很多执着的追随者,所以我建议您了解一下这个工具,毕竟它也颇受一些人的青睐。

使用 Eclipse 的 CheckStyle 插件的好处是能够在编码过程中了解到源代码上下文的各种编码冲突,让开发人员更可能在签入该代码前真正处理好这些冲突。您也几乎可以把 CheckStyle 插件视作一个连续的代码复查工具!

安装 CheckStyle 插件并做如下配置(参见图 4):

  1. 选择 Project,然后选择 Eclipse 菜单中的 Properties 菜单项。

  2. 选择 CheckStyle active for this project 复选框,单击 OK



    图 4. 在 Eclipse 中配置 CheckStyle 插件
    在 Eclipse 中配置 CheckStyle 插件

Eclipse 重新构建工作空间,并在 Eclipse 控制台中列示已发现的编码冲突,如图 5 所示:


图 5. Eclipse 中 CheckStyle 的代码冲突列表
Eclipse 中 CheckStyle 的代码冲突列表

使用 CheckStyle 插件在 Eclipse 内嵌入编码标准检验是一种很棒的方法,用这种方法可以在编码时 积极地改进代码,从而在开发周期的早期发现源代码中潜在的缺陷。这么做还有更多的好处,如节省时间、减少失败,也因此会减少项目的成本。没错,这就是一种积极主动的方式!

用 Coverlipse 确认覆盖率

Coverlipse 是一个用于 Cobertura 的 Eclipse 插件,Cobertura 是一个代码覆盖率工具,可以用它来评估具有相应测试的源代码的比率。Cobertura 也提供一个 Ant 任务和 Maven 插件,但用 Cobertura,您可以在编写代码时 评估代码覆盖率。您见过这样的模式吗?

通过选择 Eclipse 菜单项 Run 安装 Coverlipse 插件并将其和 JUnit 关联起来,该操作会显示一系列运行配置选项,例如 JUnit、SWT 应用程序和 Java™ 应用程序。右键单击它并选择 JUnit w/Coverlipse 节点中的 New。在这里,需要确定 JUnit 测试的位置,如图 6 所示:


图 6. 配置 Coverlipse 以获取代码覆盖率
配置 Coverlipse 以获取代码覆盖率

一旦单击了 Run,Eclipse 会运行 Coverlipse 并在源代码(如图 7 所示)中嵌入标记,该标记显示了具有相关 JUnit 测试的代码部分:


图 7. Coverlipse 生成的具有嵌入类标记的报告
Coverlipse 生成的具有嵌入类标记的报告

正如您所见,使用 Coverlipse Eclipse 插件可以更快地确定代码覆盖率。例如,这种实时数据功能有助于在将代码签入 CM 系统 更好地进行测试。这对渐进编程来说意味着什么呢?

用 CPD 捕捉代码重复

Eclipse 的 PMD 插件提供了一项叫做 CPD(或复制粘贴探测器)的功能,用于寻找重复的代码。为在 Eclipse 中使用这项便利的工具,需要安装具有 PMD 的 Eclipse 插件,该插件具有 CPD 功能。

为寻找重复的代码,请用右键单击一个 Eclipse 项目并选择 PMD | Find Suspect Cut and Paste,如图 8 所示:


图 8. 使用 CPD 插件运行复制粘贴检验
使用 PMD/CPD 插件运行复制粘贴检验

一旦运行了 CPD,您的 Eclipse 根目录下就会创建出一个 report <nobr>文件夹</nobr>,其中包含一个叫做 cpd.txt 的文件,文件中列示了所有重复的代码。图 9 中是一个 cpd.txt 文件的例子:


图 9. Eclipse 插件生成的 CPD 文本文件
Eclipse 插件生成的 CPD 文本文件

靠人工来寻找重复的代码是一项挑战,但使用像 CPD 这样的插件却能在编码时轻松地发现重复的代码。

使用 JDepend 进行依赖项检查

JDepend 是个可免费获取的开源工具,它为包依赖项提供面向对象的度量值,以此指明代码库的弹性。换句话说,JDepend 可有效测量一个架构的健壮性(反之,脆弱性)。

除了 Eclipse 插件,JDepend 还提供一个 Ant 任务、Maven 插件和一个 Java 应用程序,用以获取这些度量值。对于相同的信息,它们有着不同的传递机制;但 Eclipse 插件的特别之处和相应优点是:它能以更接近源代码(即,编码时)的方式传递这条信息。

图 10 演示了使用 Eclipse JDepend 插件的方法:通过右键单击源文件夹并选择 Run JDepend Analysis。一定要选择一个含源代码的源文件夹;否则看不到此菜单项。


图 10. 使用 JDepend Analysis 分析代码
使用 JDepend Analysis 分析代码

图 11 显示了运行 JDepend Analysis 时生成的报告。左边显示包,右边显示针对每个包的依赖项度量值。


图 11. Eclipse 项目中的包依赖项
Eclipse 项目中的包依赖项

正如您所见,JDepend 插件提供了有助于不断观察架构可维护性变化的大量信息 —— 这其中最大的好处是您可以在编码时看到这些数据。

用 Metrics 测量复杂度

“五大”代码分析最后的一项是测量复杂度。Eclipse 提供一种叫做 Metrics 的插件,使用该插件可以进行许多有用的代码度量,包括圈复杂度度量,它用于测量方法中惟一路径的数目。

安装 Metrics 插件并重启 Eclipse;然后遵循下列步骤:

  1. 右键单击您的项目并选择 Properties 菜单。在结果窗口中,选择 Enable Metrics plugin 复选框并单击 OK,如图 12 所示:



    图 12. 为项目配置 Metrics
    为项目配置 Metrics



  2. 从 Eclipse 中选择 Window 菜单打开 Metrics 视图,然后选择 Show View | Other...

  3. 选择 Metrics | Metrics View 打开如图 13 中显示的窗口。您需要使用 Java 透视图并重新构建项目,从而显示这些度量值。



    图 13. 打开 Eclipse 中的 Metrics View
    打开 Eclipse 中的 Metrics View



  4. 单击 OK 来显示如图 14 中的窗口。

    在此例中,我正在查看一个单独方法的圈复杂度。真正妙的是您可以双击 Metrics 列表中的方法,该插件会在 Eclipse 编辑器中为此方法打开源代码。这就让修正变得超级简单(如果需要的话)!



    图 14. 查看方法的圈复杂度
    查看方法的圈复杂度

正如我之前提到过的,Eclipse Metrics 插件还提供了许多功能强大的度量值,有助于您在开发软件的过程中改进代码 —— 可见,它是一个渐进编程意义上的插件!

合适的才是最好的

正如您从本文中看到的那样,将“五大”测量方法,即编码标准、代码重复、代码覆盖率、依赖项分析和复杂度监控,用于改进代码质量十分重要。但适合您的才是好的。请记住还有其他许多可用的 Eclipse 插件(比如 PMD 和 FindBugs)能够帮助您在开发周期的早期改进代码质量。不管您想要的工具或偏爱的方法是什么,重要的是:行动起来去积极改进代码质量并让手工代码检验的过程变得更加有效。我估计您使用这些插件一段时间后,就再也离不开它们了。



参考资料

学习
  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文

  • 让开发自动化 (Paul Duvall,developerWorks):阅读完整的系列。

  • Improving Code Quality with PMD and Eclipse” (Levent Gurses,Jacoozi,2005 年 1 月):这篇文章将 PMD 视为 Eclipse 插件,介绍了使用 PMD 改进代码质量并缩短代码检验过程的方法。

  • 用 Cobertura 测量测试覆盖率” (Elliotte Rusty Harold,developerWorks,2005 年 5 月):Elliotte Rusty Harold 分享了他的经验,即如何使用代码覆盖率的最佳实践来利用 Cobertura。

  • 不要被覆盖报告所迷惑” (Andrew Glover,developerWorks,2006 年 1 月):这篇文章进一步揭示了覆盖率报告中的数字所代表的真正含义,也给出了这些数字所不能代表的含义。

  • Managing Your Dependencies with JDepend” (Glen Wilcox,OnJava,2004 年 1 月):在这篇文章中,Glen Wilcox 介绍了 JDepend,这是一个可以免费获取的工具,它能洞悉软件架构中的许多质量问题。

  • 软件架构的代码质量” (Andrew Glover,developerWorks,2006 年 4 月):Andrew Glover 介绍了如何持续监控以及如何改正能够影响软件架构长期存续性的代码质量问题。

  • 让开发自动化: 持续检查” (Paul Duvall,developerWorks,2006 年 8 月):Paul Duvall 介绍了自动化的检查工具(如 CheckStyle、JavaNCSS 和 CPD )是如何增强开发过程的以及何时应该使用这些工具。

  • Detecting Duplicate Code with PMD's CPD” (Tom Copeland,OnJava,2003 年 3 月):Tom Copeland 介绍了一种叫做 CPD(复制/粘贴检测器)的开源工具,该工具用于寻找重复的 Java 代码。

  • Maintain organizational standards with code audits” (testearly.com):编码标准有利于广大开发人员对代码库达成共识。

  • developerWorks Java 技术专区:数百篇关于 Java 编程各方面的文章。


获得产品和技术

讨论
  • 提高代码质量论坛:developerWorks 的积极贡献者 Andrew Glover 是一名专注于改进代码质量的顾问,他为这个由他主持的论坛带来了很多相当专业的知识。
分享到:
评论

相关推荐

    eclipse乱码+开源转码插件+批量操作

    解决过程(插件使用,转帖): step1. 将插件com.lifesting.tool.encoding_1.0.0.jar拷贝到eclipse/plugins目录下,重启Eclipse。 step2. 选择某个项目,右键选择properties,然后点击Convert Setting进行转码...

    转帖工具插件 for PHPwind 7.5 正式版.rar

    "转帖工具插件 for PHPwind 7.5 正式版" 是专门为 PHPwind 7.5 版本设计的一个功能插件,旨在提供便捷的帖子转移功能,帮助管理员或者用户将内容从一个地方轻松移动到另一个地方,而无需直接编辑论坛的原始文件。...

    一键转帖功能插件 for 帝国CMS 6.0 GBK utf8 V1.0.rar

    总结来说,“一键转帖功能插件 for 帝国CMS 6.0 GBK utf8 V1.0”是提高网站内容传播效率的有效工具,通过简单的安装步骤即可实现。在实际应用中,理解其工作原理和可能出现的问题,将有助于更好地利用这一插件,提升...

    一键转帖功能插件 for 帝国CMS v1.0.rar

    "一键转帖功能插件 for 帝国CMS v1.0.rar" 是一个专为帝国CMS设计的扩展工具,其主要目标是简化用户在网站上分享内容的过程,提高用户体验。这个插件允许用户轻松地将网站上的文章或信息复制并转发到其他平台,如...

    【转帖】Flex 开发入门

    4. **Flex 构建工具**: Adobe Flash Builder(以前称为Flex Builder)是一个基于Eclipse的IDE,提供了图形化的界面设计工具、代码编辑器和调试器,简化了Flex应用的开发流程。 5. **Flex 组件**: Flex 提供了一个...

    Convert X 转贴工具插件 for Discuz!7.0.rar

    "Convert X 转贴工具插件 for Discuz!7.0" 是一款专为Discuz! 7.0论坛系统设计的程序插件。Discuz!是一款非常流行的开源社区论坛软件,它允许用户建立自己的在线社区,进行讨论和互动。这款转贴工具插件的出现,...

    论坛转帖工具.rar

    总的来说,"论坛转帖工具"是一个简化用户在不同论坛间迁移帖子内容的应用,基于HTML构建,易于使用且可能具备一定的自动化和适应性,以满足跨论坛的信息共享需求。在使用时,用户应注意遵守各个论坛的使用条款,尊重...

    [转帖]通过WebView获取访问网页的源代码

    - `.project`:Eclipse项目配置文件,描述了项目属性和构建设置。 - `default.properties`:早期的Android项目文件,包含项目属性,如最小SDK版本等。在现代Android Studio项目中已被忽略。 - `AndroidManifest.xml`...

    discuz X2转帖工具、采集工具

    X2转帖工具、采集工具”是针对这个平台设计的辅助软件,主要用于帮助论坛管理员或用户批量发布帖子和采集内容,提高论坛内容更新的效率。 一、批量发帖功能 1. 自动化发布:此工具可以自动化地创建和发布帖子,...

    编辑人员转帖去水印工具

    总之,编辑人员转帖去水印工具如Teorex Inpaint,为图像编辑提供了便利,通过其独特的算法和技术,我们可以高效地去除图片中的水印,提高内容的质量。但在使用过程中,务必遵守版权法和相关法律法规,以维护良好的...

    linux图形系统开发基础,转帖自linux时代

    图形系统开发基础,我是转帖的,感觉不错,属于入门级别。 1:搭建Linux下的图形系统开发环境 图形输出在嵌入式开发中,多数是向FrameBuffer中写数据,然后会显示在LCD中,在Linux下做图形开发的时候,需要模拟各种...

    转帖:Android应用的自动升级、更新模块的实现docx.docx

    在Android应用开发中,自动升级和更新功能是一个重要的特性,它允许用户无缝地获取应用的最新版本,提高用户体验。本文将详细介绍如何实现这样一个模块。 **一、基础概念** 1. **版本标识**: 在AndroidManifest.xml...

    贴吧转帖工具

    【贴吧转帖工具】是一种专为百度贴吧用户设计的便捷工具,主要用于提高用户...总的来说,【贴吧转帖工具】通过自动化操作,为百度贴吧用户提供了高效、便捷的互动方式,但用户在使用时也要注意风险防范和遵守社区规则。

    Html2UBBMaxcj_Softii论坛专用转帖工具

    - **本站站内插件安装方法.txt**:这个文件可能提供了关于如何在Softii论坛上安装和使用此工具的详细步骤。 - **人人软件站.url**:这可能是一个快捷方式,指向一个网站,用户可以通过这个链接获取更多的软件信息...

    【转帖】4412嵌入式开发板学习笔记(一)

    标题《【转帖】4412嵌入式开发板学习笔记(一)》和描述《新手在进行开发学习前,建议先看01-迅为电子开发板入门视频。对开发板和开发环境有一定的了解后,不要盲目接线开机。以下是个人的一点经验,和大家分享一下...

    简单实用的aixcoder智能编程助手开发插件推荐

    **aixcoder智能编程助手** 是一款专为程序员设计的高效开发插件,它利用先进的深度学习技术,提供精准的代码提示、代码风格检查和编程模式学习功能,旨在提升开发效率并优化代码质量。下面将详细介绍aixcoder的各个...

    用PHP批量生成图片缩略图——活跃论坛转帖

    在PHP编程中,批量生成图片缩略图是一个常见的需求,特别是在构建论坛或社交媒体平台时,为了提高用户体验,通常需要对用户上传的图片进行自动化处理,生成预览版本,即缩略图。本教程将深入探讨如何使用PHP实现这一...

    遍历网页的一段Delphi代码(转帖)

    根据给定的信息,本文将对一段用于遍历网页的 Delphi 代码进行解析与说明,以便读者能够深入了解其工作...理解这段代码的工作原理不仅有助于提升编程技能,还能帮助开发者更好地利用 Delphi 进行 Web 自动化项目开发。

    转帖经典---JAVA设计模式

    这些模式为程序员提供了一种标准化的方式,以便在面向对象编程中有效地组织和构建代码,提高代码的可读性、可维护性和复用性。在Java中,设计模式分为三类:创建型模式、结构型模式和行为型模式。 创建型模式关注于...

Global site tag (gtag.js) - Google Analytics