tdd vs bdd analyze differences with examples
Denna handledning förklarar skillnaderna mellan TDD och BDD med exempel:
TDD eller testdriven utveckling och BDD eller beteendriven utveckling är de två mjukvaruutvecklingsteknikerna.
Innan vi dyker djupare in i skillnaden mellan dessa två, låt oss först förstå vad de menar individuellt och hur används de?
Låt oss börja!!
finns det ett vr-headset för xbox 360
Vad du kommer att lära dig:
Vad är TDD?
TDD står för Test Driven Development. I den här programvaruutvecklingstekniken skapar vi testfallet först och skriver sedan koden som ligger till grund för dessa testfall. Även om TDD är en utvecklingsteknik kan den också användas för utveckling av automatiseringstest.
Lagen som implementerar TDD tar mer tid för utveckling men de tenderar att hitta väldigt få defekter. TDD resulterar i förbättrad kodkod och koden som är mer återanvändbar och flexibel.
TDD hjälper också till att uppnå höga testtäckning av cirka 90-100%. Det mest utmanande för utvecklare som följer TDD är att skriva sina testfall innan de skriver koden.
Föreslagen läsning => Ultimate Guide för att skriva utmärkta testfall
Process av TDD
TDD-metoden följer en mycket enkel 6-stegsprocess:
1) Skriv ett testfall: Basera på kraven, skriv ett automatiskt testfall.
2) Kör alla testfall: Kör dessa automatiserade testfall på den nu utvecklade koden.
3) Utveckla koden för det testfallet: Om testfallet misslyckas skriver du koden så att testfallet fungerar som förväntat.
4) Kör testfall igen: Kör testfallet igen och kontrollera om alla testfall som hittills utvecklats är implementerade.
5) Omforma din kod: Detta är ett valfritt steg. Det är dock viktigt att refaktorera din kod för att göra den mer läsbar och återanvändbar.
6) Upprepa stegen 1-5 för nya testfall: Upprepa cykeln för övriga testfall tills alla testfall är implementerade.
Exempel på en implementering av ett testfall i TDD
Låt oss anta att vi har ett krav att utveckla en inloggningsfunktionalitet för en applikation som har användarnamn och lösenordsfält och en skicka-knapp.
Steg 1: Skapa ett testfall.
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Steg 2: Kör detta testfall och vi får ett fel som säger att inloggningssidan inte är definierad och att det inte finns några metoder med namn enterUserName, enterPassword och submit.
Steg 3: Utveckla koden för det testfallet. Låt oss skriva den underliggande koden som anger användarnamnet och lösenordet och får ett hemsidobjekt när de är korrekta.
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(); } } }
Steg 4: Kör testfallet igen så får vi en förekomst av hemsidan.
Steg 5: Låt oss omformulera koden för att ge rätt felmeddelanden när om villkoren i inlämningsmetoden inte är sanna.
//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'); }
Steg 6: Låt oss nu skriva ett nytt testfall med ett tomt användarnamn och lösenord.
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Om du försöker köra detta testfall, misslyckas det nu. Upprepa steg 1 till 5 för detta testfall och lägg sedan till funktionaliteten för att hantera tomma användarnamn och lösenordsträngar.
Vad är BDD?
BDD står för Behavior Driven Development. BDD är en förlängning till TDD där vi istället för att skriva testfallet börjar med att skriva ett beteende. Senare utvecklar vi koden som krävs för att vår applikation ska kunna utföra beteendet.
Scenariot som definieras i BDD-metoden gör det enkelt för utvecklare, testare och affärsanvändare att samarbeta.
BDD anses vara en bästa praxis när det gäller automatiserad testning eftersom det fokuserar på applikationens beteende och inte på att tänka på implementeringen av koden.
Applikationens beteende är centrum för BDD och det tvingar utvecklare och testare att gå in i kundens skor.
Process av BDD
Processen som ingår i BDD-metoden består också av sex steg och är mycket lik den för TDD.
1) Skriv applikationens beteende: En applikations beteende skrivs på ett enkelt engelska språk som produktägaren eller affärsanalytikerna eller kvalitetsbedömningarna.
2) Skriv de automatiska manusen: Detta enkla engelska liknande språk omvandlas sedan till programmeringstest.
3) Implementera funktionskoden: Den funktionella koden som ligger bakom beteendet implementeras sedan.
4) Kontrollera om beteendet är framgångsrikt: Kör beteendet och se om det är framgångsrikt. Om det lyckas, gå vidare till nästa beteende, annars fixa felen i funktionskoden för att uppnå applikationsbeteendet.
5) Omforma eller organisera kod: Omformulera eller organisera din kod för att göra den mer läsbar och återanvändbar.
6) Upprepa stegen 1-5 för nytt beteende: Upprepa stegen för att implementera mer beteenden i din applikation.
Läs också => Hur testare är involverade i TDD-, BDD- och ATDD-tekniker
vilket program öppnar en eps-fil
Exempel på beteendeimplementering i BDD
Låt oss anta att vi har ett krav att utveckla en inloggningsfunktionalitet för en applikation som har användarnamn och lösenordsfält och en skicka-knapp.
Steg 1: Skriv beteendet hos applikationen för att ange användarnamn och lösenord.
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.
Steg 2: Skriv det automatiska testskriptet för detta beteende enligt nedan.
@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); } }
Steg 3: Implementera funktionskoden (Detta liknar funktionskoden i TDD-exempel steg 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(); } } }
Steg 4: Kör detta beteende och se om det är framgångsrikt. Om det lyckas, gå sedan till steg 5, annars felsök den funktionella implementeringen och kör den igen.
Steg 5: Omfakturera implementeringen är ett valfritt steg och i det här fallet kan vi omforma koden i inlämningsmetoden för att skriva ut felmeddelandena som visas i steg 5 för TDD-exemplet.
//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'); }
Steg 6: Skriv ett annat beteende och följ steg 1 till 5 för detta nya beteende.
Vi kan skriva ett nytt beteende för att kontrollera om vi får ett fel för att inte ange användarnamnet som visas nedan:
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 - Viktiga skillnader
TDD | BDD |
---|---|
Kan vara ett bättre tillvägagångssätt för projekt som involverar API och verktyg från tredje part. | Kan vara ett bättre tillvägagångssätt för projekt som drivs av användaråtgärder. Till exempel: e-handelswebbplats, applikationssystem etc. |
Står för testdriven utveckling. | Står för beteendedriven utveckling. |
Processen börjar med att skriva ett testfall. | Processen börjar med att skriva ett scenario enligt förväntat beteende. |
TDD fokuserar på hur funktionaliteten implementeras. | BDD fokuserar på beteendet hos en applikation för slutanvändaren. |
Testfall skrivs på ett programmeringsspråk. | Scenarier är mer läsbara jämfört med TDD eftersom de är skrivna i enkelt engelska format. |
Förändringar i hur applikationsfunktionerna påverkar mycket på testfallet i TDD. | BDD-scenarier påverkas inte mycket av funktionalitetsändringarna. |
Samarbete krävs endast mellan utvecklarna. | Samarbete krävs mellan alla intressenter. |
Några av de verktyg som stöder TDD är: JUnit, TestNG, NUnit, etc. | Några av de verktyg som stöder BDD är SpecFlow, Gurka, MSpec, etc. |
Tester i TDD kan endast förstås av personer med programmeringskunskap, | Tester i BDD kan förstås av alla personer inklusive de utan programmeringskunskap. |
TDD minskar sannolikheten för att ha fel i dina tester. | Fel i tester är svåra att spåra jämfört med TDD. |
Slutsats
Att välja mellan TDD mot BDD kan vara mycket knepigt. Vissa kan hävda att BDD är bättre för att hitta buggar medan de andra kanske bara säger att TDD ger högre kodtäckning.
Ingen av metoderna är bättre än den andra. Det beror på personen och projektgruppen att bestämma vilken metod som ska användas.
Vi hoppas att den här artikeln har tagit bort dina tvivel om TDD vs BDD !!
Rekommenderad läsning
- 180+ Testning av webbapplikationsexempel (fallchecklista)
- Hur översätter man manuella testfall till automatiseringsskript? - En steg-för-steg-guide med exempel
- Testfall Intervjufrågor: Skriv testfall baserat på scenario
- Hur testarna är involverade i TDD-, BDD- och ATDD-tekniker
- Testtäckning vid programvarutestning (tips för att maximera testtäckning)
- 8 bästa beteendrivna utvecklingsverktyg (BDD) och testramar
- Specflow Tutorial: The Ultimate Guide to BDD Tool
- Hur man skriver testfall: Den ultimata guiden med exempel