写点什么

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:161923
用户头像

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

关注

评论

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

精选Hadoop高频面试题17道,附答案详细解析

五分钟学大数据

大数据 hadoop 5月日更

hive的主流文件存储格式对比实验

大数据技术指南

大数据 hive 5月日更

【实战问题】-- 布隆过滤器的三种实践:手写,Redission以及Guava(2)

秦怀杂货店

Java 布隆过滤器

2021年4月云主机性能评测报告新鲜出炉,盛大云华东蝉联冠军!

博睿数据

【案例】星环科技原厂数据备份恢复软件,让大数据与AI应用有备无患

星环科技

iOS 面试策略之语言工具-Xcode使用

iOSer

ios xcode 语言 & 开发

零基础学习 NLP-DAY4 - 恶补Python - 基础1

Qien Z.

Python nlp 5月日更

看亚马逊云科技如何助力英国教育科技公司 Firefly 快速落地中国|精选案例

亚马逊云科技 (Amazon Web Services)

HashMap

ltc

hashmap

引荐好友成为推广者还能拿额外奖励?!华为云引荐奖励计划来啦!

华为云开发者联盟

文章 返现奖励 推广计划 返利 团长

NetWebCore实现文件上传功能

happlyfox

学习 .net core 5月日更

交通流量预测,EasyDL带你零代码实战

百度大脑

零代码 EasyDL

这是我金三银四收到的第6个Offer:美团+阿里Java研发岗

Java 程序员 架构 面试

Iceberg0.11与Spark3.0结合

InfoQ_Springup

iceberg

antd table input 失焦的问题

blueju

看Amazon Graviton 如何实现优化性能、降低工作负载成本!

亚马逊云科技 (Amazon Web Services)

微服务化转型,拆就行了?这样做很危险...

BoCloud博云

微服务

如何从一段视频中一次性修整多个片段

奈奈的杂社

视频剪辑 视频后期 视频处理

Android屏幕适配,音视频学习指南来咯,文末领取面试资料

欢喜学安卓

android 程序员 面试 移动开发

Web渗透测试:信息收集篇

Thrash

NAT穿透原理详解

IT酷盖

音视频 p2p NAT

兄弟矿场系统开发|兄弟矿场软件APP开发

v03.06 鸿蒙内核源码分析(时钟任务) | 触发调度谁的贡献最大 | 百篇博客分析HarmonyOS源码

鸿蒙研究站

鸿蒙内核源码分析 百篇博客分析鸿蒙

一文掌握 Java8 Stream 中 Collectors 的 24 个操作

看山

Java

打破思维定式(八)

Changing Lin

差点败北,蚂蚁金服的六轮面试我是怎么撑过来的?(Java岗)

Java架构师迁哥

XDPool比特兄弟矿场系统开发|XDPool比特兄弟矿场APP软件开发

数据产品经理的圣经,送你一份真贵的礼物 ~~ 年度数据产品经理们的总结

松子(李博源)

大数据 数据产品经理 数据产品

博睿数据携手阿里云,打造以用户为中心的智能运维生态

博睿数据

阿里云 智能运维 博睿数据

apm应用性能管理,非科班程序员求职经历分享,看这一篇就够了

欢喜学安卓

android 程序员 面试 移动开发

HTML回流与重绘

空城机

JavaScript html 大前端 5月日更

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