Ich habe keine Forschungsarbeiten oder Statistiken, aber ich werde meine Erfahrungen aus der Arbeit in einem Team / einer Organisation, die in der Vergangenheit nur eine geringe bis durchschnittliche Abdeckung durch Unit-Tests und keine End-to-End-Tests aufwiesen, schrittweise wiedergeben Bewegen Sie die Messlatte dorthin, wo wir jetzt sind, mit mehr ATDD-Ansatz (aber ironischerweise nicht mit herkömmlichem TDD).
Dies ist insbesondere die Art und Weise, in der Projektzeitpläne abgespielt wurden (und weiterhin für andere Teams / Produkte in derselben Organisation abgespielt werden):
- Bis zu 4 Wochen Analyse und Implementierung
- 2 Wochen Regressionstest, Fehlerbehebung, Stabilisierung und Release-Vorbereitung
- 1-2 Wochen nach der Behebung bekannter Mängel
- 2-3 Wochen Code-Bereinigung und Probleme / Support nach der Produktion (unbekannte Fehler / ungeplante Ausfälle)
Dies scheint ein lächerlicher Aufwand zu sein, ist jedoch tatsächlich sehr verbreitet. In vielen Organisationen wird dies nur häufig durch fehlende oder ineffektive Qualitätssicherung maskiert. Wir haben gute Tester und eine Kultur intensiver Tests, so dass diese Probleme frühzeitig erkannt und (meistens) im Voraus behoben werden, anstatt sich über einen Zeitraum von vielen Monaten / Jahren langsam zu entwickeln. 55-65% Wartungsaufwand ist geringer als die allgemein akzeptierte Norm von 80% der Zeit auf dem Debuggen ausgegeben werden - was sinnvoll erscheint, weil wir hatten einige Unit - Tests und funktionsübergreifende Teams (einschließlich QA).
Während der ersten Veröffentlichung unseres neuesten Produkts durch unser Team hatten wir begonnen, Abnahmetests nachzurüsten, aber sie waren nicht ganz auf dem neuesten Stand und wir mussten uns immer noch auf viele manuelle Tests verlassen. Die Veröffentlichung war etwas weniger schmerzhaft als andere, IMO teilweise aufgrund unserer willkürlichen Akzeptanztests und auch teilweise aufgrund unserer sehr hohen Abdeckung durch Komponententests im Vergleich zu anderen Projekten. Dennoch haben wir fast zwei Wochen für die Regression / Stabilisierung und zwei Wochen für die Nachbearbeitung aufgewendet.
Im Gegensatz dazu hatte jede Veröffentlichung seit dieser ersten Veröffentlichung frühe Akzeptanzkriterien und Akzeptanztests, und unsere aktuellen Iterationen sehen folgendermaßen aus:
- 8 Tage Analyse und Implementierung
- 2 Tage Stabilisierung
- 0-2 Tage kombinierter Support und Bereinigung nach der Produktion
Mit anderen Worten, wir sind von 55-65% des Wartungsaufwands auf 20-30% des Wartungsaufwands gestiegen. Gleiches Team, gleiches Produkt, der Hauptunterschied ist die fortschreitende Verbesserung und Straffung unserer Abnahmetests.
Die Kosten für die Wartung betragen pro Sprint 3-5 Tage für einen QA-Analysten und 1-2 Tage für einen Entwickler. Unser Team besteht aus 4 Entwicklern und 2 QA-Analysten. (Ohne UX, Projektmanagement usw.) Das sind maximal 7 von 60 Manntagen. Dies wird auf einen Implementierungsaufwand von 15% aufgerundet die sichere Seite.
Wir verbringen 15% jeder Veröffentlichungsperiode damit, automatisierte Abnahmetests zu entwickeln. Dabei können wir 70% jeder Veröffentlichung reduzieren, indem wir Regressionstests durchführen und Fehler vor und nach der Produktion beheben.
Sie haben vielleicht bemerkt, dass die zweite Zeitachse viel genauer und auch viel kürzer ist als die erste. Dies wurde durch die Akzeptanzkriterien und Akzeptanztests im Vorfeld ermöglicht, da dies die "Definition von erledigt" erheblich vereinfacht und es uns ermöglicht, viel sicherer auf die Stabilität einer Veröffentlichung zu vertrauen. Kein anderes Team hat (bis jetzt) einen zweiwöchentlichen Release-Zeitplan erhalten, außer vielleicht bei relativ einfachen Wartungs-Releases (nur Bugfixes usw.).
Ein weiterer interessanter Nebeneffekt ist, dass wir unseren Release-Zeitplan an die Geschäftsanforderungen anpassen konnten. Einmal mussten wir es auf ungefähr 3 Wochen verlängern, um es mit einem anderen Release zu vereinbaren, und konnten dies tun, während wir mehr Funktionalität lieferten, ohne zusätzliche Zeit für Tests oder Stabilisierung aufzuwenden. Ein anderes Mal mussten wir es aufgrund von Feiertagen und Ressourcenkonflikten auf ungefähr 1½ Wochen verkürzen. wir mussten weniger entwicklungsarbeit leisten, konnten aber erwartungsgemäß entsprechend weniger zeit für tests und stabilisierungen aufwenden, ohne neue mängel einzuführen.
Aus meiner Erfahrung heraus sind Abnahmetests, insbesondere wenn sie sehr früh in einem Projekt oder Sprint durchgeführt werden und die vom Product Owner festgelegten Abnahmekriterien eingehalten werden, eine der besten Investitionen, die Sie tätigen können. Im Gegensatz zu herkömmlichen TDD, die richtig andere Menschen konzentrierten mehr darauf hin , auf der Schaffung von prüfbaren Code als fehlerfreien Code - ATDD tut wirklich Hilfe Fang Mängel viel schneller; Es ist das organisatorische Äquivalent zu einer Armee von Testern, die jeden Tag einen vollständigen Regressionstest durchführt, aber viel billiger.
Hilft Ihnen ATDD bei längerfristigen Projekten im RUP- oder (ugh) Waterfall-Stil, die 3 Monate oder länger dauern? Ich denke, die Jury ist immer noch nicht damit einverstanden. Nach meiner Erfahrung sind die größten und hässlichsten Risiken bei langfristigen Projekten unrealistische Fristen und sich ändernde Anforderungen. Unrealistische Fristen führen dazu, dass Benutzer Verknüpfungen verwenden, einschließlich Testverknüpfungen, und signifikante Änderungen an den Anforderungen machen wahrscheinlich eine große Anzahl von Tests ungültig, sodass sie neu geschrieben werden müssen und möglicherweise den Implementierungsaufwand erhöhen.
Ich bin mir ziemlich sicher, dass ATDD eine fantastische Auszahlung für agile Modelle oder für Teams hat, die nicht offiziell agil sind, aber sehr häufige Veröffentlichungspläne haben. Ich habe es noch nie bei einem Langzeitprojekt ausprobiert, hauptsächlich, weil ich noch nie von einer Organisation gehört habe, die bereit ist, es bei einem solchen Projekt auszuprobieren. Fügen Sie daher hier den Standard-Haftungsausschluss ein. YMMV und das alles.
PS In unserem Fall ist kein zusätzlicher Aufwand für den "Kunden" erforderlich, aber wir haben einen engagierten, hauptberuflichen Product Owner, der die Akzeptanzkriterien tatsächlich schreibt. Wenn Sie im Bereich "Consultingware" tätig sind, könnte es meiner Meinung nach viel schwieriger sein, die Endbenutzer dazu zu bringen, nützliche Akzeptanzkriterien zu schreiben. Ein Product Owner / Product Manager scheint ein ziemlich wesentliches Element für ATDD zu sein, und obwohl ich wieder nur aus eigener Erfahrung sprechen kann, habe ich noch nie davon gehört, dass ATDD erfolgreich praktiziert wird, ohne dass jemand diese Rolle übernimmt.