tdd vs bdd analyze differences with examples
Ovaj vodič objašnjava razlike između TDD-a i BDD-a na primjerima:
TDD ili Test Driven Development i BDD ili Behaviour Driven Development dvije su tehnike razvoja softvera.
Prije nego što dublje zaronimo u razliku između ove dvije, shvatimo prvo što pojedinačno znače i kako se koriste?
Počnimo!!
Što ćete naučiti:
Što je TDD?
TDD je kratica od Test Driven Development (Razvojem testiranim). U ovoj tehnici razvoja softvera prvo kreiramo test slučajeve, a zatim napišemo kôd u osnovi tih test slučajeva. Iako je TDD razvojna tehnika, može se koristiti i za razvoj automatiziranih ispitivanja.
Timovi koji implementiraju TDD uzimaju više vremena za razvoj, međutim, oni obično pronalaze vrlo malo nedostataka. TDD rezultira poboljšanom kvalitetom koda i koda koji je višekratno upotrebljiv i fleksibilan.
TDD također pomaže u postizanju visokog pokrivenost testom od oko 90-100%. Najizazovnije za programere nakon TDD-a je pisanje testnih slučajeva prije pisanja koda.
Predloženo čitanje => Vrhunski vodič za pisanje izvrsnih test slučajeva
Proces TDD-a
TDD metodologija slijedi vrlo jednostavan postupak u 6 koraka:
1) Napišite testni slučaj: Na temelju zahtjeva napišite automatizirani test.
2) Pokrenite sve test slučajeve: Pokrenite ove automatizirane test slučajeve na trenutno razvijenom kodu.
3) Razviti kôd za te test slučajeve: Ako test slučaj ne uspije, napišite kôd da bi test test radio kako se očekivalo.
4) Ponovno pokrenite test slučajeve: Ponovno pokrenite test slučajeve i provjerite jesu li implementirani svi do sada razvijeni test slučajevi.
5) Refaktorirajte svoj kod: Ovo je neobavezan korak. Međutim, važno je preoblikovati svoj kôd kako bi bio čitljiviji i ponovni.
6) Ponovite korake 1–5 za nove test slučajeve: Ponavljajte ciklus za ostale test slučajeve dok se ne provedu svi test slučajevi.
Primjer provedbe test slučaja u TDD-u
Pretpostavimo da imamo zahtjev za razvojem funkcionalnosti prijave za aplikaciju koja ima polja za korisničko ime i lozinku i gumb za slanje.
kako otvoriti .jar datoteku u sustavu Windows 10
Korak 1: Stvorite testni slučaj.
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Korak 2: Pokrenite ovaj testni slučaj i dobit ćemo pogrešku koja kaže da stranica za prijavu nije definirana i da ne postoje metode s imenima enterUserName, enterPassword i submit.
Korak 3: Razvijte kod za taj testni slučaj. Napišimo temeljni kôd koji će unijeti korisničko ime i lozinku i dobiti objekt početne stranice kada su ispravni.
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(); } } }
Korak 4: Ponovno pokrenite test i dobit ćemo primjerak početne stranice.
Korak 5: Refaktoriziramo kôd da bismo dali ispravne poruke o pogrešci ako uvjeti if u metodi slanja nisu istiniti.
//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'); }
Korak 6: Napišimo sada novi testni slučaj s praznim korisničkim imenom i lozinkom.
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Ako pokušate pokrenuti ovaj testni slučaj, neće uspjeti. Ponovite korake 1 do 5 za ovaj testni slučaj, a zatim dodajte funkciju za rukovanje praznim nizovima korisničkog imena i lozinke.
Što je BDD?
BDD je kratica od Behaviour Driven Development (Razvoj vođen ponašanjem). BDD je proširenje TDD-a gdje, umjesto pisanja test slučajeva, započinjemo pisanjem ponašanja. Kasnije razvijamo kôd koji je potreban našoj aplikaciji za izvršavanje ponašanja.
Scenarij definiran u BDD pristupu olakšava suradnju programerima, testerima i poslovnim korisnicima.
BDD se smatra najboljom praksom kad je riječ o automatizirano ispitivanje jer se usredotočuje na ponašanje aplikacije, a ne na razmišljanje o implementaciji koda.
Ponašanje aplikacije u središtu je pozornosti BDD-a i prisiljava programere i testere da uđu u kupčeve cipele.
Proces BDD-a
Proces uključen u metodologiju BDD-a također se sastoji od 6 koraka i vrlo je sličan procesu TDD-a.
1) Napišite ponašanje aplikacije: Ponašanje aplikacije na jednostavnom engleskom jeziku, poput jezika, napisao je vlasnik proizvoda ili poslovni analitičari ili provjera kvalitete.
2) Napišite automatizirane skripte: Ovaj jednostavan jezik poput engleskog pretvara se u programske testove.
3) Primijenite funkcionalni kod: Zatim se implementira funkcionalni kod koji je temelj ponašanja.
4) Provjerite je li ponašanje uspješno: Pokrenite ponašanje i provjerite je li uspješno. Ako je uspješno, prijeđite na sljedeće ponašanje, inače popravite pogreške u funkcionalnom kodu da biste postigli ponašanje aplikacije.
5) Refaktor ili organiziranje koda: Refaktorizirajte ili organizirajte svoj kôd kako biste ga učinili čitljivijim i ponovnijim za upotrebu.
6) Ponovite korake 1-5 za novo ponašanje: Ponovite korake da biste primijenili više ponašanja u svojoj aplikaciji.
Također pročitajte => Kako su ispitivači uključeni u TDD, BDD i ATDD tehnike
Primjer provedbe ponašanja u BDD-u
Pretpostavimo da imamo zahtjev za razvojem funkcionalnosti prijave za aplikaciju koja ima polja za korisničko ime i lozinku i gumb za slanje.
Korak 1: Napišite ponašanje aplikacije za unos korisničkog imena i lozinke.
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.
Korak 2: Napišite skriptu za automatizirano testiranje za ovo ponašanje kako je prikazano u nastavku.
@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); } }
Korak 3: Primijenite funkcionalni kod (Ovo je slično funkcionalnom kodu u primjeru TDD, korak 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(); } } }
Korak 4: Pokrenite ovo ponašanje i provjerite je li uspješno. Ako je uspješna, idite na korak 5, u suprotnom ispravite pogreške u funkcionalnoj implementaciji, a zatim je ponovno pokrenite.
Korak 5: Refaktoriranje implementacije neobavezan je korak i u ovom slučaju možemo refaktorirati kôd u metodi slanja kako bismo ispisali poruke pogreške kao što je prikazano u koraku 5 za primjer TDD.
//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'); }
Korak 6: Napišite novo ponašanje i slijedite korake 1 do 5 za ovo novo ponašanje.
Možemo napisati novo ponašanje kako bismo provjerili dobivamo li pogrešku zbog neupisivanja korisničkog imena kao što je prikazano dolje:
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 - ključne razlike
TDD | BDD |
---|---|
Mogao bi biti bolji pristup za projekte koji uključuju API i alate nezavisnih proizvođača. | Mogao bi biti bolji pristup za projekte koji su pokrenuti djelovanjem korisnika. Primjerice: web stranica e-trgovine, sustav aplikacija itd. |
Postolja za testni razvoj. | Znači za razvoj usmjeren na ponašanje. |
Proces započinje pisanjem test slučaja. | Proces započinje pisanjem scenarija prema očekivanom ponašanju. |
TDD se fokusira na to kako je funkcionalnost implementirana. | BDD se fokusira na ponašanje aplikacije za krajnjeg korisnika. |
Test slučajevi napisani su na programskom jeziku. | Scenariji su čitljiviji u usporedbi s TDD-om jer su napisani u jednostavnom engleskom formatu. |
Promjene u načinu funkcioniranja aplikacije uvelike utječu na test slučajeve u TDD-u. | Promjene funkcionalnosti ne utječu puno na BDD scenarije. |
Suradnja je potrebna samo između programera. | Potrebna je suradnja između svih dionika. |
Neki od alata koji podržavaju TDD su: JUnit, TestNG, NUnit itd. | Neki od alata koji podržavaju BDD su SpecFlow, Cucumber, MSpec itd. |
Testove u TDD-u mogu razumjeti samo ljudi koji poznaju programiranje, | Testove u BDD-u može razumjeti bilo koja osoba, uključujući one bez znanja programiranja. |
TDD smanjuje vjerojatnost postojanja bugova u testovima. | Bugove u testovima je teško pratiti u usporedbi s TDD-om. |
Zaključak
Izbor između TDD-a i BDD-a može biti vrlo lukav. Neki bi mogli tvrditi da je BDD bolji za pronalaženje bugova, dok bi drugi mogli reći da TDD pruža veću pokrivenost kodom.
Nijedna metodologija nije bolja od druge. O osobi i projektnom timu ovisi koja će metodologija koristiti.
Nadamo se da je ovaj članak razjasnio vaše sumnje u vezi s TDD-om i BDD-om !!
Preporučena literatura
- 180+ primjera testiranja web aplikacija (Primjer kontrolnog popisa)
- Kako prevesti slučajeve ručnog testiranja u skripte za automatizaciju? - Vodič korak po korak s primjerom
- Pitanja za intervjue za test slučajeve: Napišite test slučajeve na temelju scenarija
- Kako su ispitivači uključeni u TDD, BDD i ATDD tehnike
- Test pokrivenost u testiranju softvera (savjeti za maksimiziranje pokrivenosti testiranjem)
- 8 alata i okvira za testiranje najboljih ponašanja vođenih razvojem (BDD)
- Vodič za specflow: Vrhunski vodič za BDD alat
- Kako pisati test slučajeve: Vrhunski vodič s primjerima