Dobry przykład złożonego kodu używającego TDD [zamknięty]

37

Jaki byłby dobry przykład zastosowania TDD w dużych, rzeczywistych, złożonych projektach? Wszystkie przykłady, które do tej pory widziałem, to projekty zabawek na potrzeby książki lub gazety ...

Czy możesz wymienić projekt typu open source, który intensywnie wykorzystuje TDD? Najlepiej w C ++, ale mogę czytać Java i C # lub inne podobne języki.

Xavier Nodet
źródło
trudno odpowiedzieć na twoje pytanie. istnieje wiele projektów wykorzystujących testy automatyczne, ale trudno powiedzieć, jak daleko idą za filozofią TDD, ponieważ prawdopodobnie jej nie promują. również c ++, c # i java kinda mają swoje korzenie w aplikacjach GUI, które są trudne do przetestowania. zwykle znajdziesz więcej testów w ramach frameworków lub bibliotek.
iMacUwhAK,
Jednym z powodów, dla których jestem bardzo zainteresowany znalezieniem dobrej odpowiedzi, jest to, że obecnie pracuję nad aplikacją komputerową z silnikiem C ++ i graficznym interfejsem Java ...
Xavier Nodet

Odpowiedzi:

19
  • JUnit został opracowany w 100% testowo. W rzeczywistości został opracowany w 100% w testach w JUnit , co, jak powiedział kilka razy Kent Beck, było naprawdę zadziwiającym ćwiczeniem.
  • Ja wierzę ZFS plików Sun został opracowany test-driven.
  • Interpretator ikj dla języka programowania Ioke (JVM), interpreter ikc dla języka programowania Ioke (CLI), cały rdzeń Ioke i standardowa biblioteka, a sam język został opracowany w 100% pod kątem testów (w rzeczywistości pod wpływem zachowania) ).
Jörg W Mittag
źródło
DUnit - platforma testowa dla Delphi, zawiera pełny zestaw testów dla samego DUnit. I zgadzam się z Kentem, to trochę pochyla umysł. ;-)
Nick Hodges
14

SQLite. Cały ich kod jest bardzo, bardzo mocno testowany :

Od wersji 3.7.14 biblioteka SQLite składa się z około 81,3 KSLOC kodu C. (KSLOC oznacza tysiące „Linii kodu źródłowego” lub, innymi słowy, linii kodu z wyłączeniem pustych linii i komentarzy.) Dla porównania, projekt ma 1124 razy więcej kodu testowego i skryptów testowych - 91421.1 KSLOC.

liori
źródło
1
wow, mają wiele testów: |
Luca Matteis
8
ciężko przetestowany niekoniecznie oznacza, że ​​został opracowany w sposób testowy (TDD). To było? (Nie przeczytałem całej strony, ale nie widziałem ani „TDD”, ani „prowadzonego” podczas wyszukiwania na stronie, więc nie znam odpowiedzi na to.)
Lindes
1
@lindes: wydaje się, że nie przestrzegają ściśle TDD, ale na przykład dla każdego zgłoszenia błędu najpierw wykonują test. Ponadto uruchamiają testy dla każdego zatwierdzenia. Więc przynajmniej częściowo jest to TDD.
liori,
9

Jeśli pamiętam, FitNesse jest napisane z TDD, a głównym współtwórcą projektu jest wujek Bob Martin, więc prawdopodobnie jest to naprawdę czysty kod

CaffGeek
źródło
Właśnie na to spojrzałem i jest to naprawdę czysty kod.
Robert Harvey
3

Z moich dyskusji z zespołem P&P w Microsoft, Enterprise Library została napisana z TDD.

Walter
źródło
Rozebrałem Enterprise Library 5.0 i rzuciłem okiem na kod źródłowy. Ma bogatą kolekcję testów, ale w projekcie testowym jest wiele urządzeń testujących, obsługi wywołań i innych złożonych obiektów; wydaje się prawie samodzielną aplikacją. Podziwiając tę ​​pracę, nie widzę, jak pasuje ona do światopoglądu TDD refaktora czerwono-zielonego.
Robert Harvey
@Robert - Mogę ci tylko powiedzieć, co mi powiedzieli ... Podczas pisania używali TDD.
Walter
6
@Robert - Nie jest niczym niezwykłym, że pakiet testowy zaczyna żyć własnym życiem. DRY dotyczy zarówno aplikacji, jak i testów. W TDD robisz tylko 1 z 4 rzeczy: pisanie testów, pisanie kodu, testy refaktoryzacji, kod refaktoryzacji. Jeśli robisz wszystkie te rzeczy w układzie refaktora czerwono-zielonego, to robisz TDD.
Jeff Knecht
1
@Jeff: Dziękujemy za wyjaśnienie tego. Myślę, że istnieją pewne różnice między sposobem wyjaśnienia TDD (w kategoriach redukcjonistycznych, mechanistycznych), a sposobem, w jaki jest on faktycznie stosowany w scenariuszach rzeczywistych.
Robert Harvey
3

Nie mogę wymienić żadnych projektów typu open source, które korzystałyby z TDD, ale mogę powiedzieć, że pracowałem nad projektami w świecie rzeczywistym, w których używano TDD ... i byłem ratownikiem!

Steven A. Lowe
źródło
1
Czy ty - lub inni - podzieliłeś się tymi doświadczeniami? Brzmi jak dobra opowieść wojenna.
napisałem o tym trochę na Twitterze i wykorzystałem anegdoty do zilustrowania punktów w innych postach. wystarczy powiedzieć, że pierwsze testy i zautomatyzowane pakiety testowe znacznie ułatwiają mi życie, że nie wracałbym i nie rozwijałem się w żaden inny sposób. Przykład: subtelny błąd w jednym przypadku testowym, którego nie wykryłoby testowanie ręczne (ponieważ testery ręczne nie sprawdzają integralności bazy danych po każdej operacji); uruchamiałem skrzynkę testową wiele razy tego dnia, aby to rozgryźć, co odpowiada ponad 40 godzinom zaoszczędzonego czasu ręcznego testowania. Niedawno wprowadziłem ponad 1000 zmian w kodzie i przeprowadziłem testy, kiedy spałem. Skały TDD.
Steven A. Lowe
Wierzę ci. Po prostu lubię słuchać opowieści. QuickCheck może Cię zainteresować - en.wikipedia.org/wiki/QuickCheck - widziałem prezentację, w której znaleziono błędy wielowątkowości w 15-letnim kodzie produkcyjnym.
„ponieważ testerzy ręczni nie sprawdzają integralności bazy danych po każdej operacji” - ograniczenia i dobrze zaprojektowany schemat DB jeszcze bardziej się kumulują i zaoszczędziłoby ci tyle kłopotu z spędzaniem dnia na testowaniu, ponieważ natychmiast zobaczyłbyś błąd .
gbjbaanb
@gbjbaanb: w tym przypadku „sprawdzenie” było znacznie bardziej skomplikowane niż zwykła integralność schematu, dlatego jest zautomatyzowany test
Steven A. Lowe
0

Mój pierwszy projekt zrealizowany całkowicie w TDD był projektem open source w 2002 roku. Nadal można go znaleźć tutaj:

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

Teraz w pracy pracuję głównie w TDD, ale nie wszyscy w naszym zespole to robią, w porządku, pod warunkiem, że napisali testy na koniec dnia.

Napisaliśmy również kompletną aplikację gwt-gae wykorzystującą TDD jako część główną. http://netnumero.appengine.com/company/mycompany

Nie mogę zwolnić tego kodu, ale pracuję nad kompletnym przykładowym projektem wykonanym w TDD dla GWT, który używa TDD również w interfejsie użytkownika.

Jak tylko skończę (święta Bożego Narodzenia), opublikuję go tutaj https://github.com/ubertob/gwt-tdd-example

Uberto
źródło