Il nome formale per questo è Cyclomatic Complexity.
Questa è una misura della complessità di una funzione, in base al numero di "punti di decisione" nella funzione. Più alto è il numero, più complessa è la funzione.
La complessità è determinata dal numero di punti di decisione in un metodo più uno per l'immissione del metodo. I punti decisionali sono "se", "while", "for" e "case label". Generalmente, 1-4 è a bassa complessità, 5-7 indica complessità moderata, 8-10 è alta complessità e 11+ è una complessità molto elevata.
(tratto da http://phpmd.org/rules/codesize.html)
Il motivo è considerato male avere i valori di complessità troppo alto è perché rende la funzione difficile da testare.
Per testare una funzione al suo massimo potenziale, è necessario disporre di un test separato per ogni possibile percorso di codice. Il numero di percorsi di codice aumenta in modo esponenziale con ogni nuovo punto di decisione, il che significa che quando avrai più di una manciata di decisioni in una singola funzione, inizierai a richiedere centinaia di test per essere sicuro di aver coperto il problema tutta la gamma di funzionalità che potrebbe eseguire.
Centinaia di test per una singola funzione sono chiaramente troppi, quindi l'opzione migliore è ridurre il numero di punti decisionali per funzione suddividendolo in diverse funzioni più piccole con meno decisioni ciascuna.
È inoltre necessario rendere le funzioni discrete in modo che non si facciano affidamento l'uno sull'altro per l'esecuzione. Ciò consente loro di essere testati separatamente l'uno dall'altro. (altrimenti hai ancora il problema originale di troppe decisioni in una singola chiamata)
Puoi quindi testare ciascuna di queste funzioni con solo una manciata del numero di test che avresti originariamente richiesto.
Il processo di test delle funzioni in isolamento tra loro è denominato Unit Testing. Questo è un argomento molto ampio di per sé, ma vale la pena studiarlo se vuoi saperne di più sulle buone pratiche di sviluppo del software.
Dal momento che hai codificato questa domanda PHP, vi puntare nella direzione di alcuni strumenti che aiutano a mgiht:
- PHP Unit - questo è il pacchetto di test di unità standard de-facto per PHP.
- PHPMD - "PHP Mess Detector"; uno strumento per analizzare il tuo codice per cercare cose come l'eccessiva complessità.
- pDepend - Un altro strumento simile.
Ci sono un sacco di altri strumenti disponibili, ma questo è probabilmente sufficiente per iniziare; conosci prima quelli. Incontrerai gli altri in modo naturale mentre studi l'argomento.
Di solito è uno di questi: (a) a molti se-else, tempo per il polimorfismo (b) a molto se si va avanti, estendendo la classe e modificando solo un po 'di comportamento richiederebbe reimplementare una funzione enorme invece di solo un po. Come in ogni regola, ci sono naturalmente delle eccezioni. – Wrikken
Questa domanda sembra essere fuori tema perché riguarda la pratica di programmazione generale. Probabilmente è più adatto a programmers.stackexchange.com ma non esiste un'opzione di migrazione per quel sito – GordonM