2010-01-14 47 views
0

我正在研究一個項目,該項目需要我找到Apache ant(版本1.1至1.6)的圈複雜度。我被要求爲此目的使用jar文件。我使用了幾個工具(Xdepend試用版和Cyvis)來查看結果。然後我試着用Ant Ver1.6的源代碼驗證結果。爲了分析源,我使用了一個Netbeans插件,並且還經常發現了一些方法的CC。使用jar文件的循環複雜度

我發現,在很多情況下,來自jar文件的CC幾乎相同,但在一些情況下存在很大差異。我檢查了一個這樣的方法,我發現它包含了很少的try和catch塊。我的問題是:

  1. 是否java編譯器進行優化(如說循環展開),這可能會主要影響CC值?建議使用jar文件進行這樣的分析嗎?
  2. try和catch塊是否存在某些特定問題,在這種情況下,我可能會考慮其他分析方法?
  3. 這樣的分析有沒有更好的(更準確的)工具?

請分享您在這個主題上的經驗。提前致謝。

乾杯

+1

我建議你使用源文件並運行http://www.kclee.de/clemens/java/javancss/在他們 。它更直接。 – 2010-01-14 09:02:36

回答

1

這是不是一個完整的回答你的問題..

Java編譯器是將開展像任何其他編譯好很多的優化。其中一些將包括循環不變代碼運動,通用子表達式消除,強度減少和變量分配。

但是Java hotspot 是Java字節碼執行引擎,這將動態編譯字節代碼在運行時optomise它。

所以有很多因素會扭曲SRC代碼CC的字節碼CC但這並不意味着提高了CC是不是有價值的工作中,SRC代碼CC評估是至關重要的可維護乾淨的代碼。

2

的複雜性措施的目的一樣圈是關於測量,因爲它影響了程序員的理解能力基本代碼程序的結構;例如保持它。由於程序員在源代碼級別查看代碼,所以源代碼複雜度的測量是非常重要的。

如果您是通過分析字節碼文件獲取措施是從正規的源代碼指標不同,他們是不值錢的,你應該放棄這個想法。編譯器可以重組代碼以使其看起來更簡單;例如,通過展開循環;另一方面,編譯器可能需要生成複雜的字節碼看序列進行簡單的語言結構,因爲在什麼字節碼可以表達限制的根本。)