如果组合条件,则圈复杂度

时间:2018-06-20 15:18:05

标签: java c# c visual-studio static-code-analysis

我想计算以下代码的圈复杂度。

    int test(int a, int b)
    {
          int result = 0;
          if (a == 0 && b == 0)
              result = -1;
          else
              result = a * b;

          return result;
    }

Mathwork的Polyspace工具计算出的值为2。 Eclipse的Visual Studio和Metrics插件显示3。哪个正确?

2 个答案:

答案 0 :(得分:2)

  

循环复杂度   是一种软件指标,可对   程序的逻辑复杂性。在基础路径测试中使用时   方法,为圈复杂度计算的值定义了独立的   程序基础集中的悬垂路径,为我们提供了   确保所有陈述均已通过的测试次数   至少执行一次。

一个 独立路径 是程序中引入至少一个的任何路径 新的一组处理语句或新条件。

您的代码中只有2条独立的路径,一条通过if分支,一条通过else分支。

答案 1 :(得分:2)

您有3条路径通过该程序,因为“ &&”是快捷方式。 3个路径/测试是:

    a=1 and b=7 (actually anything)  which short cuts and returns a*b or 7
    a=0 and b=7  which goes to else and returns a*b or 0
    a=0 and b=0  which goes to then and returns -1'

在第一个条件下未评估b的事实可能很重要。