Ist es möglich, Test Driven Development (TDD) in einem reifen Projekt einzuführen? [geschlossen]

StackOverflow https://stackoverflow.com/questions/107919

  •  01-07-2019
  •  | 
  •  

Frage

  • Sagen wir einen Wert von TDD zu spät erkannt haben. Projekt ist bereits gereift, viele Kunden begannen es zu benutzen.
  • Sagen Sie automatisierte Tests verwendet werden, sind meist Funktions- / Systemtests und es ist ein gutes Geschäft von automatisierten GUI-Tests.
  • Sagen wir neue Feature-Anfragen haben, und neue Fehlerberichte (!). So viel Entwicklung noch weitergeht.
  • Hinweis wäre es schon viele Business-Objekt sein, mit keinem oder nur geringen Unit-Tests.
  • Zu viel Zusammenarbeit / Beziehungen zwischen ihnen, die wiederum nur durch eine höhere Ebene Funktions- / Systemtests geprüft. Keine Integrationstests per se.
  • Große Datenbanken anstelle mit vielen Tabellen, Views, etc. Nur ein einziges Business-Objekt instanziiert es geht schon viel Datenbank Rundreisen.

Wie können wir einführen TDD in diesem Stadium?

Mocking scheint der Weg zu gehen. Aber die Menge an spöttisch wir hier tun müssen, scheint, wie zu viel. Klingt wie aufwändige Infrastruktur muss für das spöttische System entwickelt werden, für bestehendes Material arbeitet (BO, Datenbanken, usw.).

Heißt das TDD bedeutet eine geeignete Methode nur, wenn sie von vorne anfangen? Ich bin daran interessiert, über die machbar Strategien zu hören TDD in einem bereits ausgereiften Produkt einzuführen.

War es hilfreich?

Lösung

eine komplexe spöttische Infrastruktur erstellen wird wahrscheinlich nur die Probleme in Ihrem Code verstecken. Ich würde empfehlen, dass Sie mit Integrationstests mit einer Testdatenbank zu starten, um die Bereiche der Codebasis, die Sie ändern möchten. Sobald Sie genügend Tests, um sicherzustellen, dass Sie nichts kaputt machen, wenn Sie eine Änderung vornehmen, können Sie beginnen, den Code Refactoring, um es testbar zu machen.

Se auch Michael Feathers ausgezeichnetes Buch Effektives Arbeiten mit Legacy-Code , sein ein lesen für jedermann muss denken an TDD in einem Legacy-Code-Basis eingeführt werden.

Andere Tipps

Ich denke, die völlig machbar TDD in eine bestehende Anwendung einzuführen, in der Tat ich es vor kurzem selbst getan haben.

Am einfachsten ist es neue Funktionen in einer TDD-Art und Weise und die Umstrukturierung den vorhandenen Code zu codieren, dies zu berücksichtigen. Auf diese Weise beginnen Sie mit einem kleinen Teil des Codes getestet von aber die Effekte beginnen durch die gesamte Code-Basis zu verbreiten.

Wenn Sie einen Fehler haben, dann einen Komponententest schreiben zu reproduzieren, den Code Refactoring wie nötig (es sei denn, der Aufwand wirklich nicht wert ist).

Ich persönlich glaube nicht, dass es erforderlich gehen verrückt und zu versuchen und Retrofit-Tests in das bestehende System als das ohne eine große Menge an Leistung sehr langwierig sein.

Zusammengefasst beginnen klein und Ihr Projekt wird mehr und mehr Test infiziert werden.

Ja, Sie können. Aus Ihrer Beschreibung ist das Projekt in einer guten Form - feste Menge von Funktionstests Automatisierung ist ein Weg zu gehen! In einigen Aspekten seiner noch nützlicher als Unit-Tests. Denken Sie daran, dass TDD! = Unit-Tests, es ist alles über kurze Iterationen und feste Abnahmekriterien.

Bitte beachten Sie, dass mit einem bestehenden und anerkannten Projekt macht tatsächlich Testen einfacher - Arbeits Anwendung ist die beste Anforderungsspezifikation. So sind Sie in einer besseren Position als jemand, der nur ein Stück Papier zu arbeiten haben.

Starten Sie einfach auf Ihren neuen Anforderungen / Fehlerkorrekturen arbeiten mit einem TDD. Denken Sie daran, dass es ein Overhead mit Schalten die Methodik (stellen Sie sicher, dass Ihre Kunden wissen das!) In Verbindung gebracht werden und wahrscheinlich ziemlich viel Zurückhaltung von den Teammitgliedern erwarten, die zu dem ‚guten alten Weisen‘ eingesetzt werden.

Haben die alten Dinge nicht berühren, es sei denn Sie benötigen. Wenn Sie einen Verbesserungsvorschlag haben, die für das Erledigen der zusätzlichen Set-up Dinge vorhandene Sachen dann Faktor in der Verlängerung auswirken wird.

Persönlich kann ich nicht viel Wert sehen eine komplexe Infrastruktur für Attrappen bei der Einführung - sicherlich gibt es eine Möglichkeit, die gleichen Ergebnisse in einem leichten Modus zu erreichen, aber es hängt natürlich von Ihren persönlichen Umständen

Ein Tool, das Sie Legacy-Code testen kann helfen (vorausgesetzt, Sie nicht \ können nicht die Zeit haben, es zu Refactoring ist Typemock Trenner: Typemock.com Es ermöglicht die Abhängigkeiten in bestehende Code Injektion ohne Schnittstellen extrahieren zu müssen und so, weil es nicht Standard-Reflexionstechniken (dynamische Proxy etc ..) verwenden wird, sondern verwendet das Profiler-APIs statt. Es wurde zu testen Anwendungen verwendet, die auf Sharepoint angewiesen, Httpcontext und anderen problematischen Bereichen. Ich empfehle Ihnen, einen Blick darauf werfen. (Ich arbeite als Entwickler in dieser Gesellschaft, aber es ist das einzige Werkzeug, das Sie nicht zwingen, bestehenden Legacy-Code Refactoring, Zeit und Geld zu sparen) Ich würde auch sehr empfehlen „effektiv mit Legacy-Code Arbeiten“ für weitere Techniken.

Roy

Ja, Sie können. Tun Sie das nicht alles auf einmal, aber vorstellen, was ein Modul testen müssen, wenn man sie berührt.

Sie können auch mit mehr hohe Akzeptanztests beginnen und arbeiten Sie sich nach unten von dort aus (werfen Sie einen Blick auf Fitnesse für diese).

würde ich mit einigen grundlegenden Integrationstests beginnen. Diese erhalten vom Rest des Personals einkaufen. Dann starten Sie die Teile des Codes zu trennen, die Abhängigkeiten aufweisen. Arbeiten zur Verwendung von Dependency Injection, wie es Ihren Code viel mehr prüfbar machen. Behandeln Sie Fehler als Chance prüfbaren Code zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top