静态代码分析工具
静态程序分析是指使用自动化工具软件对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查、安全缺陷检测、程序优化等。它的特点就是不执行程序,相反,通过在真实或模拟环境中执行程序进行分析的方法称为“动态程序分析”
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 是 SourceForge 的开源项目,通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范。(检查代码风格:变量的命名规范,注释规范,空格规范)
PMD是一种开源分析Java代码错误的工具。与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。(主要检查重复代码,比如直接copy的那些代码段)
五、 FindBugs、PMD和CheckStyle对比
工具目的检查项
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比findbugs高了一个层级,多出了sonar不仅关注了常规静态bug,还关注到了如代码质量、包与包,类与类之间的依赖情况、代码耦合情况、类,方法。文件的复杂度、代码中是否包含大量复制粘贴的代码是质量低下的,关注到了项目代码整体的健康情况。(sonar的规则,50%bug都是主要级别,其实危害不大)
Infer是FaceBook的一个开源的静态程序分析工具,可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题(检查空指针引用,资源泄露(I/O未关闭))
网友评论