Eclipse外掛之Findbugs

年華是封無效信發表於2014-05-21
描述:
程式設計師(特別是初級程式設計師)在開發過程中,程式bug往往是不可避免的。如何提高程式碼質量,找到並解決一些低階bug,Findbugs或許可以為你排憂解難。看Findbugs官網對其的描述:A static analysis tool to find bugs in Java programs.一款用Java語言開發的靜態分析工具用來找bug(翻譯不好別吐槽)


安裝:
普通的Eclipse外掛安裝
Help>Install new Software...>Add... 然後輸入Name:findbugs Location:http://findbugs.cs.umd.edu/eclipse>OK>選中FindBugs核取方塊點選Next>....(到這步還不會就去自殺吧)完了restart Eclipse即可完成安裝


使用
選擇一個你自己的工程,右鍵>FindBugs>FindBugs 這樣外掛就會自動去找程式碼裡可能存在風險了

如果你的工程裡有風險,工程名會變成project_name(12) 表示你的工程裡可能存在12個風險 ,一層一層開啟可以找到具體的風險,每個包名和類名上都會存在這個小括號

風險的程式碼,會在Eclipse程式碼顯示視窗的左邊,也就是顯示程式碼行數的地方出現一個臭蟲


我為了測試bug,我建立了一個名為findbugs_example的Java工程,寫了一個存在風險的類


package org.quinn.example;

import java.sql.Connection;
import java.sql.SQLException;

public class Test2 {

public Connection con = null;

void executeUpd(String sql) {
try {
this.con.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

}



對於編碼習慣不好的人或者新手,程式碼的比較不容易看出來

右鍵findbugs_example開始找風險,提示我的工程有兩個風險,點進去發現兩個黃色臭蟲

[img]http://dl2.iteye.com/upload/attachment/0097/3400/53a36c9f-0e98-3655-96ac-133f789724df.jpg[/img]


findbugs不同顏色的臭蟲對應的bug級別也不相同
黑色:分類
紅色:嚴重bug
黃色:警告

分析一下上面的程式碼
第一個臭蟲,建立了一個con並賦初值為null,這種做法實際上是不推薦的,其他引用的地方可能會有空指標,另外從記憶體的角度考慮效能也是很低的,Java需要對改物件重新賦值,即改變引用地址的操作。

第二個臭蟲,毫無疑問是空指標異常,我並未對賦了初值的conn設定值,使用該物件的時候自然會丟擲NullPointException

我把上面的程式碼改變一下


package org.quinn.example;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Test2 {

public Connection con;

void executeUpd(String sql) {
try {
con = DriverManager.getConnection("");
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
if (this.con != null)
this.con.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (this.con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

}



再次用Findbugs尋找風險,提示工程已無風險

注意:Findbugs提示無風險並不代表你的工程就真的沒有bug了,Findbugs並不能智慧的找到所有的bug,你的程式碼最終還是得以測試的結果為準。Findbugs為你做的僅僅是找到一些比較簡單的風險

相關文章