在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

合约跟单系统开发,数字货币合约跟单软件搭建

13530558032

迭代技术方案设计文档规范

程序员架构进阶

技术方案

第 0 期架构师训练营第 8 周作业2-总结

fujin

分布式QoS算法解析

焱融科技

分布式 算法 焱融科技 分布式文件存储 QoS

1.Flink检查点算法-15

小知识点

scala 大数据 flink

在Rust里面嵌入python代码

lipi

Python rust

滴滴ElasticSearch千万级TPS写入性能翻倍技术剖析

滴滴技术

大数据 elasticsearch 滴滴技术

可编程网卡芯片在滴滴云网络的应用实践

滴滴技术

云计算 芯片 滴滴技术

滴滴七层接入平台实践和探索

滴滴技术

微服务 运维 滴滴技术 七层接入

Redis做消息队列全攻略

架构师修行之路

redis MQ 消息队列

数据分析之伯克森谬误:颜值和性格真成反比吗

KAMI

人生 数据分析 数据

区块链技术成为金融业务应用热点

CECBC

区块链 人工智能 金融

滴滴推理引擎IFX:千万规模设备下AI部署实践

滴滴技术

人工智能 学习 AI 滴滴技术 IFX

【Spring注解驱动开发】AOP核心类源码解析,这是最全的一篇了!!

冰河

spring aop ioc

滴滴数据通道服务演进之路

滴滴技术

大数据 滴滴技术 数据服务通道

滴滴Ceph分布式存储系统优化之锁优化

滴滴技术

云计算 分布式存储 Ceph 滴滴技术

突破传统 区块链如何实现病历永存

CECBC

区块链 电子病历 信息共享

基于Prometheus的微服务应用监控

易观大数据

实时数仓在滴滴的实践和落地

滴滴技术

大数据 滴滴技术 数据通道服务

Zeppelin SDK :Flink 平台建设的基石

Apache Flink

flink

浅析LR.Net工作流引擎

Learun

.net 敏捷开发 工作流

week12学习总结

burner

拥抱K8S系列-03-服务器部署应用和docker部署应用区别(MySQL篇)

张无忌

MySQL Docker 运维

GPU虚拟机创建时间深度优化

滴滴技术

云计算 虚拟化 滴滴技术

滴滴数据仓库指标体系建设实践

滴滴技术

大数据 数据仓库 滴滴技术

自定义线程池来实现文档转码

架构师修行之路

c语言函数指针之回调函数

C语言与CPP编程

C语言 回调函数 函数 函数指针

隐私计算会成为“金融”向“数科”转型的一剂猛药?

hellompc

第 0 期架构师训练营第 8 周作业 1

fujin

物联网的银河,华为的桨,少年的歌

脑极体

滴滴云平台事业群——就是稳!

滴滴技术

招聘 滴滴技术 滴滴云平台事业群分享月

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