Ist TDD effektiv?

Während einer interessanten Diskussion „übertrumpfte“ eine sehr angesehene Person das „unzerstörbare“ Argument:
Es gibt viele Studien, die die Wirksamkeit von TDD belegen

Ja wirklich. Wenn Sie zu Google Scholar gehen, geben Sie die Schlüsselwörter "TDD" und "Effizienz" ein - es wird viele wissenschaftliche Artikel geben , aber ist das so einfach? Obwohl ich selbst ein großer Fan von TDD bin, betrachte ich mich auch als Skeptiker und habe mich entschlossen zu prüfen, ob wissenschaftlich bewiesen wurde, dass TDD so cool ist.

Ich finde Ihre mangelnde Skepsis beunruhigend

Testgetriebene Entwicklung (TDD) ist schon lange bei uns und war die ganze Zeit Gegenstand hitziger Debatten. Das Wesentliche von TDD ist, dass Sie mit der Entwicklung beginnen müssen, indem Sie einen fallenden Unit-Test schreiben. Anschließend wird Code geschrieben, der diesen Test „grün“ macht, und so weiter in einer Schleife. Für diejenigen, die nicht auf dem neuesten Stand sind, finden Sie den TDD-Leitfaden in der IDE-Idee .

Einige Entwickler sind zuversichtlich, dass TDD die Effizienz und Qualität um mindestens 146% verbessert. Einige Entwickler wissen mit Sicherheit, dass TDD völliger Unsinn ist, und das Schreiben von Tests vor dem Schreiben von Code ist wie das Skifahren auf Asphalt. Ein Kompromiss zwischen diesen Entwicklungsgruppen lohnt sich nicht.

Aber zurück zur Wissenschaft. Durch einen glücklichen Zufall habe ich am Masterstudiengang Informatik mit Big Data Analytics der Wrexham Glyndŵr University studiert (übrigens - ich empfehle es jedem, und ich werde es separat schreiben), und jetzt gehe ich das Modul Kritische Forschung durch, in dem Sie lernen, wissenschaftliche Artikel zu lesen und analysieren ihre Gültigkeit.
Was ist unser Beweis?

Es gibt in der Tat viel Forschung über die Wirksamkeit und Nützlichkeit von TDD. Wenn Sie jedoch die Studien selbst lesen, werden Sie feststellen, dass sie zu widersprüchlichen Schlussfolgerungen kommen.

In dem 2007 veröffentlichten Bericht „Eine experimentelle Bewertung der Wirksamkeit und Effizienz der testgetriebenen Entwicklung“ wurde beispielsweise der Schluss gezogen, dass TDD die Produktivität von Entwicklern verbessert, ohne die Qualität zu beeinträchtigen [1].

In einem anderen Bericht, der die Ergebnisse mehrerer anderer Studien untersuchte und eine eigene Studie „Bewertung der Wirksamkeit testgetriebener Entwicklung: Vorteile und Fallstricke“ durchführte, kam 2017 zu dem Schluss, dass TDD die Produktqualität verbessern kann, jedoch zu einer geringeren Produktivität führt. Darüber hinaus wurde beobachtet, dass die meisten Entwickler TDD als unnatürlich empfinden [2].

Laut einer anderen Studie, „Ein repliziertes Experiment zur Wirksamkeit der Test-First-Entwicklung“, 2013, konnten die Forscher keinen überzeugenden und signifikanten Effekt von Test-First- oder Test-Last-Ansätzen auf die Entwicklerproduktivität oder Produktqualität feststellen [3].

Um einen Nagel in den Sarg der „Beweise“ für die Wirksamkeit und Nützlichkeit von TDD zu hämmern, lesen Sie den Übersichtsbericht „Überblick über die testgetriebenen Entwicklungsforschungsprojekte und -experimente“, 2012 [4], in dem sie auf der Grundlage einer großen Anzahl verfügbarer Studien versuchten, zu einer Schlussfolgerung über die Beweise zu gelangen Effizienz und positive Wirkung von TDD. Die Autoren kamen zu dem Schluss, dass es keine überzeugenden Beweise für die vorteilhaften Wirkungen von TDD gibt. Unterschiede in den Ergebnissen früherer Studien, die Autoren begründeten Bestätigungsverzerrung - Studien, die die Wirksamkeit von TDD zeigten, basierten ursprünglich auf der Hypothese, dass TDD wirksam ist.
Warum halten Leute (einschließlich ich) TDD für eine großartige Praxis?
Nach dem Lesen der Forschung habe ich nur eine logische Antwort: Die Wirksamkeit und Anwendbarkeit von TDD hängt in erster Linie vom jeweiligen Entwickler ab. Studien zur Wirksamkeit von TDD haben offenbar nicht ausreichend berücksichtigt, dass Entwickler keine Roboter sind und TDD kein Programm ist. Für einige Entwickler wird TDD gute Ergebnisse bringen, für einige - es wird keinen signifikanten Unterschied zwischen TDD und einfachen Schreib-Unit-Tests geben, für einige - wird TDD zu einem Rückgang von Qualität, Produktivität und Motivation führen.

Programmierung ist soziale Aktivität. Das Problem bei sozialen Interaktionen ist, dass es sich nicht um eine exakte Wissenschaft handelt. Es bleibt abzuwarten, wie ein mehr oder weniger wissenschaftliches Experiment durchgeführt werden kann, um diese Hypothese zu bestätigen / zu widerlegen. Zunächst biete ich eine Umfrage an.

Wenn Sie diese Veröffentlichung plötzlich mit Ihren englischsprachigen Kollegen teilen möchten, gibt es eine etwas formellere englische Version: medium.com/@alexspush/is-tdd-effective-2474c0471ac4

Quellenliste

[1] A. Gupta, P. Jalote „Eine experimentelle Bewertung der Wirksamkeit und Effizienz der testgetriebenen Entwicklung “, vorgestellt auf dem ersten internationalen Symposium für empirische Softwareentwicklung und -messung, Madrid, Spanien, 2007
[2] Z. Khanam, M. Ahsan,„ Bewertung der Wirksamkeit der testgetriebenen Entwicklung: Vorteile und Fallstricke “ Internationale Zeitschrift für angewandte Ingenieurforschung vol. 12, no 18, p. 7705, 2017. Verfügbar: www.ripublication.com/ijaer17/ijaerv12n18_81.pdf . [Zugriff am 13. Mai 2020].
[3] D. Fucci, B. Turhan, „Ein repliziertes Experiment zur Wirksamkeit der Test-First-Entwicklung“, vorgestellt auf dem internationalen ACM / IEEE-Symposium für empirische Softwareentwicklung und -messung, Baltimore, MD, USA, 2013
[4] A. Bulajic, S. Sambasivam und R. Stojic, „Überblick über die testgetriebenen Entwicklungsforschungsprojekte und -experimente“, vorgestellt auf der Proceedings of Informing Science & IT Education Conference (InSITE), 2012. Verfügbar: pdfs.semanticscholar.org/3278/971bb53a25822171df127d47a57243dd3bbd.pdf . [Zugriff am 13. Mai 2020].

All Articles