静态代码分析工具对比

静态代码分析工具

一、         什么是静态代码分析工具

二、         Findbugs

三、         Checkstyle

四、         Pmd

五、         FindBugsPMDCheckStyle对比

六、         Sonar

七、         Infer


一、 什么是静态代码分析工具

静态程序分析是指使用自动化工具软件对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查、安全缺陷检测、程序优化等。它的特点就是不执行程序,相反,通过在真实或模拟环境中执行程序进行分析的方法称为“动态程序分析

二、  Findbugs

1.findbug介绍

FindBugs 是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。它可以简单高效全面地帮助我们发现程序代码中存在的bug,以及潜在隐患。针对各种问题,它并且提供了简单的修改意见供我们重构时进行参考;通过使用它,可以一定程度上降低我们code review的工作量,并且会提高review效率。通过findbugs找到bug,再由我们自己重构代码,可以培养我们的编码意识及水平,形成好的习惯提高开发编码能力。

Findbugs自带检测器,其中有60余种Bad

practice,80余种Correctness,1种 Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。

2.使用

在eclipse上安装findbugs插件,直接在eclipse上分析代码

与maven、gradle、ant、jenkins等结合使用

三、  Checkstyle

Checkstyle 是 SourceForge 的开源项目,通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范。(检查代码风格:变量的命名规范,注释规范,空格规范)

四、  Pmd

PMD是一种开源分析Java代码错误的工具。与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。(主要检查重复代码,比如直接copy的那些代码段)

五、    FindBugsPMDCheckStyle对比

工具目的检查项

FindBugs

检查.class

基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug主要检查bytecode中的bug patterns,如空指针检查、没有合理关闭资源、字符串相同判断错(==,而不是equals)等

PMD

检查源文件

检查Java源文件中的潜在问题主要包括:

空try/catch/finally/switch语句块

未使用的局部变量、参数和private方法

空if/while语句

过于复杂的表达式,如不必要的if语句等

复杂类

重复代码

CheckStyle

检查源文件

主要关注格式

检查Java源文件是否与代码规范相符主要包括:

Javadoc注释

命名规范

代码风格

多余没用的Imports

Size度量,如过长的方法

缺少必要的空格Whitespace

重复代码

[if !vml]

[endif]


六、 Sonar

sonar比findbugs高了一个层级,多出了sonar不仅关注了常规静态bug,还关注到了如代码质量、包与包,类与类之间的依赖情况、代码耦合情况、类,方法。文件的复杂度、代码中是否包含大量复制粘贴的代码是质量低下的,关注到了项目代码整体的健康情况。(sonar的规则,50%bug都是主要级别,其实危害不大)



七、 Infer

Infer是FaceBook的一个开源的静态程序分析工具,可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题(检查空指针引用,资源泄露(I/O未关闭))

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容