in che modo lo sviluppo basato sui test ci impedisce errori di tipo?

0

Ho sentito (da Robert C. Martin) un'affermazione secondo cui, poiché i linguaggi dinamici non hanno un controllo ortografico statico, le persone dovrebbero scrivere test unitari per impedirci di digitare errori.

Non sono sicuro di seguire il pensiero qui. Qualcuno potrebbe essersi scappato come? Potresti darmi un esempio concreto?

    
posta Tomy 05.03.2015 - 23:33
fonte

2 risposte

3

I test unitari non impediscono attivamente errori di tipo, ma fanno forniscono un meccanismo per eseguire il codice che hai scritto prima che l'intera applicazione sia completata.

Se provi a fare qualcosa di sciocco, come l'errata digitazione di calculateInterest come claculateinterest , allora questo verrà catturato presto se usi un linguaggio compilato in modo statico come Java perché il compilatore si lamenterà a voce alta.
Se fai lo stesso in una lingua digitata in modo dinamico, l'errore non verrà notato fino a quando quella riga di codice non verrà effettivamente eseguita.

Se non si scrivono i test unitari, possono passare settimane prima che l'applicazione sia finita abbastanza da consentire l'esecuzione e il test della funzionalità nell'applicazione completa. Questo è un tempo di ritorno molto lungo per trovare errori così stupidi.
D'altra parte, se fai scrivi test unitari, allora sono solo pochi minuti tra la scrittura di un modulo e l'esecuzione. Questo ha l'enorme vantaggio che il codice è ancora fresco nella tua mente e che non sei ancora completamente occupato con la scrittura di altri moduli.

    
risposta data 06.03.2015 - 08:51
fonte
0

Un buon esempio di questo viene dal codice che ho visto di recente:

if foo
    bar == baz
    # should be bar = baz

Nelle espressioni python come questa funzionano perfettamente ma non fanno quello che volevi.

Un altro errore di battitura nello stesso codice:

class foo:
    ...
    def bar(self):
        ...

def foo_bar:
    ...

...

foo.bar()
# They meant to use foo_bar()

Sicuramente questo è causato da una cattiva nomenclatura, ma il bug potrebbe essere stato spottet usando i test. I test semplici potrebbero aver scoperto che l'istruzione if non fa semplicemente nulla.

    
risposta data 06.03.2015 - 09:36
fonte

Leggi altre domande sui tag