2)Checkstyle提供了高可配置性,以便適用于各種代碼規范,所以除了使用它提供的幾種常見標準之外,你也可以定制自己的標準。
3)Checkstyle提供了支持大多數常見IDE的插件,大部分插件中就含有最新的Checkstyle,就不用費心再部署一份了。
4)Checkstyle可以檢查代碼的很多方面,從傳統觀點看,它主要是用來檢查代碼層面的,自從第三版以后,它的內部架構作了重大改變,很多其它意圖的檢測加了進來,現在Checkstyle可以檢查像類設計的問題,重復代碼,如鎖的雙重檢查的bug模式。
3.CheckStyle的主要流程是:
1)對Java文件進行詞法語法分析,生成語法樹。
2)載入配置文件(checkstyle-metadata.xml以及自定義的配置文件)register check事件。
3)按照深度優先遍歷對語法樹進行解析,按照注冊的事件,在到達某些節點( AST ) 時進行style檢查(AST,A child-Sibling Tree,是語法樹中的某個節點,其類型在TokenTypes類中定義。)
4)我們所說的自定義Style的檢查,就是在第二步設定的。
這里牽涉到一個叫 com.puppycrawl.tools.checkstyle.api.Check 的類,我們通常需要重載其中的兩個函數: public int[] getDefaultTokens()和public void visitToken(DetailAST ast). 這兩個函數的含義為,在遍歷語法樹的過程中,每當到達getDefaultTokens函數所返回的AST類型,程序就進入visitToken進行具體的檢查和分析,即,真正的分析檢查過程是在visitToken中實現的。
Hammurapi
1.定義: Hammurapi它是一個開源的代碼審查/評審(review)工具。它可以幫助改進Java代碼的質量。它可以基于一套設計規范來分析代碼庫。當它碰到違反規范的地方,會在報告中標識。就像Checkstyle一樣,它與Ant無縫集成并且由基于XML配置文件來驅動。
2.特點:
1)Hammurapi是用來強制代碼設計規范的。
2)Hammurapi是一個遵循設計的工具,提供了自動而且一致的方式來實現設計規范,因此使代碼評審更加有效而輕松。
3)Hammurapi如何工作:
Hammurapi這樣的代碼分析工具都帶有語言分析器。語言分析器是一種輸入語言代碼并輸出抽象語法樹的工具。這個樹上的節點代表語言標識。例如,考慮一下簡單的算術表達式:3+4. 語言分析器會解析他成為一個如圖5所示的語法樹。在這個樹中,節點+代表操作符標識。節點3和4是操作數標識Hammurapi使用ANTLR(另一個語言識別工具)作為語言分析器。然而ANTLR API是相當底層的。為改善可用性,Hammurapi使用另一個API,基于ANTLR 的JSEL(Java源程序工程類庫),來訪問抽象語法樹。 一旦樹構建完成,一種樹遍歷算法就被用來訪問樹中每一個節點。每次訪問到一個節點,一種回調機制(Visitor模式)被用來提示相應的檢查器。在這些回調方法中,檢查器收集相關的信息來確定是否有違反規范的地方存在。
Lint4j
1.定義:Lint4J是一個針對Java的源代碼分析工具,它可以對Java源碼和字節碼進行靜態分析,判斷其中是否存在死鎖、性能問題或者伸縮性問題。它可以集成到任何IDE種或構建系統
2.特點:
1)檢測代碼語法規則
2)潛在的bug
3)檢測編碼模式對代碼可讀性及大小的影響
4)檢測是否違反EJB規范
Sonar
1.定義:代碼質量管理工具Sonar提供了設計與架構度量。Sonar 2.0引入了針對Java應用的設計分析、架構與面向對象的度量,Sonar 2.1可以檢測到未使用的方法以及對不建議使用方法的調用。是一個集成了CheckStyle,PMD,Findbugs的代碼校驗規則 ,重復代碼發現,代碼測試覆蓋率, 代碼注釋率,及所有的檢測率變化追蹤的完美代碼質量檢查工具。它包含了代碼質量檢測的七個方面
2.特點:
1)代碼覆蓋:通過單元測試,將會顯示哪行代碼被選中。
2)改善編碼規則。
3)搜尋編碼規則:按照名字,插件,激活級別和類別進行查詢。
4)項目搜尋:按照項目的名字進行查詢。
5)對比數據:比較同一張表中的任何測量的趨勢。
6)單元測試
3.Sonar2.1:
Sonar還基于Squid引入了一個全新的規則引擎、Sonar解析器既可以處理源代碼,也可以處理字節碼,解析器帶有內建的規則,可以檢測未使用的私有與保護方法以及客戶端對不建議使用的方法的調用。Squid通過分析應用源代碼、Java API和外部程序庫的字節碼來決定哪些方法、類和屬性是不建議使用的。
原文轉自:http://www.uml.org.cn/Test/201208245.asp