多个文件的平均Cyclomatic Complexity

时间:2015-03-10 10:36:37

标签: static-analysis metrics code-metrics cyclomatic-complexity

我对几个项目进行了静态代码分析,并根据生成的报告为这些项目中的每个文件获得了Cyclomatic Complexity。 现在我想计算整个项目的平均Cyclomatic Complexity。

我如何才能最好地实现这一目标?

只是将每个文件的Cyclomatic Complexity值相加然后除以文件数似乎是错误的,因为短头文件与非常长的文件具有相同的影响。另外,我想避免通过代码行加权文件的重要性。

还有其他办法吗?例如,中位数?

3 个答案:

答案 0 :(得分:4)

实际上的循环复杂性衡量源代码中的决策数量。 (它实际上比一般情况下更复杂,但在结构化代码的情况下却衰弱了)。它通常被计算为#decision + 1,即使在更复杂的情况下(是的,这是一种近似)。

所以,如果你有两个CC测量,x和y,带

   CC(x)=#decisions(x)+1,

   CC(y)=#decisions(y)+1,

总数

   CC(x with y) = #decisions(x)+#decisions(y)+1=CC(x)+CC(y)-1

因此,如果您有N组CC数据,则整体CC的良好近似值为:

   [Sum i=1..n: CC(i)]-(N-1)

如果您想要系统中的每个文件的平均值,请将上面的值除以N。

答案 1 :(得分:0)

从你的问题来看,我会说你首先要确定你对平均CC的意图。

如果你想计算项目文件的平均CC,比如将它与另一个项目进行比较,那么从文件中添加CC并除以代码文件的数量是正确的做。但它没有比平均值更好的东西:它不代表单个文件级别的预期特征。所以当你说:

since a short header file would have the same impact as a very long file
这是错的。短头文件和非常长的文件具有相同的CC,并且使用平均CC来比较单个文件。

如果使用平均CC来比较项目之间的比较:从统计角度来看,软件指标确实偏离了分布,因此确实使用中位数可能更好。但它又一次在很大程度上取决于你对它的用法。

答案 2 :(得分:0)

正如你所说的那样,平均指标不是很有用,因为大量的简单函数可能会隐藏"一个非常复杂。所以,我更喜欢比较分布图。它提供了更多信息。

免责声明:我是Metrix ++的作者。请检查分发图的外观:http://metrixplusplus.sourceforge.net/workflow.html#workflow_view_summary_section