静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
现有 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/
分享到:
相关推荐
本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有4种主流Java静态代码分析工具(Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,希望能够帮助Java软件开发...
下面依次对介绍几个Android常用的静态代码分析工具,同时顺便介绍下我厂刘全栈的对静态代码分析做的工具 。 本文最先发表于,如有转载,请注明转载出处。 CheckStyle 『Checkstyle是一个开发工具用来帮助程序员编写...
1. Java工具概述 很多人初学程序时,总是在想,那么多的算法该怎么写呀?那么多的数据结构都不熟悉,该怎么实现呀?总是担心英语不好程序学不精通,数学不好写程序无法达到巅峰。学的程序越多,不懂的知识越多。 ...
基于Java的qq截图工具 设计软件源码+word毕业论文文档。基于java的QQ截屏工具的设计和实现能够实现对屏幕的随机截取,复制,保存以及添加文字等操作,便于用户对数据的处理。 该软件的功能: (1)随机获取屏幕...
Java的代码块包括静态代码块、实例代码块和构造代码块,它们会在程序运行时被执行。Java中的异常处理机制可以帮助开发人员避免程序运行时出现的错误。 Java编程环境 Java编程环境包括Java开发工具(IDE)和Java开发...
代码生成工具 Hibernate用它在运行时扩展 Java类和实现,同cglib包 slf4j-api-1.5.8.jar和slf4j-log4j12-1.5.0.jar hibernate使用的一个日志系统 spring.jar spring核心包 spring-security-core-2.0.4.jar 和 ...
differ.java 测试静态方法与实例方法之间的区别 forefather.java 一个简单的基类 grandson.java 上面这个类的子类 hasConstructor.java 拥有构造器的类 hasFinalFun.java 拥有最终方法的类 hasRecall.java ...
1) 静态代码分析:使用静态代码分析工具对代码进行分析,发现潜在的代码缺陷和安全漏洞。 2.)单元测试:编写单元测试用例并执行,以验证代码的正确性和稳定性。 3.)集成测试:将各个模块集成到一起进行测试,以...
Klocwork 综合应用了多种程序分析领域最先进的技术,是最为出色的以静态算法分析运行时缺 陷的软件。 Klocwork 产品具有很多突出的特征: Klocwork 支持多种常用的开发语言,能够分析 C、 C++、 C#和 Java 代码;...
静态代码分析是通过分析源代码来发现潜在的安全问题和技术缺陷的过程,常用的工具有FindBugs、Checkstyle等。脱壳技术是指去除程序的保护壳,以便更容易地进行分析和修改,Java程序通常采用加壳技术进行保护。反汇编...
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了...
6.5.3 静态代码块169 6.5.4 单态模式170 6.6 final修饰符171 6.7 abstract修饰符172 6.8 接口173 6.8.1 接口的定义及实现174 6.8.2 接口中的常量174 6.8.3 接口的多重实现174 6.9 本章练习175 第7章 7.1 面向对象的...
Java经典编程源码例程,可以做为你的学习设计参考。 第1章 Java语言概述 1 实例001 输出“Hello World” 2 实例002 输出控制台传递的参数 2 实例003 输出由“*”组成的三角形 3 实例004 输出符号表情 5 第2章 ...
此工具我不再更新,里面大多数方法我迁移到了hutool工具包中,而其中一些不常用的功能被遗弃,项目暂留做为以后参考。 common-tools 一、数据库工具类 1、com.baijob.commonTools.db.ds C3p0Ds 和 DruidDs分别是...
zxing.java源码解析 Java- Java常用框架和资源 构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了...
7.4 实验3 Java的常用工具类 第8章 字符串 8.1 预备知识 8.2 实验1 一个String类的简单应用 8.3 实验2 单词替换和统计问题 8.4 实验3 字符串的比较和查找最长子串 8.5 实验4 单词逆向输出问题 8.6 实验5 ISBN...
java源码: /* * Created on 2005-4-15 * * Summary of regular-expression constructs 正则表达式结构简介: * Construct Matches * Characters 字符: * x The character x ...
顾名思义,FindBugs是一个寻找bug的工具,更具体的说FindBugs是一个静态检测java代码的工具,可以找到代码中的一些潜在bug,比如说NullPointerException,或者是一些流或者数据库没有关闭的问题. ##2.1作用 检测范围 : ...
2.3 HelloJava示例的分析 11 2.4 巩固练习 12 第3章 Java语言的基本语法 13 3.1 代码编写规则 13 3.2 注释 13 3.3 标识符 14 3.4 变量和常量 15 3.5 数据类型 16 3.5.1 基本数据类型 16 3.5.2 ...