Mar*_*iße 2 metrics static-analysis cyclomatic-complexity code-metrics
我对几个项目运行了静态代码分析,并从生成的报告中获取了这些项目中每个文件的循环复杂度。现在我想计算整个项目的平均圈复杂度。
我怎样才能最好地实现这一目标?
对我来说,仅将每个文件的循环复杂度值相加然后除以文件数似乎是错误的,因为短头文件与很长的文件具有相同的影响。另外,我想避免通过代码行来衡量文件的重要性。
还有其他方法吗?例如,用中位数?
循环复杂度实际上衡量源代码中决策的数量。(它实际上比一般情况更复杂,但在结构化代码的情况下会退化)。它通常被计算为#decisions+1,即使在更复杂的情况下也是如此(是的,这是一个近似值)。
因此,如果您有两个 CC 测量值 x 和 y,
CC(x)=#decisions(x)+1,
Run Code Online (Sandbox Code Playgroud)
和
CC(y)=#decisions(y)+1,
Run Code Online (Sandbox Code Playgroud)
总数
CC(x with y) = #decisions(x)+#decisions(y)+1=CC(x)+CC(y)-1
Run Code Online (Sandbox Code Playgroud)
因此,如果您有 N 组 CC 数据,则总体 CC 的一个很好的近似值是:
[Sum i=1..n: CC(i)]-(N-1)
Run Code Online (Sandbox Code Playgroud)
如果您想要系统中每个文件的平均值,请将上面的值除以 N。