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.


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) ).

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.


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


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.


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!


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.