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

未被使用的變量或對象

請查看代碼,若是沒有引用,請刪除或者註釋掉

相關文章
相關標籤/搜索