tdd vs bdd analyze differences with examples
Dieses Tutorial erklärt die Unterschiede zwischen TDD und BDD anhand von Beispielen:
TDD oder Test Driven Development und BDD oder Behavior Driven Development sind die beiden Softwareentwicklungstechniken.
Bevor wir uns eingehender mit dem Unterschied zwischen diesen beiden befassen, wollen wir zunächst verstehen, was sie einzeln bedeuten und wie sie verwendet werden.
Lasst uns beginnen!!
Bester Cloud-Speicher für große Dateien
Was du lernen wirst:
Was ist TDD?
TDD steht für Test Driven Development. Bei dieser Softwareentwicklungstechnik erstellen wir zuerst die Testfälle und schreiben dann den diesen Testfällen zugrunde liegenden Code. Obwohl TDD eine Entwicklungstechnik ist, kann es auch für die Entwicklung von Automatisierungstests verwendet werden.
Die Teams, die TDD implementieren, nehmen sich mehr Zeit für die Entwicklung, finden jedoch nur sehr wenige Fehler. TDD führt zu einer verbesserten Codequalität und einem Code, der wiederverwendbarer und flexibler ist.
TDD hilft auch dabei, hohe Werte zu erreichen Testabdeckung von etwa 90-100%. Die größte Herausforderung für Entwickler, die TDD folgen, besteht darin, ihre Testfälle vor dem Schreiben des Codes zu schreiben.
Empfohlene Lektüre => Ultimativer Leitfaden zum Schreiben exzellenter Testfälle
Prozess der TDD
Die TDD-Methodik folgt einem sehr einfachen 6-Stufen-Prozess:
1) Schreiben Sie einen Testfall: Schreiben Sie basierend auf den Anforderungen einen automatisierten Testfall.
2) Führen Sie alle Testfälle aus: Führen Sie diese automatisierten Testfälle mit dem aktuell entwickelten Code aus.
3) Entwickeln Sie den Code für diese Testfälle: Wenn der Testfall fehlschlägt, schreiben Sie den Code, damit dieser Testfall wie erwartet funktioniert.
4) Führen Sie die Testfälle erneut aus: Führen Sie die Testfälle erneut aus und prüfen Sie, ob alle bisher entwickelten Testfälle implementiert sind.
5) Überarbeiten Sie Ihren Code: Dies ist ein optionaler Schritt. Es ist jedoch wichtig, Ihren Code zu überarbeiten, um ihn lesbarer und wiederverwendbarer zu machen.
6) Wiederholen Sie die Schritte 1 bis 5 für neue Testfälle: Wiederholen Sie den Zyklus für die anderen Testfälle, bis alle Testfälle implementiert sind.
Beispiel für eine Testfallimplementierung in TDD
Nehmen wir an, wir müssen eine Anmeldefunktion für eine Anwendung entwickeln, die über Felder für Benutzername und Kennwort sowie eine Schaltfläche zum Senden verfügt.
Schritt 1: Erstellen Sie einen Testfall.
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Schritt 2: Wenn Sie diesen Testfall ausführen, wird eine Fehlermeldung angezeigt, dass die Anmeldeseite nicht definiert ist und es keine Methoden mit den Namen enterUserName, enterPassword und submit gibt.
Schritt 3: Entwickeln Sie den Code für diesen Testfall. Schreiben wir den zugrunde liegenden Code, der den Benutzernamen und das Passwort eingibt, und erhalten ein Homepage-Objekt, wenn diese korrekt sind.
public class LoginPage{ String username; String password; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
Schritt 4: Führen Sie den Testfall erneut aus, und wir erhalten eine Instanz der Startseite.
Schritt 5: Lassen Sie uns den Code umgestalten, um die richtigen Fehlermeldungen zu erhalten, wenn die if-Bedingungen in der Submit-Methode nicht zutreffen.
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
Schritt 6: Schreiben wir nun einen neuen Testfall mit einem leeren Benutzernamen und Passwort.
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Wenn Sie nun versuchen, diesen Testfall auszuführen, schlägt dies fehl. Wiederholen Sie die Schritte 1 bis 5 für diesen Testfall und fügen Sie dann die Funktionalität hinzu, um leere Zeichenfolgen für Benutzername und Kennwort zu verarbeiten.
Was ist BDD?
BDD steht für Behavior Driven Development. BDD ist eine Erweiterung von TDD, bei der wir anstelle des Schreibens der Testfälle zunächst ein Verhalten schreiben. Später entwickeln wir den Code, der für unsere Anwendung erforderlich ist, um das Verhalten auszuführen.
Das im BDD-Ansatz definierte Szenario erleichtert Entwicklern, Testern und Geschäftsbenutzern die Zusammenarbeit.
BDD gilt als Best Practice, wenn es darum geht automatisierte Tests da es sich auf das Verhalten der Anwendung konzentriert und nicht darauf, über die Implementierung des Codes nachzudenken.
Das Verhalten der Anwendung steht im Mittelpunkt von BDD und zwingt die Entwickler und Tester, die Schuhe des Kunden zu betreten.
Prozess von BDD
Der Prozess der BDD-Methodik besteht ebenfalls aus 6 Schritten und ist dem von TDD sehr ähnlich.
1) Schreiben Sie das Verhalten der Anwendung: Das Verhalten einer Anwendung wird vom Product Owner oder den Business Analysten oder QAs in einfacher englischer Sprache verfasst.
2) Schreiben Sie die automatisierten Skripte: Diese einfache englische Sprache wird dann in Programmiertests umgewandelt.
3) Implementieren Sie den Funktionscode: Der dem Verhalten zugrunde liegende Funktionscode wird dann implementiert.
4) Überprüfen Sie, ob das Verhalten erfolgreich ist: Führen Sie das Verhalten aus und prüfen Sie, ob es erfolgreich ist. Wenn dies erfolgreich ist, fahren Sie mit dem nächsten Verhalten fort. Andernfalls beheben Sie die Fehler im Funktionscode, um das Anwendungsverhalten zu erzielen.
5) Code umgestalten oder organisieren: Refaktorieren oder organisieren Sie Ihren Code, um ihn lesbarer und wiederverwendbarer zu machen.
6) Wiederholen Sie die Schritte 1 bis 5 für neues Verhalten: Wiederholen Sie die Schritte, um weitere Verhaltensweisen in Ihrer Anwendung zu implementieren.
Lesen Sie auch => Wie Tester an TDD-, BDD- und ATDD-Techniken beteiligt sind
Beispiel für die Implementierung eines Verhaltens in BDD
Nehmen wir an, wir müssen eine Anmeldefunktion für eine Anwendung entwickeln, die über Felder für Benutzername und Kennwort sowie eine Schaltfläche zum Senden verfügt.
Schritt 1: Schreiben Sie das Verhalten der Anwendung zur Eingabe des Benutzernamens und des Passworts.
Scenario: Login check Given I am on the login page When I enter 'username' username And I enter 'Password' password And I click on the 'Login' button Then I am able to login successfully.
Schritt 2: Schreiben Sie das automatisierte Testskript für dieses Verhalten wie unten gezeigt.
@RunWith(Cucumber.class) public class MyStepDefinitions { @Steps LoginPage loginPage; @Steps HomePage hp; @Given('^I am on the login page $') public void i_am_on_the_login_page(){ loginPage.gotoLoginPage(); } @When('^I enter '([^']*)' username$') public void i_enter_something_username(String username) { loginPage.enterUserName(username); } @When('^I enter '([^']*)' password$') public void i_enter_something_password(String password) { loginPage.enterPassword(password); } @When('^I click on the '([^']*)' button$') public void i_click_on_the_submit_button(String strArg1) { hp = loginPage.submit(); } @Then('^I am able to login successfully.$') public void i_am_able_to_login_successfully() { Assert.assertNotNull(hp); } }
Schritt 3: Implementieren Sie den Funktionscode (Dies ähnelt dem Funktionscode in TDD-Beispielschritt 3).
public class LoginPage{ String username = ''; String password = ''; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
Schritt 4: Führen Sie dieses Verhalten aus und prüfen Sie, ob es erfolgreich ist. Wenn dies erfolgreich ist, fahren Sie mit Schritt 5 fort, andernfalls debuggen Sie die funktionale Implementierung und führen Sie sie erneut aus.
Schritt 5: Das Refactoring der Implementierung ist ein optionaler Schritt. In diesem Fall können wir den Code in der Submit-Methode refactorisieren, um die Fehlermeldungen zu drucken, wie in Schritt 5 für das TDD-Beispiel gezeigt.
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
Schritt 6: Schreiben Sie ein anderes Verhalten und befolgen Sie die Schritte 1 bis 5 für dieses neue Verhalten.
Wir können ein neues Verhalten schreiben, um zu überprüfen, ob eine Fehlermeldung angezeigt wird, wenn der Benutzername nicht wie unten gezeigt eingegeben wurde:
Scenario: Login check Given I am on the login page And I click on the 'Login' button Then I get an error to enter username.
TDD Vs BDD - Hauptunterschiede
TDD | BDD |
---|---|
Könnte ein besserer Ansatz für Projekte sein, die API- und Tools von Drittanbietern beinhalten. | Könnte ein besserer Ansatz für Projekte sein, die von Benutzeraktionen gesteuert werden. Zum Beispiel: E-Commerce-Website, Anwendungssystem usw. |
Steht für testgetriebene Entwicklung. | Steht für verhaltensorientierte Entwicklung. |
Der Prozess beginnt mit dem Schreiben eines Testfalls. | Der Prozess beginnt mit dem Schreiben eines Szenarios gemäß dem erwarteten Verhalten. |
TDD konzentriert sich darauf, wie die Funktionalität implementiert wird. | BDD konzentriert sich auf das Verhalten einer Anwendung für den Endbenutzer. |
Testfälle werden in einer Programmiersprache geschrieben. | Szenarien sind im Vergleich zu TDD besser lesbar, da sie in einem einfachen englischen Format geschrieben sind. |
Änderungen in der Funktionsweise der Anwendung wirken sich stark auf die Testfälle in TDD aus. | BDD-Szenarien sind von den Funktionsänderungen nicht wesentlich betroffen. |
Eine Zusammenarbeit ist nur zwischen den Entwicklern erforderlich. | Alle Beteiligten müssen zusammenarbeiten. |
Einige der Tools, die TDD unterstützen, sind: JUnit, TestNG, NUnit usw. | Einige der Tools, die BDD unterstützen, sind SpecFlow, Cucumber, MSpec usw. |
Tests in TDD können nur von Personen mit Programmierkenntnissen verstanden werden. | Tests in BDD können von jeder Person verstanden werden, auch von Personen ohne Programmierkenntnisse. |
TDD verringert die Wahrscheinlichkeit von Fehlern in Ihren Tests. | Fehler in Tests sind im Vergleich zu TDD schwer zu verfolgen. |
Fazit
Die Wahl zwischen TDD und BDD kann sehr schwierig sein. Einige könnten argumentieren, dass BDD besser ist, um Fehler zu finden, während die anderen nur sagen könnten, dass TDD eine höhere Codeabdeckung bietet.
Keine der Methoden ist besser als die andere. Es hängt von der Person und dem Projektteam ab, welche Methodik verwendet werden soll.
Wir hoffen, dieser Artikel hat Ihre Zweifel an TDD vs BDD ausgeräumt !!
Implementierung einer C ++ - Hash-Tabelle
Literatur-Empfehlungen
- 180+ Testfälle für Webanwendungstests (Beispiel-Checkliste)
- Wie übersetze ich manuelle Testfälle in Automatisierungsskripte? - Eine Schritt-für-Schritt-Anleitung mit Beispiel
- Fragen zum Interview mit Testfällen: Schreiben Sie Testfälle basierend auf dem Szenario
- Wie die Tester an TDD-, BDD- und ATDD-Techniken beteiligt sind
- Testabdeckung beim Testen von Software (Tipps zur Maximierung der Testabdeckung)
- 8 BDD-Tools (Best Behavior Driven Development) und Test-Frameworks
- Specflow Tutorial: Das ultimative Handbuch zum BDD Tool
- So schreiben Sie Testfälle: Der ultimative Leitfaden mit Beispielen