L'implementazione ovvia di TDD significa prima il codice, test dopo?

11

Io e il mio amico siamo relativamente nuovi TDD e abbiamo una controversia sulla tecnica di "Implementazione ovvia" (da "TDD By Example" di Kent Beck). Il mio amico dice che significa che se l'implementazione è ovvia, devi andare avanti e scriverlo - prima qualsiasi test per quel nuovo comportamento. E infatti il libro dice:

How do you implement simple operations? Just implement them.

Inoltre:

Sometimes you are sure you know how to implement an operation. Go ahead.

Penso che ciò che l'autore intende è che dovresti prima testarlo e poi "implementarlo" semplicemente - in contrasto con "Fake It ('Till You Make It") e altre tecniche, che richiedono passaggi più piccoli nella fase di implementazione . Inoltre, dopo queste citazioni, l'autore parla di ottenere "barre rosse" (test falliti) quando si esegue "Implementazione ovvia" - come si può ottenere una barra rossa senza un test?.

Tuttavia non sono riuscito a trovare alcuna citazione dal libro che dicesse "ovvio" significhi ancora test prima.

Che ne pensi? Dovremmo testare prima o dopo quando l'implementazione è "ovvia" (secondo TDD, ovviamente)? Conosci un libro o un post del blog che dice proprio questo?

    
posta natasky 14.09.2011 - 22:37
fonte

4 risposte

11

Sono d'accordo con la tua interpretazione - è ancora Red Refactor, solo con il bit Refactor escluso;)

Quindi, scrivi prima un test negativo, poi implementa la soluzione ovvia invece di costruire lentamente un progetto di "il più semplice possibile".

    
risposta data 14.09.2011 - 22:45
fonte
6

Do you know a book or blog post saying just that?

Direi che il libro di Beck dice proprio questo.

Continua dicendo

However, by using only Obvious Implementation, you are demanding perfection of yourself. Psychologically, this can be a devastating move. What if what you write isn't really the simplest change that could get the test to pass? What if your partner shows you an even simpler one? You're a failure! Your world crumbles around you! You die. You freeze up.

Come si può far passare il test scrivendo il codice se non esiste prima del codice?

    
risposta data 14.09.2011 - 22:51
fonte
1

Ovviamente non ci sono regole dure e veloci qui, dopotutto eravamo agili quindi possiamo e dobbiamo adattarci man mano che procediamo con iterazione:)

In parte dipenderà dalla semplice operazione, e man mano che pratichi TDD troverai sempre cose che hai testato male o che in realtà non sono state testate, è tutto parte della curva di apprendimento.

Inoltre, non dimenticare che TDD ti permette di testare l'interfaccia e l'implementazione prima di trasferirla sul codice live.

Potresti sapere come implementare qualcosa, ma con quale frequenza scrivi una classe / metodo perfetto ecc. la prima volta senza alcune modifiche lungo il percorso o passando attraverso il codice una o due volte e sei mesi più tardi quando cambi qualcosa che puoi fallo con più sicurezza e di nuovo nella sandbox dei test.

Ovviamente, i test non significano che tu scrivi il codice più correttamente la prima volta ma le tue modifiche sono guidate dal test e i test diventano il primo client del codice e poiché i test sono molto economici e, soprattutto, no- rischio di cambiare hai più sicurezza e libertà durante lo sviluppo.

Se stai davvero cercando di ottenere una buona copertura e una qualità più elevata, sbagli di fianco a più test per iniziare, mentre pratichi TDD sempre di più svilupperai il tuo senso del livello di copertura di cui hai bisogno.

    
risposta data 14.09.2011 - 23:26
fonte
1

Ho appreso che per un codice triviale non dovrebbe esserci alcun unittest.

esempio: se si dispone di un metodo java getter / setter che associa un metodo a una variabile locale, un non-ticket per questo sarebbe eccessivo.

potrebbe essere questo è ciò che l'autore intende con

> "How do you implement simple operations? Just implement them."
> "Sometimes you are sure you know how to implement an operation. Go ahead."
    
risposta data 05.04.2012 - 14:24
fonte

Leggi altre domande sui tag