代码缺陷扫描神器——FindBugs

FindBugs目前,主要有三种形式使用,GUI形式、插件形式、Ant脚本形式,在这里只讲述FindBugs作为插件,在Android Studio中的应用。

一、FindBugs基础知识

(1)FindBugs—代码缺陷分类

根据缺陷的性质,大致可以分为下列几类:

代码缺陷扫描神器——FindBugs_第1张图片
分类

1)Bad practice:不好的做法,代码违反了公认的最佳实践标准,比如某个类实现了equals方法但未实现hashCode方法等;

2)Malicious code vulnerbility:恶意的代码漏洞;

3)Correctness:可能不正确,比如错误的强制类型转换;

4)Performance:潜在的性能问题;

5)Security:安全性;

6)Dodgy code:糟糕的代码,FindBugs团队认为该类型下的问题代码导bug的可能性很高;

7)Experimental:实验;

8)Multithreaded correctness:关注于同步和多线程问题;

9)Internationalization:国际化

(2)Android Studio中使用FindBugs-IDEA插件

1)安装FindBugs插件

Android Studio —> Preference —> Plugins—> Browse Repositories ...

重启

2)FindBus菜单栏和工具栏如下

代码缺陷扫描神器——FindBugs_第2张图片
菜单栏
代码缺陷扫描神器——FindBugs_第3张图片
工具栏

3)FindBugs工具栏介绍

代码缺陷扫描神器——FindBugs_第4张图片

区域1:选择分析文件,主要包括有:Analyze Current file、Analyze Class (non-anonymous) under Cursor、Analyze Package(s) files、Analyze Module files、

Analyze Package files、Analyze Scope files等;

其中比较重要的是:Analyze Scope files(如图所示),可以设置Custom Scope,其中VCS Scope比较nice(在Code Review前,就可以利用findBugs检查代码)

代码缺陷扫描神器——FindBugs_第5张图片

区域2:FindBugs结果分类,主要包括有:Group by bug category、Group by class、

Group by package、Group by bug rank;

区域3:导入/导出分析结果(XML/HTML)

3)实例分析

FindBugs面板主要包括三部分:1)FindBugs结果分类区、2)Select a bug to preview、3)Bug Details,如下图所示为一个SIC问题,内部类最好为static类。

代码缺陷扫描神器——FindBugs_第6张图片

同样,连遍历HashMap性能问题,findBugs也能扫出来(牛!)

代码缺陷扫描神器——FindBugs_第7张图片

结  论:使用keySet形式遍历HashMap性能不如entrySet

常见bug分类如下:

代码缺陷扫描神器——FindBugs_第8张图片

二、FindBugs使用进阶

(1)FindBugs设置部分

FindBugs设置主要包括:General、Report、Filter、Detector、Annotate、Share等及部分。

1)General add Plugins

如Add Findbugs plugin for Android

代码缺陷扫描神器——FindBugs_第9张图片

2)Report部分

FindBugs报告相关设置,报告等级、报告结果分类(是否显示相应类型)

代码缺陷扫描神器——FindBugs_第10张图片

3)Filter过滤器(相当重要)

代码缺陷扫描神器——FindBugs_第11张图片

exclude忽略指定的class/package (以xml定义过滤的命名)

include只输出指定的class/package (以xml定义过滤的命名)

filter内容如下:

代码缺陷扫描神器——FindBugs_第12张图片

使用filter前后对比如下:

代码缺陷扫描神器——FindBugs_第13张图片
代码缺陷扫描神器——FindBugs_第14张图片

很明显,RadioUtil和TouchDelegateGroup文件被过滤掉了

详见:http://findbugs.sourceforge.net/manual/filter.html#d0e1880

4)Detector

可以选择所要进行检查的相关的Bug Pattern条目,你可以根据需要选择或去掉相应的检查条件

5)Annotate

Bug注解,默认设置即可。

代码缺陷扫描神器——FindBugs_第15张图片

实例如下:左侧黄色、红色图标为GutterIcon

代码缺陷扫描神器——FindBugs_第16张图片

(2)Gradle中添加findbugs

1Findbugsgradle中配置

代码缺陷扫描神器——FindBugs_第17张图片
代码缺陷扫描神器——FindBugs_第18张图片

2)在gradle中执行

代码缺陷扫描神器——FindBugs_第19张图片

3)输出Report

代码缺陷扫描神器——FindBugs_第20张图片

你可能感兴趣的:(代码缺陷扫描神器——FindBugs)