`

常用 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/

 

分享到:
评论

相关推荐

    四种常用的java代码扫描工具介绍

    本文主要介绍了四种常用的 Java 代码扫描工具,并对它们的功能、特性等方面进行了分析和比较。这些工具分别是 Checkstyle、FindBugs、PMD 和 Jtest。静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的...

    适用于分布式静态检测的Java代码依赖性分析技术.pdf

    Java代码依赖性分析技术在分布式静态检测中的应用: 分布式静态检测系统是现代软件开发中常用的代码检测工具,尤其在处理大型项目时,系统的可伸缩性和效率变得至关重要。对于Java程序而言,随着项目规模的扩大,源...

    java静态代码块与非静态代码块参照.pdf

    Java 静态代码块与非静态代码块详解 Java 中的代码块可以分为静态代码块和非静态代码块两种,两者的执行时机和作用域不同。本文将通过实例代码和详细解释,阐述 Java 静态代码块与非静态代码块的区别和应用场景。 ...

    28个java常用的工具类源码

    这里提到的"28个java常用的工具类源码"包含了Java开发中经常用到的一些实用工具类的源代码,可以帮助开发者深入理解这些类的工作原理,提升编程效率。下面我们将详细讨论这些工具类可能包含的知识点: 1. **...

    java代码静态检测规则

    Java作为一种广泛应用的编程语言,在软件开发过程中,为了确保代码的质量、可维护性和安全性,采用代码静态检测工具是至关重要的。本文将详细介绍一系列针对Java代码的静态检测规则,这些规则旨在帮助开发者编写更高...

    一些java常用的工具类

    以下是对"一些java常用的工具类"的详细说明。 首先,工具类通常包含静态方法,这些方法不依赖于类的实例,可以直接调用,减少了对象创建的开销。这些类通常以“Utils”或“Helper”结尾,如Apache Commons Lang中的...

    软件测试工具,静态源代码测试工具

    SonarQube不仅提供了静态代码分析,还包括了代码覆盖率报告、代码复杂度分析等功能。通过与持续集成工具(如Jenkins)集成,SonarQube可以实时监控项目的代码质量,帮助团队尽早发现并修复问题,确保软件的质量和...

    java常用的工具类整理28个

    在Java编程语言中,工具类(Utility Class)是包含各种静态方法的类,这些方法用于执行特定任务,如数据操作、文件处理、数学计算等。它们通常不包含实例变量,只提供静态方法服务,帮助开发者提高代码的复用性和...

    30个常用java工具类

    在Java编程语言中,工具类(Utility Class)是包含各种静态方法的类,这些方法用于执行特定任务,如字符串操作、数学计算、日期处理等。这些工具类通常不包含实例化对象,因为它们的设计目的是为其他类提供服务,而...

    Java常用工具类

    Java开发中,工具类是必不可少的部分,它们提供了一系列方便、高效的方法,可以帮助开发者解决各种常见问题,提升代码的可读性和可维护性。本篇将详细介绍Java开发中的常用工具类,涵盖以下几个方面: 1. **集合...

    常用的java工具类

    本篇文章将详细解析Java中常用的工具类,包括字符处理、文件处理、时间操作以及图片处理等方面的知识点。 1. **字符处理**: - `java.lang.String`:String类是Java中最基础也是最常用的数据类型之一,提供了大量...

    Java静态检测工具的简单介绍-Sonar、Findbugs[文].pdf

    本文将介绍两种常用的Java静态检测工具——Sonar和Findbugs。 Sonar 是一个集成化的代码质量管理平台,它不仅包含了静态代码分析的功能,还提供了代码覆盖、代码复杂度、代码重复度等多种质量指标的度量。Sonar 的...

    Java常用工具类大全,工作5年精心整理.zip

    "Java常用工具类大全,工作5年精心整理.zip"这个压缩包文件很可能包含了一位有经验的Java开发者在五年工作中积累的各种实用工具类,这些工具类能够极大地提高开发效率,简化代码编写。以下是对可能包含的知识点进行...

    常用Java工具类

    以下是对标题和描述中提到的一些常用Java工具类的详细解释: 1. **数据库池工具类**:数据库连接池是管理数据库连接的一种机制,它能有效地复用已存在的数据库连接,避免频繁创建和关闭连接导致的性能开销。常见的...

    java常用工具类

    在Java中,工具类通常是一些静态方法的集合,用于执行特定的任务,而不涉及对象的实例化。以下是对标题和描述中提到的一些Java常用工具类的详细讲解: 1. **UUID类**: `java.util.UUID` 是用来生成全局唯一标识符...

    Java常用工具类包包含各种常用开发工具

    "Java常用工具类包"是一个集合,它包含了多种针对不同场景的工具类,如文件操作、文本处理、对象转换等。下面将详细介绍这些工具类的主要功能及其应用场景。 1. **文件对比**: - Java中的`java.io.File`类可以...

Global site tag (gtag.js) - Google Analytics