Poszukiwanie wyjaśnień na temat kodu strukturyzacji w celu zmniejszenia złożoności cyklicznej

Ostatnio nasza firma zaczęła co tydzień mierzyć złożoność cykliczną (CC) funkcji w naszym kodzie i zgłaszać, które funkcje uległy poprawie lub pogorszeniu. Zaczęliśmy więc zwracać większą uwagę na CC funkcji.

Czytałem, że CC może być nieformalnie obliczona jako 1 + liczba punktów decyzyjnych w funkcji (np. Instrukcja if, dla pętli, wybierz itd.) Lub też liczba ścieżek przez funkcję ...

Rozumiem, że najłatwiejszym sposobem zmniejszenia CC jest wielokrotne używanie refaktoryzacji metody ekstrakcji ...

Są pewne rzeczy, o których nie jestem pewien, np. co to jest CC następujących fragmentów kodu?

1)

for (int i = 0; i < 3; i++)
    Console.WriteLine("Hello");

I

Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");

Oboje robią to samo, ale czy pierwsza wersja ma wyższą wartość CC z powodu instrukcji for?

2)

if (condition1)
    if (condition2)
        if (condition 3)
            Console.WriteLine("wibble");

I

if (condition1 && condition2 && condition3)
    Console.WriteLine("wibble");

Zakładając, że język dokonuje oceny zwarcia, takiej jak C #, te dwa fragmenty kodu mają ten sam efekt ... ale czy CC pierwszego fragmentu jest wyższy, ponieważ ma 3 punkty decyzyjne / jeśli instrukcje?

3)

if (condition1)
{
    Console.WriteLine("one");

    if (condition2)
        Console.WriteLine("one and two");
}

I

if (condition3)
    Console.WriteLine("fizz");

if (condition4)
    Console.WriteLine("buzz");

Te dwa fragmenty kodu robią różne rzeczy, ale czy mają ten sam CC? Czy zagnieżdżona instrukcja if w pierwszym fragmencie ma wyższe CC? tj. zagnieżdżone, jeśli zdania są bardziej złożone umysłowo, ale czy jest to odzwierciedlone w CC?

questionAnswers(8)

yourAnswerToTheQuestion