C# visualstudio中的圈复杂度

C# visualstudio中的圈复杂度,c#,visual-studio,code-metrics,cyclomatic-complexity,C#,Visual Studio,Code Metrics,Cyclomatic Complexity,我使用VisualStudio代码度量进行了一些测试。正如我可以计算圈复杂度一样,每个if,而,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; } 这是一个显示结果的屏幕:

我使用VisualStudio代码度量进行了一些测试。正如我可以计算圈复杂度一样,每个
if
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;
    }
这是一个显示结果的屏幕:

此外,是否有详细描述所有规则的列表


谢谢大家!

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


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

这是一个非常简单的度量,它计算代码中的分支。由于您使用了| |而不是|(短路运算符),因此您的值永远不会少于4。在这种情况下,使用|实际上可以生成更快的代码,但往往会从读取器生成太多wtf感叹词。这在很大程度上是正确使用该工具的关键,您只需查找危险信号,并查看代码是否确实存在可读性问题。事实并非如此,请继续。OP的混乱是可以理解的,因为圈复杂度是以不同的方式定义的。还有几种类型的代码覆盖;CC提供了实现基本路径覆盖率所需的测试数量上限(这是一个上限,因为某些路径可能无法遍历)。
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;
    }