可以用定制規則擴展 CheckStyle,所以也可以容易地實施編碼規則。而且,它是自動執行的!
圖 1 顯示了使用 Ant 生成的 CheckStyle 報告的一個示例,這是 清單 1 中所演示的 xslt
任務:
圖 1. CheckStyle HTML 報告

![]() |
|
面向對象編程的一個主要目的是通過創建可以適應不同上下文的可重用對象來促進重用。但是,通常使用的是 “復制-粘貼” 編程,并將它偽裝成 “重用”。有時,出現這種情況是因為開發人員不知道有可重用的組件,而其他時候,則是因為提供了“快速修復”。所以,如果需要進行修改,則必須將更改應用到所有 副本和變體中(當然,如果沒有工具很難完成)。這種手工方式帶來了維護困難并很容易導致遺漏,甚至會帶來缺陷。
CPD 是流行的開源靜態分析工具 PMD 的一部分,它報告代碼基中重復行的數量。此外,CPD 的標志閾值是可配置的,這意味著可以修改 CPD 建議的重復行數。例如,如果將閾值設置成 100 個標志,CPD 就會在至少 重復了 100 個標志的時候顯示一個實例。不過請記住,源代碼總是會包含一些重復部分;CPD 只是為團隊提供了一種調查值得考慮的代碼重復 領域的手段,在這個領域內,可以采取糾正措施,例如有目的的重構。
清單 3 演示將 CPD 用于 Ant 的實際使用。CPD 任務需要的第一個選項是 minimumTokenCount
屬性,該屬性用于指定要比較的標志的數量(最小值是一個標志)。另外,可以設置 CPD 忽略某些代碼選項,例如標識符和標量。在這個示例中,Ant fileset
類型指定了 CPD 文件應該分析哪些文件,以及應該忽略哪些文件。
清單 3. 將 CPD 用于 Ant
<taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask" classpathref="pmd.classpath" /> <cpd minimumTokenCount="100" format="xml" language="java" ignoreIdentifiers="true" ignoreLiterals="true" outputFile="${basedir}/cpd.xml"> <fileset dir="${src.dir}"> <include name="**/*.java" /> <include name="**/*.jsp" /> <include name="**/*.xml" /> <exclude name="**/*Test*.java" /> </fileset> </cpd> |
如圖 2 所示,cpd.xml 是用清單 3 中的 outputFile
屬性產生的輸出。以后我還將向 CPD 添加 XSL,以生成 HTML 報告。
圖 2. 顯示代碼重復違規的 CPD XML 輸出

除了最明顯的復制-粘貼違規之外,在所有地方手工查找重復代碼也非常具有挑戰性。但是,使用諸如 CPD 之類的工具,就可以迅速找出重復代碼,然后對此進行改進。
![]() |
|
許多研究已經證實,隨著方法中路徑數量的增加,理解和維護同一方法的難度也隨之增加。結果,代碼越難以理解和維護,就越容易出現缺陷。
JavaNCSS 是一個免費工具,提供了不同的代碼測量,例如非注釋性源代碼語句(或代碼行)的數量、所有分析過的方法的圈復雜度量值(cyclomatic complexity number)。清單 4 演示了 JavaNCSS 的使用,可以看到,它不是很難使用。只要將 JavaNCSS 指向一個包含源代碼的目錄,讓它自己處理就行了!
清單 4. 將 JavaNCSS 用于 Ant
<path id="javancss.classpath"> <fileset dir="${lib.dir}" /></path><taskdef name="javancss" classpathref="javancss.classpath" classname="javancss.JavancssAntTask"></taskdef><javancss srcdir="${src.dir}" generateReport="true" outputfile="${javancss.report.dir}/javancss_metrics.xml" format="xml"/> |
像多數軟件檢查器一樣,這里生成了一個 XML 文件,可以通過 XSLT 很容易地將它轉換成一個 HTML 報告,就像圖 3 中所做的那樣:
圖 3. JavaNCSS HTML 報告

理解應用程序代碼復雜性可沒有那么容易。實際上,在某些情況下,復雜性的值可能會令人誤解。例如,有些工具為 switch
語句提供較高的值。但是我發現,使用 JavaNCSS 這樣的工具,有助于降低高復雜性的領域,最終提高代碼的可理解性和可維護性。
文章來源于領測軟件測試網 http://www.kjueaiud.com/