Gutes Beispiel für komplexen Code mit TDD [closed]

37

Was wäre ein gutes Beispiel für den Einsatz von TDD in großen, realen, komplexen Projekten? Alle Beispiele, die ich bisher gesehen habe, sind Spielzeugprojekte zum Zweck eines Buches oder einer Zeitung ...

Können Sie ein Open-Source-Projekt nennen, das TDD stark nutzt? Am liebsten in C ++, aber ich kann Java und C # oder andere ähnliche Sprachen lesen.

Xavier Nodet
quelle
schwer zu beantworten Ihre Frage. Es gibt viele Projekte, die automatisierte Tests verwenden, aber es ist schwer zu sagen, wie weit sie der TDD-Philosophie folgen, da sie diese wahrscheinlich nicht fördern. Auch C ++, C # und Java haben ihre Wurzeln in GUI-Anwendungen, die schwer zu testen sind. In der Regel finden Sie mehr Tests in Frameworks oder Bibliotheken.
iMacUwhAK
Ein Grund, warum ich sehr daran interessiert bin, eine gute Antwort zu finden, ist, dass ich derzeit an einer Desktop-Anwendung mit einer C ++ - Engine und einer Java-GUI
arbeite

Antworten:

19
  • JUnit wurde zu 100% testgetrieben entwickelt. In der Tat wurde es zu 100% testgetrieben in JUnit entwickelt.
  • Ich glaube, Suns ZFS-Dateisystem wurde testgetrieben entwickelt.
  • Der ikj-Interpreter für die Ioke- Programmiersprache (JVM), der ikc-Interpreter für die Ioke-Programmiersprache (CLI), die gesamte Ioke-Kern- und Standardbibliothek und tatsächlich die Sprache selbst wurden zu 100% testgetrieben (tatsächlich verhaltensgetrieben) entwickelt ).
Jörg W. Mittag
quelle
DUnit - das Testframework für Delphi, enthält eine vollständige Reihe von Tests für DUnit. Und ich stimme Kent zu, das ist ein bisschen nervenaufreibend. ;-)
Nick Hodges
14

SQLite. Ihr gesamter Code ist sehr, sehr stark getestet :

Ab Version 3.7.14 besteht die SQLite-Bibliothek aus ca. 81,3 KSLOC C-Code. (KSLOC bedeutet Tausende von "Quellcodezeilen" oder mit anderen Worten Codezeilen ohne Leerzeilen und Kommentare.) Im Vergleich dazu enthält das Projekt das 1124-fache an Testcode und Testskripten - 91421.1 KSLOC.

Liori
quelle
1
wow, sie haben viele tests: |
Luca Matteis
8
Intensiv getestet bedeutet nicht unbedingt, dass es testgetrieben (TDD) entwickelt wurde. War es? (Ich habe nicht die ganze Seite gelesen, aber ich habe weder "TDD" noch "angetrieben" in In-Page-Suchen gesehen, daher kenne ich die Antwort darauf nicht.)
Lindes
1
@lindes: Sie scheinen TDD nicht strikt zu befolgen, aber zum Beispiel machen sie für jeden Fehlerbericht zuerst einen Test. Außerdem führen sie Tests für jedes Commit durch. Zumindest teilweise ist dies TDD.
Liori
9

Wenn ich mich erinnere, dass FitNesse mit TDD geschrieben wurde und der Hauptverantwortliche für das Projekt Onkel Bob Martin ist, ist es wahrscheinlich wirklich sauberer Code

CaffGeek
quelle
Ich habe es mir nur angesehen und es ist wirklich sauberer Code.
Robert Harvey
3

Nach meinen Gesprächen mit dem P & P-Team von Microsoft wurde Enterprise Library mit TDD geschrieben.

Walter
quelle
Ich habe Enterprise Library 5.0 heruntergeladen und mir den Quellcode angesehen. Es gibt eine umfangreiche Sammlung von Tests, aber das Testprojekt enthält viele Testvorrichtungen, Call-Handler und andere komplexe Objekte. es scheint fast wie eine eigenständige Anwendung. Während ich die Arbeit bewundere, sehe ich nicht, wie sie in das TDD-Weltbild des Rot-Grün-Refaktors passt.
Robert Harvey
@Robert - Ich kann dir nur sagen, was sie mir gesagt haben ... Sie haben TDD verwendet, als sie es geschrieben haben.
Walter
6
@Robert - Es ist nicht ungewöhnlich, dass die Testsuite ein Eigenleben entwickelt. DRY gilt sowohl für Ihre Anwendung als auch für die Tests. In TDD machen Sie immer nur eines von vier Dingen: Schreiben von Tests, Schreiben von Code, Umgestalten von Tests, Umgestalten von Code. Wenn Sie all diese Dinge in einem Rot-Grün-Refaktor-Muster tun, dann tun Sie TDD.
Jeff Knecht
1
@ Jeff: Danke für die Klarstellung. Ich denke, es gibt einige Unterschiede zwischen der Art und Weise, wie TDD erklärt wird (reduktionistisch, mechanistisch), und der Art und Weise, wie es tatsächlich in realen Szenarien verwendet wird.
Robert Harvey
3

Ich kann keine Open-Source-Projekte nennen, die TDD verwendet haben, aber ich kann Ihnen sagen, dass ich an realen Projekten gearbeitet habe, in denen TDD verwendet wurde ... und ein Lebensretter war!

Steven A. Lowe
quelle
1
Haben Sie - oder andere - diese Erfahrungen geteilt? Klingt nach einer guten Kriegsgeschichte.
Ich habe ein bisschen darüber getwittert und Anekdoten verwendet, um Punkte in anderen Posts zu veranschaulichen. Es genügt zu sagen, dass Test-First-Design und automatisierte Testsuiten mein Leben so viel einfacher machen, dass ich nicht zurückkehren und auf andere Weise entwickeln würde. Beispiel: subtiler Fehler in einem Testfall, den manuelle Tests nicht gefunden hätten (da die manuellen Tester die Datenbankintegrität nicht nach jeder Operation prüfen); An diesem Tag wurden viele Male Testfälle ausgeführt, um dies herauszufinden. Dies entspricht einer Zeitersparnis von über 40 Stunden manuellem Testen. vor kurzem über 1000 Codeänderungen vorgenommen und die Tests ausgeführt, während ich schlief. TDD rockt.
Steven A. Lowe
Ich glaube Ihnen. Ich höre nur gerne die Geschichten. Sie könnten QuickCheck interessant finden - en.wikipedia.org/wiki/QuickCheck - Ich habe eine Präsentation gesehen, in der Multithreading-Fehler im 15 Jahre alten Produktionscode gefunden wurden.
"Weil die manuellen Tester die Datenbankintegrität nicht nach jedem Vorgang überprüfen" - Einschränkungen und ein gut gestaltetes DB-Schema sind um ein Vielfaches besser und hätten Ihnen die Mühe erspart, einen Tag lang Tests durchführen zu müssen, da Sie den Fehler sofort gesehen hätten .
gbjbaanb
@gbjbaanb: In diesem Fall war die 'Prüfung' weitaus komplexer als die einfache Schema-Integrität. Deshalb gibt es einen automatisierten Test dafür
Steven A. Lowe
0

Mein erstes Projekt, das vollständig in TDD durchgeführt wurde, war ein Open Source-Projekt im Jahr 2002. Sie finden es immer noch hier:

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

Derzeit arbeite ich hauptsächlich im TDD-Bereich, aber nicht jeder in unserem Team tut dies, vorausgesetzt, die Tests wurden am Ende des Tages geschrieben.

Wir haben auch eine vollständige GWT-GAE-Anwendung mit TDD als Kernteil geschrieben. http://netnumero.appengine.com/company/mycompany

Ich kann diesen Code nicht freigeben, arbeite aber an einem vollständigen Beispielprojekt in TDD für GWT, das TDD auch in der Benutzeroberfläche verwendet.

Sobald ich fertig bin (Weihnachtsferien), werde ich es hier veröffentlichen https://github.com/ubertob/gwt-tdd-example

Uberto
quelle