У меня есть два примера функций TestComplexityIf
и TestComplexitySwitch
. Инструмент VisualStudio-2017 «Вычислить метрики кода» сообщает о цикломатической сложности 10 для функции с оператором switch
и 7 для функции с if-else
. Интересно, как рассчитывается сложность TestComplexitySwitch().
private static void TestComplexityIf(String arg)
{
if (arg == "a")
{ }
else if (arg == "b")
{ }
else if (arg == "c")
{ }
else if (arg == "d")
{ }
else if (arg == "d")
{ }
else if (arg == "f")
{ }
else if (arg == "g")
{ }
}
private static void TestComplexitySwitch(String arg)
{
switch (arg)
{
case "a":
break;
case "b":
break;
case "c":
break;
case "d":
break;
case "e":
break;
case "f":
break;
case "g":
break;
}
}
Кроме того, если я прокомментирую последний случай, сложность внезапно изменится на 6.
private static void TestComplexitySwitch(String arg)
{
switch (arg)
{
case "a":
break;
case "b":
break;
case "c":
break;
case "d":
break;
case "e":
break;
case "f":
break;
//case "g":
//break;
}
}
switch
. Может быть так просто. - person Markus Deibel   schedule 18.03.2020case
. Это добавляет дополнительные «3» дополнительных пути. Когда последнийcase
закомментирован, сгенерированный код используетif
со сравнением строк вместо сравнения хэшей. - person FaisalM   schedule 18.03.2020