Eclipse 插件 FindBugs安装和使用

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

一:如何安装安全

安装步骤:dom

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

 

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

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

 

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

 

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

二:如何使用.net

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

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

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

4,  bugs explorer 添加完毕后,咱们就能够查看刚刚找到的bugs了

技巧使用:

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

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

 

附录:

 

代码检查常见问题及解决方法

注:如下解决方法为参考办法,若是有更好的解决办法欢迎提出,咱们共同改进。

序号

问题英文描述

问题分析

解决办法

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

未被使用的变量或对象

请查看代码,若是没有引用,请删除或者注释掉

相关文章
相关标签/搜索