Qualità del codice: qual è il valore dell'osservazione dei if?

1

Abbiamo visto tutti i dibattiti sulla lunghezza ideale di un metodo. La mia cartina tornasole preferita per la qualità del codice è quella di esaminare le istruzioni "if", per vedere se i valori testati appartengono alla classe corrente. Più il valore testato è stato rimosso dal contesto del test, più strong è l'odore di un problema di modellazione.

Quindi la mia domanda è ... qualcuno può riempirmi dell'origine e del valore di questa misura. È una metrica riconosciuta? È possibile / desiderabile modellare oggetti in modo tale che tutti i test di logica condizionale eseguano solo i membri della classe? Che importanza dareste a questa misura?

    
posta bbsimonbb 04.11.2015 - 16:22
fonte

2 risposte

4

L'uso di un'istruzione if è ciò che chiamo una "biforcazione". Divide il codice in due diversi percorsi di esecuzione, aumentandone la complessità ciclomatica. Ecco perché esaminare le dichiarazioni if è un utile esercizio per l'analisi del codice.

Puoi toccare altre classi senza coinvolgere if dichiarazioni, quindi non sono sicuro che la combinazione specifica di if condizioni e il toccare altre classi sia particolarmente significativa, oltre a identificare una specifica marca di inferno .

    
risposta data 04.11.2015 - 17:02
fonte
1

look at the "if" statements, to see whether the values being tested belong to the current class

Che cosa intendi per valore appartiene alla classe corrente ? Stai incoraggiando lo stato di essere duplicato tra gli oggetti?

Direi che il contro-argomento in realtà. Un oggetto può avere proprietà booleane pubbliche o metodi che contengono informazioni di stato relative ad altri oggetti da testare.

Singletons

Molte volte singleton (in particolare in iOS dev) avranno un bool per testare la disponibilità del servizio, ma è utile per testare altri oggetti.

if (NetworkManager.sharedInstance().isInternetAvailable())

Strutture dati

Che dire di un DTO o di un oggetto struttura dati personalizzato:

if (jsonDictionary.count > 0)
if (person.age >= 21)

Diciamo che le strutture di dati di cui sopra sono utilizzate da un controller (in MVC) quale attività ha un controller nell'archiviazione dell'età di una persona quando c'è un'età nell'oggetto di persona.

    
risposta data 04.11.2015 - 22:55
fonte

Leggi altre domande sui tag