tdd vs bdd analyze differences with examples
Ta vadnica pojasnjuje razlike med TDD in BDD s primeri:
TDD ali Test Driven Development in BDD ali Behavior Driven Development sta dve tehniki razvoja programske opreme.
kje je omrežni varnostni ključ na mojem usmerjevalniku
Preden se poglobimo v razliko med tema dvema, najprej razumemo, kaj pomenita posamezno in kako se uporabljata?
Začnimo!!
Kaj se boste naučili:
Kaj je TDD?
TDD je kratica za Test Driven Development. V tej tehniki razvoja programske opreme najprej izdelamo testne primere in nato napišemo kodo, ki je osnova za te testne primere. Čeprav je TDD razvojna tehnika, jo lahko uporabimo tudi za razvoj testiranja avtomatizacije.
Skupine, ki izvajajo TDD, si vzamejo več časa za razvoj, vendar ponavadi najdejo zelo malo napak. Rezultat TDD je izboljšana kakovost kode in kode, ki je bolj uporabna in prilagodljiva.
TDD pomaga tudi pri doseganju visokega pokritost s testom približno 90-100%. Za razvijalce, ki sledijo TDD, je najbolj zahtevna stvar, da pred pisanjem kode napišejo svoje testne primere.
Predlagano branje => Vrhunski vodnik za pisanje odličnih testnih primerov
Proces TDD
Metodologija TDD sledi zelo preprostemu 6-stopenjskemu postopku:
1) Napišite testni primer: Na podlagi zahtev napišite avtomatiziran testni primer.
2) Zaženite vse testne primere: Zaženite te avtomatizirane testne primere na trenutno razviti kodi.
3) Razvijte kodo za te testne primere: Če testni primer ne uspe, napišite kodo, da bo testni primer deloval po pričakovanjih.
4) Ponovno zaženite testne primere: Ponovno zaženite testne primere in preverite, ali se izvajajo vsi do zdaj razviti testni primeri.
5) Preoblikujte svojo kodo: To je neobvezen korak. Vendar je pomembno, da svojo kodo predelate, da bo bolj berljiva in ponovno uporabna.
6) Ponovite korake 1–5 za nove testne primere: Ponavljajte cikel za druge testne primere, dokler se ne izvedejo vsi testni primeri.
Primer izvedbe testnega primera v TDD
Predpostavimo, da imamo zahtevo, da razvijemo funkcijo prijave za aplikacijo, ki ima polja za uporabniško ime in geslo ter gumb za oddajo.
Korak 1: Ustvarite testni primer.
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
2. korak: Zaženite ta testni primer in dobili bomo napako, ki pravi, da stran za prijavo ni definirana in da ni metod z imeni enterUserName, enterPassword in submit.
3. korak: Razvijte kodo za ta testni primer. Napišimo osnovno kodo, ki bo vnesla uporabniško ime in geslo ter dobila objekt domače strani, ko bosta pravilna.
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(); } } }
4. korak: Ponovno zaženite testni primer in dobili bomo primerek domače strani.
5. korak: Preoblikujmo kodo, da bo podala pravilna sporočila o napakah, če pogoji v metodi oddaje niso resnični.
//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'); }
6. korak: Zdaj pa napišite nov testni primer s praznim uporabniškim imenom in geslom.
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Če poskusite zagnati ta testni primer, ne bo uspel. Ponovite korake od 1 do 5 za ta testni primer in nato dodajte funkcionalnost za obdelavo praznih nizov uporabniškega imena in gesla.
Kaj je BDD?
BDD pomeni razvoj, usmerjen v vedenje. BDD je razširitev TDD, kjer namesto pisanja testnih primerov začnemo s pisanjem vedenja. Kasneje razvijemo kodo, ki je potrebna za izvajanje naše aplikacije.
Scenarij, opredeljen v pristopu BDD, razvijalcem, preizkuševalcem in poslovnim uporabnikom olajša sodelovanje.
BDD velja za najboljšo prakso avtomatizirano testiranje saj se osredotoča na vedenje aplikacije in ne na razmišljanje o izvajanju kode.
Vedenje aplikacije je v središču pozornosti BDD-ja in razvijalce in preizkuševalce prisili, da vstopijo v čevlje stranke.
Proces BDD
Postopek, vključen v metodologijo BDD, je prav tako sestavljen iz 6 korakov in je zelo podoben postopku TDD.
1) Napišite vedenje aplikacije: Lastnik izdelka ali poslovni analitiki ali ocenjevalci kakovosti v vedenju aplikacije pišejo v preprosti angleščini, kot je jezik.
2) Napišite avtomatizirane skripte: Ta preprost angleščini podoben jezik se nato pretvori v preizkuse programiranja.
3) Izvedite funkcionalno kodo: Nato se izvede funkcionalna koda, na kateri temelji vedenje.
4) Preverite, ali je vedenje uspešno: Zaženite vedenje in preverite, ali je uspešno. Če je uspešen, se premaknite na naslednje vedenje, sicer odpravite napake v funkcionalni kodi, da dosežete vedenje aplikacije.
5) Refaktor ali organiziranje kode: Preoblikujte ali organizirajte svojo kodo, da bo bolj berljiva in ponovno uporabna.
6) Ponovite korake 1-5 za novo vedenje: Ponovite korake, če želite v aplikaciji uporabiti več vedenj.
Preberite tudi => Kako so preizkuševalci vključeni v tehnike TDD, BDD in ATDD
Primer izvajanja vedenja pri BDD
Predpostavimo, da imamo zahtevo, da razvijemo funkcijo prijave za aplikacijo, ki ima polja za uporabniško ime in geslo ter gumb za oddajo.
Korak 1: Napišite vedenje aplikacije za vnos uporabniškega imena in gesla.
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.
2. korak: Napiši samodejni preizkusni skript za to vedenje, kot je prikazano spodaj.
@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); } }
3. korak: Implementirajte funkcionalno kodo (To je podobno kot funkcionalna koda v koraku 3 primera TDD).
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(); } } }
4. korak: Zaženite to vedenje in preverite, ali je uspešno. Če je uspešna, pojdite na 5. korak, sicer odpravite napake v funkcionalni izvedbi in jo znova zaženite.
5. korak: Refaktoriranje izvedbe je neobvezen korak in v tem primeru lahko refaktoriramo kodo v načinu oddaje, da natisnemo sporočila o napakah, kot je prikazano v koraku 5 za primer 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'); }
6. korak: Napišite novo vedenje in sledite korakom od 1 do 5 za to novo vedenje.
Lahko napišemo novo vedenje, da preverimo, ali dobimo napako, ker nismo vnesli uporabniškega imena, kot je prikazano spodaj:
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 |
---|---|
Morda bi bil boljši pristop za projekte, ki vključujejo API in tuja orodja. | Lahko bi bil boljši pristop za projekte, ki jih vodijo uporabniška dejanja. Na primer: spletno mesto za e-poslovanje, sistem za prijavo itd. |
Stojala za testno voden razvoj. | Stoji za vedenjski razvoj. |
Postopek se začne s pisanjem testnega primera. | Proces se začne s pisanjem scenarija glede na pričakovano vedenje. |
TDD se osredotoča na to, kako je funkcionalnost implementirana. | BDD se osredotoča na vedenje aplikacije za končnega uporabnika. |
Testni primeri so napisani v programskem jeziku. | Scenariji so bolj berljivi v primerjavi z TDD, saj so napisani v preprosti angleški obliki. |
Spremembe v delovanju aplikacije močno vplivajo na testne primere v TDD. | Spremembe funkcionalnosti na scenarije BDD ne vplivajo veliko. |
Sodelovanje je potrebno le med razvijalci. | Potrebno je sodelovanje vseh zainteresiranih strani. |
Nekatera orodja, ki podpirajo TDD, so: JUnit, TestNG, NUnit itd. | Nekatera orodja, ki podpirajo BDD, so SpecFlow, Cucumber, MSpec itd. |
Preizkuse v TDD lahko razumejo samo ljudje s programskim znanjem, | Preizkuse v BDD lahko razume katera koli oseba, tudi tista, ki nima znanja programiranja. |
TDD zmanjšuje verjetnost napak pri testih. | Napake v testih je težko slediti v primerjavi s TDD. |
Zaključek
Izbira med TDD in BDD je lahko zelo zapletena. Nekateri bi lahko trdili, da je BDD boljši za iskanje napak, drugi pa bi lahko rekli, da TDD zagotavlja večjo pokritost kode.
Nobena metodologija ni boljša od druge. Od osebe in projektne skupine je odvisno, katero metodologijo uporabiti.
Upamo, da je ta članek razjasnil vaše dvome o TDD in BDD !!
Priporočeno branje
- 180+ Primeri preizkusov spletnih aplikacij (vzorčni kontrolni seznam)
- Kako prevesti primere ročnih preizkusov v skripte za avtomatizacijo? - Vodnik po korakih s primerom
- Vprašanja za intervjuje v testnih primerih: Napišite testne primere na podlagi scenarija
- Kako so preizkuševalci vključeni v tehnike TDD, BDD in ATDD
- Testna pokritost pri testiranju programske opreme (nasveti za povečanje pokritosti s testiranjem)
- 8 orodij za razvoj najboljših vedenj (BDD) in okviri za testiranje
- Vadnica za specflow: Končni vodnik po orodju BDD
- Kako napisati testne primere: Ultimate Guide z primeri