循环复杂度指标

时间:2013-04-08 09:12:26

标签: java

我想知道使用LOC和圈复杂度指标是否可以得出任何有关下面两个代码的相对复杂性的结论?有点像我一样。

代码A

 int i = 1;
    while(i < = 5){

    playACard(i);

    if (playerHasWon(i))
    break;
    i++
    }

代码B

int j = 0;

int i = 2;

j = i;
j = j + i;

j++;
System.out.println (j);

System.out.println

2 个答案:

答案 0 :(得分:2)

使用高级LOC工具(即我的眼睛和手指:-))我计算两段代码的LOC计数是相同的......忽略空行。

对于周期性复杂性计数,您需要可解析的源代码...在某种编程语言中...使工具可用。我按照@d'larf'cop的答案进行手算,并解释他是如何得出的。


但说实话,像这样的代码的LOC和Cyclometric Complexity测量没有用。这两个样本做了完全不同的事情,所以它实际上没什么区别,这更加“复杂”。

在我看来,CC对于在代码库的首次审核中识别过于复杂的代码非常有用。一旦你确定了问题 areas ,有经验的程序员就能更好地判断真正的复杂性(即使代码难以理解的东西)......以及这种复杂性是否必要/手头的问题固有的。

答案 1 :(得分:1)

代码B的圈复杂度为1。 代码中只有 1个可能的路径。

Cyclomatic复杂度衡量可能的执行路径的数量(这在软件系统的测试和大小估计中很有用。) - 但大多数人会说它对后者不准确或有用。

代码A的圈复杂度为4.由于代码可以进入循环或不进入循环(与离开它相同)(2条可能的路径)并且有一个'if语句'再次将可能性乘以2。

干杯。

需要更多解释吗?