Dieser Artikel über Test-Driven Development (TDD) hilft Ihnen dabei, sich mit diesem Entwicklungszyklus vertraut zu machen und ihn an Ihre Programmiermethoden anzupassen.
A QUICK SUMMARY – FOR THE BUSY ONES
TABLE OF CONTENTS
Dieser Artikel über Test-Driven Development (TDD) hilft Ihnen dabei, sich mit diesem Entwicklungszyklus vertraut zu machen und ihn an Ihre Programmiermethoden anzupassen. Und warum solltest du das tun? Kontinuierliches automatisiertes Testen ist eine der wichtigsten Methoden, mit denen Sie Fehler beheben und Entwicklungsrisiken minimieren können, um eine hervorragende Bereitstellung sicherzustellen. Laut unserem Bericht: „Von der Vision zum Code: Ein Leitfaden zur Ausrichtung der Geschäftsstrategie auf die Ziele der Softwareentwicklung“, sogar 78% der weltweiten CTOs und Technologieführer geben an, dass gute DevOps-Praktiken, einschließlich regelmäßiger Tests, stark oder sehr stark in ihren Entwicklungszyklus integriert sind.
Das Konzept der Test-Driven Development (TDD) wurde 2003 von Kent Beck eingeführt. Es gibt keine formale Definition, aber Beck gibt Ansätze und Beispiele für TDD. Das Ziel von TDD ist „schreibe sauberen Code, der funktioniert“.
Folgen Sie in TDD nur einer Faustregel: Ändern Sie nur den Produktionscode wenn jeder Test schlägt fehl. Sonst, nur umgestalten, um den Code zu optimieren. Für aktualisierte Anforderungen konvertieren Sie sie in Testfälle, fügen Sie diese Tests hinzu und schreiben Sie erst dann neuen Code.
TDD ist ein sehr kurzer Entwicklungszyklus und wiederholt sich. Kundenanforderungen werden in hochspezifische Testfälle umgewandelt und die Software wird so geschrieben und verbessert, dass sie die neuen Tests besteht.
Testgetriebene Entwicklung bezieht sich auf Test-First-Programmierkonzepte in extremer Programmierung, Befürwortung häufiger Softwareupdates/-veröffentlichungen in kurzen Entwicklungszyklen und Förderung umfassender Code-Reviews, Komponententests und schrittweiser Hinzufügung von Funktionen.
Ein eng mit TDD verwandtes Konzept ist Acceptance Test-Driven Development (ATDD), bei dem Kunde, Entwickler und Tester alle am Prozess der Anforderungsanalyse beteiligt sind. TDD ist sowohl für Mobilgeräte als auch Entwickler von Web-Apps, wohingegen ATDD ein Kommunikationsinstrument ist, das sicherstellt, dass die Anforderungen klar definiert sind.
Beginnen wir mit den Grundlagen und schauen uns den TDD-Zyklus, auch bekannt als Red-Green-Refactor-Prozess, Schritt für Schritt an.
Der testgetriebene Entwicklungszyklus:
In TDD wird jede Funktion in einer Software zuerst in Form von Testfällen hinzugefügt. Ein Test wird für eine neue oder aktualisierte Funktion erstellt. Um die Tests schreiben zu können, müssen Entwickler die Funktionsspezifikationen und Anforderungen verstehen.
Diese Praxis unterscheidet TDD von herkömmlichen Softwareentwicklungsmethoden, bei denen Komponententests nach dem Schreiben des Quellcodes geschrieben werden. Auf diese Weise sorgt TDD dafür, dass sich der Entwickler auf die Anforderungen konzentriert vor den Code schreiben.
Das Ausführen von Tests bestätigt, dass das Testsystem ordnungsgemäß funktioniert, und beweist gleichzeitig, dass neuer Code erforderlich ist, wenn neu hinzugefügte Tests mit dem vorhandenen Code fehlschlagen.
Der neue Code, der in dieser Phase geschrieben wurde, ist möglicherweise nicht perfekt und besteht den Test möglicherweise auf irrelevante Weise. Die einzige Voraussetzung in dieser Phase ist, dass alle Tests bestanden werden. Eine Möglichkeit, mit dem Hinzufügen der Anweisungen zu beginnen, besteht darin, eine Konstante zurückzugeben und schrittweise logische Blöcke hinzuzufügen, um die Funktion zu erstellen.
Wenn alle Tests bestanden sind, kann gesagt werden, dass der Code die Testanforderungen erfüllt und keine vorhandenen Funktionen beeinträchtigt. Wenn ein Test fehlschlägt, muss der Code bearbeitet werden, um sicherzustellen, dass alle Tests bestanden werden.
Wenn die Codebasis wächst, muss sie regelmäßig bereinigt und gewartet werden. Wie? Es gibt ein paar Möglichkeiten:
Machen Sie kleine Schritte und zielen Sie darauf ab, zwischen den einzelnen Testläufen nur 1 bis 10 Änderungen vorzunehmen.
Wenn der neue Code einen neuen Test nicht schnell erfüllt oder andere unabhängige Tests unerwartet fehlschlagen, machen Sie den Code rückgängig oder kehren Sie zu einem funktionierenden Code zurück, anstatt ein umfangreiches Debugging durchzuführen.
Bei der Verwendung externer Bibliotheken ist es wichtig, keine so kleinen Inkremente vorzunehmen, dass sie lediglich die Bibliothek selbst testen, es sei denn, es geht darum zu testen, ob die Bibliothek veraltet/inkompatibel, fehlerhaft oder nicht funktionsfähig ist.
In diesem Teil gebe ich Ihnen eine kurze Anleitung zu den gängigen TDD-Methoden, die Ihnen helfen wird besser codieren.
Eine Einheit ist eine Klasse/ein Modul, bei dem es sich um eine Gruppe eng verwandter Funktionen handelt, die oft als Modul. Wenn die Einheiten klein gehalten werden, ergeben sich Vorteile wie einfacheres Testen und Debuggen.
Da Sie immer Tests für Einheiten durchführen werden, ist es wichtig, die folgende Teststruktur anzuwenden:
Acceptance Test Driven Development (ATDD) verfügt über fortschrittliche TDD-Praktiken, und das Entwicklungsteam hat das Ziel, die vom Kunden definierten Abnahmetests zu erfüllen. Der Kunde verfügt möglicherweise über einen automatisierten Mechanismus, um zu entscheiden, ob die Software seinen Anforderungen entspricht.
Bei großen Systemen ist das Testen eine Herausforderung und erfordert eine modulare Architektur mit genau definierten Komponenten. Einige wichtige Anforderungen, die erfüllt werden müssen, sind:
Bei der Szenariomodellierung wird eine Reihe von Sequenzdiagrammen erstellt, wobei sich jedes Diagramm auf ein einzelnes Ausführungsszenario auf Systemebene konzentriert. Es bietet ein hervorragendes Mittel zur Entwicklung von Interaktionsstrategien als Reaktion auf eine Eingabe.
Jedes Szenariomodell dient als eine Reihe von Anforderungen für die Funktionen, die eine Komponente bereitstellen wird. Die Szenariomodellierung kann bei der Konstruktion von TDD-Tests in komplexen Systemen hilfreich sein.
Es ist wichtig, den Code zwischen Testen und Produktion zu unterscheiden. Die Komponententestsuite muss auf den zu testenden Code zugreifen können. Bei der Gestaltung von Kriterien wie dem Verbergen und Verkapseln von Informationen und der Trennung von Modulen dürfen jedoch keine Kompromisse eingegangen werden.
Beim objektorientierten Design können Tests immer noch nicht auf private Datenelemente und Methoden zugreifen und erfordern zusätzliche Codierung. Alternativ kann eine innere Klasse innerhalb des Quellcodes verwendet werden, um die Komponententests zu enthalten. Solch Test-Hacks sollten nicht bleiben im Produktionscode. TDD-Praktiker argumentieren oft, ob private Daten überhaupt getestet werden sollten.
In diesem Artikel haben wir uns einen Überblick über Test-Driven Development (TDD) verschafft. Wir haben die Vor- und Nachteile von TDD sowie die mit TDD verbundenen Praktiken vorgestellt und Ideen behandelt, die man kennen muss, um mit der Einführung des TDD-Zyklus beginnen zu können.
Wenn Sie daran interessiert sind, mehr über die Bedeutung von Test-Driven Development zu erfahren, lesen Sie unbedingt unseren Bericht „Von der Vision zum Code: Ein Leitfaden zur Ausrichtung der Geschäftsstrategie auf die Ziele der Softwareentwicklung“.
Our promise
Every year, Brainhub helps 750,000+ founders, leaders and software engineers make smart tech decisions. We earn that trust by openly sharing our insights based on practical software engineering experience.
Authors
Read next
Popular this month