【发布时间】:2016-12-27 14:05:39
【问题描述】:
假设我们有这样的代码:
switch(y)
{
case 1: case 2: case 3:
function();
break;
case 4: case 5: case 6:
function_2();
break;
}
我们可以在这里得到 CC 值为 6+1 吗?为什么要添加 1 的值?如果CC值为7,那是独立路径的数量吗?
如果上面考虑了失败的情况怎么办?由于可能只有两条唯一路径,2 +1 =3
以上哪一个是正确的,还是两者都正确?
【问题讨论】:
-
有三个(不同的)路径通过这个开关,而不是两个。
-
第 7 种情况是
y既不是 1、2、3、4、5 也不是 6。 -
要尝试回答这个问题,我想说 CC 必须根据代码在逻辑上执行的操作来定义,而不是处理器实际执行的操作(我们甚至不知道它会做什么大多数时候)。我们不关心
2是否会访问更少的switch案例,因为我们肯定知道最终它将达到与3相同的状态。我非常喜欢在这里说 CC 是 3 -
@Raphaël 圈复杂度与运行时比较或评估无关。这是一个可以静态计算的指标(在编译时)
-
是的,3 似乎是正确的。但是如果给定的 sn-p 通过类似 RSM 的工具运行,它会输出 7 作为 CC 值。也许这两个值都是正确的?
标签: java metrics code-metrics cyclomatic-complexity