【发布时间】:2019-03-08 15:47:02
【问题描述】:
我使用 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;
}
但是对于它,圈复杂度是 5,而不是 2(1 代表方法 + 1 代表 if)。
我的问题是 - 这是因为代码度量将if 运算符中的每个条件计算为不同的if? IE。我的方法相当于:
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;
}
另外,有没有详细描述所有规则的列表?
谢谢!
【问题讨论】:
-
这是一个非常简单的度量,它计算代码中的分支。既然你用了||而不是 | (短路运算符)你永远不会少于 4。实际上在这种情况下可以生成更快的代码,但往往会产生太多来自读者的 wtf 惊呼。这几乎是正确使用该工具的关键,您只需寻找危险信号并查看代码是否真的存在可读性问题。没有,继续。
标签: c# visual-studio code-metrics cyclomatic-complexity