Testgetriebene Entwicklung (TDD) ist ein Ansatz der Softwareentwicklung, bei dem Softwaretests vor ihren entsprechenden Funktionen geschrieben werden.
Die Entwickler schreiben genügend Code, um jeden Test zu bestehen. Dann werden sowohl der Test als auch der Code verfeinert, bevor ein neuer Test und dann eine neue Funktion in Angriff genommen werden.
Die testgetriebene Entwicklung zwingt Entwickler im Wesentlichen dazu, ihren Code in kürzeren Feedbackzyklen zu verlangsamen, zu validieren und zu verfeinern. Obwohl nicht erforderlich, ermutigen DevOps-Teams Programmierer, von Anfängern bis hin zu erfahrenen Profis, TDD in einer Vielzahl von Programmiersprachen zu verwenden. Zum Beispiel Java, Python usw., Anwendungsprogrammierschnittstellen (APIs) und Programmanwendungen.
Die Programmierung in diesem Stil stärkt die Beziehung zwischen Codierung, Testen (in Form von automatisierten Tests auf Unit-Ebene) und Codedesign. Die testgetriebene Entwicklung kann zwar die Vorabentwicklungszeit verlängern, aber es hat sich gezeigt, dass sie die Codefunktionalität und -geschicklichkeit verbessert und insgesamt Zeit spart.
Durch die sofortige Identifizierung und Behebung von Fehlern können Entwickler, die TDD verwenden, verhindern, dass kleine Probleme zu größeren Problemen werden. Bei der testgetriebenen Entwicklung müssen Entwickler ihren Code während des Betriebs sowohl validieren als auch verfeinern, was abschließende Qualitätsprüfungen und Korrekturen vereinfacht.
Alternative Testframeworks umfassen das Schreiben des Produktionscodes vor dem Verfassen aller automatisierten Tests oder das Erstellen der gesamten Testsuite vor dem Schreiben des Produktionscodes. Diese Methoden sind zwar nicht zwangsläufig unwirksam, aber es hat sich gezeigt, dass sie die erforderliche Debugging-Zeit erhöhen, insbesondere bei größeren und komplexeren Projekten.
Die testgetriebene Entwicklung wird zwar häufig für die Erstellung von neuem Produktionscode verwendet, wird aber auch häufig zur Verbesserung des Debugging von Altlasten eingesetzt, die mit älteren oder anderen Techniken entwickelt wurden.
Die testgetriebene Entwicklung kehrt den traditionellen Entwicklungsprozess um, indem sie das Testen vor die Entwicklung stellt. Als iterativer Ansatz verbessert testgetriebene Entwicklung die Codequalität und Lesbarkeit, indem testbare Workflows gefördert werden, die zu qualitativ hochwertigem Code auf Einheitsebene führen. Wenn Entwickler Komponententests implementieren, konzentrieren sie sich auf einen kleinen Teil der Logik, wie zum Beispiel einen einzelnen Algorithmus. Das Schreiben von Code speziell zum Bestehen von Tests führt nicht nur zu saubererem, haltbarerem Code, sondern trägt auch zur Verbesserung der Dokumentation bei.
Branchen-Newsletter
Bleiben Sie mit dem Think-Newsletter über die wichtigsten – und faszinierendsten – Branchentrends in den Bereichen KI, Automatisierung, Daten und darüber hinaus auf dem Laufenden. Weitere Informationen finden Sie in der IBM Datenschutzerklärung.
Ihr Abonnement wird auf Englisch geliefert. In jedem Newsletter finden Sie einen Abmeldelink. Hier können Sie Ihre Abonnements verwalten oder sich abmelden. Weitere Informationen finden Sie in unserer IBM Datenschutzerklärung.
Es gibt zwei Hauptebenen der testgetriebenen Entwicklung.
Bei Akzeptanz-TDD - manchmal auch Behavior-Driven Development (BDD) genannt - schreiben die Programmierer einen einzigen Akzeptanztest und dann genügend neuen Code, um ihn zu bestehen. Abnahmetests werden manchmal auch als Kundentests oder Kundenakzeptanztests bezeichnet.
Sie können im Allgemeinen als Testfälle verstanden werden, die für die von den Produkt-Stakeholdern angegebene Mindestfunktionalität erforderlich sind. ATDD ist bestrebt, detaillierte, ausführbare Anforderungen zu identifizieren. Abnahmetests können mit verschiedenen Testtools wie Fitnesse oder RSpec durchgeführt werden.
Bei einer testgetriebenen Entwicklungsstrategie schreiben Programmierer zunächst Tests, um jedes einzelne Element oder jede Funktion einer Software zu überprüfen, bevor sie genügend Code schreiben, um diesen einzelnen Test zu bestehen. Nach Abschluss wird die Software erneut getestet, und wenn sie erfolgreich ist, wird der Code verfeinert (ein Prozess, der als Refactoring bezeichnet wird), sodass er nur noch wesentliche Elemente enthält. Entwickler wiederholen diesen Vorgang dann für jede weitere Softwarefunktion.
Der testgetriebene Entwicklungsprozess ist in fünf einzelne Schritte unterteilt:
Einfach ausgedrückt folgt der testgetriebene Entwicklungsprozess einem wiederholbaren Kreislauf, der als Rot-Grün-Refaktor-Zyklus bezeichnet wird. Die Schritte des Zyklus sind:
Die genauen Ursprünge der testgetriebenen Entwicklung sind zwar unbekannt, aber das Konzept, zuerst die Tests und dann den Produktionscode zu schreiben, war bis Mitte der 1990er Jahre keine gängige Praxis. Zuvor trennte das Testen von Frameworks die Entwickler vom Testen ihrer eigenen Codebasen. Mit der Weiterentwicklung des Software-Engineerings forderten die DevOps-Teams jedoch schnellere und flexiblere Methoden, um den Anforderungen der Stakeholder gerecht zu werden, insbesondere angesichts der sich schnell ändernden Anforderungen der Stakeholder.
Die testgetriebene Entwicklung hat sich aus und neben verschiedenen neuartigen Test-Frameworks entwickelt und wurde als modulare Komponente auch in verschiedene andere Frameworks übernommen. Vor allem ist TDD Teil des Konzepts von Extreme Programming (XP), einem flexiblen Framework für die Softwareentwicklung, das entwickelt wurde, um sowohl die Softwarequalität als auch die Lebensqualität der Entwickler zu verbessern.
Software-Engineer Kent Beck, eine wichtige Persönlichkeit der flexiblen Community und Begründer von Extreme Programming, wird für die „Wiederentdeckung“ der testgetriebenen Entwicklung verantwortlich gemacht. So Beck:
„Die ursprüngliche Beschreibung von TDD stand in einem alten Buch über Programmierung. Es hieß, dass Sie das Eingabeband nehmen, das erwartete Ausgabeband manuell eingeben und dann programmieren, bis das tatsächliche Ausgabeband mit der erwarteten Ausgabe übereinstimmt. Nachdem ich das erste xUnit-Framework in Smalltalk geschrieben hatte, erinnerte ich mich daran, dies gelesen zu haben und probierte es aus. Das war für mich der Ursprung von TDD. Wenn ich älteren Programmierern TDD beschreibe, höre ich oft: ‚Natürlich. Wie könnten Sie sonst programmieren?' Daher bezeichne ich meine Rolle als ‚Wiederentdeckung' von TDD.“
Zu den wichtigsten Daten in der Entwicklung der testgetriebenen Entwicklung gehören:
Als Komponente des Extreme Programmings hat sich die testgetriebene Entwicklung als vorteilhaft erwiesen, um besseren Code zu schaffen, sondern auch um die Programmierer selbst zu verbessern. TDD kann es Programmierern ermöglichen, eine bessere Erkenntnis in ihre Projekte zu erhalten und die Programmentwicklung voranzutreiben. Durch die Zentrierung des Testfalls vor der Implementierung jeder Funktion müssen Entwickler visualisieren, wie eine Funktion von einem Client oder Benutzer verwendet wird. Dieser Ansatz positioniert die Produktschnittstelle vor der Implementierung und hilft Entwicklern, Anwendungen zu erstellen, die stärker auf die Benutzer ausgerichtet sind.
Zu den zusätzlichen Vorteilen der testgetriebenen Entwicklung gehören:
Obwohl der Einsatz von testgetriebener Entwicklung (TDD) viele wertvolle Nutzen bietet, ist er nicht ohne Herausforderungen. Die Schwere dieser Herausforderungen kann zwar projektabhängig sein oder durch verschiedene andere Techniken abgemildert werden, doch zu den Nachteilen der TDD gehören:
Machen Sie Ihre Geschäftsabläufe mit KI-gestützten Lösungen für intelligentes Asset-Management und Lieferketten resilienter.
Transformieren Sie Ihre Geschäftsabläufe mit IBM, indem Sie umfangreiche Daten und leistungsstarke KI-Technologien nutzen, um Optimierungsprozesse zu integrieren.
IBM Cloud Pak for Business Automation ist ein modularer Satz integrierter Softwarekomponenten für das Betriebsmanagement und die Automatisierung.