速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

手把手教你基于luatos的4G(LTE Cat.1)模组接入华为云物联网平台

华为云开发者联盟

物联网 华为云 华为云开发者联盟 企业号 3 月 PK 榜 4G

PCB焊盘设计应掌握哪些要素?

华秋电子

【征文大赛】TiDB 社区第二届征文大赛,一次性带走社区全部新周边,还有bose 降噪耳机、倍轻松按摩仪等你拿!

TiDB 社区干货传送门

阿里三面被面试官狂问Redis,简历上再也不敢写"精通"了

做梦都在改BUG

Java 数据库 redis 缓存 面试

又一个开源第一!飞桨联合百舸,Stable Diffusion推理速度遥遥领先

百度Geek说

人工智能 开源 PaddlePaddle 企业号 3 月 PK 榜

买了等保安全设备就一定安全吗?就一定能抵御网络风险呢?

行云管家

网络安全 等保 等级保护

坏了!面试官问我垃圾回收机制

做梦都在改BUG

Java JVM 垃圾回收

通过Chaos-Mesh打造更稳定TiDB数据库高可用架构(二)

TiDB 社区干货传送门

实践案例 集群管理 管理与运维 故障排查/诊断 安装 & 部署

FinOps首次超越安全成为企业头等大事|云计算趋势报告

SEAL安全

云计算 云成本 FinOps 企业号 3 月 PK 榜

Spring源码分析-BeanFactoryPostProcessor

做梦都在改BUG

Java spring spring源码

软件测试/测试开发丨后端Web开发框架(Java)

测试人

软件测试 springboot 测试开发

通过TiDB Operator为已有TiDB集群部署异构集群

TiDB 社区干货传送门

集群管理 管理与运维 故障排查/诊断 安装 & 部署 扩/缩容

TiDB 的事务和一致性校验工具 BANK

TiDB 社区干货传送门

实践案例 故障排查/诊断 数据库架构选型

BSN-DDC基础网络详解(五):接入DDC网络(1)

BSN研习社

物理机安装 TiKV 时 RAID 卡在线配置方式

TiDB 社区干货传送门

实践案例 集群管理 安装 & 部署

MQTT 5.0连接属性

EMQ映云科技

物联网 IoT mqtt 企业号 3 月 PK 榜 连接属性

增强认证--MQTT 5.0新特性

EMQ映云科技

物联网 IoT mqtt 企业号 3 月 PK 榜 增强认证

基于 Istio 的灰度发布架构方案实践之路

京东科技开发者

微服务 istio 灰度发布 企业号 3 月 PK 榜

【信创小知识】国产化和信创是一回事吗?怎么理解?

行云管家

信创 国产化

TIDB升级发生故障时,快速强行回退方案

TiDB 社区干货传送门

实践案例

坚如磐石:TiDB 基于时间点的恢复(PiTR)特性优化之路丨6.5 新特性解析

TiDB 社区干货传送门

新版本/特性解读

Region is unavailable的排查总结

TiDB 社区干货传送门

管理与运维 故障排查/诊断 扩/缩容

GitHub险崩盘,竟是因网易大牛「Redis应用与深度实践笔记」泄露

做梦都在改BUG

Java 数据库 redis 缓存 面试

脚本调用工具:FastScripts 直装版

真大的脸盆

Mac 脚本 Mac 软件 Mac 系统

对TiDB监控方式的一点点研究

TiDB 社区干货传送门

监控 TiDB 源码解读

通过Chaos-Mesh打造更稳定TiDB数据库高可用架构(一)

TiDB 社区干货传送门

实践案例 集群管理 管理与运维 扩/缩容 数据库架构设计

Spring Boot或Spring Cloud快速实现文件上传

做梦都在改BUG

Java Spring Cloud Spring Boot

「 项目管理 」项目立项前需要思考的9个问题

小刘学编程

项目管理 pmp 项目经理

国家基础学科公共科学数据中心与和鲸科技共建数据社区

ModelWhale

数据 科学分析 社区 合作

手把手教你改 sysbench 代码

TiDB 社区干货传送门

开发语言 管理与运维

NebulaGraph:打造灵活弹性的云原生图数据库,与阿里云计算巢共同拥抱开放生态

云布道师

数据库 阿里云

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