使用SpotBugs 进行代码检查
SpotBugs 介绍
SpotBugs是Findbugs的继任者(Findbugs已经于2016年后不再维护,see https://mailman.cs.umd.edu/pipermail/findbugs-discuss/2016-November/004321.html),用于对代码进行静态分析,查找相关的漏洞。
目前SpotBugs 3.1.3 自带检测器,其中有90余种Bad practice,155余种Correctness,9种Experimental, 2种 Internationalization,17种Malicious code vulnerability,46种Multithreaded correctness,4种 Bogus random noise,37种Performance,11种 Security,87种Dodgy。
Bad practice 不佳实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配(如重写equals但没重写
hashCode,或相反情况等)
Correctness 可能导致错误的代码(如空指针引用、无限循环等)
Experimental 实验性
Internationalization 国际化相关问题(如错误的字符串转换等)
Malicious code vulnerability 可能受到的恶意攻击(如访问权限修饰符的定义等)
Multithreaded correctness 多线程的正确性(如多线程编程时常见的同步,线程调度问题等)
BogusMultithreaded correctness 多线程的正确性(如多线程编程时常见的同步,线程调度问题等)
Performance 运行时性能问题(如由变量定义,方法调用导致的代码低效问题等)
Security 安全问题(如HTTP,SQL,DB等)
Dodgy code 导致自身错误的代码(如未确认的强制转换、冗余的空值检查等)
注: SpotBugs 需要当前的JDK环境为 1.8以上,但可以对1.0~1.9的代码来进行检查。
SpotBugs 插件
SpotBugs 还有对应的额外插件,用于扩展对应的规则,探测出更多的代码问题。
fb-contrib
目前最新为7.4.3,增加了大致130+条规则;其中因 FindBugs分叉,SpotBugs需要使用-sb版本。
官网 : https://github.com/mebigfatguy/fb-contrib
find-sec-bugs
目前最新为 1.8.0,针对安全(Security)增加了大致70+条规则
官网: https://github.com/find-sec-bugs/find-sec-bugs
SpotBugs 使用
Maven
maven 插件方式使用 spotbugs及相关插件
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<plugins>
<plugin>
<groupId>com.h3xstream.findsecbugs</groupId>
<artifactId>findsecbugs-plugin</artifactId>
<version>LATEST</version>
</plugin>
<plugin>
<groupId>com.mebigfatguy.fb-contrib</groupId>
<artifactId>fb-contrib</artifactId>
<version>7.4.3.sb</version>
</plugin>
</plugins>
</configuration>
</plugin>
IDE环境
Eclipse
请在对应的marketplace 搜索或install new software来进行spotbugs的安装,正式版本的安装路径 https://spotbugs.github.io/eclipse/
安装插件后,可以在对应的Preferences 进行更多SpotBugs plugin安装,参考如下图:
可以通过以下网址获取最新的插件jar
https://mvnrepository.com/artifact/com.mebigfatguy.fb-contrib/fb-contrib
https://mvnrepository.com/artifact/com.h3xstream.findsecbugs/findsecbugs-plugin
完成安装后,可以对java工程或者对应的类,右键进行 SpotBugs ->Find Bugs
JetBrain IDEA
目前没有SpotBugs插件,原FindBugs插件作者、IDEA还在讨论商标问题,请先使用 原有FindBugs代替。
https://github.com/andrepdo/findbugs-idea/issues/265
https://youtrack.jetbrains.com/issue/IDEA-201846
其他
其他更多内容可以参考SpotBugs 官方文档
https://spotbugs.readthedocs.io/en/latest/installing.html
使用SpotBugs 进行代码检查相关推荐
- webstrom代码检查
如上图,webstorm代码出现波浪线代码检查提示的问题如何解决: 1 打开 2 搜索libraies 3 将没有选中的库选中 4 如果没有响应的库点击右边的download下载 5点击ok搞定
- java 命名代码检查-注解处理器
命名代码检查 根据 <Java 语言规范( 第 3 版 ) > 中第6.8节的要求, Java 程序命名应当符合下列格式的书写规范: 类 ( 或接口 ) : 符合驼式命名法, 首字母大写. ...
- JavaScript代码检查工具——JSLintMate
JSLintMate是一款快速.简洁.易于使用JSLint(Douglas Crockford强大的JS代码检查工具)或者JSHint来检查JavaScript代码的扩展工具. JSLintMate是 ...
- jenkins+findbugs+checkstyle+PMD静态代码检查(二)
可以根据自己的需求选中对应的插件进行配置(不一定非要同时配置三个插件) jenkins:持续集成的工具 fundbugs:检测代码静态错误的插件 例如:定义了没有用到的对象,string类型的比较使 ...
- Kotlin代码检查在美团的探索与实践
背景 Kotlin有着诸多的特性,比如空指针安全.方法扩展.支持函数式编程.丰富的语法糖等.这些特性使得Kotlin的代码比Java简洁优雅许多,提高了代码的可读性和可维护性,节省了开发时间,提高了开 ...
- CSS代码检查工具stylelint
前面的话 CSS不能算是严格意义的编程语言,但是在前端体系中却不能小觑. CSS 是以描述为主的样式表,如果描述得混乱.没有规则,对于其他开发者一定是一个定时炸弹,特别是有强迫症的人群.CSS 看似简 ...
- ABAP代码检查的注意事项有哪些
ABAP代码检查关注点:标准检查工具.命名规则与代码规范.代码逻辑及语法.程序性能等 标准工具检查 SCI检查结果没有ERROR,Waring控制在每2000行代码不超过5个 SLIN检查结果没有ER ...
- SonarQube4.4+Jenkins进行代码检查实例之三-单元测试分析
作者:张克强 作者微博:张克强-敏捷307 在 <SonarQube4.4+Jenkins进行代码检查实例之一> 中介绍了不编译只检查的方式. 在<SonarQube4.4+J ...
- SonarQube4.4+Jenkins进行代码检查实例之二
在 <SonarQube4.4+Jenkins进行代码检查实例之一> 中介绍了不编译只检查的方式. 但是有些代码检查需要使用字节码,比如Findbugs的检查依赖于字节码,实例一中只提取源 ...
- SonarQube4.4+Jenkins进行代码检查实例之一
在最新的< 关于代码审查的几点建议>中再次提到了代码分析: 6.尽量使用静态代码分析工具以提高审查效率. 笔者之前也谈到过多次代码分析.代码检查,见: 关于代码评审的微博讨论汇集 #敏捷 ...
最新文章
- 基础知识--:before伪元素和:after伪元素
- 解决MongoDB 日志文件过大,清理后还占用很大磁盘空间的问题
- SAP UI5 初学者教程之四:XML 视图初探试读版
- 修改NavigationBar的分根线颜色
- 《塔木德智慧全书》(之四)
- CocoaPods通过网络代理执行资源更新
- 探索 Word 2007 开发(四):上传图片
- 8.Java 面试题整理(J2EE,MVC方面)
- 重新分区_电脑磁盘分区指南!一分钟就学会
- iphoneX的适配问题
- linux空格转义,如何在bash循环列表中转义空格?
- 【深度语义匹配模型 】原理篇一:表示型
- spark配置lzo
- 这一刻只想好好做个平凡的人
- 安装Python第三方库的基本方法
- 历年美赛赛题和特等奖论文集合,文中直接获取!!!
- MATLAB三维绘图(三)绘制等值线图
- 在Vue中搭建前端监控日志
- 智能家居到智慧家庭-由远程操作设备到家庭智慧服务
- Python将字符串转换成dataframe