首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

惯用 Java 静态代码分析工具的分析与比较

2012-09-20 
常用 Java 静态代码分析工具的分析与比较静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法

常用 Java 静态代码分析工具的分析与比较

静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。?

现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest)?,以下为他们内置的编程规范,即大部分可检查bug类型

Checkstyle:

  • Javadoc 注释:检查类及方法的 Javadoc 注释
  • 命名约定:检查命名是否符合命名规范
  • 标题:检查文件是否以某些行开头
  • Import 语句:检查 Import 语句是否符合定义规范
  • 代码块大小,即检查类、方法等代码块的行数
  • 空白:检查空白符,如 tab,回车符等
  • 修饰符:修饰符号的检查,如修饰符的定义顺序
  • 块:检查是否有空块或无效块
  • 代码问题:检查重复代码,条件判断,魔数等问题
  • 类设计:检查类的定义是否符合规范,如构造函数的定义等问题

    FindBugs:

    • Bad practice 坏的实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配
    • Correctness 可能导致错误的代码,如空指针引用等
    • 国际化相关问题:如错误的字符串转换
    • 可能受到的恶意攻击,如访问权限修饰符的定义等
    • 多线程的正确性:如多线程编程时常见的同步,线程调度问题。
    • 运行时性能问题:如由变量定义,方法调用导致的代码低效问题。

      PMD:

      • 可能的 Bugs:检查潜在代码错误,如空 try/catch/finally/switch 语句
      • 未使用代码(Dead code):检查未使用的变量,参数,方法
      • 复杂的表达式:检查不必要的 if 语句,可被 while 替代的 for 循环
      • 重复的代码:检查重复的代码
      • 循环体创建新对象:检查在循环体内实例化新对象
      • 资源关闭:检查 Connect,Result,Statement 等资源使用之后是否被关闭掉

        Jtest

        • 可能的错误:如内存破坏、内存泄露、指针错误、库错误、逻辑错误和算法错误等
        • 未使用代码:检查未使用的变量,参数,方法
        • 初始化错误:内存分配错误、变量初始化错误、变量定义冲突
        • 命名约定:检查命名是否符合命名规范
        • Javadoc 注释:检查类及方法的 Javadoc 注释
        • 线程和同步:检验多线程编程时常见的同步,线程调度问题
        • 国际化问题:
        • 垃圾回收:检查变量及 JDBC 资源是否存在内存泄露隐患

          其中,Checkstyle 更偏重于代码编写格式,及是否符合编码规范的检验,对代码 bug 的发现功能较弱;而 FindBugs,PMD,Jtest 着重于发现代码缺陷。在对代码缺陷检查中,这三种工具在针对的代码缺陷类别也各有不同,且类别之间有重叠。

          ?

          相关资料

          • Checkstyle Eclipse 插件下载地址:Checkstyle 是 SourceForge 的开源静态代码分析项目,您可以在此处下载 Checkstyle 的 Eclipse 插件。?

          • FindBugs Eclipse 插件下载地址:FindBugs 是由马里兰大学提供的一款开源 Java 静态代码分析工具,您可以在此处下载 FindBugs Eclipse 插件。?

          • PMD Eclipse 插件下载地址:PMD 是由 DARPA 在 SourceForge 上发布的开源 Java 代码静态分析工具,它通过内置的编码规则对 Java 代码进行静态检查。?

          • Jtest 插件下载地址:Jtest 由 Parasoft 公司推出,主要针对 Java 语言的自动化代码优化和测试。?

            更多内容请参见原帖http://www.ibm.com/developerworks/cn/java/j-lo-statictest-tools/

            ?

热点排行