Esempi reali di app scritte con TDD e buona copertura dei test? [chiuso]


17

Esistono applicazioni open source sviluppate utilizzando lo sviluppo test driven che fungono da modelli di come dovrebbe funzionare un buon test unitario?

Preferirei vedere esempi in C # e .NET. (Nota che ho menzionato le applicazioni, non solo le librerie.)

Sono un programmatore di livello intermedio che vuole davvero credere e praticare TDD. L'app su cui lavoro nel mio lavoro quotidiano è piuttosto complicata - circa 1 milione di righe di codice - e mi piacerebbe introdurre più test unitari. Abbiamo in atto alcuni test unitari, ma i miei sforzi in TDD e nel lavorare su un codice già in fase di test non sono stati incoraggianti.

Nella mia esperienza dichiaratamente limitata, TDD sembra incoraggiare molta complessità in nome del disaccoppiamento. I bit dell'app che sono difficili da testare e che, per coincidenza, tendono ad essere critici, vengono spinti verso la periferia, nel regno dei test di integrazione che possono o non possono mai essere scritti. (Sto pensando ai soliti sospetti qui, accesso al file system, idratazione di oggetti da un database, chiamate web asincrone, ecc.)

Il codice sotto test tende a coinvolgere molta collaborazione tra gli oggetti, e forse qualche semplice logica di flusso, tutto ciò che accade in memoria e che potrebbe essere probabilmente scritto in un modo più semplice e comprensibile se tutto non dovesse essere completamente disaccoppiato per i test.

Comprendo le tecniche per deridere le dipendenze e simili, ma nella mia esperienza un uso intenso del deridere porta a test molto fragili. Se il mio primo istinto nel vedere una serie di test diventare rosso è "Fantastico, ora devo sistemare tutte le beffe", allora i miei test sono diventati una resistenza piuttosto che una rete di sicurezza.

Sto cercando di superare questa barriera mentale, e come parte di questo sto leggendo il libro di Michael Feathers, Lavorare efficacemente con il codice legacy . Spero che mi mostri qualcosa di ciò che mi manca.

Mi piacerebbe anche studiare alcune applicazioni .NET non banali con una buona copertura del codice, forse un sistema di gestione dei contenuti o un'app CRUD. Il framework di test FitNesse di cui parla zio Bob è qualcosa che probabilmente guarderò, ma sarebbe bello vedere qualcosa scritto nella lingua con cui ho più familiarità.

Eventuali suggerimenti o parole di saggezza sarebbero apprezzati.



2
Non del tutto ... Sono interessato a vedere esempi di applicazioni del mondo reale. La risposta accettata in quel post raccomanda un framework di test. Ho già visto alcuni esempi di framework e librerie, ma questo non risponde alla mia domanda.
Josh Earl,

@JoshEarl - Sono d'accordo .. Non credo che la mia risposta sotto sarebbe stata pertinente per l'altro post
hanzolo

Risposte:


14

Non so se sia stato utilizzato TDD, ma un esempio stellare di test è sqlite che ha una notevole copertura del ramo al 100% e ha più di 1000 volte più codice di test e script rispetto al codice prodotto.


4
sembra un notevole spreco di energie se il loro rapporto tra codice e codice di prova è così alto
Ryathal,

6
@Ryathal: il costo del fallimento determina lo sforzo di test, non la lunghezza del codice testato. Dato un utilizzo sufficientemente ampio in approcci sufficientemente mission-critical, i test avrebbero potuto valerne la pena. Non sono sicuro, tuttavia, se SQLite non ha esagerato.
thiton,

3
sqlite è sicuramente mission-critical per molte persone. Potresti essere sorpreso dalla frequenza con cui viene utilizzato (ad esempio OSX, iOS, sistema operativo Android). E devi capire che molte di quelle righe di codice di test e dati sono state probabilmente generate dalla macchina. Un database di resistenza industriale ha molti casi limite.
Bryan Oakley,

10
SQLite è il database SQL più utilizzato al mondo, la sua base di installazione è un ordine di grandezza più grande di MySQL, PostgreSQL, SQL Server, Oracle, DB2 combinati . È probabilmente uno dei software più utilizzati, punto. Se ci fosse un bug in SQLite, ogni singolo smartphone del pianeta smetterebbe di funzionare. Penso che giustifichi un po 'di paranoia.
Jörg W Mittag,

@ JörgWMittag caspita, non l'ho mai saputo di SQLite. Divertente. Grazie. Ma 1000 volte più codice di prova. È incredibile.
mike rodent,


0

Molte librerie open source di terze parti sono TDDed. Le librerie di Hibernating Rhinos, come RhinoMocks e NHibernate, sono TDDed dai loro sviluppatori che utilizzano XUnit come framework di unit test.

Ora, con OSS, di solito non è possibile garantire che TUTTO nel prodotto sia stato TDD. La community può avere standard che includono questa pratica e può persino utilizzare un build-bot che esegue metriche di copertura del codice, ma TDD è una mentalità che deve essere acquisita dallo sviluppatore e con il pubblico in generale in grado di impegnarsi ad aprire- trunk VCS di origine come quelli su GitHub, chiunque può eseguire qualsiasi modifica con qualsiasi quantità di copertura del test (o se è richiesta la copertura i test avrebbero potuto essere scritti dopo il fatto, il che è una violazione dello spirito di TDD ma in realtà non lo è un buon modo per prenderlo su commit).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.