java代碼缺陷自動分析工具之FindBugs介紹.doc

java代碼缺陷自動分析工具之FindBugs介紹.doc

ID:50826820

大?。?9.45 KB

頁數(shù):8頁

時間:2020-03-15

java代碼缺陷自動分析工具之FindBugs介紹.doc_第1頁
java代碼缺陷自動分析工具之FindBugs介紹.doc_第2頁
java代碼缺陷自動分析工具之FindBugs介紹.doc_第3頁
java代碼缺陷自動分析工具之FindBugs介紹.doc_第4頁
java代碼缺陷自動分析工具之FindBugs介紹.doc_第5頁
資源描述:

《java代碼缺陷自動分析工具之FindBugs介紹.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、java代碼缺陷自動分析工具之FindBugs介紹.txt逆風的方向,更適合飛翔。我不怕萬人阻擋,只怕自己投降。你發(fā)怒一分鐘,便失去60分鐘的幸福。忙碌是一種幸福,讓我們沒時間體會痛苦;奔波是一種快樂,讓我們真實地感受生活;疲憊是一種享受,讓我們無暇空虛。生活就像"呼吸""呼"是為出一口氣,"吸"是為爭一口氣。1FindBugs是什么?FindBugs是一個javabytecode靜態(tài)分析工具,它可以幫助java工程師提高代碼質(zhì)量以及排除隱含的缺陷。FindBugs檢查類或者JAR文件,將字節(jié)碼與一組缺陷模式進行對比以發(fā)

2、現(xiàn)可能的問題。有了靜態(tài)分析工具,就可以在不實際運行程序的情況對軟件進行分析。FindBugs不是通過分析類文件的形式或結(jié)構(gòu)來確定程序的意圖,而是通常使用Visitor模式進行分析。2FindBugs可以做什么?FindBugs提供了35個檢測器來檢測字節(jié)碼中可能的缺陷??梢宰龅氖虑橹饕校?.1找出hashequals不匹配找與equals()和hashCode()的實現(xiàn)相關(guān)的幾個問題。這兩個方法非常重要,因為幾乎所有基于集合的類---List、Map、Set等都調(diào)用它們。一般來說,這個檢測器尋找兩種不同類型的問題:①當

3、一個類重寫對象的equals()方法,但是沒有重寫它的hashCode方法,或者相反的情況時。②定義一個co-variant版本的equals()或compareTo()方法。例如,Bob類定義其equals()方法為布爾equals(Bob),它覆蓋了對象中定義的equals()方法。因為Java代碼在編譯時解析重載方法的方式,在運行時使用的幾乎總是在對象中定義的這個版本的方法,而不是在Bob中定義的那一個(除非顯式將equals()方法的參數(shù)強制轉(zhuǎn)換為Bob類型)。因此,當這個類的一個實例放入到類集合中的任何一個中時

4、,使用的是Object.equals()版本的方法,而不是在Bob中定義的版本。在這種情況下,Bob類應(yīng)當定義一個接受類型為Object的參數(shù)的equals()方法。2.2檢測:忽略方法返回值這個檢測器查找代碼中忽略了不應(yīng)該忽略的方法返回值的地方。這種情況的一個常見例子是在調(diào)用String方法時,例如:1StringaString="bob";2b.replace('b','p');3if(b.equals("pop"))這個錯誤很常見。在第2行,程序員認為他已經(jīng)用p替換了字符串中的所有b。確實是這樣,但是他忘記了字符串

5、是不可變的。所有這類方法都返回一個新字符串,而從來不會改變消息的接收者。2.3檢測:Null指針對null的解引用(dereference)和冗余比較這個檢測器查找兩類問題。它查找代碼路徑將會或者可能造成null指針異常的情況,它還查找對null的冗余比較的情況。例如,如果兩個比較值都為null,那么它們就是冗余的并可能表明代碼錯誤。FindBugs在可以確定一個值為null而另一個值不為null時,檢測類似的錯誤,例如:1Personperson=aMap.get("bob");2if(person!=null){3p

6、erson.updateAccessTime();4}5Stringname=person.getName();在這個例子中,如果第1行的Map不包括一個名為“bob”的人,那么在第5行詢問person的名字時就會出現(xiàn)null指針異常。因為FindBugs不知道m(xù)ap是否包含“bob”,所以它將第5行標記為可能null指針異常。2.4檢測:初始化之前讀取字段這個檢測器尋找在構(gòu)造函數(shù)中初始化之前被讀取的字段。這個錯誤通常是由使用字段名而不是構(gòu)造函數(shù)參數(shù)引起的,例如在構(gòu)造函數(shù)中讀取未初始化的字段:1publicclassTh

7、ing{2privateListactions;3publicThing(StringstartingActions){4StringTokenizertokenizer=newStringTokenizer(startingActions);5while(tokenizer.hasMoreTokens()){6actions.add(tokenizer.nextToken());7}8}9}在這個例子中,第6行將產(chǎn)生一個null指針異常,因為變量actions還沒有初始化。2.5命名檢查對標準Java命令規(guī)范的測試:變

8、量名稱不應(yīng)太短;方法名稱不應(yīng)過長;類名稱應(yīng)當以小寫字母開頭;方法和字段名應(yīng)當以小寫字母開頭,等等。2.6未使用的代碼檢查查找從未使用的私有字段和本地變量、執(zhí)行不到的語句、從未調(diào)用的私有方法,等等。2.7嵌套檢查例如:switch語句應(yīng)當有default塊,應(yīng)當避免深度嵌套的if塊,不應(yīng)當給參數(shù)重新賦值,不應(yīng)該對dou

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。