Perché la complessità ciclomatica è uguale a due per un semplice Hello World?

7

Avrei due domande relative alla complessità ciclomatica:

  1. Posso utilizzare questa metrica per un'intera app? Suppongo che non possa, dato che sarebbe un numero incredibilmente grande, considerare funzioni che chiamano funzioni, ecc. È solo per modulo / metodo / unità?

  2. In Visual Studio, per l'avvio dell'app con il solo richiamo del metodo Main , il valore della complessità ciclomatica è 2. Perché? C'è solo un modo possibile se eseguo il programma - finisce.

posta John V 10.01.2013 - 08:21
fonte

1 risposta

10

La complessità ciclomatica dell'applicazione di console più semplice è 2 per un semplice motivo: a parte il metodo Main() , c'è anche un costruttore. È come scrivere:

public class Program
{
    public Program()
    {
    }

    public static void Main()
    {
    }
}
  • Il primo percorso consiste nel creare una nuova istanza della classe Program . Questo percorso è utilizzato per impostazione predefinita per avviare l'applicazione.

  • Il secondo percorso è chiamare il metodo statico Program.Main() . Questo percorso può essere intrapreso se l'applicazione viene utilizzata come libreria ordinaria da un'altra applicazione.

Si noti che questo si applica a qualsiasi classe non statica che abbia un metodo statico. Ad esempio:

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

avrà anche una complessità ciclomatica di 2

Si noti inoltre che se si desidera realmente un'applicazione con una complessità ciclomatica pari a 1, si dichiara semplicemente la classe Program come statica, come nella seguente parte di codice. Non ho idea del motivo per cui il modello predefinito in Visual Studio si dimentica di aggiungere entrambe le parole chiave public e static .

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

Per quanto riguarda la tua prima domanda, non usi la complessità ciclomatica come unico fattore. Indice di manutenibilità, con la sua formula abbastanza complessa , è una metrica migliore, ma anche l'indice di manutenibilità non è qualcosa su cui puoi fidarti completamente e fare affidamento per dire che un pezzo di codice è "buono" o "cattivo".

Non è inquietante avere una complessità ciclomatica di qualche migliaio per un piccolo progetto, e non ha molto senso usarlo per classi, assiemi o scope del progetto; ciò che sarebbe molto più inquietante è ottenere una elevata complessità ciclomatica per un metodo specifico.

    
risposta data 10.01.2013 - 08:48
fonte

Leggi altre domande sui tag