¿Por qué la complejidad ciclomática es igual a dos para un simple Hello World?

7

Tendría dos preguntas relacionadas con la complejidad ciclomática:

  1. ¿Puedo usar esta métrica para una aplicación completa? Supongo que no puedo, ya que sería un número increíblemente grande, considerando las funciones que llaman a las funciones, etc. ¿Es solo para el módulo / método / unidad?

  2. En Visual Studio, para iniciar la aplicación con solo llamar al método Main , el valor de complejidad ciclomática es 2. ¿Por qué? Solo hay una forma posible si ejecuto el programa: finaliza.

pregunta John V 10.01.2013 - 08:21

1 respuesta

10

La complejidad ciclomática de la aplicación de consola más básica es 2 por una simple razón: aparte del método Main() , también hay un constructor. Es como escribir:

public class Program
{
    public Program()
    {
    }

    public static void Main()
    {
    }
}
  • La primera ruta es crear una nueva instancia de la clase Program . Esta ruta se toma de forma predeterminada para iniciar la aplicación.

  • La segunda ruta es para llamar al método estático Program.Main() . Esta ruta se puede tomar si la aplicación es utilizada como una biblioteca ordinaria por otra aplicación.

Tenga en cuenta que esto se aplica a cualquier clase no estática que tenga un método estático. Por ejemplo:

public class Hello
{
    // Even if the constructor was omitted, it will still be added by the compiler.
    public static void SayHello()
    {
    }
}

tendrá una complejidad ciclomática de 2 también.

También tenga en cuenta que si realmente desea tener una aplicación con una complejidad ciclomática de 1, simplemente declare Program class como estática, como en el siguiente fragmento de código. No tengo ni idea de por qué la plantilla predeterminada en Visual Studio se olvida de agregar las palabras clave public y static .

public static class Program // ← See, we replaced a non-static class by a static one
{
    static void Main(string[] args)
    {
    }
}

En cuanto a su primera pregunta, no usa la complejidad ciclomática como único factor. Índice de mantenimiento, con su fórmula bastante complicada , es una mejor métrica, pero incluso el índice de mantenibilidad no es algo en lo que se pueda confiar plenamente y en que se pueda decir que un fragmento de código es "bueno" o "malo".

No es molesto tener una complejidad ciclomática de unos pocos miles para un proyecto pequeño, y no tiene mucho sentido usarlo para la clase, el ensamblaje o el alcance del proyecto; lo que sería mucho más preocupante es obtener una alta complejidad ciclomática para un método específico.

    
respondido por el Arseni Mourzenko 10.01.2013 - 08:48

Lea otras preguntas en las etiquetas