2012-02-01 75 views
20

我处于圈复杂度(CC)的学习阶段。圈旋复杂度的计算

  • E =数量:对于实践中,我计算圈的2例复杂性,并要确认是否我的答案是正确的或不...

    参考维基百科,CC被M = E − N + 2P给地方该图的边的

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

的数量请帮助。

Example 1

在此,E = 8,N = 9,P = 1。因此M = 8 - 9 +(2×1)= 1

实施例2:

Example 2

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

因此,对于这两个例子CC是1.请让我知道,如果我的计算是可靠的是否或不。

+5

我投票,因为它是基于工作流程的数学关闭这一问题作为题外话节点的数量。这属于软件工程,而不是堆栈溢出。 – TylerH 2017-01-25 17:32:37

回答

21

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

在例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个内部区域(边缘)和一个周围区域,给出了3的CC。与第二个例子相同。 (这种方法要求边缘显然不相互交叉。)

+1

+1,不知道背景划分的方法:) – Kos 2012-02-01 15:19:00

+0

哦,是的...我错误地注意到了错误的值......感谢您指出并帮助我解答。还有+1,用于快捷方式...我不知道。 :) – 2012-02-01 15:23:15

+0

另一个**为**快捷键** - 作品像一个魅力。 – joshuamabina 2016-07-26 10:44:09

7

此外,如果这有帮助,它有条件的(如果,同时)for语句数量+1。所以在上面的例子中,有两个条件语句。所以2 + 1 = 3。在这种情况下,环的复杂性是3

+1

你有这个启发式的参考吗? – Apalala 2016-09-13 00:20:23

+1

@Apalala这适用于任何只有*一个条目*和仅*一个退出*点的控制流程图。 Thomas J. MacCabe表明了这一点。请参阅[这里](https://dx.doi.org/10.1109%2Ftse.1976.233837) – Quirk 2017-05-03 19:13:33

1

只计算封闭区域的数量并为其添加1。

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

1

P =连接的组件

换句话说数量

P =所述有出口点

Source