圈複雜度(Cyclomatic Complexity)計算工具

圈複雜度(Cyclomatic Complexity)計算工具

http://terryyin.blogbus.com/logs/108494005.html

日期:2011-03-11 | 分類:Software Design | Tags:

版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
http://terryyin.blogbus.com/logs/108494005.html

 

 

圈複雜度(Cyclomatic Complexity)是很常用的一種度量軟件代碼複雜程度的標準。這裏所指的“代碼複雜程度”並非軟件內在業務邏輯的複雜程度,而是指代碼的實現方式的複雜程度。說起來有點繞是麼?打個比方就是嘴笨的人可以把簡單的事情說得很複雜。雖然“內在業務邏輯”與“實現方式”有緊密的聯繫,有很多研究統計指出,圈複雜度高的代碼中錯誤的可能性更大,維護的成本更高。

關於圈複雜度的具體介紹可參見 http://en.wikipedia.org/wiki/Cyclomatic_complexity,網上也有很多中文資料。

非常非常簡單的說它就是統計一個函數有多少個分支(if, while, for,等等),沒有的話複雜度爲一,每增加一個分支複雜度加一。讓很多人不解的是,無論這些分支是並列還是嵌套,統統都是加一。

從一個非常非常簡單的角度來理解,一個函數的圈複雜度就相當於至少需要多少個測試用例才能對這個函數做到全路徑覆蓋(給你兩分鐘想一想)。

我自己用Python寫了一個開源的小工具來計算C/C++的圈複雜度,叫做hfcca,用起來非常方便。它有下面這些特點:
1. 不需要提供頭文件信息,不像很多工具(如cppncss,頭文件信息不全就很難正常工作)
2. 只有一個hfcca.py文件,而且命令簡單。只要python hfcca.py一個命令就能分析當前目錄下及其子目錄中所有的c/c++文件。
3. 它還支持Nokia和NSN內部的一種叫做TNSDL的語言。如果你希望它支持更多的語言,可以告訴我。
4. 可以輸出和cppncss相同格式的xml文件,這樣就可以在如Hudson上面顯示複雜度統計結果和圖表了。

你可以在這個地方下載最新的hfcca:
http://code.google.com/p/headerfile-free-cyclomatic-complexity-analyzer/

如果你用了這個軟件之後有什麼建議可以在issues當中提給我。
 

Hfcca的來歷
“hfcca”是header-file free cyclomatic complexity analyzer的縮寫,就是“不用頭文件的圈複雜度統計工具”。

有一個週五,有人問我我們公司“官方”的複雜度工具爲什麼用不了。原來,我們公司有兩種工具,一種是買來的商業軟件,有license的,很多人一起用license就不夠了。另一種是cppncss,一個開源工具。但是因爲需要提供頭文件目錄的信息,cppncss在我們的環境裏很難用起來。於是我不禁感覺到很尷尬。至於我爲什麼尷尬,倒不是因爲我負責這個東西,我是覺得這問題這麼多年了,只有人抱怨,沒人解決問題,爲大家尷尬。於是我決定自已寫一個。沒想到問題比我想得要簡單一些,一個週末就基本搞定了大部分功能。果然是求人不如求己呀!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章