Poco più di un anno fa sono stato abbastanza fortunato da riuscire a prendermi una pausa di 9 mesi dal lavoro. Ho deciso che in quel momento avrei affinato le mie abilità in C #. Ho iniziato a lavorare su diversi progetti e mi sono costretto a seguire il TDD.
È stato un processo abbastanza illuminante.
All'inizio è stato difficile, ma nel tempo ho imparato a scrivere codice più testabile (che, a quanto pare, tende ad essere più codice SOLID) e nel processo ho anche affinato la mia abilità di progettazione OO.
Ora sono tornato nella forza lavoro e sto notando qualcosa di strano.
Preferisco non seguire TDD.
Trovo che TDD mi rallenta e in realtà rende più difficile progettare un'applicazione pulita.
Invece, ho adottato un approccio leggermente (enormemente diverso):
- Scegli una fetta verticale di lavoro
- Sviluppa un prototipo funzionante
- Rifattore fino a quando tutto è bello e ordinato
- Siediti e apprezza il bellissimo codice SOLID e testabile che ho scritto.
Potresti aver notato che il passaggio 1 non era "definire la superficie pubblica del mio obiettivo di prova" e il passaggio 2 non era "testare il bejesus da detta superficie pubblica". Potresti anche aver notato che nessuno dei passaggi prevede test. Sto scrivendo codice testabile, ma non lo sto testando ... per ora.
Ora, vorrei chiarire che in realtà non sto rinunciando a nessun tipo di test. Il codice che sto scrivendo funziona . Funziona perché lo sto testando manualmente.
Vorrei anche chiarire che non sto rinunciare a tutti i test automatici. Questo è dove il mio processo è diverso. Ed è per questo che sto ponendo questa domanda.
TDD in teoria. Non in pratica.
Il mio processo si è evoluto un po 'e ho trovato un equilibrio tra TDD e nessun test che trovo molto produttivo e anche ragionevolmente sicuro. Va come segue:
- Implementa una porzione di lavoro verticale funzionante tenendo presente i test, ma non scrivere alcun test.
- Se lungo la strada (ad esempio, un mese dopo) quella sezione deve essere modificata
- Scrivi test unitari, test di integrazione, test comportamentali, ecc. Che garantiscano che la porzione di lavoro sia corretta
- Modifica il codice
- Se quella sezione non necessita di modifiche,
- Fare niente
Spostando semplicemente l'onere della scrittura dei test da prima di scrivere il codice a prima di modificare il codice sono stato in grado di produrre molto più codice funzionante. E, quando vado in giro a scrivere test, ne scrivo molto meno ma copro quasi altrettanto terreno (ROI più elevato).
Mi piace questo processo, ma temo che potrebbe non adattarsi bene. Il suo successo dipende dal fatto che gli sviluppatori siano diligenti nello scrivere test prima che cambino le cose. E questo sembra un rischio piuttosto grande. Ma TDD ha lo stesso rischio.
Quindi, vado all'inferno [BT] DD, o è una forma comune di codifica e test pragmatici?
Mi piacerebbe continuare a lavorare in questo modo. Cosa posso fare per far funzionare questo processo a lungo termine?
Nota:Sono l'unico sviluppatore dei miei progetti e sono responsabile di tutto: raccolta dei requisiti, progettazione, architettura, test, implementazione, ecc. Sospetto che sia per questo che il mio processo sta funzionando.
If that slice doesn't need modification. lizkeogh.com/2012/06/24/beyond-test-driven-development