Visual Studio 中的圈复杂度

Pep*_*epo 6 c# cyclomatic-complexity code-metrics visual-studio

我使用 Visual Studio Code Metrics 做了一些测试。由于我可以计算圈复杂度,因此每个if, while, for- 运算符都会将复杂度增加 1。我有下一个简单的方法:

static bool ContainsNegative(int a, int b, int c, int d)
    {
        if (a < 0 || b < 0 || c < 0 || d < 0) return false;
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

但对于它来说,圈复杂度是 5,而不是 2(1 表示方法 + 1 表示if)。我的问题是 - 这是因为代码指标将if运算符中的每个条件计算为不同的if?即我的方法相当于:

static bool ContainsNegative(int a, int b, int c, int d)
    {
        if (a < 0) return false;
        if (b < 0) return false;
        if (c < 0) return false;
        if (d < 0) return false;
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

这是显示结果的屏幕: Visual Studio 中的圈复杂度

另外,有没有详细描述所有规则的列表?

谢谢你!

Phi*_*ith 9

圈复杂度衡量通过函数的路径数量。正如您所建议的,这意味着为每个控制流语句添加 1,并为每个条件中的每个逻辑 NOT、AND 和 OR 添加 1。

5 的值告诉您,您将需要 5 次单元测试才能获得函数的 100% 代码覆盖率。

  • OP 的困惑是可以理解的,因为圈复杂度以不同的方式定义。代码覆盖率也有多种类型;CC 提供了实现基本路径覆盖所需的测试数量的上限(这是一个上限,因为某些路径可能无法遍历)。 (3认同)