Gibt es Bereiche, in denen TDD einen hohen ROI bietet, und andere Bereiche, in denen der ROI so niedrig ist, dass es sich nicht lohnt, ihm zu folgen? [geschlossen]

31

Testgetriebene Entwicklung. Ich verstehe es, wie es.

Das Schreiben von Tests erfordert jedoch zusätzlichen Aufwand. Daher sollte TDD in der gesamten Codebasis universell verwendet werden, oder es gibt Bereiche, in denen TDD einen hohen ROI bietet, und andere Bereiche, in denen der ROI so niedrig ist, dass es sich nicht lohnt, ihm zu folgen.

Phillip Ngan
quelle
1
ROI "Return On Investment" nachschlagen müssen :)
Songo
Sie haben Ihre eigene Frage bereits beantwortet: Verwenden Sie gegebenenfalls.
9:06 Uhr

Antworten:

27

Ich würde sagen, TDD sollte an Orten vermieden werden, an denen sich der Code wahrscheinlich stark strukturell ändert. Das heißt, es ist großartig, einen Stapel von Tests für eine Methode zu haben, deren Signatur sich selten ändert, aber intern häufiger überarbeitet wird. Es ist jedoch schade, dass Sie Ihre Tests jedes Mal korrigieren müssen, wenn sich eine sehr flüchtige Schnittstelle dramatisch ändert.

Bei den Apps, an denen ich in letzter Zeit gearbeitet habe, handelt es sich um datengesteuerte Webanwendungen, die auf einer auf Gui-> Presenter-> BusinessLogic-> Data Access Layer basierenden Architektur basieren. Meine Datenzugriffsschicht wird getestet, als ob niemand etwas damit zu tun hätte. Die Geschäftslogikschicht ist ziemlich gut getestet. Die Presenter werden nur in stabileren Bereichen getestet, und die sich stündlich ändernde Benutzeroberfläche enthält fast keine Tests.

Fischtoaster
quelle
7

Ich schlage vor, eine vollständige Testsuite in Bereichen zu schreiben, in denen dies sinnvoll und praktisch ist. In weniger praktischen Bereichen schreiben Sie Plausibilitätsprüfungen.

Nach meiner Erfahrung lohnt sich der Aufwand für einen vollständigen Satz von Testfällen in den meisten Fällen sicherlich, aber realistische Codeabdeckung hat eine abnehmende Rendite. Irgendwann macht es einfach keinen Sinn, mehr Tests zu schreiben, um die Codeabdeckung zu erhöhen.

Abhängig von Ihrer Sprache / Technologie ist das Testen der Benutzeroberfläche beispielsweise möglicherweise nicht praktikabel oder sogar machbar. Viele Tests hängen wahrscheinlich davon ab, was ein Benutzer sieht und was nicht automatisiert werden kann. Wie würden Sie testen, ob eine Methode zum Generieren eines Captchas ein Bild erzeugt, das beispielsweise von einem Menschen gelesen werden kann?

Wenn das Schreiben einer vollständigen Testreihe drei Tage in Anspruch nimmt, ist die Wahrscheinlichkeit, dass ein Fehler in dieser Komponente im Verlauf des Tracks auftritt, sehr gering, und das Schreiben der Funktion selbst dauert nur eine halbe Stunde. Sie sollten sich wahrscheinlich Gedanken machen darüber, ob sich diese Zeit lohnt. Vielleicht würde es schon Sinn machen, eine grundlegende Sicherheitsüberprüfung für diese Funktion durchzuführen?

Mein allgemeiner Rat wäre, dass Sie Komponenten vollständig testen sollten, wenn Tests relativ einfach geschrieben werden können. Wenn es sich jedoch um einen Bereich handelt, der nur sehr schwer zu testen ist, ziehen Sie eine Linie in den Sand und schreiben Sie Tests, die den Bereich auf einer höheren Ebene testen, anstatt ihn vollständig zu testen.

Schreiben Sie im vorherigen Captcha-Beispiel möglicherweise Tests, bei denen überprüft wird, ob ein Bild mit der richtigen Größe und dem richtigen Format zurückgegeben wurde und keine Ausnahmen ausgelöst wurden. Das gibt Ihnen ein gewisses Maß an Sicherheit, ohne über Bord zu gehen.

Damovisa
quelle
6

TDD ist für mich kein Overhead. So schreibe ich einfach Code. Warum sagen Sie, dass der Schreibtest "Overhead" ist? Es ist nur ein Teil des Prozesses. Mein Standpunkt ist, dass das Debuggen überlastet ist, und das ist eine Aktivität, die ich im Wesentlichen eingestellt habe, als ich mit TDD-ing angefangen habe. Vor TDD war das Debuggen ein wesentlicher Bestandteil meines Software-Schreibprozesses.

Ich denke, dass es ein sehr gutes Geschäft ist, das Debuggen für das Schreiben von Tests aufzugeben.

xpmatteo
quelle
3

Ein Ort, an dem TDD wirklich nervt, ist das Testen von Ansichten in einer MVC-App.

Da Sie eine Funktion testen, die eine fette HTML-Zeichenfolge zurückgibt, stecken Sie beim HTML-Parsen fest, nur um zu sehen, ob etwas funktioniert hat. Darüber hinaus kann es zu einem Albtraum der Wartbarkeit werden. Eines Tages, wenn Sie ein Kontrollkästchen bewegen und kaboom, ist Ihr Test unterbrochen.

Ich mag TDD für viele meiner Tests, aber es ist nicht das einzige Tool in einem Programmierer-Gürtel.

Sam Saffron
quelle
Um fair zu sein, sollten Sie wirklich keine Logik in Ihrer Sicht haben, die getestet werden kann. Es sollte sich nur um einen großen leeren Steckplatz handeln, in den Sie Ihr Ansichtsmodell einstecken, das das Ergebnis des Aufrufs einer Aktion auf Ihrem hochgradig und leicht testbaren Controller war.
Sara