JAVA靜態(tài)代碼質(zhì)量分析工具FindBugs介紹_第1頁(yè)
JAVA靜態(tài)代碼質(zhì)量分析工具FindBugs介紹_第2頁(yè)
JAVA靜態(tài)代碼質(zhì)量分析工具FindBugs介紹_第3頁(yè)
JAVA靜態(tài)代碼質(zhì)量分析工具FindBugs介紹_第4頁(yè)
JAVA靜態(tài)代碼質(zhì)量分析工具FindBugs介紹_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

findBugs(靜態(tài)分析工具)FindBugs簡(jiǎn)介

FindBugs的安裝FindBugs的使用自定義FindBugs檢測(cè)器FindBugs生成html形式的報(bào)告整理FindBugs簡(jiǎn)介FindBugs是一個(gè)專(zhuān)門(mén)分析JAVA代碼問(wèn)題的靜態(tài)代碼掃描工具,它是通過(guò)檢查java字節(jié)碼來(lái)查找代碼缺陷。很多我們寫(xiě)的不好的地方,可以優(yōu)化的地方,它都能檢查出來(lái)。Findbugs

是一個(gè)靜態(tài)分析工具,它檢查類(lèi)或者

JAR

文件,將字節(jié)碼與一組缺陷模式進(jìn)行對(duì)比以發(fā)現(xiàn)可能的問(wèn)題。利用這個(gè)工具,就可以在不實(shí)際運(yùn)行程序的情況對(duì)軟件進(jìn)行分析。它可以幫助改進(jìn)代碼的質(zhì)量。FindBugs能做什么FindBugs可以發(fā)現(xiàn)的問(wèn)題包括:未關(guān)閉的數(shù)據(jù)庫(kù)連接,缺少必要的nullcheck,多余的nullcheck,多余的if后置條件,相同的條件分支,重復(fù)的代碼塊,錯(cuò)誤的使用了"==",建議使用StringBuffer代替字符串連加等等。而且我們還可以自己配置檢查規(guī)則(做哪些檢查,不做哪些檢查)。Findbugs提供了方便操作的可視化界面,同時(shí)也可以作為Eclipse的一個(gè)插件來(lái)使用,而我們使用得最多的還是作為Eclipse的插件來(lái)使用。

FindBugs和其他工具的區(qū)別Checkstyle和PMD是根據(jù)樣式(style)來(lái)改進(jìn)代碼質(zhì)量的。FindBugs分析引擎它直接操作類(lèi)文件(class文件)而不是源代碼。我們可以通過(guò)命令行、各種構(gòu)建工具(如Ant、CruiseControl、Hudson及Maven等)、獨(dú)立的SwingGUI或是以Eclipse和NetBeansIDE插件的方式來(lái)運(yùn)行FindBugs。輸出結(jié)果既可以是XML的,也可以是文本形式的。FindBugs的安裝Eclipse插件的安裝

a.在Eclipse當(dāng)中分別打開(kāi)一下菜單Help->SoftwareUpdates->FindandInstall

b.選擇Searchfornewfeaturestoinstall選項(xiàng)然后點(diǎn)擊Nextc.新建一個(gè)NewRemoteSite...

d.輸入名稱(比如:FindbugsPlug-in)和下面的URL:/eclipse

e.開(kāi)始安裝安裝好Findbugs以后,選擇Windows->ShowView->Other…->FindBugs->BugDetails打開(kāi)BugDetails視圖。包安裝:(myeclipse安裝findBugs)1、首先從findbugs網(wǎng)站下載插件:/downloads.html(附件中也有下好了的插件)2、將下載回來(lái)的zip包解壓,得到文件夾:edu.umd.cs.findbugs.plugin.eclipse_0120712,將該文件夾拷貝到myeclipse安裝目錄下common/plugins目錄下。我的目錄結(jié)構(gòu):D:\ProgramFiles\Genuitec\Common\plugins\edu.umd.cs.findbugs.plugin.eclipse_01207123、修改myeclipse安裝目錄下configuration/org.eclipse.equinox.simpleconfigurator的文件,在文件最后添加一行:edu.umd.cs.findbugs.plugin.eclipse,0120712,file:/D:/ProgramFiles/Genuitec/Common/plugins/edu.umd.cs.findbugs.plugin.eclipse_0120712,4,false

這里file后面的路徑要根據(jù)自己的目錄設(shè)置進(jìn)行修改,要不然重啟myeclipse后,仍然找不到findbugs。4、重啟myeclipse,選中項(xiàng)目,右鍵會(huì)出現(xiàn)一個(gè)FindBugs菜單。至此,findbugs插件安裝完畢。

FindBugs的使用Findbugs可以通過(guò)三種方法使用:Ant/Maven工具;通過(guò)Ant提供的Swing操作界面;作為Eclipse的一個(gè)插件來(lái)使用。Findbugs的Eclipse插件使用安裝了Findbugs插件后。右擊點(diǎn)擊你要檢查的項(xiàng)目選擇【FindBugs】->【FindBugs】進(jìn)行檢查。要查看Findbugs檢查出了哪些Bug,可以選擇Windows菜單->ShowView->BugExplorer,打開(kāi)BugExplorer面板。如果想要查看某個(gè)Bug詳細(xì)的信息,則可以選擇Windows菜單->OpenPerspective,然后選擇FindBugs就可以打開(kāi)FindBugs的Properties面板,在這個(gè)面板里面可以看到最詳盡的Bugs信息。FindBugs的配置

選擇你的項(xiàng)目,右鍵=>Properties=>FindBugs=>RunFindBugsAutomatically開(kāi)關(guān)當(dāng)此項(xiàng)選中后,F(xiàn)indBugs將會(huì)在你修改Java類(lèi)時(shí)自動(dòng)運(yùn)行,如你設(shè)置了Eclipse自動(dòng)編譯開(kāi)關(guān)后,當(dāng)你修改完Java文件保存,F(xiàn)indBugs就會(huì)運(yùn)行,并將相應(yīng)的信息顯示出來(lái)。當(dāng)此項(xiàng)沒(méi)有選中,你只能每次在需要的時(shí)候自己去運(yùn)行FindBugs來(lái)檢查你的代碼。

Minimumprioritytoreport選擇項(xiàng)

這個(gè)選擇項(xiàng)是讓你選擇哪個(gè)級(jí)別的信息進(jìn)行顯示,有Low、Medium、High三個(gè)選擇項(xiàng)可以選擇,很類(lèi)似于Log4J的級(jí)別設(shè)置啦。比如:你選擇了High選擇項(xiàng),那么只有是High級(jí)別的提示信息才會(huì)被顯示。你選擇了Medium選擇項(xiàng),那么只有是Medium和High級(jí)別的提示信息才會(huì)被顯示。你選擇了Low選擇項(xiàng),那么所有級(jí)別的提示信息都會(huì)被顯示Enablebugcategories選擇項(xiàng)Correctness關(guān)于代碼正確性相關(guān)方面的;Performance關(guān)于代碼性能相關(guān)方面的;Internationalization關(guān)于代碼國(guó)際化相關(guān)方面;Multithreadedcorrectness關(guān)于代碼多線程正確性相關(guān)方面的;Style關(guān)于代碼樣式相關(guān)方面的;Maliciouscodevulnerability關(guān)于惡意破壞代碼相關(guān)方面的;

Selectbugpatternstocheckfor選擇項(xiàng)

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

Pattern條目

可以從Bugcodes、Detectorname、Detectordescription中看到相應(yīng)的是要檢查哪些方面的內(nèi)容,你可以根據(jù)需要選擇或去掉相應(yīng)的檢查條件自定義FindBugs檢測(cè)器編寫(xiě)自定義的檢測(cè)器Detector項(xiàng)目中需要引入FindBugs的jar文件:findBug.jar自定義的檢測(cè)器需要繼承OpcodeStackDetector重寫(xiě)其sawOpcode方法。下面用一個(gè)簡(jiǎn)單的自定義檢測(cè)器來(lái)說(shuō)明。此檢測(cè)器是用來(lái)查找項(xiàng)目中有沒(méi)有system.out和system.error情況出現(xiàn)的。建議編寫(xiě)的時(shí)候可以先查看FindBugs源代碼以查找類(lèi)似于你要編寫(xiě)的檢測(cè)器。自定義檢測(cè)器ForbiddenSystemOutClass.java接下來(lái)找到eclipse編譯的.class文件,一般在項(xiàng)目的lib目錄里面可以找到。將其放入findbugs-plugin.jar文件中對(duì)應(yīng)的目錄下:findbugs-plugin.jar\edu\umd\cs\findbugs\detect(如圖)

修改findbugs.xml文件找到Eclipse插件安裝文件夾中findbugs-plugin.jar所在的文件夾,我的文件夾是:D:\ProgramFiles\Genuitec\Common\plugins\edu.umd.cs.findbugs.plugin.eclipse_0120712打開(kāi)findbugs-plugin.jar文件,找到findbugs.xml和messages.xml兩個(gè)文件。雙擊打開(kāi)findbugs.xml,你可以修改原有的文件,也可以替換原有的文件為自己寫(xiě)的findbugs.xml。findbugs.xml和messages.xml兩個(gè)文件findbugs.xml的編寫(xiě)對(duì)于每一個(gè)新的檢測(cè)器,在FindBugs.xml文件中增加一個(gè)Detector元素和一個(gè)BugPattern元素。Detector元素指定用于實(shí)現(xiàn)檢測(cè)器的類(lèi)以及它是快速還是慢速檢測(cè)器。speed屬性的可能值有slow、moderate和fast。BugPattern元素指定三個(gè)屬性。abbrev屬性定義檢測(cè)器的縮寫(xiě)??s寫(xiě)用于標(biāo)識(shí)用命令行客戶運(yùn)行時(shí)檢測(cè)到的缺陷??梢杂猛粋€(gè)縮寫(xiě)將幾個(gè)相關(guān)的檢測(cè)器組織到一起。.type屬性是惟一標(biāo)識(shí)符,有兩個(gè)用途。在使用Ant版本或者命令行版本的FindBugs且輸出格式設(shè)置為XML時(shí),用type屬性標(biāo)識(shí)問(wèn)題。type屬性也是在檢測(cè)器的Java代碼中指定的,用以創(chuàng)建缺陷的正確類(lèi)型。

category屬性是枚舉類(lèi)型。它是以下類(lèi)型中的一種:CORRECTNESS:一般正確性問(wèn)題MT_CORRECTNESS:多線程正確性問(wèn)題MALICIOUS_CODE:如果公開(kāi)給惡意代碼,有可能成為攻擊點(diǎn)PERFORMANCE:性能問(wèn)題messages.xml的編寫(xiě)messages.xml文件由三個(gè)元素組成:Detector、BugPattern和BugCodeDetails元素包含檢測(cè)器的簡(jiǎn)單HTML描述,因而應(yīng)當(dāng)包含在CDATA部分中.BugPattern元素類(lèi)似于在FindBugs.xml中定義的BugPattern元素。需要type屬性,并且它應(yīng)當(dāng)匹配在FindBugs.xml和在檢測(cè)器的Java代碼中使用的相同惟一標(biāo)識(shí)符。BugCode元素必須用元素的屬性指定這個(gè)縮寫(xiě)運(yùn)行

放置好這三個(gè)文件,重啟Eclipse,在需要檢測(cè)的文件上單擊右鍵,選擇findbugs即可從檢測(cè)出帶有system.out或system.error語(yǔ)句。FindBugs生成html形式的報(bào)告整理之前用的是findbugs的eclipse插件,但是在導(dǎo)出報(bào)告的時(shí)候是xml形式的,很不易閱讀,下來(lái)講下用findbugs來(lái)導(dǎo)出html的報(bào)告。準(zhǔn)備工作

下載到ant和findbugs。并且配置好它們的環(huán)境變量編寫(xiě)ant腳本(build.xml)build.xml部分屬性參數(shù)說(shuō)明class嵌套元素指定要分析的類(lèi)。這個(gè)元素必須指定一個(gè)location屬性,location屬性的名字為archive文件(jar,zip等)、目錄或者class文件。可以為一個(gè)findbugs元素指定多個(gè)class元素。auxClasspath可選的嵌套元素,用于指定要分析的類(lèi)所引用的類(lèi),但是并不對(duì)引用的類(lèi)進(jìn)行分析。sourcePath可選的嵌套元素,指定Java源代碼的目錄。home必須的屬性,findbugs的安裝目錄。quietErrors可選的布爾型屬性。如果是true的話,報(bào)告嚴(yán)重的分析錯(cuò)誤和丟失的類(lèi)。默認(rèn)情況下為false。reportLevel可選的屬性。指定優(yōu)先級(jí)別。如果是low的話,那么報(bào)告所有的bug,如果是medium(缺省值),報(bào)告medium和high優(yōu)先級(jí)的bug。生成FindbugsReport運(yùn)行cmd打開(kāi)DOS窗口,進(jìn)入到build.xml所在目錄,鍵入命令antfindbugs回車(chē)即可。可能遇到的問(wèn)題由于工程比較大,所以在導(dǎo)出html的過(guò)程中有可能產(chǎn)生一個(gè)空白的html。此時(shí)原因可能是JVM內(nèi)存的錯(cuò)(堆棧信息之類(lèi)的),此時(shí)將<findbugs>的jvmargs屬性改大,如改為jvmargs="-Xmx1000m",其實(shí)此屬性是可選的,也可以省略。FindBugs進(jìn)階-過(guò)濾器FingBugs自定義的缺陷是很多的,當(dāng)項(xiàng)目十分龐大的時(shí)候,一個(gè)一個(gè)查看缺陷實(shí)在是很痛苦的事情。而且有些缺陷是可以忽略的。解決方法是采用過(guò)濾器來(lái)選擇關(guān)閉特定的檢測(cè)器。匹配所有BUG<Match><Classname="com.foobar.MyClass"/></Match>匹配特定類(lèi)型

Matchcertaintestsfromaclassbyspecifyingtheirabbreviations.<Match>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論