Buscando aclaraciones sobre la estructuración de código para reducir la complejidad ciclomática.

Recientemente, nuestra empresa ha comenzado a medir semanalmente la complejidad ciclomática (CC) de las funciones de nuestro código, y ha informado de qué funciones han mejorado o empeorado. Así que hemos comenzado a prestar mucha más atención al CC de funciones.

He leído que CC se podría calcular de manera informal como 1 + el número de puntos de decisión en una función (por ejemplo, si es una instrucción, para bucle, selección, etc.) o también el número de rutas a través de una función ...

Entiendo que la forma más fácil de reducir CC es usar la refactorización del Método de extracción repetidamente ...

Hay algunas cosas de las que no estoy seguro, por ej. ¿Cuál es el CC de los siguientes fragmentos de código?

1)

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

Y

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

Ambos hacen lo mismo, pero ¿la primera versión tiene un CC más alto debido a la declaración for?

2)

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

Y

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

Suponiendo que el lenguaje hace una evaluación de cortocircuito, como C #, entonces estos dos fragmentos de código tienen el mismo efecto ... pero ¿es mayor el CC del primer fragmento porque tiene 3 puntos de decisión / afirmaciones if?

3)

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

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

Y

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

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

Estos dos fragmentos de código hacen cosas diferentes, pero ¿tienen el mismo CC? ¿O la declaración if anidada en el primer fragmento tiene un CC más alto? es decir, anidadas si las declaraciones son mentalmente más complejas de entender, pero ¿eso se refleja en el CC?

Respuestas a la pregunta(8)

Su respuesta a la pregunta