静态分析工具 PMD 使用说明
目录
1. 编写目的.................................................................................................................................... 3
2. PMD 简介................................................................................................................................... 4
3. 工作原理.................................................................................................................................... 4
4. PMD 的安装和运行.................................................................................................................... 6
4.1 安装并从命令行运行 PMD....................................................................................... 6
4.2 在 Eclipse 中安装 PMD 插件运行方式......................................................................7
4.3 使用 Ant 进行调用.................................................................................................. 10
5. 关于 PMD 规则......................................................................................................................... 11
6. 编写自定义的 PMD 规则......................................................................................................... 16
7. 结束语...................................................................................................................................... 19
8. 参考资料.................................................................................................................................. 19
1.编写目的
质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤其是
企业应用软件系统来说,除了软件运行质量、文档质量以外,代码的质量也是
非常重要的。软件开发进行到编码阶段的时候,最大的风险就在于如何保证代
码的易读性和一致性,从而使得软件的维护的代价不会很高。
在软件开发的过程中,以下几种情形随处可见:
软件维护时间长,而且维护人员的积极性不高:
做过软件维护的开发人员,尤其是在接手不是自己开发产品的源码的时候,
即使有良好的文档说明,仍然会对代码中冗长、没有注释的段落“叹为观止”。
理解尚且如此困难,何况要修改或者增加新的功能。因此,很多开发人员不愿
意进行软件维护的工作。
)新的开发人员融入团队的时间比较长:
除了没有良好的培训、文档等有效的机制以外,每个人一套的编码风格 ,
也容易造成新成员对于已有代码的理解不够,甚至出现偏差。
提高代码的质量,除了要提高逻辑上的控制以及业务流程的理解外,代码
本身也存在提高的空间,例如一些潜在的问题可以很早的就避免。类似于编码
规范上的内容,如果全靠编码人员进行自行检查,那么无疑需要很大的工作量,
如果可以使用代码的静态检查工具进行检查的话,那么将大大的提高编码的效
率。
项目组目前代码检查的工作基本上都是通过人工的方式,实行起来比较困
难,检查的效果也不是很明显。 正是这样一种工具,可以直接使用它自带
的规则(当然也可以使用自己的规则)对 源程序进行分析找出程序存在的
问题,可以很大程度上的减轻代码检查工作的繁琐,为项目组今后的维护和开
发工作起到指导的作用。
本文主要介绍了如何使用 工具进行代码的自动化检查,以规避一些
潜在的问题并找出代码的逻辑错误。
2.PMD 简介
是一种开源分析 代码错误的工具。与其他分析工具不同的是,
通过静态分析获知代码错误。也就是说,在不运行 程序的情况下
报告错误。 附带了许多可以直接使用的规则,利用这些规则可以找出
源程序的许多问题,例如:
潜在的 :空的 语句
未使用的代码:未使用的局部变量、参数、私有方法等
可选的代码: !" 的滥用
复杂的表达式:不必须的 # 语句、可以使用 " 循环完成的 #$ 循环
重复的代码:拷贝粘贴代码意味着拷贝粘贴
循环体创建新对象:尽量不要再 #$ 或 " 循环体内实例化一个新对象
%资源关闭:&$",'","" 等使用之后确保关闭掉
此外,用户还可以自己定义规则,检查 代码是否符合某些特定的编
码规范。例如,你可以编写一个规则,要求 找出所有创建 (" 和
$)" 对象的操作。
3.工作原理
的核心是 && 解析器生成器。 结合运用 && 和 * +,(扩展
巴科斯-诺尔范式,*."" )-+,$)语法,再加上 ("",
把 源代码解析成抽象语法树(/(,/.("")。显然,
这句话不那么好懂,且看下文具体说明。
从根本上看, 源代码只是一些普通的文本。不过,为了让解析器承认
这些普通的文本是合法的 代码,它们必须符合某种特定的结构要求。这种
结 构 可 以 用 一 种 称 为 * +, 的 句 法 元 语 言 表 示 , 通 常 称 为 “ 语 法 ”
(0)。 && 根据语法要求生成解析器,这个解析器就可以用于
解析用 编程语言编写的程序。
不过实 际运 行中的 还要 经过 ("" 的一次 转换 。("" 是一个
&& 的插件,通过 /( 扩充 && 生成的解析器。/( 是一个 符号
流之上的语义层。有了 ("",语法分析的结果不再是“"121$1212
3之类的符号序列,而是一个由对象构成的树型层次结构。例如,下面
是一段简单的 代码以及与之对应的 /(。
源代码:
,$$4
$54
"2$256"$$67
8
8
对应的抽象语法树
&$$9
(""$
&"$
9$"&"$
& $
& $"$
"$"$
'"("
"$"$
,$""
$)
$)""
""
""*:"$
*."$
".
+"
;.
/"
/"<
*."$
*."$
".
- 1
- 2
前往页