成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Eclipse插件開發(fā)之FindBugs插件

開發(fā) 后端
本文介紹了Eclipse插件FindBug。此插件用于檢查代碼中存在的Bug,可以幫助我們提升Java代碼的編寫能力,寫出更加安全可靠的代碼。建議使用或加在Ant里進(jìn)行持續(xù)構(gòu)建。

Findbugs是一個(gè)在java程序中查找bug的程序,它查找bug模式的實(shí)例,也就是可能出錯(cuò)的代碼實(shí)例,注意Findbugs是檢查java字節(jié)碼,也就是*.class文件。

其實(shí)準(zhǔn)確的說,它是尋找代碼缺陷的,很多我們寫的不好的地方,可以優(yōu)化的地方,它都能檢查出來。例如:未關(guān)閉的數(shù)據(jù)庫連接,缺少必要的null check,多余的 null check,多余的if后置條件,相同的條件分支,重復(fù)的代碼塊,錯(cuò)誤的使用了"==",建議使用StringBuffer代替字符串連加等等。而且我們還可以自己配置檢查規(guī)則(做哪些檢查,不做哪些檢查),也可以自己來實(shí)現(xiàn)獨(dú)有的校驗(yàn)規(guī)則(用戶自定義特定的bug模式需要繼承它的接口,編寫自己的校驗(yàn)類,屬于高級(jí)技巧)。

一、安裝方法

詳情見:http://findbugs.cs.umd.edu/eclipse

If you have previously installed a version of the FindBugs plugin prior to mid-May, 2006, then you should remove it first. Simply remove the de.tobject.findbugs_0.0.n directory from Eclipse's plugins directory.

To install the FindBugs plugin:

1. In Eclipse, click on Help -> Software Update -> Find and Install...

2. Choose the Search for new features to install option, and click Next.

3. Click New Remote Site.

4. Enter the following:

* Name: FindBugs update site

* URL: one of the following (note: no final slash on the url)

o http://findbugs.cs.umd.edu/eclipse for official releases

o http://findbugs.cs.umd.edu/eclipse-candidate for candidate releases and official releases

o http://findbugs.cs.umd.edu/eclipse-daily for all releases, inculding developmental ones and click OK.

5. "FindBugs update site" should appear under Sites to include in search.

Click the checkbox next to it to select it, and click Finish.

6. You should see FindBugs Feature under Select features to install.

(You may have to click on one or two triangles to make it visible in the tree.)

Select the checkbox next to it and click next.

7. Select the I accept option to accept the license and click Next.

8. Make sure the location is correct where you're installing it. The default (your workspace) should be fine. Click Finish.

9. The plugin is not digitally signed. Go ahead and install it anyway.

二、使用方法

本文主要介紹在Eclipse中使用的情況

FindBugs是一個(gè)可以在Java程序中發(fā)現(xiàn)Bugs的程序。

它是專門用來尋找處于“Bug Patterns”列表中的代碼的。

Bug Patterns指很有可能是錯(cuò)誤的代碼的實(shí)例。

打開Bug Details視圖

Windows => Show View => Other… => FindBugs => BugDetails

Bug Details視圖

在Package Explorer或Navigator視圖中,選中你的Java項(xiàng)目,右鍵,可以看到“Find Bugs”菜單項(xiàng),子菜單項(xiàng)里有“Find Bugs”和“Clear Bug Markers”兩項(xiàng)內(nèi)容,如下圖所示:

我們建立一個(gè)簡(jiǎn)單的測(cè)試文件Test.java 內(nèi)容如下:

public class Test 

{

private String[] name;

public String[] getName()

{

return name;

}

public void setName(String[] name)

{

this.name = name;

}

}

我們點(diǎn)中“Find Bugs”,運(yùn)行時(shí)會(huì)出現(xiàn)如下進(jìn)度框:

運(yùn)行結(jié)束后可以在Problems中看到增加了如下的警告信息內(nèi)容

FindBugs運(yùn)行后的警告信息內(nèi)容不僅在Problems視圖中顯示,而且將標(biāo)記在源代碼標(biāo)記框中,在源代碼編輯器中我們可以看到警告標(biāo)識(shí),如下圖:

警告標(biāo)識(shí)

當(dāng)光標(biāo)指向你的警告信息的代碼上面時(shí),就會(huì)有相應(yīng)的錯(cuò)誤提示信息,與Eclipse本身的錯(cuò)誤或警告信息提示類似。

選中Problems視圖里出現(xiàn)的相應(yīng)問題,就會(huì)在代碼編輯器里切換到相應(yīng)的代碼上去,方便根據(jù)相應(yīng)的提示信息進(jìn)行代碼的修改。

代碼編輯器

在Problems視圖里,選中相應(yīng)的問題條目,右鍵,在彈出的菜單中,可以看到“Show Bug Details”,如下圖所示:

Problems視圖里

點(diǎn)中它,會(huì)切換到Bug Details視圖上去,顯示更加詳細(xì)的提示信息。

當(dāng)然,在代碼編輯窗口中,點(diǎn)擊帶有警告提示信息的圖標(biāo)時(shí),也會(huì)自動(dòng)切換到Bud Details窗口去,查看詳細(xì)的警告信息,如下圖所示。

警告信息

根據(jù)這里詳細(xì)的信息,你可以得到FindBugs為什么會(huì)對(duì)你的代碼報(bào)警告信息,及相應(yīng)的處理辦法,根據(jù)它的提示,你可以快速方便地進(jìn)行代碼修改。

詳細(xì)的信息

根據(jù)提示,我們將代碼修改成如下,再運(yùn)行就不會(huì)報(bào)有警告信息了。

public class Test 

{

private String[] name;

public String[] getName()

{

String[] temp = name;

return temp;

}

public void setName(String[] name)

{

String[] temp = name;

this.name = temp;

}

}

配置FindBugs

選擇你的項(xiàng)目,右鍵 => Properties => FindBugs =>

查看更多精彩圖片

可以配置的信息包括如上圖所示的四個(gè)選項(xiàng)的相關(guān)設(shè)置:

1. Run FindBugs Automatically開關(guān)

當(dāng)此項(xiàng)選中后,F(xiàn)indBugs將會(huì)在你修改Java類時(shí)自動(dòng)運(yùn)行,如你設(shè)置了Eclipse自動(dòng)編譯開關(guān)后,當(dāng)你修改完Java文件保存,F(xiàn)indBugs就會(huì)運(yùn)行,并將相應(yīng)的信息顯示出來。

當(dāng)此項(xiàng)沒有選中,你只能每次在需要的時(shí)候自己去運(yùn)行FindBugs來檢查你的代碼。

2. Minimum priority to report選擇項(xiàng)

這個(gè)選擇項(xiàng)是讓你選擇哪個(gè)級(jí)別的信息進(jìn)行顯示,有Low、Medium、High三個(gè)選擇項(xiàng)可以選擇,很類似于Log4J的級(jí)別設(shè)置啦。 比如:

你選擇了High選擇項(xiàng),那么只有是High級(jí)別的提示信息才會(huì)被顯示。

你選擇了Medium選擇項(xiàng),那么只有是Medium和High級(jí)別的提示信息才會(huì)被顯示。

你選擇了Low選擇項(xiàng),那么所有級(jí)別的提示信息都會(huì)被顯示。

3. Enable bug categories選擇項(xiàng)

在這里是一些顯示Bug分類的選擇:

Correctness關(guān)于代碼正確性相關(guān)方面的

Performance關(guān)于代碼性能相關(guān)方面的

Internationalization關(guān)于代碼國際化相關(guān)方面的

Multithreaded correctness關(guān)于代碼多線程正確性相關(guān)方面的

Style關(guān)于代碼樣式相關(guān)方面的

Malicious code vulnerability關(guān)于惡意破壞代碼相關(guān)方面的

比如:如果你把Style的檢查框去掉不選擇中它,那么與Style分類相關(guān)的警告信息就不會(huì)顯示了。其它的類似。

4. Select bug patterns to check for選擇項(xiàng)

在這里你可以選擇所要進(jìn)行檢查的相關(guān)的Bug Pattern條目

可以從Bug codes、Detector name、Detector description中看到相應(yīng)的是要檢查哪些方面的內(nèi)容,你可以根據(jù)需要選擇或去掉相應(yīng)的 檢查條件。

三、詳細(xì)說明

Findbugs是一個(gè)靜態(tài)分析工具,它檢查類或者JAR 文件,將字節(jié)碼與一組缺陷模式進(jìn)行對(duì)比以發(fā)現(xiàn)可能的問題。Findbugs自帶檢測(cè)器,其中有60余種Bad practice,80余種Correctness,1種 Internationalization,12種Malicious code vulnerability,27種Multithreaded correctness,23種Performance,43種Dodgy。

Bad practice 壞的實(shí)踐

一些不好的實(shí)踐,下面列舉幾個(gè):

HE 類定義了equals(),卻沒有hashCode();或類定義了equals(),卻使用

Object.hashCode();或類定義了hashCode(),卻沒有equals();或類定義了hashCode(),卻使用Object.equals();類繼承了equals(),卻使用Object.hashCode()。

SQLStatement 的execute方法調(diào)用了非常量的字符串;或Prepared Statement是由一個(gè)非常量的字符串產(chǎn)生。

DE 方法終止或不處理異常,一般情況下,異常應(yīng)該被處理或報(bào)告,或被方法拋出。

Correctness 一般的正確性問題

可能導(dǎo)致錯(cuò)誤的代碼,下面列舉幾個(gè):

NP 空指針被引用;在方法的異常路徑里,空指針被引用;方法沒有檢查參數(shù)是否null;null值產(chǎn)生并被引用;null值產(chǎn)生并在方法的異常路徑被引用;傳給方法一個(gè)聲明為@NonNull的null參數(shù);方法的返回值聲明為@NonNull實(shí)際是null。

Nm 類定義了hashcode()方法,但實(shí)際上并未覆蓋父類Object的hashCode();類定義了tostring()方法,但實(shí)際上并未覆蓋父類Object的toString();很明顯的方法和構(gòu)造器混淆;方法名容易混淆。

SQL方法嘗試訪問一個(gè)Prepared Statement的0索引;方法嘗試訪問一個(gè)ResultSet的0索引。

UwF所有的write都把屬性置成null,這樣所有的讀取都是null,這樣這個(gè)屬性是否有必要存在;或?qū)傩詮臎]有被write。

Internationalization 國際化

當(dāng)對(duì)字符串使用upper或lowercase方法,如果是國際的字符串,可能會(huì)不恰當(dāng)?shù)霓D(zhuǎn)換。

Malicious code vulnerability 可能受到的惡意攻擊

如果代碼公開,可能受到惡意攻擊的代碼,下面列舉幾個(gè):

FI 一個(gè)類的finalize()應(yīng)該是protected,而不是public的。

MS屬性是可變的數(shù)組;屬性是可變的Hashtable;屬性應(yīng)該是package protected的。

Multithreaded correctness 多線程的正確性

多線程編程時(shí),可能導(dǎo)致錯(cuò)誤的代碼,下面列舉幾個(gè):

ESync空的同步塊,很難被正確使用。

MWN錯(cuò)誤使用notify(),可能導(dǎo)致IllegalMonitorStateException異常;或錯(cuò)誤的

使用wait()。

No 使用notify()而不是notifyAll(),只是喚醒一個(gè)線程而不是所有等待的線程。

SC 構(gòu)造器調(diào)用了Thread.start(),當(dāng)該類被繼承可能會(huì)導(dǎo)致錯(cuò)誤。

Performance 性能問題

可能導(dǎo)致性能不佳的代碼,下面列舉幾個(gè):

DM方法調(diào)用了低效的Boolean的構(gòu)造器,而應(yīng)該用Boolean.valueOf(…);用類似

Integer.toString(1) 代替new Integer(1).toString();方法調(diào)用了低效的float的構(gòu)造器,應(yīng)該用靜態(tài)的valueOf方法。

SIC如果一個(gè)內(nèi)部類想在更廣泛的地方被引用,它應(yīng)該聲明為static。

SS 如果一個(gè)實(shí)例屬性不被讀取,考慮聲明為static。

UrF如果一個(gè)屬性從沒有被read,考慮從類中去掉。

UuF如果一個(gè)屬性從沒有被使用,考慮從類中去掉。

Dodgy 危險(xiǎn)的

具有潛在危險(xiǎn)的代碼,可能運(yùn)行期產(chǎn)生錯(cuò)誤,下面列舉幾個(gè):

CI 類聲明為final但聲明了protected的屬性。

DLS對(duì)一個(gè)本地變量賦值,但卻沒有讀取該本地變量;本地變量賦值成null,卻沒有讀取該本地變量。

ICAST 整型數(shù)字相乘結(jié)果轉(zhuǎn)化為長(zhǎng)整型數(shù)字,應(yīng)該將整型先轉(zhuǎn)化為長(zhǎng)整型數(shù)字再相乘。

INT沒必要的整型數(shù)字比較,如X <= Integer.MAX_VALUE。

NP 對(duì)readline()的直接引用,而沒有判斷是否null;對(duì)方法調(diào)用的直接引用,而方法可能返回null。

REC直接捕獲Exception,而實(shí)際上可能是RuntimeException。

ST 從實(shí)例方法里直接修改類變量,即static屬性。

總結(jié)

此插件的功能很不錯(cuò),可以幫助我們提升Java代碼的編寫能力,寫出更加安全可靠的代碼。建議使用或加在Ant里進(jìn)行持續(xù)構(gòu)建。

現(xiàn)在,你可以馬上拿出你已經(jīng)開發(fā)的一個(gè)項(xiàng)目,檢查一下你的代碼有沒有問題了。

【編輯推薦】

  1. Ubuntu安裝Eclipse-SDK-3.3小結(jié)
  2. Eclipse插件jinto資源配置文件
  3. Eclipse啟動(dòng)參數(shù)大全
  4. 深入淺出Eclipse RCP(1):Hello RCP
  5. Eclipse自動(dòng)補(bǔ)全增強(qiáng)
責(zé)任編輯:book05 來源: hexun博客
相關(guān)推薦

2009-06-03 16:06:28

Eclipse插件開發(fā)Eclipse

2009-06-15 16:35:44

Spring IDEEclipse插件

2009-06-05 14:36:28

Eclipse插件安裝Eclipse教程

2010-08-17 13:41:46

Eclipse插件

2013-07-16 15:35:54

Eclipse插件Android開發(fā)學(xué)習(xí)

2020-02-07 11:20:47

Java開發(fā)代碼

2009-06-18 11:11:08

Java項(xiàng)目模型Eclipse

2013-05-27 15:07:36

Eclipse插件

2011-11-21 10:04:52

Java開源Google

2009-06-30 15:59:00

Eclipse插件開發(fā)

2014-11-24 09:49:33

Eclipse

2009-06-18 14:28:24

Eclipse中添加M

2016-09-27 19:30:11

2021-10-19 10:56:00

插件工程方式

2009-09-17 09:44:31

Flex for ec

2009-06-04 20:45:11

Eclipse插件安裝Eclipse插件使用

2011-12-01 09:50:28

2009-06-10 16:41:51

Links安裝Ecli

2011-03-10 10:32:45

2013-07-23 15:28:38

開發(fā)者Eclipse插件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人综合久久 | 日韩免费毛片 | 国产在线观看一区二区三区 | 国产免费视频 | 精品日本久久久久久久久久 | 日韩国产中文字幕 | 涩爱av一区二区三区 | 久热国产精品 | 久久国产精品免费一区二区三区 | 久在线 | 精品国产一二三区 | www视频在线观看 | 麻豆av在线免费观看 | 国产jizz女人多喷水99 | 91啪亚洲精品 | 国产真实精品久久二三区 | 亚洲在线一区 | 欧美日韩在线一区二区三区 | 成人福利在线观看 | 国产精品99久久久久 | 国产精品久久久久久久久久久久久久 | 欧美日韩视频一区二区 | 特级丰满少妇一级aaaa爱毛片 | 日本精品一区二区在线观看 | 亚洲国产福利视频 | 久久精品免费观看 | 国产精品九九九 | 欧美日韩视频在线第一区 | 中文字幕精品一区二区三区精品 | 国产高清在线 | 日韩一区二区三区视频 | 国产98色在线| 国产99在线 | 欧美 | 欧美成人精品一区二区三区 | 欧美a区 | 91伊人 | 欧美日韩精品综合 | 永久www成人看片 | 在线观看免费av网站 | 亚洲天堂精品一区 | 日韩国产中文字幕 |