Eclipse外掛之Findbugs
描述:
程式設計師(特別是初級程式設計師)在開發過程中,程式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工程,寫了一個存在風險的類
對於編碼習慣不好的人或者新手,程式碼的比較不容易看出來
右鍵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
我把上面的程式碼改變一下
再次用Findbugs尋找風險,提示工程已無風險
注意:Findbugs提示無風險並不代表你的工程就真的沒有bug了,Findbugs並不能智慧的找到所有的bug,你的程式碼最終還是得以測試的結果為準。Findbugs為你做的僅僅是找到一些比較簡單的風險
程式設計師(特別是初級程式設計師)在開發過程中,程式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為你做的僅僅是找到一些比較簡單的風險
相關文章
- eclipse中的yaml外掛EclipseYAML
- ModelGoon:逆向UML Eclipse外掛GoEclipse
- eclipse 安裝svn外掛Eclipse
- Eclipse外掛開發demoEclipse
- Eclipse安裝lombok外掛及外掛使用案例EclipseLombok
- Eclipse-安裝SVN外掛Eclipse
- mac 下eclipse安裝lombok外掛MacEclipseLombok
- eclipse安裝Hadoop-0.20.2外掛EclipseHadoop
- windows平臺,eclipse安裝maven外掛WindowsEclipseMaven
- Eclipse-阿里P3C外掛Eclipse阿里
- eclipse 將本地外掛引用(多種方法)Eclipse
- spring boot外掛下載地址(eclipse4.6.3)Spring BootEclipse
- Eclipse配置hadoop外掛步驟【Linux centos6.0】EclipseHadoopLinuxCentOS
- Spring Boot系列 Eclipse 離線安裝外掛STSSpring BootEclipse
- eclipse中Maven工程使用Tomcat7以上外掛EclipseMavenTomcat
- Groovy的本地安裝和Eclipse外掛的配置Eclipse
- 使用CodeTogether外掛在IntelliJ、Eclipse和VS Code之間實時共享您的 IDEIntelliJEclipseIDE
- Eclipse安裝svn外掛的常用的兩種方式Eclipse
- VSCode外掛之BeautifyVSCode
- vim外掛之Taglist
- PHPSTORM外掛之TranslationPHPORM
- 10個用於開發Spring Boot的最佳Eclipse外掛Spring BootEclipse
- VS2010常用外掛介紹之Javascript外掛JavaScript
- Eclipse配置反編譯外掛jadclipse(內容有部分糾正)Eclipse編譯
- Gradle系列之Gradle外掛Gradle
- FindBugs質量管理
- 實用webpack外掛之DefinePluginWebPlugin
- 前端外掛之Datatables使用--下篇前端
- 前端外掛之Datatables使用--上篇前端
- webpack外掛機制之TapableWeb
- AlloyTouch之select選擇外掛
- Visual Studio VS 外掛之 ReSharper
- lua外掛之----【luaDate 日期類】
- unity3d外掛之 DoTweenUnity3D
- Kettle之Neo4j外掛
- 前端外掛之Select2使用前端
- 前端外掛之Bootstrap Dual Listbox使用前端boot
- Linux/Centos:Notepad++ 外掛之NppFTPLinuxCentOSFTP
- Eclipse通過EGit外掛提交多個專案到同一個倉庫EclipseGit