Was ist testgetriebene Entwicklung (TDD)? Beispiel

Was ist testgetriebene Entwicklung (TDD)?

Testgetriebene Entwicklung (TDD) ist ein Softwareentwicklungsansatz, bei dem Testfรคlle entwickelt werden, um zu spezifizieren und zu validieren, was der Code tun wird. Vereinfacht ausgedrรผckt werden zuerst Testfรคlle fรผr jede Funktionalitรคt erstellt und getestet. Wenn der Test fehlschlรคgt, wird der neue Code geschrieben, um den Test zu bestehen und den Code einfach und fehlerfrei zu machen.

Testgetriebene Entwicklung beginnt mit dem Entwurf und der Entwicklung von Tests fรผr jede kleine Funktionalitรคt einer Anwendung. Das TDD-Framework weist Entwickler an, nur dann neuen Code zu schreiben, wenn ein automatisierter Test fehlgeschlagen ist. Dadurch wird eine Duplizierung des Codes vermieden. Die TDD-Vollform ist testgetriebene Entwicklung.

Testgetriebene Entwicklung

Das einfache Konzept von TDD besteht darin, die fehlgeschlagenen Tests zu schreiben und zu korrigieren, bevor neuer Code geschrieben wird (vor der Entwicklung). Dies trรคgt dazu bei, eine Duplizierung des Codes zu vermeiden, da wir jeweils nur eine kleine Menge Code schreiben, um die Tests zu bestehen. (Tests sind nichts anderes als Anforderungsbedingungen, die wir testen mรผssen, um sie zu erfรผllen.)

Testgetriebene Entwicklung ist ein Prozess der Entwicklung und Durchfรผhrung automatisierter Tests vor der eigentlichen Entwicklung der Anwendung. Daher wird TDD manchmal auch als bezeichnet Testen Sie die erste Entwicklung.

So fรผhren Sie einen TDD-Test durch

Die folgenden Schritte beschreiben, wie der TDD-Test durchgefรผhrt wird.

  1. Fรผgen Sie einen Test hinzu.
  2. Fรผhren Sie alle Tests aus und prรผfen Sie, ob ein neuer Test fehlschlรคgt.
  3. Schreiben Sie einen Code.
  4. Fรผhren Sie Tests aus und รผberarbeiten Sie den Code.
  5. Wiederholen.
Fรผhren Sie einen TDD-Test durch
Fรผnf Schritte der testgetriebenen Entwicklung

TDD-Zyklus definiert

  1. Schreiben Sie einen Test
  2. Lass es laufen.
  3. ร„ndern Sie den Code, um ihn richtig zu machen, z. B. Refactor.
  4. Vorgang wiederholen.

Einige Klarstellungen zu TDD:

  • Beim TDD-Ansatz geht es weder um โ€žTestenโ€œ noch um โ€žDesignโ€œ.
  • TDD bedeutet nicht: โ€žEinige Tests schreiben und dann ein System aufbauen, das die Tests besteht.โ€œ
  • TDD bedeutet nicht โ€žviel testenโ€œ.

TDD vs. Traditionelles Testen

Im Folgenden ist der Hauptunterschied zwischen testgetriebener Entwicklung und herkรถmmlichem Testen aufgefรผhrt:

Der TDD-Ansatz ist in erster Linie eine Spezifikationstechnik. Er stellt sicher, dass Ihr Quellcode auf Bestรคtigungsebene grรผndlich getestet wird.

  • Bei herkรถmmlichen Tests werden bei einem erfolgreichen Test ein oder mehrere Fehler festgestellt. Es ist dasselbe wie TDD. Wenn ein Test fehlschlรคgt, haben Sie Fortschritte gemacht, weil Sie wissen, dass Sie das Problem lรถsen mรผssen.
  • TDD stellt sicher, dass Ihr System die dafรผr definierten Anforderungen tatsรคchlich erfรผllt. Es hilft, Ihr Vertrauen in Ihr System zu stรคrken.
  • Bei TDD liegt der Schwerpunkt mehr auf Produktionscode, der รผberprรผft, ob die Tests ordnungsgemรครŸ funktionieren. Beim herkรถmmlichen Testen liegt der Schwerpunkt mehr auf dem Testfalldesign. Ob der Test die ordnungsgemรครŸe/nicht ordnungsgemรครŸe Ausfรผhrung der Anwendung zur Erfรผllung der Anforderungen zeigt.
  • Bei TDD erreichen Sie einen Abdeckungstest von 100 %. Im Gegensatz zu herkรถmmlichen Tests wird jede einzelne Codezeile getestet.
  • Die Kombination aus traditionellem Testen und TDD fรผhrt dazu, dass das Testen des Systems wichtiger ist als die Perfektionierung des Systems.
  • In Agile Modellierung (AM), sollten Sie โ€žmit einem Ziel testenโ€œ. Sie sollten wissen, warum Sie etwas testen und auf welchem โ€‹โ€‹Niveau es getestet werden muss.

Was ist Akzeptanz-TDD und Entwickler-TDD?

Es gibt zwei TDD-Ebenen

  1. Akzeptanz TDD (ATDD): Mit ATDD schreiben Sie einen einzelnen Abnahmetest. Dieser Test erfรผllt die Anforderung der Spezifikation bzw. stellt das Verhalten des Systems zufrieden. Schreiben Sie anschlieรŸend gerade genug Produktions-/Funktionscode, um diesen Abnahmetest zu bestehen. Der Abnahmetest konzentriert sich auf das Gesamtverhalten des Systems. ATDD war auch bekannt als Verhaltensgesteuerte Entwicklung (BDD).
  2. Entwickler-TDD: Mit Developer TDD schreiben Sie einen einzelnen Entwicklertest, also einen Unit-Test, und dann gerade genug Produktionscode, um diesen Test zu erfรผllen. Der Unit-Test konzentriert sich auf jede kleine Funktionalitรคt des Systems. Entwickler-TDD wird einfach als bezeichnet TDD.Das Hauptziel von ATDD und TDD besteht darin, detaillierte, ausfรผhrbare Anforderungen fรผr Ihre Lรถsung auf Just-in-Time-Basis (JIT) zu spezifizieren. JIT bedeutet, nur die Anforderungen zu berรผcksichtigen, die im System benรถtigt werden. Steigern Sie also die Effizienz.

Akzeptanz-TDD und Entwickler-TDD

Skalierung von TDD รผber Agile Model Driven Development (AMDD)

TDD ist sehr gut in der detaillierten Spezifikation und Validierung. Es gelingt ihm nicht, grรถรŸere Themen wie das Gesamtdesign, die Verwendung des Systems oder die Benutzeroberflรคche zu durchdenken. AMDD behebt die Probleme der agilen Skalierung, die TDD nicht lรถst.

Daher wird AMDD fรผr grรถรŸere Probleme eingesetzt.

Der Lebenszyklus von AMDD

Der Lebenszyklus von AMDD

Beim Model-Driven Development (MDD) werden umfangreiche Modelle erstellt, bevor der Quellcode geschrieben wird. Welche wiederum haben einen agilen Ansatz?

In der obigen Abbildung stellt jedes Kรคstchen eine Entwicklungsaktivitรคt dar.

Die Visualisierung ist einer der TDD-Prozesse zum Vorhersagen/Vorstellen von Tests, die wรคhrend der ersten Projektwoche durchgefรผhrt werden. Das Hauptziel der Visualisierung ist die Identifizierung des Systemumfangs und der Systemarchitektur. Fรผr eine erfolgreiche Visualisierung werden Anforderungen auf hoher Ebene und Architekturmodellierung durchgefรผhrt.

Dabei handelt es sich um den Prozess, bei dem nicht eine detaillierte Spezifikation der Software/des Systems erstellt wird, sondern die Anforderungen der Software/des Systems untersucht werden, der die Gesamtstrategie des Projekts definiert.

Iteration 0: Vorstellung

Es gibt zwei Hauptunteraktivatoren.

  1. Erste Anforderungsvorstellung.Es kann mehrere Tage dauern, bis die allgemeinen Anforderungen und der Umfang des Systems ermittelt sind. Der Hauptschwerpunkt liegt auf der Erforschung des Nutzungsmodells, des anfรคnglichen Domรคnenmodells und des Benutzeroberflรคchenmodells (UI).
  2. Initiale Archistrukturelle Vorstellung. Es dauert auch mehrere Tage, die Architektur des Systems zu identifizieren. Dadurch kรถnnen technische Richtungen fรผr das Projekt festgelegt werden. Der Schwerpunkt liegt auf der Untersuchung von Technologiediagrammen, dem Benutzeroberflรคchenfluss (UI), Domรคnenmodellen und ร„nderungsfรคllen.

Iterationsmodellierung

Hier muss das Team die Arbeit planen, die fรผr jede Iteration durchgefรผhrt werden soll.

  • Fรผr jede Iteration wird ein agiler Prozess verwendet, d. h. wรคhrend jeder Iteration werden neue Arbeitselemente mit Prioritรคt hinzugefรผgt.
  • Dabei werden zunรคchst hรถher priorisierte Arbeiten berรผcksichtigt. Hinzugefรผgte Arbeitselemente kรถnnen jederzeit neu priorisiert oder aus dem Elementstapel entfernt werden.
  • Das Team bespricht, wie es die einzelnen Anforderungen umsetzen wird. Zu diesem Zweck wird Modellierung eingesetzt.
  • Fรผr jede Anforderung, die in dieser Iteration implementiert werden soll, wird eine Modellierungsanalyse und ein Design durchgefรผhrt.

Modelsturm

Dies wird auch als Just-in-Time-Modellierung bezeichnet.

  • Bei dieser Modellierungssitzung ist ein Team von 2/3 Mitgliedern beteiligt, die Probleme auf Papier oder am Whiteboard besprechen.
  • Ein Teammitglied wird ein anderes Teammitglied bitten, mit ihm zu modellieren. Diese Modellierungssitzung dauert etwa 5 bis 10 Minuten. Wo Teammitglieder zusammenkommen, um Whiteboard/Papier auszutauschen.
  • Sie untersuchen Probleme, bis sie die Hauptursache des Problems nicht mehr finden. Wenn ein Teammitglied gerade noch rechtzeitig das Problem erkennt, das es lรถsen mรถchte, wird es schnell die Hilfe anderer Teammitglieder in Anspruch nehmen.
  • AnschlieรŸend beschรคftigen sich die anderen Gruppenmitglieder mit dem Thema und dann machen alle weiter wie bisher. Es wird auch als Stand-up-Modellierung oder Kunden-QA-Sitzung bezeichnet.

Testgetriebene Entwicklung (TDD)

  • Es unterstรผtzt bestรคtigende Tests Ihres Anwendungscodes und detaillierter Spezifikationen.
  • Sowohl Abnahmetests (detaillierte Anforderungen) als auch Entwicklertests (Einheitentests) sind Eingaben fรผr TDD.
  • TDD macht den Code einfacher und klarer. Dadurch muss der Entwickler weniger Dokumentation pflegen.

Bewertungen

  • Dies ist optional. Es umfasst Codeinspektionen und Modellรผberprรผfungen.
  • Dies kann fรผr jede Iteration oder fรผr das gesamte Projekt erfolgen.
  • Dies ist eine gute Mรถglichkeit, Feedback zum Projekt zu geben.

Testgetriebene Entwicklung (TDD) vs. Agile Model Driven Development (AMDD)

TDD AMDD
TDD verkรผrzt die Programmier-Feedbackschleife AMDD verkรผrzt die Modellierungs-Feedbackschleife.
TDD ist eine detaillierte Spezifikation AMDD eignet sich fรผr grรถรŸere Probleme
TDD fรถrdert die Entwicklung von qualitativ hochwertigem Code AMDD fรถrdert eine qualitativ hochwertige Kommunikation mit Stakeholdern und Entwicklern.
TDD spricht mit Programmierern AMDD spricht mit Geschรคft Analytikerin, Stakeholder und Datenexperten.
TDD nicht visuell orientiert AMDD visuell orientiert
TDD hat einen begrenzten Anwendungsbereich fรผr Softwarearbeiten AMDD hat einen breiten Anwendungsbereich, der auch Interessengruppen einschlieรŸt. Es geht darum, auf ein gemeinsames Verstรคndnis hinzuarbeiten
Beide unterstรผtzen die evolutionรคre Entwicklung ---------------

TDD-Frameworks

Hier ist die Liste der besten TDD-Frameworks (Test Driven Development).

  1. Juni
  2. TestNG
  3. csUnit und NUnit
  4. Rspez

Lassen Sie uns nun die testgetriebene Entwicklung anhand eines Beispiels erlernen.

Beispiel fรผr TDD

Hier in diesem Beispiel fรผr testgetriebene Entwicklung definieren wir ein Klassenkennwort. Fรผr diese Klasse versuchen wir, die folgenden Bedingungen zu erfรผllen.

Eine Bedingung fรผr die Passwortakzeptanz:

  • Das Passwort sollte zwischen 5 und 10 Zeichen lang sein.

In diesem TDD-Beispiel schreiben wir zunรคchst den Code, der alle oben genannten Anforderungen erfรผllt.

Beispiel fรผr TDD

Szenario 1: Um den Test auszufรผhren, erstellen wir die Klasse PasswordValidator ();

Beispiel fรผr TDD

Wir werden die obige Klasse TestPassword () ausfรผhren;

Die Ausgabe ist wie unten gezeigt PASSED;

Ausgang:

Beispiel fรผr TDD

Szenario 2: Hier kรถnnen wir sehen, dass in der Methode TestPasswordLength() keine Instanz der Klasse PasswordValidator erstellt werden muss. Instanz bedeutet das Erstellen einer Objekt der Klasse, um auf die Mitglieder (Variablen/Methoden) dieser Klasse zu verweisen.

Beispiel fรผr TDD

Wir werden die Klasse PasswordValidator pv = new PasswordValidator() aus dem Code entfernen. Wir kรถnnen das anrufen ist gรผltig () Methode direkt von PasswortValidator. IsValid (โ€žAbc123โ€œ). (Siehe Bild unten)

Also fรผhren wir eine Umgestaltung (Codeรคnderung) wie folgt durch:

Beispiel fรผr TDD

Szenario 3: Nach dem Refactoring zeigt die Ausgabe den Status โ€žFehlgeschlagenโ€œ an (siehe Abbildung unten). Dies liegt daran, dass wir die Instanz entfernt haben. Es gibt also keinen Verweis auf eine nicht statische Methode ist gรผltig ().

Beispiel fรผr TDD

Daher mรผssen wir diese Methode รคndern, indem wir vor dem booleschen Wert ein โ€žstatischesโ€œ Wort als รถffentlichen statischen booleschen Wert isValid (String-Passwort) hinzufรผgen. Refactoring der Klasse PasswordValidator(), um den oben genannten Fehler zu entfernen und den Test zu bestehen.

Beispiel fรผr TDD

Ausgang:

Nachdem wir ร„nderungen an der Klasse PassValidator() vorgenommen haben, wird die Ausgabe wie unten gezeigt als PASSED angezeigt, wenn wir den Test ausfรผhren.

Beispiel fรผr TDD

Vorteile von TDD

Im Folgenden sind die Hauptvorteile der testgetriebenen Entwicklung in der Softwareentwicklung aufgefรผhrt:

Frรผhzeitige Fehlerbenachrichtigung.

  • Entwickler testen ihren Code, aber in der Datenbankwelt besteht dies oft aus manuellen Tests oder einmaligen Skripten. Mit TDD bauen Sie im Laufe der Zeit eine Reihe automatisierter Tests auf, die Sie und jeder andere Entwickler nach Belieben wiederholen kรถnnen.

Besser gestalteter, saubererer und erweiterbarer Code.

  • Es hilft zu verstehen, wie der Code verwendet wird und wie er mit anderen Modulen interagiert.
  • Dies fรผhrt zu einer besseren Entwurfsentscheidung und einem besser wartbaren Code.
  • TDD ermรถglicht das Schreiben kleinerer Codes mit einer einzelnen Verantwortung anstelle monolithischer Prozeduren mit mehreren Verantwortlichkeiten. Dadurch ist der Code einfacher zu verstehen.
  • TDD zwingt auรŸerdem dazu, nur Produktionscode zu schreiben, um Tests basierend auf Benutzeranforderungen zu bestehen.

Vertrauen in Refactor

  • Wenn Sie Code umgestalten, kann es zu Brรผchen im Code kommen. Mit einer Reihe automatisierter Tests kรถnnen Sie diese Fehler vor der Verรถffentlichung beheben. Wenn bei der Verwendung automatisierter Tests Unterbrechungen festgestellt werden, wird eine entsprechende Warnung ausgegeben.
  • Die Verwendung von TDD sollte zu einem schnelleren, erweiterbareren Code mit weniger Fehlern fรผhren, der mit minimalen Risiken aktualisiert werden kann.

Gut fรผr die Teamarbeit

  • Wenn kein Teammitglied anwesend ist, kรถnnen andere Teammitglieder problemlos den Code รผbernehmen und daran arbeiten. Es unterstรผtzt auch den Wissensaustausch und macht das Team dadurch insgesamt effektiver.

Gut fรผr Entwickler

  • Obwohl Entwickler mehr Zeit fรผr das Schreiben von TDD-Testfรคllen aufwenden mรผssen, nimmt das Debuggen und die Entwicklung neuer Funktionen viel weniger Zeit in Anspruch. Sie werden saubereren, weniger komplizierten Code schreiben.

Zusammenfassung

  • TDD steht fรผr Testgetriebene Entwicklung.
  • TDD-Bedeutung: Es handelt sich um einen Prozess, bei dem der Code geรคndert wird, um einen zuvor entwickelten Test zu bestehen.
  • Der Schwerpunkt liegt mehr auf Produktionscode als auf Testfalldesign.
  • Bei der testgetriebenen Entwicklung handelt es sich um einen Prozess, bei dem der Code geรคndert wird, um einen zuvor entwickelten Test zu bestehen.
  • In Software Engineering, Es wird manchmal als bekannt โ€žTesten Sie die erste Entwicklung.โ€œ
  • TDD-Tests umfassen das Refactoring eines Codes, dh das ร„ndern/Hinzufรผgen einer bestimmten Codemenge zum vorhandenen Code, ohne das Verhalten des Codes zu beeinflussen.
  • Bei Verwendung der TDD-Programmierung wird der Code klarer und einfacher zu verstehen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: