前言
在Java面向對象課程的學習過程中,我們需要使用度量工具來分析自己程序的代碼結構。此類的度量工具有許多,或以插件形式存在於各個IDE中,或以.jar包的形式供用戶使用。在這里,筆者向大家簡單的介紹一款免費的代碼度量分析工具:Designite,對官網上的部分內容進行漢化搬運,並對一些度量條目做出解釋。
一、Designite的下載與運行
Designite是一款程序設計的質量評估工具。這款工具可以用於分析C#和Java的代碼,並且識別其中存在的質量問題。Designite會檢測程序的架構(architecture),設計(design)和代碼異味(code smell)並且給出詳細的度量分析(metrics analysis)。
Designite官網:http://www.designite-tools.com/
Designite for Java:http://www.designite-tools.com/DesigniteJava/
進入官網,下載會得到一個jar包,默認名為DesigniteJava.jar。將其放在方便使用的位置,打開命令行窗口,輸入以下代碼即可運行:
java -jar DesigniteJava.jar -i <源文件路徑> -o <分析數據輸出路徑>
輸出之后,會得到以下五個文件。
designCodeSmells和implementationCodeSmells中存儲着在設計和執行階段檢測到的代碼異味(code smell)。這標志着你的程序中存在一些設計上的不規范,如過多幻數(Magic Number),模塊之間的循環依賴(Cyclic Dependent)等。
methodMetrics和typeMetrics中存儲着類和方法的一些度量指標(metrics),這些度量指標有助於我們分析程序的整體結構,並且找出問題所在。
二、度量指標介紹
以下內容翻譯自官網,簡單加上了一些個人理解。
-
**LOC **(Lines Of Code – at method and class granularity)
代碼行數,可以看到你的方法和類寫了多少行。
-
CC (Cyclomatic Complexity – Method)
圈復雜度,用於衡量一個模塊判定結構的復雜程度,圈復雜度越大說明程序代碼質量低,且難以測試和維護。
-
PC (Parameter Count – Method)
方法中傳入的參數個數。
-
NOF (Number of Fields – Class)
類的字段個數。
-
NOPF (Number of Public Fields – Class)
類的公共(public)型字段個數。
-
**NOM **(Number of Methods – Class)
類的方法個數。
-
NOPM (Number of Public Methods – Class)
類的(public)型方法個數。
-
WMC (Weighted Methods per Class – Class)
類的加權方法個數。具體加權算法怎么算,筆者不太清楚。
-
**NC **(Number of Children – Class)
類的子類個數。
-
**DIT **(Depth of Inheritance Tree – Class)
類所在的繼承樹深度。
-
**LCOM **(Lack of Cohesion in Methods – Class)
方法的內聚缺乏度。值越大,說明類內聚合度越小。
-
FANIN (Fan-in – Class)
類的扇入。扇入表示調用該模塊的上級模塊的個數,扇入越大,表示該模塊的復用性好。
-
**FANOUT **(Fan-out – Class)
類的扇出。扇出表示該模塊直接調用的下級模塊的個數,扇出過大表明模塊復雜度高,但扇出過小也不好。
設計要求一般是高內聚低耦合,即LCOM值要小,FANIN值要大,FANOUT值要合理。