2011-10-06 10 views
11

Sto usando php UnderControl e la relazione del browser codice di qualche errore di indice CRAP su ogni setter/code getter vale a dire come questoPHPUnit e l'indice CRAP

public function getFoo() 
{ 
    return $this->_foo; 
} 

Il getter/setter sono coperti dalla unit test, la complessità è nessuno poiché non c'è se/for/switch/foreach. quindi perché ottengo un indice CRAP di 1 per quel codice ???

PS: auto rispondendo me potrebbe essere perché la complessità è nessuno, ma il mio problema principale è che ogni getter/setter generare un avviso perché dell'indice CRAP quindi c'è comunque di dire la copertura phpunit/codice php per rendere la merda è uguale a 0 per funzionare con un indice di complessità 0.

+0

Siamo passati da phpUnderControl a Jenkins. È molto più configurabile e attivamente in fase di sviluppo, e c'è un modello di progetto per i progetti PHP. Ti consente di impostare valori soglia CRAP che attiveranno avvisi e creeranno errori. –

risposta

22

Il punteggio minimo CRAP è 1, non è 0. Questo perché l'algoritmo per CRAP è

CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m) 

e il valore minimo ciclomatica complessità (comp) per una funzione è uno. Quindi il problema non è in phpunit, ma qualsiasi cosa segnala un CRAP di 1 come problema.

In generale, si desidera impostare la soglia CRAP da qualche parte intorno al 5, in qualsiasi punto inferiore e si può anche utilizzare una semplice metrica di copertura del codice (e scattare al 100%) poiché il fattore di complessità pesa appena. > = 30 significa che nessuna quantità di test può rendere il tuo metodo non schifoso.

Cyclomatic complessità può generalmente (ma non v'è più di una definizione) essere mano calcolata come:

  • aggiungere 1 punto per la chiamata di funzione
  • aggiungere 1 punto per ogni ciclo
  • aggiungere 1 punto per ogni ramo
+0

hai ragione, il minimo è 1 ... sembra essere un bug di php_codebrowser che evidenzia quelle righe anche se vanno bene. vedi https://github.com/mayflowergmbh/PHP_CodeBrowser/issues/50 – RageZ

+0

cosa ne pensi di un CRAP di 12 per una classe con un punteggio di 3 per tre metodi? (Penso che sia a causa del numero di percorsi di ritorno) – MrMesees

1

È davvero un avvertimento? Generalmente la soglia per gli avvisi è impostata su un valore molto più alto di 1 (forse circa 30). C'è un buon post SO here che mostra come viene calcolato il numero. Sembra che ci sia un paio di valori hardcoded nel mio setup phpunit per CRAP di 30.

Secondo Alberto Savoia, il creatore dell'indice CRAP:

indice "la merda (Change Risk Analysis e previsioni) è stato progettato per analizzare e prevedere la quantità di sforzo, dolore e tempo richiesto per mantenere un corpo di codice esistente. "

Il numero minimo di CRAP sarà la complessità ciclomatica per il codice con copertura del 100%. L'idea è che le modifiche al codice complesso hanno maggiori probabilità di creare problemi rispetto alle modifiche al codice semplice.

+0

in realtà è un avviso ma piuttosto fastidioso di avere un avviso su ogni singolo getter e setter – RageZ