2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论

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

.NET Core HttpClient源码探究

yi念之间

.net core HttpClient

深入了解JAVA线程篇

邱学喆

线程 线程池 线程间通信 线程回调

Linux之cp命令

入门小站

Linux

大白话彻底搞懂 HBase Rowkey 设计和实现方式

云祁

大数据 HBase

基于朴素ML思想的协同过滤算法(十七)

Databri_AI

推荐算法

自动驾驶产业进入“两条腿”时代:车路协同的中国式飞跃

脑极体

我用来阻止你摸鱼看直播、知乎和微博的Chrome插件

OBKoro1

chrome 效率工具 大前端 工作效率 chrome扩展

Rust从0到1-自动化测试-运行测试

rust 自动化测试 Automated Tests 运行测试

七牛云 霍锴:SDK 是一款技术服务的门面,如何方便用户高效接入是前提|Meetup 讲师专访

七牛云

音视频 sdk Meetup

在线URL转sitemap工具

入门小站

Linux

oneAPI开启新征程 英特尔拥抱开源打造软件生态

E科讯

与8090创业者、投资人共话“初心”!2021中国新青年创业投资峰会举办

创业邦

WasmEdge (曾用名 SSVM) 成为 CNCF 沙箱项目

WasmEdge

云计算 云原生 webassembly cncf

你遇到过哪些质量很高的 Java 面试题?

Java架构师迁哥

Kubernetes手记(21)- 新一代监控架构

雪雷

k8s 6月日更

这是一场按下播放键就停不下来的冒险

脑极体

真的了解 HDFS 的 SecondaryNameNode 是干什么的?

云祁

react源码解析20.总结&第一章的面试题解答

全栈潇晨

React

这是一场按下播放键就停不下来的冒险

白洞计划

JavaScript 学习(八)

空城机

JavaScript 大前端 6月日更

一步一步实现 Vue 3 Reactivity

Geek_z9ygea

JavaScript Vue 响应式 Vue 3

Github上星标85k的,图解操作系统、网络、计算机 PDF,竟是阿里的?

Java架构师迁哥

蜜雪冰城主题曲血洗B站:企业自媒体运营如何接地气

石头IT视角

看完阿里开源笔记,我终于敢说精通“网络协议”了

Java架构师迁哥

Java学到什么程度才能叫精通?

Java架构师迁哥

5分钟速读之Rust权威指南(二十九)循环引用

wzx

rust

ES6 中的 Symbol 是什么?

编程三昧

JavaScript 大前端 ES6 数据类型 symbol

数据仓库常见建模方法与大数据领域建模实例综述

云祁

数据仓库 数据建模 维度建模

ECMAScript 2021 (ES12)通过,正式写入 ECMAScript 标准

清秋

ecmascript 新闻资讯 ES2021 ES12 标准

怎么办,linux的常用命令就是记不住?于是每天推一些linux指令实践总结

李阿柯

面试 操作系统 linux运维

听说一代数据库大侠都是这样练成的?

华为云数据库小助手

数据库 GaussDB 华为云数据库

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