Gibt es Open Source-Anwendungen, die mithilfe einer testgetriebenen Entwicklung entwickelt wurden und als Modell dafür dienen, wie gut Unit-Tests funktionieren sollten?
Ich würde es vorziehen, Beispiele in C # und .NET zu sehen. (Beachten Sie, dass ich Anwendungen erwähnt habe, nicht nur Bibliotheken.)
Ich bin ein mittelständischer Programmierer, der wirklich an TDD glauben und es üben möchte. Die App, an der ich in meiner täglichen Arbeit arbeite, ist ziemlich kompliziert - ungefähr 1 Million Codezeilen - und ich würde gerne mehr Unit-Tests einführen. Wir haben einige Unit-Tests durchgeführt, aber meine Bemühungen bei TDD und die Arbeit an Code, der bereits getestet wird, waren nicht ermutigend.
Nach meiner zugegebenermaßen begrenzten Erfahrung scheint TDD im Namen der Entkopplung viel Komplexität zu fördern. Die Teile der App, die schwer zu testen sind und die zufällig kritisch sind, werden an die Peripherie weitergeleitet und in den Bereich der Integrationstests verschoben, die möglicherweise jemals geschrieben wurden oder nicht. (Ich denke hier an die üblichen Verdächtigen, Dateisystemzugriff, Hydratisieren von Objekten aus einer Datenbank, asynchrone Webaufrufe usw.)
Der zu testende Code besteht in der Regel aus einer umfangreichen Zusammenarbeit zwischen Objekten und möglicherweise einer einfachen Ablauflogik, die alle im Speicher abläuft und möglicherweise einfacher und verständlicher geschrieben werden könnte, wenn nicht alles vollständig entkoppelt werden müsste zum Prüfen.
Ich verstehe die Techniken zum Verspotten von Abhängigkeiten und Ähnlichem, aber nach meiner Erfahrung führt die Verwendung von Verspotten zu sehr spröden Tests. Wenn mein erster Instinkt beim Erleben einer Reihe von Tests rot wird: "Großartig, jetzt muss ich alle Fehler beheben", dann sind meine Tests eher ein Widerstand als ein Sicherheitsnetz.
Ich versuche, diese mentale Barriere zu überwinden, und als Teil davon lese ich das Buch von Michael Feathers, Effective Working with Legacy Code . Ich hoffe es wird mir zeigen was ich vermisse.
Ich würde auch gerne einige nicht-triviale .NET-Anwendungen mit guter Codeabdeckung studieren, vielleicht ein Content-Management-System oder eine CRUD-App. Das FitNesse-Test-Framework, über das Onkel Bob spricht, werde ich mir wahrscheinlich ansehen, aber es wäre schön, etwas in der Sprache zu sehen, die ich am besten kenne.
Anregungen oder Worte der Weisheit wäre dankbar.
quelle
Antworten:
Ich weiß nicht, ob TDD verwendet wurde, aber ein herausragendes Beispiel für Tests ist sqlite, das eine bemerkenswerte 100% ige Zweigabdeckung aufweist und mehr als 1000-mal mehr Testcode und Skripte als Produktcode enthält.
quelle
Das Orchard-Projekt könnte das sein, wonach Sie suchen. Es ist eine .NET / MVC / TDD-App, die ziemlich komplex, aber nicht schlecht ist und einige bewährte Methoden und Muster demonstriert.
http://orchard.codeplex.com/wikipage?title=solution
und ich vermute mal den aktualisierten link:
http://docs.orchardproject.net/
quelle
Viele Open-Source-Bibliotheken von Drittanbietern sind TDDed. Im Ruhezustand befindliche Rhinos-Bibliotheken wie RhinoMocks und NHibernate werden von ihren Entwicklern mithilfe von XUnit als Unit-Testing-Framework TDD-geprüft.
Mit OSS können Sie normalerweise nicht garantieren, dass ALLES im Produkt TDDed wurde. Die Community verfügt möglicherweise über Standards wie diese und verwendet möglicherweise sogar einen Build-Bot, der Messdaten zur Codeabdeckung ausführt. TDD ist jedoch eine Mentalität, die vom Entwickler übernommen werden muss und bei der die Öffentlichkeit in der Lage ist, sich für OpenSQL zu engagieren. Quell-VCS-Trunks wie die auf GitHub können von jedermann mit beliebiger Testabdeckung geändert werden (oder wenn eine Abdeckung erforderlich ist, könnten die Tests nachträglich geschrieben worden sein, was eine Verletzung des Geistes von TDD darstellt, aber es gibt wirklich keine eine gute Möglichkeit, es beim Festschreiben zu erwischen).
quelle