静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
现有 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 着重于发现代码缺陷。在对代码缺陷检查中,这三种工具在针对的代码缺陷类别也各有不同,且类别之间有重叠。
相关资料
更多内容请参见原帖http://www.ibm.com/developerworks/cn/java/j-lo-statictest-tools/
分享到:
相关推荐
本文主要介绍了四种常用的 Java 代码扫描工具,并对它们的功能、特性等方面进行了分析和比较。这些工具分别是 Checkstyle、FindBugs、PMD 和 Jtest。静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的...
Java代码依赖性分析技术在分布式静态检测中的应用: 分布式静态检测系统是现代软件开发中常用的代码检测工具,尤其在处理大型项目时,系统的可伸缩性和效率变得至关重要。对于Java程序而言,随着项目规模的扩大,源...
Java 静态代码块与非静态代码块详解 Java 中的代码块可以分为静态代码块和非静态代码块两种,两者的执行时机和作用域不同。本文将通过实例代码和详细解释,阐述 Java 静态代码块与非静态代码块的区别和应用场景。 ...
这里提到的"28个java常用的工具类源码"包含了Java开发中经常用到的一些实用工具类的源代码,可以帮助开发者深入理解这些类的工作原理,提升编程效率。下面我们将详细讨论这些工具类可能包含的知识点: 1. **...
Java作为一种广泛应用的编程语言,在软件开发过程中,为了确保代码的质量、可维护性和安全性,采用代码静态检测工具是至关重要的。本文将详细介绍一系列针对Java代码的静态检测规则,这些规则旨在帮助开发者编写更高...
以下是对"一些java常用的工具类"的详细说明。 首先,工具类通常包含静态方法,这些方法不依赖于类的实例,可以直接调用,减少了对象创建的开销。这些类通常以“Utils”或“Helper”结尾,如Apache Commons Lang中的...
SonarQube不仅提供了静态代码分析,还包括了代码覆盖率报告、代码复杂度分析等功能。通过与持续集成工具(如Jenkins)集成,SonarQube可以实时监控项目的代码质量,帮助团队尽早发现并修复问题,确保软件的质量和...
在Java编程语言中,工具类(Utility Class)是包含各种静态方法的类,这些方法用于执行特定任务,如数据操作、文件处理、数学计算等。它们通常不包含实例变量,只提供静态方法服务,帮助开发者提高代码的复用性和...
在Java编程语言中,工具类(Utility Class)是包含各种静态方法的类,这些方法用于执行特定任务,如字符串操作、数学计算、日期处理等。这些工具类通常不包含实例化对象,因为它们的设计目的是为其他类提供服务,而...
Java开发中,工具类是必不可少的部分,它们提供了一系列方便、高效的方法,可以帮助开发者解决各种常见问题,提升代码的可读性和可维护性。本篇将详细介绍Java开发中的常用工具类,涵盖以下几个方面: 1. **集合...
本篇文章将详细解析Java中常用的工具类,包括字符处理、文件处理、时间操作以及图片处理等方面的知识点。 1. **字符处理**: - `java.lang.String`:String类是Java中最基础也是最常用的数据类型之一,提供了大量...
本文将介绍两种常用的Java静态检测工具——Sonar和Findbugs。 Sonar 是一个集成化的代码质量管理平台,它不仅包含了静态代码分析的功能,还提供了代码覆盖、代码复杂度、代码重复度等多种质量指标的度量。Sonar 的...
"Java常用工具类大全,工作5年精心整理.zip"这个压缩包文件很可能包含了一位有经验的Java开发者在五年工作中积累的各种实用工具类,这些工具类能够极大地提高开发效率,简化代码编写。以下是对可能包含的知识点进行...
以下是对标题和描述中提到的一些常用Java工具类的详细解释: 1. **数据库池工具类**:数据库连接池是管理数据库连接的一种机制,它能有效地复用已存在的数据库连接,避免频繁创建和关闭连接导致的性能开销。常见的...
在Java中,工具类通常是一些静态方法的集合,用于执行特定的任务,而不涉及对象的实例化。以下是对标题和描述中提到的一些Java常用工具类的详细讲解: 1. **UUID类**: `java.util.UUID` 是用来生成全局唯一标识符...
"Java常用工具类包"是一个集合,它包含了多种针对不同场景的工具类,如文件操作、文本处理、对象转换等。下面将详细介绍这些工具类的主要功能及其应用场景。 1. **文件对比**: - Java中的`java.io.File`类可以...