您的位置:首页 > 编程语言 > Java开发

Eclipse 插件 FindBugs安装和使用

2017-04-23 15:37 375 查看
FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具。FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。FindBugs既提供可视化 UI 界面,同时也可以作为 Eclipse插件使用。文本将主要使用将 FindBugs作为 Eclipse插件。在安装成功后会在 eclipse中增加 FindBugs perspective,用户可以对指定 Java类或 JAR文件运行 FindBugs,此时 FindBugs会遍历指定文件,进行静态代码分析。

一:如何安装

安装步骤:

1.点击“Help->InstallNew Software”,如下图:

 


2.点击“Add”,然后在弹出框“Name”输入“findBugs”,“Location”输入“http://findbugs.cs.umd.edu/eclipse”,点击“OK”,如下图:



3.选择对应插件,然后点击“next->next->finish”。



 

4.完成安装之后重启eclipse,右击项目文件或目录,会发现多了Findbugs的菜单,如下图:

 


当然也可以直接从http://download.csdn.net/detail/hailshao/6593725下载,然后将文件复制到你本地eclipse的plugins目录,然后重启eclipse即可

二:如何使用

1,  在eclipse package Explorer 右键选择目标工程-> build project

 2,  选择指定的包或者类进行findbug

3,添加findbugs explorer (eclipse 左下角)

4,  bugs explorer 添加完毕后,我们就可以查看刚刚找到的bugs了

技巧使用:

找出的bug有3中颜色, 黑色的臭虫标志是分类, 红色的臭虫表示严重bug发现后必须修改代码,橘黄色的臭虫表示潜在警告性bug 尽量修改。(附录是各种bug的解释及修改方案,请大家按附表参考修改)

双击bug项目就可以在右边编辑窗口自动打开相关代码文件并连接到代码片段。 点击行号旁边的小臭虫图标后再eclipse下方输出区将提供详细的bug描述,以及修改建议等信息。我们可以根据此信息进行修改。

 

附录:

 

[b]代码检查常见问题及解决方法[/b]
[b]注:以下解决方法为参考办法,如果有更好的解决办法欢迎提出,我们共同改进。[/b]

[b]序号[/b]
[b]问题英文描述[/b]
问题分析
[b]解决办法[/b]
1
Comparison of String objects using == or !=
比较字符串使用了双等号
使用String的equels()方法
2
Call to equals() comparing different types
Equals方法比较了两个不同的数据类型
转换类型后比较
3
Call to method of static java.text.DateFormat
同一个format 多次调用会导致线性不安全, private static final SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");   方法体内调用:
format.format(new Date());  
在方法体内使用,尽量避免定义全局的对象
方法体内定义:SimpleDateFormat  format = new SimpleDateFormat("dd/MM/yyyy");   format.format(new Date());  
4
Bad attempt to compute absolute value of signed 32-bit random integer
String nums = Math.abs(r.nextInt()) + ""; 修改为String nums = Math.abs(r.nextInt(Integer.MAX_VALUE)) + "";
5
The class name com.aisino.fpcxbd.action.printAction doesn't start with an upper case letter
类名首字母大写
类名首字母大写
6
Dead store to rePacket
不被使用的变量或常量
看业务是否会使用,如果不使用,请删除,如果有使用,初始值不要直接new 一个对象,初始值可以置为null
7
Exception is caught when Exception is not thrown
没有抛出异常时,异常被捕获
 
结合业务进行处理
8
Load of known null value
填充了空值
如果没有的空值,请删除
9
Method invokes inefficient new String(String) constructor
方法中调用了低效的new String()构造方法,如
context.put("name",new String("Velocity") );
如果内容本身为字符串,则直接赋值即可,如
context.put("name","Velocity" );
10
Method may fail to close stream
方法可能未关闭stream,方法产生了一个IO流,却未关闭,将会导致文件描绘符的泄漏。
建议使用finally block来确保io stream被关闭。如果无异常,请使用完毕后关闭IO流。
11
Method might ignore exception
捕捉了异常,但是没有进行处理
需要在catch体中对异常进行处理。或者打印相关的描述。
12
Method names should start with a lower case letter
方法首字母没有小写, 没有遵循Java命名规范
请将方法首字母小写
13
Method uses the same code for two branches
例如:
fpkjmx.setSyl(fpkjmx.getSyl());
请确认该写法是否有意义。
14
Non-transient non-serializable instance field in serializable class
在可序列化的类中存在不能序列化或者不能暂存的数据
 
将属性对象实现可实例化
15
Null pointer dereference
会出现空指针,如
if(null != nsrxx){ }else{ nsrxx.setLoginZt(3);
}
这种逻辑有明显的错误,请根据业务修改
16
Nullcheck of value previously dereferenced
会出现空指针异常
先做非空判断,再进行业务逻辑的处理,避免空指针异常
17
Possible null pointer dereference
可能会出现空指针异常
请根据业务处理,如有必要先做非空判断
18
Possible null pointer dereference in method on exception path
在异常部分放弃null值检查,可能会导致后面的代码出现空指针异常
请根据业务进行处理
19
Redundant nullcheck of value known to be non-null
该对象已不为空,没有必要再做非空判断
没有必要的判断去掉即可,(根据实际业务)
20
Redundant nullcheck of value known to be non-null
已知该对象为空,没有必要再做非空判断
已知该对象为空,没有必要再做非空判断
21
Repeated conditional tests
重复条件测试
重复的判断,请去掉一个
22
Self assignment of local variable
自赋值的局部变量
请检查代码,是否可以去掉自赋值
23
Should be a static inner class
应该定义为静态内部类
如果出现该提示,请定义为静态内部类
24
Store of non serializable object into HttpSession
在HttpSession中存放非序列化的对象
 
将Javabean实现可实例化
25
Unread field
未被使用的变量或对象
请查看代码,如果没有引用,请删除或者注释掉
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: