【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

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

关注

评论

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

设计微博系统中”微博评论“的高性能高可用计算架构

9527

初探可编程网关 Pipy

张晓辉

代理 网关 服务网格

软件研发中的错误假设

赫杰辉

设计 低代码 研发工具 x-series

大型系统中的证书管理

张俭

微服务 TLS PaaS

使用 Quarkus 和 MicroProfile 实现微服务特性

张晓辉

Kubernetes 云原生 Quarkus Microprofile

开箱即用的 Prometheus 告警规则集

张晓辉

监控 Prometheus 告警

如何成为一名拖垮整个团队的产品经理?

冰河

深度思考 产品经理 自我思考 产品经历 技能提升

架构师实战营 模块五作业(设计微博评论的高性能高可用计算架构)

代廉洁

架构实战营

架构师实战营 模块五总结

代廉洁

架构实战营

java.net.BindException: Address already in use: JVM_Bind解决方案

咿呀呀

IDEA javaWeb

Dubbo Admin 部署

青年IT男

dubbo

重庆区块链公共服务平台—“渝快链”2.0正式发布

浪潮云

带你看懂MySQL执行计划

Simon

MySQL 执行计划

架构之:并发和并行

程序那些事

架构 软件架构 架构师 程序那些事

☕【JVM 技术之旅】深入JVM回收器之Parallel Scavenge(上篇)

洛神灬殇

JVM GC 垃圾收集 5月日更 Parallel Scavenge

【Flutter 专题】117 图解 Dismissible 滑动清除 Widget

阿策小和尚

5月日更 Flutter 小菜 0 基础学习 Flutter Android 小菜鸟

Java 面试基础:Java 语言的特点

三掌柜

5月日更

一文带你搞懂RPC到底是个啥

万俊峰Kevin

c++ 微服务 RPC RPC 协议实现原理 srp

react源码解析1.开篇介绍和面试题

全栈潇晨

React React Hooks react源码

六一特辑丨8岁小程序员献礼儿童节:我DIY了聊天机器人,做3D printer,还想和外星人对话!

华为云开发者联盟

编程 程序员 开发者 代码 机器人

Spring XML Schema扩展机制源码解读

Hex

Java spring 后端 Java EE

网络攻防学习笔记 Day30

穿过生命散发芬芳

5月日更 网络攻防

业务架构训练营,模块5作业,微博评论高性能架构

好吃不贵

业务架构

架构实战-模块5作业

大师兄

JWT(auth0):RS256非对称加密算法实现Token的签发、验证

西门阿杰

Java Token RS256

When others give us advice

escray

学习 极客时间 5月日更

从一个HTTP请求来看网络分层原理

IT视界

计算机网络 网络协议 HTTP 网络层

走近设计模式:写代码一定要用设计模式吗?

华为云开发者联盟

设计模式 代码 软件设计 面向对象软件 GoF设计模式

鸿蒙操作系统发布在即 万物互联时代将给开发者带来更多机遇

科技汇

🔎【Java源码探索】深入浅出的分析 ThreadPoolExecutor

洛神灬殇

Java 线程池工作原理 ThreadPoolExecutor 5月日更 Worker

带你读论文丨异常检测算法及发展趋势分析

华为云开发者联盟

深度学习 异常检测算法 深度异常检测算法 深度半监督 群体异常检测

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