靜態檢查:靜態測試包括代碼檢查、靜態結構分析、代碼質量度量等。它可以由人工進行,充分發揮人的邏輯思維優勢,也可以借助軟件工具自動進行。代碼檢查代碼檢查包括代碼走查、桌面檢查、代碼審查等,主要檢查代碼和設計的一致性, 代碼對標準的遵循、可讀性,代碼的邏輯表達的正確性,代碼結構的合理性等方面;可以發現違背程序編寫標準的問題,程序中不安全、不明確和模糊的部分,找出程序中不可移植部分、違背程序編程風格的問題,包括變量檢查、命名和類型審查、程序邏輯審查、程序語法檢查和程序結構
檢查等內容。”??戳艘幌盗械撵o態代碼掃描或者叫靜態代碼分析工具后,總結對工具的看法:靜態代碼掃描工具,和編譯器的某些功能其實是很相似的,他們也需要詞法分析,語法分析,語意分析...但和編譯器不一樣的是他們可以自定義各種各樣的復雜的規則去對代碼進行分析。
靜態檢測工具:
PMD
1.PMD是一個代碼檢查工具,它用于分析 Java 源代碼,找出潛在的 問題:
1)潛在的bug:空的try/catch/finally/switch語句
2)未使用的代碼:未使用的局部變量、參數、私有方法等
3)可選的代碼:String/StringBuffer的濫用
4)復雜的表達式:不必須的if語句、可以使用while循環完成的for循環
5)重復的代碼:拷貝/粘貼代碼意味著拷貝/粘貼bugs
2.PMD特點:
1)與其他分析工具不同的是,PMD通過靜態分析獲知代碼錯誤。也就是說,在不運行Java程序的情況下報告錯誤。
2)PMD附帶了許多可以直接使用的規則,利用這些規則可以找出Java源程序的許多問題
3)用戶還可以自己定義規則,檢查Java代碼是否符合某些特定的編碼規范。
3.同時,PMD已經與JDeveloper、Eclipse、jEdit、JBuilder、BlueJ、CodeGuide、NetBeans、Sun JavaStudio Enterprise/Creator、IntelliJ IDEA、TextPad、Maven、Ant、Gel、JCreator以及Emacs集成在一起。
4.PMD規則是可以定制的: 可用的規則并不僅限于內置規則。您可以添加新規則:可以通過編寫 Java 代碼并重新編譯 PDM,或者更簡單些,編寫 XPath 表達式,它會針對每個 Java 類的抽象語法樹進行處理。
5.只使用PDM內置規則,PMD 也可以找到你代碼中的一些真正問題。某些問題可能很小,但有些問題則可能很大。PMD 不可能找到每個 bug,你仍然需要做單元測試和接受測試,在查找已知 bug 時,即使是 PMD 也無法替代一個好的調試器。但是,PMD 確實可以幫助你發現未知的問題。
FindBugs
1.FindBugs是一個開源的靜態代碼分析工具,基于LGPL開源協議,無需運行就能對代碼進行分析的工具。不注重style及format,注重檢測真正的bug及潛在的性能問題 ,尤其注意了盡可能抑制誤檢測(false positives)的發生。以bytecode(*.class、*.jar)為對象進行檢查。除了單獨動作,還可以用作Eclipse 的plug-in,以及嵌入Ant作為task之一 進行利用。
2.findbugs自帶檢測器的介紹: findbugs自帶60余種Bad practice,80余種Correntness,1種Internationalization,12種Malicious codevulnerability,27種Multithreaded correntness,23種Performance,43種Dodgy。
3.Findbugs的一些特點:
1)FindBugs主要著眼于尋找代碼中的缺陷,這就與其他類似工具有些區別了,直接操作類文件(class文件)而不是源代碼。
2)FindBugs可以通過命令行、各種構建工具(如Ant、Maven等)、獨立的Swing GUI或是以Eclipse和NetBeans IDE插件的方式來運行。
3)FindBugs輸出結果既可以是XML的,也可以是文本形式的。
4)開發者可以通過多種方式來使用FindBugs,最常見的是在新編寫模塊的代碼分析以及對現有代碼進行更大范圍的分析。
5)不注重style及format,注重檢測真正的bug及潛在的性能問題,尤其注意了盡可能抑制誤檢測(false positives)的發生。
4.FindBugs可檢測的bug pattern舉例:
檢測java programing中容易陷入的bug pattern,equals() 實現時的一般規約違反Null pointer的參照 ,Method的返回值的check遺漏 ,初始化前field的訪問,Multi-thread的正確性, 同期化處理的矛盾, 無條件的wait(), Code的脆弱性 ,可以變更的靜態object ,內部數列參照的return等
Checkstyle
1.定義: Checkstyle是一款檢查Java程序源代碼樣式的工具。
2.特點:
1)它可以有效的幫助我們檢視代碼以便更好的遵循代碼編寫標準,特別適用于小組開發時彼此間的樣式規范和統一。
原文轉自:http://www.uml.org.cn/Test/201208245.asp