Buon esempio di codice complesso usando TDD [chiuso]


37

Quale sarebbe un buon esempio dell'uso del TDD in progetti grandi, reali, complessi? Tutti gli esempi che ho visto finora sono progetti di giocattoli ai fini di un libro o di un giornale ...

Puoi nominare un progetto open source che utilizza pesantemente TDD? Preferibilmente in C ++ ma posso leggere Java e C # o altri linguaggi simili.


difficile rispondere alla tua domanda. ci sono molti progetti che utilizzano test automatici, ma è difficile dire fino a che punto seguono la filosofia TDD perché probabilmente non lo promuovono. anche c ++, c # e java kinda hanno le loro radici nelle applicazioni gui, che sono difficili da testare. di solito troverai più test all'interno di framework o librerie.
iMacUwhAK il

Parte del motivo per cui sono molto interessato a trovare una buona risposta è che sto attualmente lavorando su un'applicazione desktop con un motore C ++ e una GUI Java ...
Xavier Nodet,

Risposte:


19
  • JUnit è stato sviluppato al 100% test-driven. In realtà, è stato sviluppato al 100% test-driven in JUnit , che come Kent Beck ha detto un paio di volte è stato un esercizio davvero strabiliante.
  • Credo che il filesystem ZFS di Sun sia stato sviluppato test-driven.
  • L'interprete ikj per il linguaggio di programmazione Ioke (JVM), l'interprete ikc per il linguaggio di programmazione Ioke (CLI), l'intero core Ioke e la libreria standard, e in effetti il ​​linguaggio stesso è stato sviluppato al 100% test-driven (effettivamente guidato dal comportamento ).

DUnit - il framework di test per Delphi, viene fornito con una suite completa di test per DUnit stesso. E sono d'accordo con Kent, è un po 'stancante. ;-)
Nick Hodges il

14

SQLite. Tutto il loro codice è molto, molto testato :

A partire dalla versione 3.7.14, la libreria SQLite è composta da circa 81,3 KSLOC di codice C. (KSLOC significa migliaia di "righe di codice sorgente" o, in altre parole, righe di codice esclusi righe vuote e commenti.) In confronto, il progetto ha 1124 volte più codice di test e script di test - 91421.1 KSLOC.


1
wow, hanno un sacco di test: |
Luca Matteis,

8
pesantemente testato non significa necessariamente che sia stato sviluppato in modo test-driven (TDD). Era? (Non ho letto l'intera pagina, ma non ho visto né "TDD" né "guidato" nelle ricerche in-page, quindi non conosco la risposta a questo.)
lindes

1
@lindes: sembrano non seguire rigorosamente il TDD, ma ad esempio per ogni segnalazione di bug fanno prima un test. Inoltre eseguono test per ogni commit. Quindi almeno in parte si tratta di TDD.
liori,

9

Se ricordo che FitNesse è scritto con TDD, e il principale collaboratore del progetto è lo zio Bob Martin, quindi probabilmente è un codice davvero pulito


L'ho appena visto ed è un codice davvero pulito.
Robert Harvey,

3

Dalle mie discussioni con il team P&P di Microsoft, Enterprise Library è stata scritta con TDD.


Ho tirato giù Enterprise Library 5.0 e ho dato un'occhiata al codice sorgente. Ha una vasta collezione di test, ma ci sono molti dispositivi di test, gestore di chiamate e altri oggetti complessi nel progetto di test; sembra quasi un'applicazione a sé stante. Mentre ammiro il lavoro, non vedo come si adatta alla visione del mondo TDD del rifrattore rosso-verde.
Robert Harvey,

@Robert - Posso solo dirti cosa mi hanno detto ... Hanno usato TDD durante la scrittura.
Walter,

6
@Robert - Non è insolito che la suite di test abbia una vita propria. DRY si applica sia all'applicazione che ai test. In TDD fai sempre solo una delle 4 cose: scrivere test, scrivere codice, test di refactoring, codice di refactoring. Se stai facendo tutte queste cose in uno schema di rifattore rosso-verde, allora stai facendo TDD.
Jeff Knecht,

1
@Jeff: grazie per averlo chiarito. Penso che ci siano alcune differenze tra il modo in cui viene spiegato il TDD (in termini riduzionisti, in termini meccanicistici) e il modo in cui viene effettivamente utilizzato negli scenari del mondo reale.
Robert Harvey,

3

Non posso nominare alcun progetto open source che utilizzava TDD, ma posso dirti che ho lavorato a progetti del mondo reale in cui TDD è stato utilizzato ... ed è stato un vero toccasana!


1
Tu o altri avete condiviso queste esperienze? Sembra una bella storia di guerra.

ne ho twittato un po 'e ho usato aneddoti per illustrare punti in altri post. basti dire che la progettazione test-first e le suite di test automatizzate mi rendono la vita molto più semplice da non tornare indietro e fare lo sviluppo in nessun altro modo. Esempio: bug sottile in un caso di test che il test manuale non avrebbe trovato (perché i tester manuali non controllano l'integrità del database dopo ogni operazione); ha eseguito il test più volte quel giorno per capirlo, equivalenti a oltre 40 ore di tempo di test manuali risparmiate. recentemente ho apportato oltre 1000 modifiche al codice ed ho eseguito i test mentre dormivo. Rocce TDD.
Steven A. Lowe,

Ti credo. Mi piace solo ascoltare le storie. Potresti trovare interessante QuickCheck - en.wikipedia.org/wiki/QuickCheck - Ho visto una presentazione che ha trovato bug multithreading nel codice di produzione di 15 anni.

"perché i tester manuali non controllano l'integrità del database dopo ogni operazione" - i vincoli e uno schema DB ben progettato oscilla di più, e ti avrebbe risparmiato tutto quel fastidio di dover passare una giornata a test poiché avresti visto immediatamente il bug .
gbjbaanb

@gbjbaanb: in questo caso, il 'controllo' era molto più complesso della semplice integrità dello schema, ecco perché c'è un test automatizzato per questo
Steven A. Lowe

0

Il mio primo progetto realizzato completamente in TDD è stato open source nel 2002. Puoi ancora trovarlo qui:

http://sourceforge.net/projects/camelos/

Ora al lavoro lavoro principalmente nel TDD, ma non tutti nel nostro team lo fanno, a condizione che alla fine della giornata abbia scritto i test.

Abbiamo anche scritto un'applicazione gwt-gae completa usando TDD per la parte principale. http://netnumero.appengine.com/company/mycompany

Non riesco a rilasciare quel codice ma sto lavorando a un progetto di esempio completo fatto in TDD per GWT, che sta usando TDD anche nell'interfaccia utente.

Non appena avrò finito (vacanze di Natale) lo pubblicherò qui https://github.com/ubertob/gwt-tdd-example

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.