test a livello di unità, agile e refactoring [duplicato]

0

Sto lavorando su un sistema di sviluppo molto agile, su un piccolo numero di persone con cui faccio la maggior parte del mio programma.

Sono arrivato alla fase di test e mi sono ritrovato a scrivere per lo più test di livello funzionale, che in teoria avrei dovuto lasciare per il nostro tester (in pratica non mi fido del tutto ... fidati del nostro tester per rilevare e identificare i difetti abbastanza lasciarlo l'unico autore di test funzionali). In teoria quello che dovrei scrivere sono i test a livello di unità.

Tuttavia, non sono sicuro che valga la pena. Il collaudo delle unità richiede un po 'di tempo per essere eseguito, più dei test funzionali poiché devo impostare i mock e le prese in unità più piccole che non erano progettate per essere eseguite in issolation. Ancora più importante, trovo il refactoring e la riprogettazione pesantemente - una parte di questo è dovuta al mio codice di scrittura che aveva bisogno di una riprogettazione pesante e viene ancora ripulito, ma anche una volta che ho finito di rimuovere parti che hanno bisogno di lavoro sono sicuro che nell'atto di espandere il codice farò ancora una discreta quantità di refactoring e riprogettazione. Mi sembra di spezzare i miei test unitari, costringendo anche a rifattorici tempo, spesso a causa del test unitario, per definizione, dovendo essere accoppiati così strettamente alla struttura del codice.

Quindi vale la pena perdere tempo quando i test funzionali, che non si interromperanno mai quando refactoring / redesign, dovrebbero trovare la maggior parte dei difetti? I test unitari forniscono davvero molto più detersione del difetto extra attraverso il funzionale? e come si creano buoni test unitari che funzionano con un codice molto veloce e agile che viene modificato rapidamente?

ps, sarei benissimo / felice con i collegamenti a qualsiasi cosa si consideri una risorsa eccellente per come eseguire il test delle unità in un ambiente altamente mutevole.

edit: per chiarire che sto facendo un po 'di TDD molto non formale, mi sembra che stia scrivendo dei test su quello che sarebbe considerato un livello funzionale piuttosto che a livello di unità. Penso che parte di questo sia dovuto al fatto che quasi tutto il progetto non mi sembra necessario per limitare il campo di applicazione; e parte di esso è che è scoraggiante pensare di provare a tornare indietro e aggiungere retroattivamente i test unitari necessari per coprire un numero sufficiente di codice che posso sentirmi a mio agio testando solo un'unità senza la piena funzionalità e confido che l'unità lavori em> con il resto delle unità.

    
posta dsollen 22.10.2013 - 16:23
fonte

1 risposta

5

Ah ... sicuramente non stai facendo TDD. TDD è Design guidato dal test; in particolare, sta scrivendo le specifiche (ovvero i test) prima . Quello che stai facendo è scrivere dei test (che va bene, e normalmente abbastanza utile - dopotutto, dobbiamo testare il codice, è solo che la maggior parte di noi sta facendo bene a farlo manualmente).

Come per i test unitari e i test funzionali; a mio avviso, il fatto che tu "ti rifatti e ridisegni pesantemente" è il principale vantaggio dei test unitari. Ho come che il codice risultante è stato progettato meglio di quando ho iniziato. Sfortunatamente, se lo sforzo è giustificato, è piuttosto soggettivo.

Non mi concentrerei sul "tentativo di tornare indietro e aggiungere retroattivamente i test di unità necessari per coprire un numero sufficiente di codice"; prova ad aggiungere test su parti di funzionalità che ritieni siano abbastanza complicate da giustificarlo. Ho un esempio particolare in cui ho dovuto aggiungere test perché una vista nel progetto a cui sto lavorando aveva un sacco di logica per visualizzare l'ora corretta a seconda del mercato e del fuso orario. Non era TDD - il codice di produzione era già lì - ma volevo assicurarmi che funzionasse correttamente in vari casi a cui potevo pensare. Non credo che questi test debbano essere modificati per qualcosa che non rispetti i requisiti aziendali in evoluzione.

Concluderò indicando il riferimento obbligatorio " Lavorare efficacemente con codice legacy ".

    
risposta data 22.10.2013 - 16:43
fonte

Leggi altre domande sui tag