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)介

1、findBugs(靜態(tài)分析工具)2vFindBugs簡(jiǎn)介 vFindBugs的安裝vFindBugs的使用v自定義FindBugs檢測(cè)器vFindBugs生成html形式的報(bào)告整理3FindBugs簡(jiǎn)介FindBugsFindBugs是一個(gè)專門(mén)分析JAVAJAVA代碼問(wèn)題的靜態(tài)代碼掃描工具, ,它是通過(guò)檢查javajava字節(jié)碼來(lái)查找代碼缺陷。很多我們寫(xiě)的不好的地方, ,可以優(yōu)化的地方, ,它都能檢查出來(lái)。FindbugsFindbugs 是一個(gè)靜態(tài)分析工具, ,它檢查類或者 JARJAR 文件, ,將字節(jié)碼與一組缺陷模式進(jìn)行對(duì)比以發(fā)現(xiàn)可能的問(wèn)題。利用這個(gè)工具, ,就可以在不實(shí)際運(yùn)行程序的情況

2、對(duì)軟件進(jìn)行分析。它可以幫助改進(jìn)代碼的質(zhì)量。4FindBugs能做什么FindBugsFindBugs可以發(fā)現(xiàn)的問(wèn)題包括: :未關(guān)閉的數(shù)據(jù)庫(kù)連接, ,缺少必要的null check,null check,多余的 null null check,check,多余的ifif后置條件, ,相同的條件分支, ,重復(fù)的代碼塊, ,錯(cuò)誤的使用了=,=,建議使用StringBufferStringBuffer代替字符串連加等等。而且我們還可以自己配置檢查規(guī)則( (做哪些檢查, ,不做哪些檢查) )。FindbugsFindbugs提供了方便操作的可視化界面, ,同時(shí)也可以作為EclipseEclipse的一個(gè)

3、插件來(lái)使用, ,而我們使用得最多的還是作為EclipseEclipse的插件來(lái)使用。5FindBugs和其他工具的區(qū)別CheckstyleCheckstyle和和PMDPMD是根據(jù)樣式(是根據(jù)樣式(stylestyle) 來(lái)改來(lái)改進(jìn)代碼質(zhì)量的。進(jìn)代碼質(zhì)量的。FindBugsFindBugs分析引擎它直接操作類文件(分析引擎它直接操作類文件(classclass文文 件)而不是源代碼。我們可以通過(guò)命令行、各種件)而不是源代碼。我們可以通過(guò)命令行、各種構(gòu)建工具(如構(gòu)建工具(如AntAnt、Cruise ControlCruise Control、HudsonHudson及及MavenMaven等)

4、、獨(dú)立的等)、獨(dú)立的Swing GUISwing GUI或是以或是以EclipseEclipse和和NetBeans IDENetBeans IDE插件的方式來(lái)運(yùn)行插件的方式來(lái)運(yùn)行FindBugsFindBugs。輸。輸出結(jié)果既可以是出結(jié)果既可以是XMLXML的的, ,也可以是文本形式的。也可以是文本形式的。6FindBugs的安裝vEclipse插件的安裝 a.a.在EclipseEclipse當(dāng)中分別打開(kāi)一下菜單 Help-Software Help-Software Updates-Find and Install Updates-Find and Install b. b.選擇 Sea

5、rch for new features to install Search for new features to install 選項(xiàng)然后點(diǎn)擊 Next Next c. c.新建一個(gè) New Remote Site. New Remote Site. d. d.輸入名稱(比如: :Findbugs Plug-inFindbugs Plug-in)和下面 的URL:URL: e. e. 開(kāi)始安裝 安裝好FindbugsFindbugs以后, ,選擇Windows - Show View - Windows - Show View - OtherOther - FindBugs - BugDe

6、tails - FindBugs - BugDetails打開(kāi)Bug DetailsBug Details視圖。7v包安裝包安裝: :(myeclipse(myeclipse安裝安裝findBugs) findBugs) 1 1 、首先從、首先從findbugsfindbugs網(wǎng)站下載插件網(wǎng)站下載插件: : (附件中也有下好了的(附件中也有下好了的插件)插件)2 2、將下載回來(lái)的、將下載回來(lái)的zipzip包解壓包解壓, ,得到文件得到文件夾夾:edu.umd.cs.findbugs.plugin.eclipse_01207:edu.umd.cs.findbugs.plugin.e

7、clipse_0120712 ,12 ,將該文件夾拷貝到將該文件夾拷貝到myeclipsemyeclipse安裝目錄下安裝目錄下common/pluginscommon/plugins目錄下。我的目錄結(jié)構(gòu)目錄下。我的目錄結(jié)構(gòu):D:Program :D:Program FilesGenuitecCommonpluginsedu.umd.cs.findbugs.FilesGenuitecCommonpluginsedu.umd.cs.findbugs.plugin.eclipse_0120712 plugin.eclipse_0120712 83 3、修改

8、myeclipsemyeclipse安裝目錄下configuration/org.eclipse.equinox.simpleconfiguratconfiguration/org.eclipse.equinox.simpleconfiguratoror的文件, ,在文件最后添加一行: : edu.umd.cs.findbugs.plugin.eclipse,0120712, edu.umd.cs.findbugs.plugin.eclipse,0120712, 這里filefile后面的路徑要根據(jù)自己的目錄設(shè)置進(jìn)行修

9、改, ,要不然重啟myeclipsemyeclipse后, ,仍然找不到findbugsfindbugs。 4 4、重啟myeclipse,myeclipse,選中項(xiàng)目, ,右鍵會(huì)出現(xiàn)一個(gè)Find BugsFind Bugs菜單。至此,findbugs,findbugs插件安裝完畢。 9FindBugs的使用FindbugsFindbugs可以通過(guò)三種方法使用可以通過(guò)三種方法使用: :Ant/MavenAnt/Maven工具工具; ;通過(guò)通過(guò)AntAnt提供的提供的SwingSwing操作界面操作界面; ;作為作為EclipseEclipse的一個(gè)插件來(lái)使用。的一個(gè)插件來(lái)使用。10Findbu

10、gs的Eclipse插件使用安裝了安裝了FindbugsFindbugs插件后。右擊點(diǎn)擊你要檢查的插件后。右擊點(diǎn)擊你要檢查的項(xiàng)目選擇項(xiàng)目選擇【Find BugsFind Bugs】-【Find BugsFind Bugs】進(jìn)行進(jìn)行檢查。檢查。要查看要查看FindbugsFindbugs檢查出了哪些檢查出了哪些Bug,Bug,可以選擇可以選擇WindowsWindows菜單菜單-Show View-Bug Explorer-Show View-Bug Explorer, ,打開(kāi)打開(kāi)Bug ExplorerBug Explorer面板。面板。如果想要查看某個(gè)如果想要查看某個(gè)BugBug詳細(xì)的信息詳

11、細(xì)的信息, ,則可以選擇則可以選擇WindowsWindows菜單菜單-Open Perspective-Open Perspective, ,然后選擇然后選擇FindBugsFindBugs就可以打開(kāi)就可以打開(kāi)FindBugsFindBugs的的PropertiesProperties面面板板, ,在這個(gè)面板里面可以看到最詳盡的在這個(gè)面板里面可以看到最詳盡的BugsBugs信息。信息。12FindBugs的配置 選擇你的項(xiàng)目選擇你的項(xiàng)目, ,右鍵右鍵 = Properties = = Properties = FindBugs =FindBugs =vRun FindBugs Automat

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

13、代碼。 13vMinimum 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ì)被顯示14Enable bug categories選擇項(xiàng) Correctness關(guān)于代碼正確性相關(guān)方面的; Performance關(guān)于代碼性能相關(guān)方面的; Internationaliza

14、tion關(guān)于代碼國(guó)際化相關(guān)方面; Multithreaded correctness關(guān)于代碼多線程正確性相關(guān)方面的; Style關(guān)于代碼樣式相關(guān)方面的; Malicious code vulnerability關(guān)于惡意破壞代碼相關(guān)方面的; 15vSelect 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)的 檢查條件1617自定義FindBugs檢測(cè)器v編寫(xiě)自定義

15、的檢測(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源代碼以查找類似于你要編寫(xiě)的檢測(cè)器。18自定義檢測(cè)器ForbiddenSystemOutClass.java19 接下來(lái)找到接下來(lái)找到eclipseeclipse編譯的編譯的.class.class文件文件, ,一般在一般在項(xiàng)目的項(xiàng)目的liblib目錄里

16、面可以找到。將其放入目錄里面可以找到。將其放入findbufindbugs-plugin.jargs-plugin.jar文件中對(duì)應(yīng)的目錄下文件中對(duì)應(yīng)的目錄下: :findbugs -findbugs -plugin.jareduumdcsfindbugsdetectplugin.jareduumdcsfindbugsdetect(如圖)(如圖) 20v修改修改findbugs.xmlfindbugs.xml文件文件 找到找到EclipseEclipse插件安裝文件夾中插件安裝文件夾中findbugs-findbugs-plugin.jarplugin.jar所在的文件夾所在的文件夾, ,我的

17、文件夾我的文件夾是是: :D:ProgramFilesGenuitecCommonpluginsD:ProgramFilesGenuitecCommonpluginsedu.umd.cs.findbugs.plugin.eclipse_2.0.1.edu.umd.cs.findbugs.plugin.eclipse_012071220120712 打開(kāi)打開(kāi)findbugs-plugin.jarfindbugs-plugin.jar文件文件, ,找到找到findbugs.xmlfindbugs.xml和和messages.xmlmessages.xml兩個(gè)文件。雙擊打兩個(gè)文件。雙擊

18、打開(kāi)開(kāi)findbugs.xml,findbugs.xml,你可以修改原有的文件你可以修改原有的文件, ,也可以也可以替換原有的文件為自己寫(xiě)的替換原有的文件為自己寫(xiě)的findbugs.xmlfindbugs.xml。21findbugs.xml和messages.xml兩個(gè)文件22findbugs.xml的編寫(xiě)v 對(duì)于每一個(gè)新的檢測(cè)器對(duì)于每一個(gè)新的檢測(cè)器, ,在在 FindBugs.xml FindBugs.xml 文件中增加一文件中增加一個(gè)個(gè) Detector Detector 元素和一個(gè)元素和一個(gè) BugPattern BugPattern 元素。元素。 Detector Detector

19、元素指定用于實(shí)現(xiàn)檢測(cè)器的類以及它是快速還是慢速檢測(cè)元素指定用于實(shí)現(xiàn)檢測(cè)器的類以及它是快速還是慢速檢測(cè)器。器。speed speed 屬性的可能值有屬性的可能值有 slow slow、moderate moderate 和和 fast fast。v BugPattern BugPattern 元素指定三個(gè)屬性。元素指定三個(gè)屬性。 abbrev abbrev 屬性定義檢測(cè)屬性定義檢測(cè)器的縮寫(xiě)。縮寫(xiě)用于標(biāo)識(shí)用命令行客戶運(yùn)行時(shí)檢測(cè)到的缺器的縮寫(xiě)??s寫(xiě)用于標(biāo)識(shí)用命令行客戶運(yùn)行時(shí)檢測(cè)到的缺陷。可以用同一個(gè)縮寫(xiě)將幾個(gè)相關(guān)的檢測(cè)器組織到一起。陷??梢杂猛粋€(gè)縮寫(xiě)將幾個(gè)相關(guān)的檢測(cè)器組織到一起。. .23vtyp

20、e 屬性是惟一標(biāo)識(shí)符,有兩個(gè)用途。在使用 Ant 版本或者命令行版本的 FindBugs 且輸出格式設(shè)置為 XML 時(shí),用 type 屬性標(biāo)識(shí)問(wèn)題。 type 屬性也是在檢測(cè)器的 Java 代碼中指定的,用以創(chuàng)建缺陷的正確類型。 category 屬性是枚舉類型。它是以下類型中的一種:CORRECTNESS :一般正確性問(wèn)題MT_CORRECTNESS :多線程正確性問(wèn)題MALICIOUS_CODE :如果公開(kāi)給惡意代碼,有可能成為攻擊點(diǎn)PERFORMANCE :性能問(wèn)題24messages.xml的編寫(xiě)25vmessages.xml 文件由三個(gè)元素組成: Detector 、 BugPatt

21、ern 和 BugCode vDetails 元素包含檢測(cè)器的簡(jiǎn)單 HTML 描述,因而應(yīng)當(dāng)包含在 CDATA 部分中.vBugPattern 元素類似于在 FindBugs.xml 中定義的 BugPattern 元素。需要 type 屬性,并且它應(yīng)當(dāng)匹配在 FindBugs.xml 和在檢測(cè)器的 Java 代碼中使用的相同惟一標(biāo)識(shí)符。v BugCode 元素必須用元素的屬性指定這個(gè)縮寫(xiě)26v運(yùn)行 放置好這三個(gè)文件,重啟Eclipse,在需要檢測(cè)的文件上單擊右鍵,選擇findbugs即可從檢測(cè)出帶有system.out或system.error語(yǔ)句。27FindBugs生成html形式的報(bào)告整理v之前用的是findbugs的eclipse插件,但是在導(dǎo)出報(bào)告的時(shí)候是xml形式的,很不易閱讀,下來(lái)講下用findbugs來(lái)導(dǎo)出html的報(bào)告。v準(zhǔn)備工作 下載到ant和findbugs。并且配置好它們的環(huán)境變量2829編寫(xiě)ant腳本(build.xml)30build.xml部分屬性參數(shù)說(shuō)明vclass 嵌套元素指定要分析的類。這個(gè)元素必須指定一個(gè)location屬性

溫馨提示

  • 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)論