圈複雜度(Cyclomatic Complexity)計算工具
http://terryyin.blogbus.com/logs/108494005.html
日期:2011-03-11 | 分類:Software Design |
版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
http://terryyin.blogbus.com/logs/108494005.html
圈複雜度(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的縮寫,就是“不用頭文件的圈複雜度統計工具”。