Java静态检测工具的简单介绍(共16页).doc
《Java静态检测工具的简单介绍(共16页).doc》由会员分享,可在线阅读,更多相关《Java静态检测工具的简单介绍(共16页).doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上Java静态检测工具的简单介绍 静态检查:静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人 工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。 代码检查代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和 设计的一致性, 代码对标准的遵循、可读性,代码的逻辑表达的正确性,代 码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、 不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题, 包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构 检查等内容。”。看了一系列的静态代码扫描或者叫静态代码分析
2、工具后, 总结对工具的看法:静态代码扫描工具,和编译器的某些功能其实是很相似的, 他们也需要词法分析,语法分析,语意分析.但和编译器不一样的是他们可 以自定义各种各样的复杂的规则去对代码进行分析。静态检测工具:PMD 1)PMD是一个代码检查工具,它用于分析 Java 源代码,找出潜在的 问题: 1)潜在的bug:空的try/catch/finally/switch语句 2)未使用的代码:未使用的局部变量、参数、私有方法等 3)可选的代码:String/StringBuffer的滥用 4)复杂的表达式:不必须的if语句、可以使用while循环完成的for循环 5)重复的代码:拷贝/粘贴代码意味
3、着拷贝/粘贴bugs 2)PMD特点: 1)与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在 不运行Java程序的情况下报告错误。 2)PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许 多问题 3)用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。 3)同时,PMD已经与JDeveloper、Eclipse、jEdit、JBuilder、BlueJ、 CodeGuide、NetBeans、Sun JavaStudio Enterprise/Creator、 IntelliJ IDEA、TextPad、Maven、Ant、Gel、J
4、Creator以及Emacs 集成在一起。 4)PMD规则是可以定制的: 可用的规则并不仅限于内置规则。您可以添加新规则: 可以通过编写 Java 代码并重新编译 PDM,或者更简单些,编写 XPath 表 达式,它会针对每个 Java 类的抽象语法树进行处理。 5)只使用PDM内置规则,PMD 也可以找到你代码中的一些真正问题。某些问题可能 很小,但有些问题则可能很大。PMD 不可能找到每个 bug,你仍然需要做单元测 试和接受测试,在查找已知 bug 时,即使是 PMD 也无法替代一个好的调试器。 但是,PMD 确实可以帮助你发现未知的问题。FindBugs 1)FindBugs是一个开源
5、的静态代码分析工具,基于LGPL开源协议,无需 运行就能对代码进行分析的工具。不注重style及format,注重检测真正 的bug及潜在的性能问题 ,尤其注意了尽可能抑制误检测(false positives) 的发生。以bytecode(*.class、*.jar)为对象进行检查。除了单独动作,还可 以用作Eclipse 的plug-in,以及嵌入Ant作为task之一 进行利用。 2)findbugs自带检测器的介绍: findbugs自带60余种Bad practice,80余种 Correntness,1种Internationalization,12种Malicious code
6、vulnerability,27种Multithreaded correntness,23种Performance, 43种Dodgy。 3)Findbugs的一些特点: 1)FindBugs主要着眼于寻找代码中的缺陷,这就与其他类似工具有些区别了, 直接操作类文件(class文件)而不是源代码。 2)FindBugs可以通过命令行、各种构建工具(如Ant、Maven等)、独立的 Swing GUI或是以Eclipse和NetBeans IDE插件的方式来运行。 3)FindBugs输出结果既可以是XML的,也可以是文本形式的。 4)开发者可以通过多种方式来使用FindBugs,最常见的是在新
7、编写模块的代码 分析以及对现有代码进行更大范围的分析。 5)不注重style及format,注重检测真正的bug及潜在的性能问题, 尤其注意了尽可能抑制误检测(false positives)的发生。 4)FindBugs可检测的bug pattern举例: 检测java programing中容易陷入的bug pattern,equals() 实现时的一般规约违反 Null pointer的参照 ,Method的返回值的check遗漏 ,初始化前field的访问, Multi-thread的正确性, 同期化处理的矛盾, 无条件的wait(), Code的脆弱性 , 可以变更的静态object
8、 ,内部数列参照的return等Checkstyle 1)定义: Checkstyle是一款检查Java程序源代码样式的工具。 2)特点: 1)它可以有效的帮助我们检视代码以便更好的遵循代码编写标准,特 别适用于小组开发时彼此间的样式规范和统一。 2)Checkstyle提供了高可配置性,以便适用于各种代码规范,所以 除了使用它提供的几种常见标准之外,你也可以定制自己的标准。 3)Checkstyle提供了支持大多数常见IDE的插件,大部分插件中就含有 最新的Checkstyle,就不用费心再部署一份了。 4)Checkstyle可以检查代码的很多方面,从传统观点看,它主要是用来 检查代码层面
9、的,自从第三版以后,它的内部架构作了重大改变,很多 其它意图的检测加了进来,现在Checkstyle可以检查像类设计的问题, 重复代码,如锁的双重检查的bug模式。 3)CheckStyle的主要流程是: 1)对Java文件进行词法语法分析,生成语法树。 2)载入配置文件(checkstyle-metadata.xml以及自定义的配置文件) register check事件。 3)按照深度优先遍历对语法树进行解析,按照注册的事件,在到达某些节点 ( AST ) 时进行style检查(AST,A child-Sibling Tree,是语法 树中的某个节点,其类型在TokenTypes类中定义。
10、) 4)我们所说的自定义Style的检查,就是在第二步设定的。 这里牵涉到一个叫com.puppycrawl.tools.checkstyle.api.Check 的类, 我们通常需要重载其中的两个函数: public int getDefaultTokens() 和public void visitToken(DetailAST ast). 这两个函数的含义为, 在遍历语法树的过程中,每当到达getDefaultTokens函数所返回的AST类型, 程序就进入visitToken进行具体的检查和分析,即,真正的分析检查过程是在 visitToken中实现的。Hammurapi 1)定义: H
11、ammurapi它是一个开源的代码审查/评审(review)工具。它可以帮助改进 Java代码的质量。它可以基于一套设计规范来分析代码库。当它碰到违反规 范的地方,会在报告中标识。就像Checkstyle一样,它与Ant无缝集成并且 由基于XML配置文件来驱动。 2)特点: 1)Hammurapi是用来强制代码设计规范的。 2)Hammurapi是一个遵循设计的工具,提供了自动而且一致的方式来实现设计规范, 因此使代码评审更加有效而轻松。 3)Hammurapi如何工作: Hammurapi这样的代码分析工具都带有语言分析器。语言分析器是一种输入 语言代码并输出抽象语法树的工具。这个树上的节点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 静态 检测工具 简单 介绍 16
限制150内