圈复杂度(Cyclomatic Complexity)计算工具
日期:2011-03-11 | 分类: |
:转载时请以超链接形式标明文章原始出处和作者信息及
圈复杂度(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: 如果你用了这个软件之后有什么建议可以在issues当中提给我。
Hfcca的来历
“hfcca”是header-file free cyclomatic complexity analyzer的缩写,就是“不用头文件的圈复杂度统计工具”。