Java-idea-FindBugs字节码级别潜在bug查看

一、概述

  静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷。

  FindBugs 不注重样式或者格式,它试图只寻找真正的缺陷或者潜在的性能问题。

  FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式(请参阅 参考资料)。图 1 显示了分析一个匿名项目的结果(为防止可怕的犯罪,这里不给出它的名字):
  在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。)。如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。
  选定了以上各项后,便可以开始检测了。检测的过程可能会花好几分钟,具体视工程的规模而定。检测完毕可生成一份详细的报告,藉由这份报告,可以发现许多代码中间潜在的bug。比较典型的,如引用了空指针(null pointer dereference), 特定的资源(db connection)未关闭,等等。如果用人工检查的方式,这些bug可能很难才会被发现,或许永远也无法发现,直到运行时发作…当除掉了这些典型的(classic) bug后,可以确信的是,我们的系统稳定度将会上一个新的台阶。
二、官方地址
  地址:http://findbugs.sourceforge.net/
三、使用
  1、安装
    File→setting→plugins→findbugs
    安装即可
  2、配置显示
    View→Tool Windows →FindBugs IDEA
  3、鼠标悬浮查看具体含义即可
    

   4、结果说明

    1->Bad pratice编程的坏习惯 
      主要是命名问题,比如类名最好以大写开头,字符串不要使用等号不等号进行比较,可能会有异常最好用try-catch包裹的代码,方法有返回值但被忽略等等,这些如果不想改可以直接忽略.

    2->Malicious code vulnerability 恶意代码漏洞 
      主要是一些属性直接使用public让别的类来获取,建议改为private并为其提供get/set方法. 
      还有一些public的静态字段,可能会被别的包获取之类的. 
      这些也需要根据项目具体情况来,个人意见,在有的不重要类,有时直接公开使用属性,可能更为便捷.如果你认为这些不需要修改,完全可以忽略.

    3->Dodgy code 糟糕的代码 
      比如一个double/float被强制转换成int/long可能会导致精度损失,一些接近零的浮点数会被直接截断,事实上我们应该保留. 
      在规范代码,尽量规避错误这方面我也有了一些收获. 
        在类型转换的时候,我们应该为类型转换提供一个安全的转换方法,因为我们永远不会知道,我们的app在用户手里会发生什么,所以我们要尽可能的去减少这种发生错误的可能.

      比如使用switch的时候没有提供default。

      多余的空检查,就是不可能为空的值,增加了不为空判断,这是没有必要的。属于代码冗余

      不安全的类型转换等等。 

    4->performance 性能 
      主要是一些无用的代码,比如声明了没有用到的属性等等

    5->correctness 代码的正确性 这一项应该算是最重要的了 
      主要是没有对变量进行不为空判定,在特殊情况可能发生空指针异常.

原文地址:https://www.cnblogs.com/bjlhx/p/6758094.html