sonarqube可参考这里:https://blog.csdn.net/weixin_44689968/article/details/115506998
FindBugs 插件是Java的缺陷检测工具,可以提供静态字节代码分析,以便从IntelliJ IDEA中查找Java代码中的错误。FindBugs 使用静态分析可以识别数百种严重缺陷(查找200多种错误模式),例如空指针取消引用,无限递归循环,对Java库的错误使用和死锁等。据统计在大型应用程序中通常每1000-2000行非注释源语句中大约有1个缺陷。
其他插件:IDEA格式化插件 Eclipse Code Formatter 的安装配置与使用
1、FindBugs-IDEA 和 QAPlug-FindBugs 插件
常用的 FindBugs 插件有2种,分别为 FindBugs-IDEA 和 QAPlug-FindBugs。
1.1 FindBugs-IDEA
FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
FindBugs 用来查找Java代码中的程序错误,它使用静态分析来识别Java程序中上百种不同类型的潜在错误。潜在错误可分为四个等级:恐怖的、吓人的、令人困扰的和值得关注的,这是根据其可能产生的影响或严重程度,而对开发者的提示。
Find-Sec-Bugs 是扫描插件 FindBugs 的 Java 安全漏洞规则扩展库,它支持在多种主流 IDE 环境进行安装:Eclipse, IntelliJ, Android Studio 和 NetBeans。只扫描 Java 代码,支持主流的 Java 开发框架,比如 Spring-MVC, Struts 等。通过扫描源代码,能够发现131种(version 1.9.0)不同的安全漏洞类型。
Find-sec-bugs官网:http://find-sec-bugs.github.io/bugs.htm
注意:idea2020版本后就不支持 FindBugs-IDEA 插件了。
1.2 QAPlug-FindBugs
在IDEA中搜索会发现有四种QAPlug,包含了PMD、FindBugs、CheckStyle和QAPlug。QAPlug 是一个 Intellij IDEA 插件,用于管理代码质量,它集成了 PMD、Checkstyle 和 Findbugs 等工具。
1.2.1 QAPlug-FindBugs
是一个静态分析工具,基于 bug patterns 缺陷模式概念,将字节码与一组缺陷模式进行对比以发现可能的问题。
查找字节码文件中的潜在bug。只寻找可能存在bug的地方,不注重样式或者格式,它试图只寻找真正的缺陷或者潜在的性能问题。主要包括:
空指针;
没有合理关闭资源;
字符串相等判断错(用了==而没用equals)等。
1.2.2 QAPlug-CheckStyle
代码样式风格检查,专门check代码规范风格的,比如缩进,换行操作等。
检查源文件是否与代码编程规范相符。主要包括:
Javadoc注释;
命令规范;
多余没用的imports;
长度度量,如过长的方法;
必要空格的缺失;
重复代码等;
大项目往往是有很多人一起完成的,然而每个人都有自己的style,导致整个项目的代码不仅存在不符合语言规范的情况,而且读起来非常困难。因此,这样的项目中都会引入Checkstyle 来规范大家的编码风格,尽量做到统一和合理。
1.2.3 QAPlug-PMD
检查源文件中的潜在问题。主要包括:
空的try/catch/finally/switch语句块;
程序中定义而未使用的变量、private方法;
空的if/while语句;
过于复杂的表达式,如不必要的if语句等;
复杂类;
不必要的对象创建等;
1.2.4 QAPlug
这个插件集成了 PMD、Checkstyle 和 Findbugs 工具,1键运行3个插件并同时汇总整合,非常方便,需要注意的是若只安装QAPlug,会提示错误消息,请至少安装一个QAPlug子模块,你可以先安装FindBugs子模块后再安装QAPlug。
2、安装方式
2.1 在线安装方式
第一种方式,是在IDEA上搜索插件进行安装,会适配当前IDEA的版本。打开File -> Settings 界面,在左侧列表中找到 Plugins 菜单,在右侧的 Marketplace 页签下,搜索 “findbugs”,可以找到对应的插件,如下图所示,点击 Install 进行安装即可。
可以看到,在idea中只搜索到了 QAPlug-FindBugs 插件,所以如果我们想要安装 FindBugs-IDEA 插件,可以使用离线方式安装。
注意:若只安装QAPlug,会提示错误消息,请至少安装一个QAPlug子模块,你可以先安装FindBugs子模块进行使用。
2.2 离线安装方式
第二种安装方式是使用离线插件进行安装。插件下载页面:https://plugins.jetbrains.com/idea ,在搜索框中输入插件名称 findbugs 搜索,点击出现的下拉提示或搜索按钮,即可进入插件下载页面,选择对应安装版本下载即可。
可以看到在官网上可以搜索到 FindBugs-IDEA 和 QAPlug-FindBugs 两种插件,选择我们需要的下载即可。
1)FindBugs-IDEA下载安装
通过前述搜索结果进入下载下面,或直接点击下面的连接进入下载。
FindBugs-IDEA下载地址:https://plugins.jetbrains.com/plugin/3847-findbugs-idea/versions 。
下载完成后,进入插件市场,选择本地安装
同样是在 Settings 界面,在左侧列表中找到 Plugins 菜单,在右侧的 Installed 页签右方有个齿轮图标,点击展开菜单后选择 “Install Plugin from Disk…”,此时会打开本地文件选择框,选择你下载的插件包 FindBugs-IDEA-1.0.1.zip 安装即可。
安装完成后重启IDEA,会发现左下角会出现 FindBugs-IDEA 的图标。
find-sec-bugs安全规则组件的应用
Find-Sec-Bugs 是扫描插件 FindBugs 的 Java 安全漏洞规则扩展库,可选择使用。
find-sec-bugs安全规则组件下载地址:https://find-sec-bugs.github.io/download.htm
File->Setting->FindBugs-IDEA->plugins的±>选择4,选择组件的路径,导入
导入完成效果图:
至此需要导入的步骤均已完成,可以进行代码走查操作了。
2)QAPlug-FindBugs下载安装
通过前述搜索结果进入下载下面,或直接点击下面的连接进入下载。
QAPlug-FindBugs下载地址:https://plugins.jetbrains.com/plugin/4597-qaplug--findbugs/versions
下载完成后,进入插件市场,选择本地安装
同样是在 Settings 界面,在左侧列表中找到 Plugins 菜单,在右侧的 Installed 页签右方有个齿轮图标,点击展开菜单后选择 “Install Plugin from Disk…”,此时会打开本地文件选择框,选择你下载的插件包安装即可。安装完成后重启IDEA。
3、插件使用
3.1 FindBugs-IDEA 使用方式
FindBugs-IDEA 插件可以分析单个文件,一个包下面的所有文件,整个module下的文件,整个project下的文件,鼠标右键想要分析的文件名/包名/module名/project。
分析选中的文件
结果显示:
除了分析单个文件之外,还可以分析整个项目,module等。
Analyze Selected File(s)————分析单个文件
Analyze Package(s) Files————分析包下文件
Analyze Module Files————分析整个module
Analyze Project Files————分析整个工程
Analyze Scope Files————分析某个范围的文件
项目代码分析详情
下图中左下方红框代表安装完成,左侧中间红框代表运行,右测上方显示项目代码分析详情。
Bad pratice: 编程的坏习惯,主要是命名问题,比如类名最好以大写开头,字符串不要使用等号不等号进行比较,可能会有异常最好用try-catch包裹的代码,方法有返回值但被忽略等等,这些如果不想改可以直接忽略。
Malicious code vulnerability: 恶意代码漏洞,主要是一些属性直接使用public让别的类来获取,建议改为private并为其提供get/set方法。还有一些public的静态字段,可能会被别的包获取之类的。这些也需要根据项目具体情况来,个人意见,在有的不重要类,有时直接公开使用属性,可能更为便捷。如果你认为这些不需要修改,完全可以忽略。
Dodgy code: 糟糕的代码,比如一个double/float被强制转换成int/long可能会导致精度损失,一些接近零的浮点数会被直接截断,事实上我们应该保留。在类型转换的时候,我们应该为类型转换提供一个安全的转换方法。比如使用switch的时候没有提供default。多余的空检查,就是不可能为空的值,增加了不为空判断,这是没有必要的。属于代码冗余不安全的类型转换等等。
performance: 性能,主要是一些无用的代码,比如声明了没有用到的属性等等。
correctness: 代码的正确性,主要是没有对变量进行不为空判定,在特殊情况可能发生空指针异常。
3.2 QAPlug-FindBugs 使用方式
选择项目,点击Analyze,再点击Analyze Code。
选中整个项目:
运行后可看到左下角多了一个“Analysis”的工具标识,点击可看到历史的分析记录:
项目代码分析详情
Efficiency: 效能。主要从 “Performance” 性能角度给出指导意见。
Maintainability: 可维护性。主要从 “Bad practice” 不良实践角度给出指导意见。
Reliability: 可靠性。从 “Correctness” 正确性、“Malicious code vulnerability” 恶意代码漏洞等角度给出指导意见。
Usability: 可用性。主要从 “Dodgy” 狡猾的角度给出指导意见。
检测之后的提示实例
左侧显示结果以及对应类的所在位置,右侧显示详细的问题描述。
4、常见的错误信息
4.1 Bad practice 代码坏习惯
4.2 Dodgy code 糟糕的代码
4.3 Internationalization 代码国际化相关
4.4 Performance 代码性能相关
4.5 Experimental 可能的错误
4.6 Malicious code vulnerability 恶意破坏代码相关
4.7 Multithreaded correctness 多线程代码正确性相关
4.8 Correctness 代码正确性相关
5、安装错误解决方案
5.1 make错误
引入插件QAPlug - FindBugs后,make的时候经常会报这个错误:
解决方案一:
找到idea的安装目录 -> …\JetBrains\IntelliJ IDEA版本号\bin\idea64.exe.vmoptions
将下面的配置加到文件末尾
重启IDEA,再次扫描的时候就可以了。findBugs的问题解决了,但是引入了其他问题,每次 Open In -> Explorer 的时候都无法正确打开文件所在目录。
解决方案二:
如果对Open In -> Explorer使用频率比较高的朋友,可以考虑另外一种比较笨拙的方法。
去掉复选框Other Settings -> QAPlug -> FindBugs -> Make before analysis
每次findBugs之前先手动编译