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

2023-11-03

2007 年 1 月 29 日

如果能在构建代码前发现代码中潜在的问题会怎么样呢?很有趣的是,Eclipse 插件中就有这样的工具,比如 JDepend 和 CheckStyle,它们能帮您在软件问题暴露前发现这些问题。在 让开发自动化 的本期文章中,自动化专家 Paul Duvall 将带来一些关于 Eclipse 插件的例子,您可以安装、配置和使用这些静态分析插件,以便在开发生命周期的早期预防问题。
关于本系列
作为一名开发人员,我们的工作就是为终端用户将过程自动化;然而,我们当中有很多人却忽视了将我们自己的开发过程自动化的机会。为此,我编写了让开发自动化 这个系列的文章,专门探索软件开发过程自动化的实际应用,并教您何时 以及如何 成功地应用自动化。

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

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

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

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

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

  • CheckStyle:用于编码标准
  • PMD 的 CPD:帮助发现代码重复
  • Coverlipse:测量代码覆盖率
  • 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 文件夹,其中包含一个叫做 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)能够帮助您在开发周期的早期改进代码质量。不管您想要的工具或偏爱的方法是什么,重要的是:行动起来去积极改进代码质量并让手工代码检验的过程变得更加有效。我估计您使用这些插件一段时间后,就再也离不开它们了。

获得产品和技术

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让开发自动化: 用 Eclipse 插件提高代码质量 的相关文章

随机推荐

  • 计算机图形学基础:双向反射分布函数 BRDF

    文章目录 光照 照明 Illumination 预备知识 球面坐标 Spherical Coordinate 立体角 Solid Angle 投影面积 Foreshortened Area 光能 Radiant Energy 光通量 Rad
  • 【第六期】拿不到offer全额退款

    前 言 学院第四期课程在2019年10月结课 第一至第四期具有求职意向的同学中 目前已经有80 的同学拿到了国内外名企的AI算法岗位offer 或者国外名校的AI 硕士 全奖博士录取 offer 在大家的认可下 我们开始了第六期的课程 在本
  • MyBatis 查询数据库

    目录 1 什么是 MyBatis 2 MyBatis 环境搭建 2 1 创建数据库和表 2 2 添加 MyBatis 框架支持 2 3 配置数据库连接和MyBatis 2 4 添加代码 2 4 1 添加实体类 2 4 2 添加 mapper
  • 隐私合规:检测第三方SDK调用的隐私权限

    隐私合规 检测第三方SDK调用的隐私权限 原文地址 隐私合规 检测第三方SDK调用的隐私权限 前言 看了一圈各大网站目前关于隐私合规检测的分享 发现大家几乎都是自己写一套动态代理 Hook或者ASM来实现代码拦截从而检测不合规的代码堆栈 虽
  • 【软考-中级】系统集成项目管理工程师-计算题

    系统集成项目管理工程师 二 计算题 题型一 EMV 预期货币价值 题型二 加权系统 题型三 自制和外贸决策 采购管理 题型四 沟通渠道 沟通管理 题型五 投资回收期 回收率 题型六 进度 网络计算题 学习章节 软考 中级 系统集成项目管理工
  • 解锁tRPC高性能密码:网络方案简介

    导语 本文介绍了部分高性能网络方案 包括RDMA HARP io uring等 从技术原理 落地可行性等方面 简要地做出分析 希望能对此方面感兴趣的开发者提供一些经验和帮助 一 背景 业务中经常会有这样的场景 随着网卡速率的提升 10G 2
  • 算法基础:复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

    前言 我们都知道 数据结构和算法本身解决的是 快 和 省 的问题 即如何让代码运行得更快 如何让代码更生存储空间 所以 执行效率是算法一个非常重要的考量指标 那如何来衡量我们编写的算法代码的执行效率呢 那就是时间 空间复杂度分析 为什么需要
  • ios导航栏透明

    功能需求 根新浪微博个人主页类似 下拉拉伸放大图片下拉刷新 前面文章已解决 向上滑动的时候 导航栏的透明度逐渐增加 最后变成不透明的 当然说起来感觉其实没什么 不就是滑动改变透明度吗 但是做起来完全不是你想象的那样 首先解决透明度的问题 让
  • 多种方法实现数组元素从大到小排序;冒泡排序

    实现数组由大到小排列 实现一 数组 最小数冒泡到最右边 int sort int a int n int i j temp for i 0 i
  • win10 修改 mysql8 root密码

    打开控制台进入到mysql的安装目录下的bin目录中 例如D gt cd D Program Files mysql 8 0 12 winx64 bin 执行mysql命令 登录上mysql mysql u root p 输入密码后回车 成
  • codevs1024一塔湖图(丧心病狂的建图)

    丧心病狂的最短路 关键是建图 根据题目中给的路 拆出节点来 建图 i j gt j 1 n i 然后根据障碍 把死路 湖覆盖的dis改变成极大值 然后Floyd 然后 然后就没有然后了 include
  • 炉石传说服务器维护公告,炉石传说3月15日更新维护公告 炉石更新日志

    炉石传说在3月15日进行了一次新版本的更新 在本次更新中 我们将勾画出一份暗影崛起的计划 并邀请你在计划执行之前加入我们的组织 同时 我们要用独特的方式向猛犸年告别 还提升了部分游戏体验 修复了一些问题 详情请见下文 炉石传说暗影崛起新卡大
  • 应用程序管理工具

    应用程序管理是 DevOps 的重要组成部分 它可以定义为在所有阶段监控和管理软件应用程序的可用性 运行状况 性能和功能的过程 包括规划 设计 构建 测试 部署 维护和更新 这意味着应用程序从概念到停止都受到监控 应用程序管理的重要性 管理
  • egg 启动过程

    前言 最近在写node后台 使用了egg 不了解框架的运行过程 更多的是在搬砖配置 心里没底 今天翻出源代码 在此记录一下 启动命令行 egg bin dev 为了看清运行过程 使用node调试 进入项目运行 node inspect br
  • 如何解决 “Component cannot be used as a JSX component“

    原因是react版本与 types react版本不一致导致的 在tsconfig json中加入以下代码 将依赖指向项目里的node modules paths react node modules types react 改完后代码大概
  • 百度翻译翻译长句python调用逆向js生成的sign不正确

    对于一个小公司的程序员或者学生党 没有太多资金的支持 所以我们一般会寻找一些免费的渠道来满足自己需求 例如我现在做爬虫需要翻译大量excel文档 谷歌翻译有google trans new这个包 但是翻译效果不一定好 所以还要用百度翻译来配
  • 8个Python编程技巧,让你的代码速度飞起,老板刮目相看!

    大家好 作为一名Python开发者 我们都希望提高编程效率并编写高质量的代码 在这篇博客中 我将分享8个实用的Python编程技巧 帮助你更轻松 高效地完成工作 1 使用f string进行字符串格式化 从Python 3 6开始 f st
  • 软件项目管理 6.8.专家估算法

    前言 大家好 这节我们学习软件项目管理 专家估算法 专家估算法 由多位专家进行成本估算 一个专家可能会有偏见 最好由多位专家进行估算 取得多个估算值 最后得出综合的估算值 其中Deiphi专家估算法是著名的专家估算法 这些专家互相不见面 专
  • 【Node】node连接MongoDB数据库超时错误

    前言 最近使用node写项目 需要连接MongoDB数据库 结果在另一台机子运行代码时发现连接超时错误 当初还以为是数据库服务没开启 但是服务是正常启动的 而且还是使用cmd运行mongod指令 于是重新安装MongoDB 问题依然存在 最
  • 让开发自动化: 用 Eclipse 插件提高代码质量

    2007 年 1 月 29 日 如果能在构建代码前发现代码中潜在的问题会怎么样呢 很有趣的是 Eclipse 插件中就有这样的工具 比如 JDepend 和 CheckStyle 它们能帮您在软件问题暴露前发现这些问题 在 让开发自动化 的