写点什么

PMD:自动化源码分析和 bug 检测

  • 2007-07-23
  • 本文字数:909 字

    阅读完需:约 3 分钟

PMD 这款开源的自动化 Java 源码分析和 bug 检测工具刚刚发布了 4.0 版。InfoQ 就 PMD 所提供的功能与该项目的负责人 Tom Copeland 进行了深入探讨。

PMD 是一个静态 Java 源码分析工具,从概念上讲与 Checkstyle FindBugs Coverity 很相似。它从 Java 代码中可以搜索出那些效率低下的代码,bug 和常见的编程问题。它可以通过 IDE 的集成在开发环境中使用,也可以和 Ant Maven 构建直接交互。PMD 使用规则(rules)来执行源码分析,这些规则可以被组织为规则集(rulesets)。InfoQ 就具体细节向 Cohen 进行了提问,Cohen 回答说:

这些规则是按照它们所检查的问题进行分类的——“无用代码”的规则集检查那些没有用到的局部变量,私有变量和方法;“严格异常”的规则集检查那些抛出异常的方法和捕获如 NullPointerException 等异常的代码块。还有一些是特定于代码库的规则集。例如, JUnit 规则集用来在 JUnit 测试套件中寻找常见的问题(如使用了assert(x==null) 而不是``assertNull(x))等。当前我们已经有了 225 条规则,还有更多的规则正在制定中。当有人想到了新的规则并提交补丁或是请求时,新规则就会被添加进来。每一条规则都有一系列相关的单元测试,来减少那些比较明显的“假阳性(false positive)”的数量;我们希望这也会使得 PMD 产生的检查报告保持相当的整洁。

InfoQ 问到在 4.0 中有哪些新特性时,Copeland 回答说,最大的新特性就是 Java 5。PMD 在 Java 5 的基础上进行了重写,现在已经是默认对基于 Java 5 的源码进行分析了——当然 1.4 和之前的代码一样可以支持。在性能上也有了提升,同时还有些 bug 的修复和新的代码检查规则。当被问到 PMD 下一步比较大的计划是什么时,Copeland 答道:

类型解析将是一块比较重要的内容。目前 PMD 只能一次检查一个源码文件,这就对它的规则作用区域有所限制。我们的一个核心开发人员 Allan Caplan 已经在这个方向做了大量的工作,他用了 ASM 这个字节码操作库来解析类文件依赖,我们认为这将减少“假阳性”的数量,发现更多真正的问题。我们现在已经有了一个数据流分析层,当类型解析完成之后,它就能用得上这个功能了。这是多么美妙的事情啊!

查看英文原文: PMD: Automated source code analysis and bug detection

2007-07-23 08:161910
用户头像

发布了 197 篇内容, 共 56.4 次阅读, 收获喜欢 20 次。

关注

评论

发布
暂无评论
发现更多内容

环信入选2020在线教育视频云创新排行TOP10

DT极客

一文快速入门分库分表中间件 Sharding-JDBC (必修课)

程序员小富

Java 分库分表

让“物”能说会道,揭晓华为云IOT黑科技

华为云开发者联盟

物联网 华为云

前端科普系列(5):ESLint - 守住优雅的护城河

vivo互联网技术

Java 大前端 代码仓库

暂存图片

而立

一文带你掌握Redis操作指南

华为云开发者联盟

数据库 存储

独家揭秘 | 京东物流Elasticsearch大规模“迁移上云”实践

京东科技开发者

云计算

Docker内部组件

混沌畅想

Docker 容器 运维

架构师训练营第 1 期 - 第 5 周 - 作业

wgl

极客大学架构师训练营

文石BOOX Note Air与掌阅iReader Smart2 该怎么选?

iOS性能优化 — 三、安装包瘦身

iOSer

ios 性能优化 编程语言 ios开发 安装包瘦身

JVM系列笔记 - 虚拟机栈

朱华

JVM

架构师训练营第一期 - 第五周课后作业

卖猪肉的大叔

iOS touch事件点的获取

teoking

ios

架构师训练第五周 -编程语言实现一致性 hash 算法

郎哲158

LeetCode题解:46. 全排列,回溯,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

中台架构下的DDD和落地实践

高鹏

业务中台 DDD 领域驱动模型DDD 中台架构 中台架构 DDDplus

标准的开发框架,对企业开发有多重要?

Philips

敏捷开发

Go发起HTTP2.0请求流程分析(后篇)——标头压缩

Gopher指北

后端 HTTP2.0 Go 语言

mongodb源码实现系列-网络传输层模块实现二

杨亚洲(专注MongoDB及高性能中间件)

MySQL 数据库 mongodb 高性能 分布式数据库mongodb

1024丨奈学教育致敬程序员:‘3+2’战略发布会圆满落幕

奈学教育

程序员 奈学教育

使用Hugo和GitHub搭建博客

Felix

GitHub GitHub Pages Blog Hugo

1024丨奈学教育致敬程序员:‘3+2’战略发布会圆满落幕

古月木易

奈学教育

JMM 应用实例:单例模式

朱华

单例模式

LAXCUS 大数据集群操作系统:一个分布式分时共享 E 级系统软件(五)

陈泽云

人工智能 数据库 大数据 操作系统

这个应用魔方厉害了,让软件开发者效率提升10倍

华为云开发者联盟

软件开发 代码

两个程序员老友的会面

Learun

敏捷开发

架构师训练营第一期 - 第五周学习总结

卖猪肉的大叔

配置企业应用业务流程别头大,有工作流引擎就不怕

Marilyn

敏捷开发

算法图解:如何用两个栈实现一个队列?

王磊

Java 数据结构 算法和数据结构

云原生2.0时代:开启应用定义基础设施新时代

华为云开发者联盟

容器 云原生

PMD:自动化源码分析和bug检测_Java_Ryan Slobojan_InfoQ精选文章