Ich bin Teil eines Entwicklerteams, das mit vielen anderen Teams zusammenarbeitet, um eine Anwendung zu warten und zu verbessern, die seit mindestens 15 Jahren verwendet wird. Als es zum ersten Mal gebaut und entworfen wurde, war TDD unbekannt.
Die Anwendung ist ziemlich stabil, und wir stoßen selten auf einen Fehler beim Stoppen der Show, aber wir machen durchschnittlich ein oder zwei Fehler pro Woche, die die Servicequalität erheblich beeinträchtigen. Es dauert ewig, diese Fehler zu finden und zu beheben, hauptsächlich aufgrund von Fingerzeig. Die einzigen Tests, die wir haben, sind Schnittstellentests. Da viel Zeit damit verschwendet wird, nach dem Fehler zu suchen, bevor er behoben werden kann, planen ich und ein anderer Entwickler, eine testgesteuerte Entwicklung vorzuschlagen. In Kürze wird es eine neue Überarbeitung geben, und wir möchten, dass die neuen Module nahezu vollständig getestet werden. Wir planen außerdem, Testeinheiten für jeden Code zu erstellen, den wir ändern müssen, der älter ist (dh Fehlerbehebung oder Funktionsimplementierung) ), aber keine Zeit damit zu verbringen, Testfälle für Code zu entwickeln, der keine Probleme verursacht hat.
Das erscheint mir vernünftig. Diesen Monat hatten wir einen Fehler, dessen Behebung mehr als zwei Wochen dauerte, der jedoch vor der Bereitstellung hätte identifiziert werden können, wenn Unit-Tests durchgeführt worden wären. Für unsere Manager sieht es jedoch so aus, als würden sie mehr Geld ausgeben.
Wie kann ich unsere Kunden davon überzeugen, dass sie das Geld für Unit-Tests und testgetriebene Entwicklung ausgeben möchten? Gibt es Studien, die den ROI von Unit-Tests belegen?
quelle
Antworten:
Das direkte Einbau eines vollständigen TDD in einen Legacy-Code und ein Wartungsprojekt sind sehr schwer zu verkaufen. Ein Ansatz, den ich sehr gut gesehen habe, ist dieser. Erstellen Sie für jeden eingehenden Fehler einen automatisierten Nicht-Unit-Test, der den Fehler demonstriert. Mit "Nicht-Einheit" meine ich etwas, das viele Teile des Systems berühren, Datenbank und Dateisystem treffen usw. kann - aber mit "automatisiert" meine ich Läufe ohne menschliche Interaktion. Dies ist die Art von Test, die Sie auf jeden Fall in Ihrer Regressionssuite wünschen. Wenn Sie es schreiben, werden viele Dinge erreicht: Sie machen den Code testbar, auch wenn er sich auf dieser sehr groben Ebene befindet, und Sie sind der Konstellation von Code ausgesetzt, die möglicherweise etwas mit dem Fehler zu tun hat, sodass Sie darüber informiert und informiert werden sehr spezifisch relevantes Material.
Aber das ist noch nicht alles. Wenn dieser Test ausgeführt wird und rot ausgeführt wird (was den Fehler im Code zeigt), nehmen Sie sich Zeit, um herauszufinden, was falsch ist (Sie müssen dies auf jeden Fall tun). Aber reparieren Sie es noch nicht. Wenn Sie das Problem isoliert haben, schreiben Sie eine EinheitTest, der dieses Problem zeigt. Jetzt haben Sie etwas, mit dem Sie arbeiten können (und nicht zufällig mussten Sie möglicherweise ein bisschen mehr umgestalten, um eine noch bessere Testbarkeit zu erreichen). Beheben Sie den Fehler. Beobachten Sie den Test der Einheit. Vielleicht mit einigen Randfällen ausarbeiten; Holen Sie sich diese eine Einheit - die, die Sie nur zwei Wochen Zeit gekostet hat - solide und sauber und gut getestet. Führen Sie nun den Regressionstest aus und beobachten Sie, wie er bestanden wird (wenn dies nicht der Fall ist, müssen Sie natürlich noch mehr Forschung und Arbeit auf Einheitenebene erledigen - iterieren Sie, bis auch dieser bestanden wird). Checken Sie alles ein. Was haben Sie? Regressionstests für zuvor fehlerhaften Code. Unit-Tests für zuvor fehlerhaften Code. Arbeitscode, der fehlgeschlagen ist. Besser gestalteter Code, weil er jetzt testbarer ist als früher. Besseres Vertrauen in Ihre Codebasis,
Es ist kein "reines" TDD. Es zeigt jedoch schnell Ergebnisse und verbessert die Qualität Ihres Codes im Laufe der Zeit. Die Ergebnisse helfen Ihnen beim Management-Buy-In.
quelle
In meiner Firma habe ich mich nur für die "nur ein Grunzen" -Methode von JoelOnSoftware entschieden und angefangen, Komponententests zu schreiben, wenn ich normalerweise einfach eine Art Wegwerfkonsolenanwendung zusammen gehackt hätte. Ich fing an, Dinge mit stabileren Releases viel schneller zu erledigen, und wurde dafür bemerkt. Auf die Frage, was ich mache, erklärte ich, dass ich angefangen habe, TDD zu verwenden und Unit-Tests zu schreiben, wenn ich alten Code geändert oder neuen Code geschrieben habe. Meine Entwicklerkollegen wurden neugierig und verwendeten selbst integrierte Komponententests. Ich glaube nicht, dass es ein gutes Argument dafür gibt, Tests für funktionierenden Legacy-Code zu schreiben, aber wenn Sie behaupten können, dass das Schreiben automatisierter Tests schneller und bequemer ist als das Schreiben von Konsolen-Hack-Spaghetti, werden intelligente Entwickler mitmachen.Die anderen Vorteile, die zu einer qualitativ hochwertigeren Software führen, werden ebenfalls vorhanden sein, aber der Schlüssel zur Anmeldung von Entwicklern liegt darin, zu zeigen, dass dies ihr Leben erleichtert. Was die Anmeldung von Unternehmen angeht, sollte die Tatsache, dass dies zu einer besseren Software führt und wahrscheinlich weniger Zeit für den Versand benötigt als zuvor, mehr als genug sein, um sie zu überzeugen.
quelle
Zunächst einmal sollten Sie Ihre Einstellung und Ihr Gefühl der Aufrichtigkeit für einen hochwertigen Mehrwert schätzen, der zum Geld des Kunden beiträgt. Und hier sind meine Gedanken darüber, wie Sie Ihren Manager und Kunden überzeugen können:
Es gibt noch einen anderen Weg, und versuchen Sie, gemeinsam mit Ihrem Manager an agilen Konferenzen teilzunehmen, die in der Umgebung stattfinden. Es sollte sich auf jeden Fall lohnen, daran teilzunehmen.
Wenn Sie der Meinung sind, dass nichts funktioniert, fahren Sie fort ... schließen Sie sich dem Ort an, der zu Ihnen passt. Ehrlich gesagt, das habe ich getan. Als alles fehlschlug, ging ich weiter;)
Und wissen, welche Unit-Tests nach dem Schreiben des Codes nicht wirklich TDD sind, aber das kann immer der erste Schritt sein. Zumindest hier passt es so gut.
Wünsche dir viel Glück und Erfolg!
quelle