欢迎来到天天文库
浏览记录
ID:14937943
大小:41.50 KB
页数:15页
时间:2018-07-31
《静态分析工具pmd使用说明》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、静态分析工具PMD使用说明静态分析工具PMD使用说明目录静态分析工具PMD使用说明..1目录..21.编写目的..32.PMD简介..43.PMD的安装和运行..43.1安装并从命令行运行PMD.43.2在Eclipse中安装PMD插件运行方式..63.3使用Ant进行调用..84.关于PMD规则..105.编写自定义的PMD规则..156.结束语..187.参考资料..181.编写目的质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤其是企业应用软件系统来说,除了软件运行质量、文档质量以外,代码的质量也是非常重要的。软件开发进行到编码阶段的时候
2、,最大的风险就在于如何保证代码的易读性和一致性,从而使得软件的维护的代价不会很高。在软件开发的过程中,以下几种情形随处可见:1)软件维护时间长,而且维护人员的积极性不高:做过软件维护的开发人员,尤其是在接手不是自己开发产品的源码的时候,即使有良好的文档说明,仍然会对代码中冗长、没有注释的段落“叹为观止”。理解尚且如此困难,何况要修改或者增加新的功能。因此,很多开发人员不愿意进行软件维护的工作。2)新的开发人员融入团队的时间比较长: 除了没有良好的培训、文档等有效的机制以外,每个人一套的编码风格,也容易造成新成员对于已有代码的理解不够,甚至出现偏差。提高代码
3、的质量,除了要提高逻辑上的控制以及业务流程的理解外,代码本身也存在提高的空间,例如一些潜在的问题可以很早的就避免。类似于编码规范上的内容,如果全靠编码人员进行自行检查,那么无疑需要很大的工作量,如果可以使用代码的静态检查工具进行检查的话,那么将大大的提高编码的效率。项目组目前代码检查的工作基本上都是通过人工的方式,实行起来比较困难,检查的效果也不是很明显。PMD正是这样一种工具,可以直接使用它自带的规则(当然也可以使用自己的规则)对Java源程序进行分析找出程序存在的问题,可以很大程度上的减轻代码检查工作的繁琐,为项目组今后的维护和开发工作起到指导的作用。
4、本文主要介绍了如何使用pmd工具进行代码的自动化检查,以规避一些潜在的问题并找出代码的逻辑错误。2.PMD简介PMD是一种开源分析Java代码错误的工具。与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题,例如:?潜在的bug:空的try/catch/finally/switch语句?未使用的代码:未使用的局部变量、参数、私有方法等?可选的代码:String/StringBuffer的滥用?复杂的表达式:不必须的if语句、可
5、以使用while循环完成的for循环?重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs?循环体创建新对象:尽量不要再for或while循环体内实例化一个新对象@资源关闭:Connect,Result,Statement等使用之后确保关闭掉此外,用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求PMD找出所有创建Thread和Socket对象的操作。3.工作原理PMD的核心是JavaCC解析器生成器。PMD结合运用JavaCC和EBNF(扩展巴科斯-诺尔范式,ExtendedBackus-NaurFormal
6、)语法,再加上JJTree,把Java源代码解析成抽象语法树(AST,AbstractSyntaxTree)。显然,这句话不那么好懂,且看下文具体说明。 从根本上看,Java源代码只是一些普通的文本。不过,为了让解析器承认这些普通的文本是合法的Java代码,它们必须符合某种特定的结构要求。这种结构可以用一种称为EBNF的句法元语言表示,通常称为“语法”(Grammar)。JavaCC根据语法要求生成解析器,这个解析器就可以用于解析用Java编程语言编写的程序。 不过实际运行中的PMD还要经过JJTree的一次转换。JJTree是一个JavaCC的插件,
7、通过AST扩充JavaCC生成的解析器。AST是一个Java符号流之上的语义层。有了JJTree,语法分析的结果不再是“System,.,out,.,.println”之类的符号序列,而是一个由对象构成的树型层次结构。例如,下面是一段简单的Java代码以及与之对应的AST。Java源代码:publicclassFoo{publicvoidbar(){System.out.println("helloworld");}}对应的抽象语法树CompilationUnitTypeDeclarationClassDeclarationUnmodifiedClassD
8、eclarationClassBodyClassBodyDecla
此文档下载收益归作者所有