2010-05-27 16 views
1

在工作中,我們使用幾個工具來捕獲幾個度量(主要是圈複雜度和LCOM)。我們使用它們來獲取警告標誌並指導先發制人的重構工作。在提高代碼質量方面非常有益。實施圈複雜度和LCOM約束的註解

但是,這個過程並不依賴於構建過程。它是分開進行的。此外,我正在尋找可以固有的源代碼(而不是運行在其上的外部進程)。

是否有人知道一組註釋和可配置的註釋處理器從編譯器運行,如果代碼不符合閾值cyclomatic/LCOM指標,將會使構建失敗?

我想我可以從maven/ant運行ckjm,checkstyle和pmd,但是一些工作在源代碼上,而另一些工作在字節碼上。在編譯開始之前,有一個工作在源代碼上的整合工具將是很好的。

的另一件事是,如果有套的註解,可以推動這一點,會是不錯的(以允許將不可避免地需要拐角情況定製的。)

@LCOM3(Threshold=1.5) 
public class SomeDumbPojo {... buch of gets/sets...} 

// by default would be measured against a strict LCOM3 
public class ActualBizClass 
{ 
    @CYCLOMATIC_COMPLEXITY(Threshold=15) 
    public void someFatIrreducibleMethod(){...} 
} 

然後,當我們運行該工具,默認情況下應用嚴格(和可配置)度量標準閾值,除非那些用(希望記錄的和合法的)更寬鬆的閾值標註的工件。對於某些不能/不應該減少的方法,鬆散的圈複雜度是有意義的。對於普通的POJO無w/o行爲,LCOM需要放鬆......等等等等。

尋找和谷歌搜索我可能,我一直沒能找到任何東西(希望開源)。但我不妨在這裏問一下,以防萬一有人知道此類事情。

謝謝。

回答

3

在編譯開始之前有一個在源代碼上工作的整合工具是很好的。

我不太清楚這是什麼意思的代碼是爲了靜態分析工作編譯成東西。所有這些工具都需要能夠將代碼編譯成字節碼或某種語法樹。

我建議保持簡單:如果任何有關Cyclomatic Complexity或其他指標的警告超過給定閾值,則配置PMD以使構建失敗。而不是用可允許的複雜性來註釋該方法(如何得出一個可接受的值?如何防止某人意外地將複雜性從12增加到15,以至於掀起註釋),註釋它以完全抑制警告

@SuppressWarnings("PMD.CyclomaticComplexity") 
public void someFatIrreducibleMethod() { ... } 

然後,您可以定期搜索您的代碼庫,找出可能想要刪除並重構的警告抑制方法。

或者,PMD支持以某種語法在代碼中留下注釋,以標記誰在審覈警告以及何時提供某種可跟蹤性。

+0

我的不好,通過「編譯」我的意思是javac開始吐出字節碼的步驟。我們在工作中使用專有工具來掃描Java源代碼並從中派生指標(不需要編譯),但該工具不適合使其成爲構建過程的一部分。至於使用註釋來添加給定閾值的想法,這或多或少是過程的產物。如果一個類有一個圓形複雜度超過10的方法,構建會被中止,除了有文檔記錄的案例被呈現,審查和接受(並且因此註釋以便構建繼續進行。) – 2010-05-28 02:52:11

1

SD Java Metrics工具計算大多數基本指標(不是LCOM但肯定是Cyclomatic複雜性),並從命令行運行。

它生成一個XML輸出文件,其中包含關於方法的詳細度量標準以及層次結構(類,包,子系統)上方的彙總摘要。使用XLST(或awk或perl或...)提取完整摘要或個別方法所需的度量標準並非常容易,並根據您的閾值進行檢查。

+0

有趣!非常感謝你! – 2010-06-06 19:41:53