【问题标题】:Calculation of Cyclomatic Complexity [closed]计算圈复杂度
【发布时间】:2012-02-01 14:56:27
【问题描述】:

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

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

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

请帮忙。

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

示例 2:

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

因此对于这两个例子,CC 都是 1。请让我知道我的计算是否正确。

【问题讨论】:

  • 我投票结束这个问题,因为它是基于工作流的数学。这属于软件工程,而不是 Stack Overflow。

标签: cyclomatic-complexity


【解决方案1】:

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

在示例 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,不知道背景分割方法:)
  • 哦,是的...我错误地记下了错误的值...感谢您指出并帮助我解答。另外+1,对于快捷方式...我不知道。 :)
  • 快捷方式的另一个 +1 - 就像一个魅力。
  • 为什么在第一个例子中将两个箭头相交的点计算为一个节点是正确的,但在第二个例子中却不正确?
  • @XtianGIS 这只是表面上的区别,你可以做任何一个。它不会改变计算结果。
【解决方案2】:

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

【讨论】:

  • 你有这个启发式的参考吗?
  • @Apalala 这适用于任何只有 一个入口 和只有 一个出口 点的控制流图。它由 Thomas J. MacCabe 展示。参考here
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    P = 连通分量的数量

    换句话说

    P = 具有出口点的节点数

    Source

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2018-02-22
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多