findbugs静态代码分析工具使用教程
FindBugs 是一个静态分析工具,很多程序猿都在使用,再次详细列出findbugs的使用教程,希望对大家有帮助。
1 安装
FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。Findbugs有两种工具形式,一种是界面形式另一个是插件形式,能够在liunx上部署,为了使用方便这里使用插件的形式,具体安装步骤如下:
Eclipse —> help —> Eclipse Markerplace.. 搜索findbugs如下图所示,点击install一直往下安装即可

验证:在window —> Preferences 中搜索findbugs 如果出现即为安装成功
项目右键 —> findbugs能够找到findbugs即为安装成功
2运行
2.1项目(类)右键 —> Find Bugs —> Find Bugs,如图:

2.2FindBugs插件的3个功能WorkSpace,如图:

Bug Explorer:这里显示的是用FindBugs对这个项目(类)扫描的结果。如图所示可以看出该项目(类)共有 3个bug,在代码中有臭虫标记,此处为检测为“可能存在空指针”的异常,在该异常上右键可以跳到Bug Info查看详细信息。
找出的bug有多种颜色,黑色的臭虫标志是分类,红色的臭虫表示严重bug发现后必须修改代码,橘黄色的臭虫表示潜在警告性bug尽量修改。

Bug Info:这里是对BUG问题的描述,包括:Bug类别、等级,Bug的定位,对Bug的解释。Bug等级可根据后面跟随的数字确定影响,数字越小Bug漏洞越危险。Bug对应位置请看下图。

3规则 & BUGS
Detector Configuration:在这里你可以选择所要进行检查的相关的Bug Pattern条目,你可以根据需要选择或去掉相应的检查条件。

Minimum confidence to report:这个选择项是让你选择哪个级别的信息进行显示,有Low、Medium、High三个选择项可以选择。 比如:
选择了High选择项,那么只有是High级别的提示信息才会被显示;
选择了Medium选择项,那么只有是Medium和High级别的提示信息才会被显示;
选择了Low选择项,那么所有级别的提示信息都会被显示。
Minimum rank to report:设置显示报告的最低等级,图为1—15级的显示报告。

Filter files:用户自定义过滤文件。用户可以通过查看教程自己编辑XML文件来指定项目时候对一些bug(类型)进行检测或不检测,支持通配符,其中Include filter files为指定检测bug,exclude filter files为不检测bug,对于exclude baseline bugs可以从添加分析得出的XML结果用来排除不检测。具体XML文档格式如下:


常见bugs:
NP_NULL_ON_SOME_PATH_EXCEPTION:代码调用时, 遇到异常分支, 可能造成一个对象没有获得赋值依旧保持NULL空指针。 接下来如果对这个对象有引用, 可能造成NullPointerException 空指针异常。

ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD:把实例赋值给一个静态对象,如果多个实例被赋值可能出现数据丢失问题。

NP_ALWAYS_NULL_EXCEPTION:在异常处理时,调用一个空对象的方法时可能引起空指针异常。
IM_BAD_CHECK_FOR_ODD:奇偶检测逻辑,未考虑负数情况。
WMI_WRONG_MAP_ITERATOR:使用了keySet iterator和Map.get(key)来获取Map值,这种方式效率低,建议使用entrySet的iterator效率更高
OS_OPEN_STREAM:方法可能未关闭stream,方法产生了一个IO流,却未关闭,将会导致文件描绘符的泄漏,建议使用finally block来确保io stream被关闭。
IL_INFINITE_LOOP:明显的无限循环。
扩展:
FindBugs 网站提供了完整的类型清单http://findbugs.sourceforge.net/bugDescriptions.html
Fiter file规则说明http://findbugs.sourceforge.net/manual/filter.html
findbugs静态代码分析工具使用教程的更多相关文章
- 常用 Java 静态代码分析工具的分析与比较
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...
- [转载] 常用 Java 静态代码分析工具的分析与比较
转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代 ...
- 【转载】常用 Java 静态代码分析工具的分析与比较
摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后 ...
- Android 静态代码分析工具
简评: 作者在文中提到的三个静态代码分析工具不是互相替代的关系,各有各的侧重点,如果有需要完全可以同时使用. 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法.结构.过程.接口等来检查程 ...
- 常用Java静态代码分析工具的分析与比较
给国产静态代码检测工具Pinpoint打Call! 简介 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了4种现有的主流Java静态代码分析工具 (Checkstyle,FindBugs ...
- C++静态代码分析工具推荐——PVS-Studio
长假归来,最近一直没更新,节前本来就想写这篇了,一直到今天才有时间. 关于静态代码分析在维基百科上可以查到很详细的介绍:https://en.wikipedia.org/wiki/List_of_to ...
- 来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧.
- java静态代码分析工具infer
infer是一个静态代码分析工具,探测bugs. 主要支持Java.C/C++ 安装:brew install infer 在线展示:https://codeboard.io/projects/115 ...
- Https与Http,SSL,DevOps, 静态代码分析工具,RFID, SSH, 非对称加密算法(使用最广泛的一种是RSA), 数字签名, 数字证书
在URL前加https://前缀表明是用SSL加密的. 你的电脑与服务器之间收发的信息传输将更加安全. Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定. http和h ...
随机推荐
- amazeui学习笔记一(开始使用2)--布局示例layouts
amazeui学习笔记一(开始使用2)--布局示例layouts 一.总结 1.样例分析(不要忘记,优先分析这个布局示例):有教你页面怎么布局的,实例中可以分析一波 2.响应式:对应meta标签中的v ...
- RocketMQ(九):消息发送(续)
匠心零度 转载请注明原创出处,谢谢! RocketMQ网络部署图 NameServer:在系统中是做命名服务,更新和发现 broker服务. Broker-Master:broker 消息主机服务器. ...
- 4.Windows下安装ZooKeeper
转自:https://www.cnblogs.com/mstmdev/p/5612791.html 官方主页: https://zookeeper.apache.org/ 选择合适的镜像地址下 ...
- 应该知道的30个jQuery代码开发技巧
1. 创建一个嵌套的过滤器 .filter(":not(:has(.selected))") //去掉所有不包含class为.selected的元素 2. 重用你的元素查询 var ...
- amazeui学习笔记--css(基本样式)--样式统一Normalize
amazeui学习笔记--css(基本样式)--样式统一Normalize 一.总结 1.统一浏览器默认样式: Amaze UI 也使用了 normalize.css,就是让不同浏览器显示相同的样式 ...
- 并发控制MsSql
Isolation 阅读目录(Content) 1 并发控制理论 1.1 悲观并发控制 1.2 乐观并发控制 2 隔离级别 2.1 隔离级别说明 2.2 Read Commmitted Snaps ...
- Android Gradle统一依赖管理
目的: 避免在依赖包出新版本时,需要对每个module中的build.gradle文件都进行修改(如appcompat-v7包),使用这种方式即只需一次修改. 方法一 在项目的根目录创建一个gradl ...
- struts2_7_Action类中方法的动态调用
(一)直接调用方法(不推荐使用) 1)Action类: private String savePath; public String getSavePath() { return savePath; ...
- 动词 + to do、动词 + doing
1. 含义有重大区别 动词+to do 与 动词 + doing,具有较大含义上的差别的动词主要有: stop finish forget 在这些单词的后面,自然 to do 表示未做的事,doing ...
- 使用wepy开发微信小程序商城第二篇:路由配置和页面结构
使用wepy开发微信小程序商城 第二篇:路由配置和页面结构 前言: 最近公司在做一个微信小程序的项目,用的是类似于vue的wepy框架.我也借此机会学习和实践一下. 小程序官方文档:https://d ...