【问题标题】:Average Cyclomatic Complexity of multiple files多个文件的平均圈复杂度
【发布时间】:2015-05-11 18:10:23
【问题描述】:

我对几个项目进行了静态代码分析,并从生成的报告中获得了这些项目中每个文件的循环复杂度。 现在我想计算整个项目的平均圈复杂度。

我怎样才能最好地做到这一点?

将每个文件的圈复杂度值相加,然后除以文件数对我来说似乎是错误的,因为短头文件与非常长的文件具有相同的影响。另外,我想避免通过代码行来衡量文件的重要性。

还有其他方法吗?比如有中位数?

【问题讨论】:

  • 感谢编辑,这不是我的母语....

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


【解决方案1】:

圈复杂度实际上衡量的是源代码中的决策数量。 (它实际上比一般情况下更复杂,但在结构化代码的情况下会衰减)。它通常被计算为#decisions+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。

【讨论】:

  • 这似乎很合理。我会试试的。谢谢=)
【解决方案2】:

根据您的问题,我想说您首先需要定义您对平均 CC 的意图。

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

since a short header file would have the same impact as a very long file

这是错误的。短头文件和非常长的文件具有相同的 CC,您将使用平均 CC 来比较单个文件。

如果使用平均 CC 来比较项目之间的差异:从统计角度来看,软件指标的分布确实偏斜,因此使用中位数可能会更好,确实。但是,这在很大程度上取决于您对它的用途。

【讨论】:

    【解决方案3】:

    正如您所说,平均指标并不是很有帮助,因为大量简单的功能可能会“隐藏”一个非常复杂的功能。所以,我更喜欢比较分布图。内容更丰富。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多