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