环形复杂度的计算

时间:2012-02-01 14:56:27

标签: cyclomatic-complexity

我正处于圈复杂度(CC)的学习阶段。对于练习,我正在计算2个例子的圈复杂度,并想确认我的答案是否正确......

参考维基百科,CC由M = E − N + 2P提供,其中:

  • E =图表边缘的数量
  • N =图表的节点数
  • P =连接组件的数量

请帮忙。

Example 1

这里,E = 8,N = 9,P = 1.因此M = 8 - 9 +(2x1)= 1.

示例2:

Example 2

这里E = 11,N = 10且P = 1.因此M = 10 - 11 +(2x1)= 1.

因此,对于两个例子,CC都是1.如果我的计算是正确的,请告诉我。

4 个答案:

答案 0 :(得分:22)

您需要更加谨慎地将值正确地插入到公式中。

在示例1中,您说

  

这里,E = 8,N = 9且P = 1

但实际上,它是反过来的:9个边缘(= E),8个节点(= N),所以你的CC为3。

在示例2中,您具有正确的值:E = 11,N = 10,P = 1。但是你在公式中以错误的顺序插入它们;它实际应该是11 - 10 + (2x1) = 3

快捷方式:如果您有图表图片,则可以非常轻松地确定圈复杂度。只计算背景被边缘划分的区域数量。在第一个示例中,您有2个内部区域(边缘为边界)和一个周围区域,CC为3.与第二个示例相同。 (显然,这种方法要求边缘不会相互交叉。)

答案 1 :(得分:8)

如果这有帮助,那么条件(If,while,for)语句的数量为+1。所以在上面的例子中,有2个条件语句。所以2 + 1 = 3。在这种情况下,循环复杂性是3

答案 2 :(得分:1)

只需计算封闭区域的数量并添加1即可。

在上面的示例中,闭区域数= 2,因此CC = 2 + 1 = 3

答案 3 :(得分:1)

P =连接组件的数量

其他词语

P =具有退出点的节点数

Source