Java静态检测工具的简单介绍(2)

发表于:2015-03-26来源:uml.org.cn作者:yeyongna点击数: 标签:
2)Checkstyle提供了高可配置性,以便适用于各种代码规范,所以除了使用它提供的几种常见标准之外,你也可以定制自己的标准。 3)Checkstyle提供了支持大多

  2)Checkstyle提供了高可配置性,以便适用于各种代码规范,所以除了使用它提供的几种常见标准之外,你也可以定制自己的标准。

  3)Checkstyle提供了支持大多数常见IDE的插件,大部分插件中就含有最新的Checkstyle,就不用费心再部署一份了。

  4)Checkstyle可以检查代码的很多方面,从传统观点看,它主要是用来检查代码层面的,自从第三版以后,它的内部架构作了重大改变,很多其它意图的检测加了进来,现在Checkstyle可以检查像类设计的问题,重复代码,如锁的双重检查的bug模式。

  3.CheckStyle的主要流程是:

  1)对Java文件进行词法语法分析,生成语法树。

  2)载入配置文件(checkstyle-metadata.xml以及自定义的配置文件)register check事件。

  3)按照深度优先遍历对语法树进行解析,按照注册的事件,在到达某些节点( AST ) 时进行style检查(AST,A child-Sibling Tree,是语法树中的某个节点,其类型在TokenTypes类中定义。)

  4)我们所说的自定义Style的检查,就是在第二步设定的。

  这里牵涉到一个叫 com.puppycrawl.tools.checkstyle.api.Check 的类,我们通常需要重载其中的两个函数: public int[] getDefaultTokens()和public void visitToken(DetailAST ast). 这两个函数的含义为,在遍历语法树的过程中,每当到达getDefaultTokens函数所返回的AST类型,程序就进入visitToken进行具体的检查和分析,即,真正的分析检查过程是在visitToken中实现的。

  Hammurapi

  1.定义: Hammurapi它是一个开源的代码审查/评审(review)工具。它可以帮助改进Java代码的质量。它可以基于一套设计规范来分析代码库。当它碰到违反规范的地方,会在报告中标识。就像Checkstyle一样,它与Ant无缝集成并且由基于XML配置文件来驱动。

  2.特点:

  1)Hammurapi是用来强制代码设计规范的。

  2)Hammurapi是一个遵循设计的工具,提供了自动而且一致的方式来实现设计规范,因此使代码评审更加有效而轻松。

  3)Hammurapi如何工作:

  Hammurapi这样的代码分析工具都带有语言分析器。语言分析器是一种输入语言代码并输出抽象语法树的工具。这个树上的节点代表语言标识。例如,考虑一下简单的算术表达式:3+4. 语言分析器会解析他成为一个如图5所示的语法树。在这个树中,节点+代表操作符标识。节点3和4是操作数标识Hammurapi使用ANTLR(另一个语言识别工具)作为语言分析器。然而ANTLR API是相当底层的。为改善可用性,Hammurapi使用另一个API,基于ANTLR 的JSEL(Java源程序工程类库),来访问抽象语法树。 一旦树构建完成,一种树遍历算法就被用来访问树中每一个节点。每次访问到一个节点,一种回调机制(Visitor模式)被用来提示相应的检查器。在这些回调方法中,检查器收集相关的信息来确定是否有违反规范的地方存在。

  Lint4j

  1.定义:Lint4J是一个针对Java的源代码分析工具,它可以对Java源码和字节码进行静态分析,判断其中是否存在死锁、性能问题或者伸缩性问题。它可以集成到任何IDE种或构建系统

  2.特点:

  1)检测代码语法规则

  2)潜在的bug

  3)检测编码模式对代码可读性及大小的影响

  4)检测是否违反EJB规范

  Sonar

  1.定义:代码质量管理工具Sonar提供了设计与架构度量。Sonar 2.0引入了针对Java应用的设计分析、架构与面向对象的度量,Sonar 2.1可以检测到未使用的方法以及对不建议使用方法的调用。是一个集成了CheckStyle,PMD,Findbugs的代码校验规则 ,重复代码发现,代码测试覆盖率, 代码注释率,及所有的检测率变化追踪的完美代码质量检查工具。它包含了代码质量检测的七个方面

  2.特点:

  1)代码覆盖:通过单元测试,将会显示哪行代码被选中。

  2)改善编码规则。

  3)搜寻编码规则:按照名字,插件,激活级别和类别进行查询。

  4)项目搜寻:按照项目的名字进行查询。

  5)对比数据:比较同一张表中的任何测量的趋势。

  6)单元测试

  3.Sonar2.1:

  Sonar还基于Squid引入了一个全新的规则引擎、Sonar解析器既可以处理源代码,也可以处理字节码,解析器带有内建的规则,可以检测未使用的私有与保护方法以及客户端对不建议使用的方法的调用。Squid通过分析应用源代码、Java API和外部程序库的字节码来决定哪些方法、类和属性是不建议使用的。

原文转自:http://www.uml.org.cn/Test/201208245.asp