tdd vs bdd analyze differences with examples
Acest tutorial explică diferențele dintre TDD și BDD cu exemple:
TDD sau Test Driven Development și BDD sau Behavior Driven Development sunt cele două tehnici de dezvoltare software.
Înainte de a ne adânci în diferența dintre aceste două, să înțelegem mai întâi ce înseamnă în mod individual și cum sunt folosite?
Să începem!!
eșantion de CV pentru tester software experimentat
Ce veți învăța:
Ce este TDD?
TDD înseamnă Test Driven Development. În această tehnică de dezvoltare software, creăm mai întâi cazurile de testare și apoi scriem codul care stă la baza acestor cazuri de testare. Deși TDD este o tehnică de dezvoltare, poate fi folosită și pentru dezvoltarea testelor de automatizare.
Echipele care implementează TDD au nevoie de mai mult timp pentru dezvoltare, totuși, tind să găsească foarte puține defecte. TDD are ca rezultat îmbunătățirea calității codului și a codului care este mai reutilizabil și mai flexibil.
TDD ajută, de asemenea, la atingerea nivelului ridicat acoperirea testului de aproximativ 90-100%. Cel mai provocator lucru pentru dezvoltatorii care urmează TDD este să își scrie cazurile de testare înainte de a scrie codul.
Citire sugerată => Ghid final pentru scrierea unor cazuri de testare excelente
Procesul TDD
Metodologia TDD urmează un proces foarte simplu în 6 pași:
1) Scrieți un caz de testare: Pe baza cerințelor, scrieți un caz de test automat.
2) Rulați toate cazurile de testare: Rulați aceste cazuri de test automat pe codul dezvoltat în prezent.
3) Elaborați codul pentru cazurile de testare: Dacă cazul de testare eșuează, atunci scrieți codul pentru ca cazul de testare să funcționeze conform așteptărilor.
4) Rulați din nou cazurile de testare: Rulați din nou cazurile de test și verificați dacă toate cazurile de test dezvoltate până acum sunt implementate.
5) Refacturați codul: Acesta este un pas opțional. Cu toate acestea, este important să refactorizați codul pentru a-l face mai ușor de citit și reutilizat.
6) Repetați pașii 1-5 pentru noile cazuri de testare: Repetați ciclul pentru celelalte cazuri de testare până când toate cazurile de testare sunt implementate.
Exemplu de implementare a cazului de test în TDD
Să presupunem că avem cerința de a dezvolta o funcționalitate de autentificare pentru o aplicație care are câmpuri de nume de utilizator și parolă și un buton de trimitere.
Pasul 1: Creați un caz de testare.
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Pasul 2: Rulați acest caz de testare și vom primi o eroare care spune că pagina de autentificare nu este definită și că nu există metode cu nume enterUserName, enterPassword și send.
Pasul 3: Elaborați codul pentru cazul de testare respectiv. Să scriem codul de bază care va introduce numele de utilizator și parola și va primi un obiect de pagină de pornire atunci când acestea sunt corecte.
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(); } } }
Pasul 4: Rulați din nou cazul de testare și vom primi o instanță a paginii de pornire.
Pasul 5: Să refactorizăm codul pentru a da mesajele de eroare corecte atunci când condițiile if din metoda de trimitere nu sunt adevărate.
//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'); }
Pasul 6: Acum să scriem un nou caz de testare cu un nume de utilizator și o parolă goale.
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Acum, dacă încercați să rulați acest caz de testare, acesta va eșua. Repetați pașii de la 1 la 5 pentru acest caz de testare și apoi adăugați funcționalitatea pentru a gestiona șirurile goale de nume de utilizator și parolă.
Ce este BDD?
BDD înseamnă Dezvoltarea condusă de comportament. BDD este o extensie a TDD unde, în loc să scriem cazurile de testare, începem prin a scrie un comportament. Mai târziu, dezvoltăm codul care este necesar pentru ca aplicația noastră să îndeplinească comportamentul.
Scenariul definit în abordarea BDD facilitează colaborarea dezvoltatorilor, testerilor și utilizatorilor de afaceri.
BDD este considerată cea mai bună practică atunci când vine vorba testare automată deoarece se concentrează pe comportamentul aplicației și nu pe gândirea la implementarea codului.
Comportamentul aplicației este centrul de concentrare în BDD și îi obligă pe dezvoltatori și testeri să meargă în locul clientului.
Procesul BDD
Procesul implicat în metodologia BDD constă, de asemenea, din 6 pași și este foarte similar cu cel al TDD.
1) Scrieți comportamentul aplicației: Comportamentul unei aplicații este scris în limba engleză simplă, de exemplu, de către proprietarul produsului sau de către analiștii de afaceri sau de către QA-uri.
2) Scrieți scripturile automatizate: Această limbă simplă în limba engleză este apoi convertită în teste de programare.
3) Implementați codul funcțional: Codul funcțional care stă la baza comportamentului este apoi implementat.
4) Verificați dacă comportamentul are succes: Rulați comportamentul și vedeți dacă are succes. Dacă aveți succes, treceți la următorul comportament, altfel remediați erorile din codul funcțional pentru a obține comportamentul aplicației.
cel mai bun convertor video gratuit pentru Windows 7
5) Refactor sau cod de organizare: Refactorizați sau organizați codul pentru a-l face mai ușor de citit și reutilizat.
6) Repetați pașii 1-5 pentru un nou comportament: Repetați pașii pentru a implementa mai multe comportamente în aplicația dvs.
Citește și => Cum sunt implicați testerii în tehnicile TDD, BDD și ATDD
Exemplu de implementare a comportamentului în BDD
Să presupunem că avem cerința de a dezvolta o funcționalitate de autentificare pentru o aplicație care are câmpuri de nume de utilizator și parolă și un buton de trimitere.
Pasul 1: Scrieți comportamentul aplicației pentru introducerea numelui de utilizator și a parolei.
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.
Pasul 2: Scrieți scriptul de test automat pentru acest comportament așa cum se arată mai jos.
@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); } }
Pasul 3: Implementați codul funcțional (Acesta este similar cu codul funcțional din pasul 3 din exemplul 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(); } } }
Pasul 4: Rulați acest comportament și vedeți dacă are succes. Dacă are succes, treceți la pasul 5 altfel depanați implementarea funcțională și apoi rulați-o din nou.
Pasul 5: Refactorizarea implementării este un pas opțional și, în acest caz, putem refactoriza codul din metoda de trimitere pentru a imprima mesajele de eroare așa cum se arată în pasul 5 pentru exemplul 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'); }
Pasul 6: Scrieți un comportament diferit și urmați pașii de la 1 la 5 pentru acest comportament nou.
Putem scrie un comportament nou pentru a verifica dacă primim o eroare pentru că nu introducem numele de utilizator așa cum se arată mai jos:
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 - Diferențe cheie
TDD | BDD |
---|---|
Ar putea fi o abordare mai bună pentru proiectele care implică instrumente API și terțe părți. | Ar putea fi o abordare mai bună pentru proiectele care sunt conduse de acțiunile utilizatorilor. De exemplu: site de comerț electronic, sistem de aplicații etc. |
Stabilește pentru dezvoltarea testată. | Standuri pentru dezvoltarea condusă de comportament. |
Procesul începe prin scrierea unui caz de testare. | Procesul începe prin scrierea unui scenariu conform comportamentului așteptat. |
TDD se concentrează pe modul în care este implementată funcționalitatea. | BDD se concentrează pe comportamentul unei aplicații pentru utilizatorul final. |
Testele sunt scrise într-un limbaj de programare. | Scenariile sunt mai lizibile în comparație cu TDD, deoarece sunt scrise în format simplu englezesc. |
Modificări ale modului în care funcțiile aplicației au un impact foarte mare asupra cazurilor de testare în TDD. | Scenariile BDD nu sunt mult afectate de modificările funcționale. |
Colaborarea este necesară numai între dezvoltatori. | Este necesară colaborarea între toți factorii interesați. |
Unele dintre instrumentele care acceptă TDD sunt: JUnit, TestNG, NUnit etc. | Unele dintre instrumentele care acceptă BDD sunt SpecFlow, Castravete, MSpec etc. |
Testele în TDD pot fi înțelese numai de persoanele cu cunoștințe de programare, | Testele în BDD pot fi înțelese de orice persoană, inclusiv de cele fără cunoștințe de programare. |
TDD reduce probabilitatea de a avea erori în testele dvs. | Bugurile din teste sunt dificil de urmărit în comparație cu TDD. |
Concluzie
Alegerea între TDD și BDD poate fi foarte dificilă. Unii ar putea susține că BDD este mai bun pentru găsirea erorilor, în timp ce ceilalți ar putea spune doar că TDD oferă o acoperire mai mare a codului.
Nici una dintre metodologii nu este mai bună decât cealaltă. Depinde de persoană și de echipa de proiect să decidă ce metodologie să utilizeze.
Sperăm că acest articol v-a șters îndoielile cu privire la TDD vs BDD !!
Lectură recomandată
- 180+ Exemple de testare a aplicațiilor web Exemple de teste (listă de verificare a probelor)
- Cum se traduce cazuri de testare manuale în scripturi de automatizare? - Un ghid pas cu pas cu exemplu
- Întrebări de interviu pentru cazuri de testare: scrieți cazuri de testare pe baza scenariului
- Cum sunt implicați testerii în tehnicile TDD, BDD și ATDD
- Acoperirea testului în testarea software-ului (sfaturi pentru maximizarea acoperirii testării)
- 8 Cele mai bune instrumente și cadre de testare pentru dezvoltarea comportamentului (BDD)
- Tutorial Specflow: Ghidul final al instrumentului BDD
- Cum se scriu cazuri de testare: ultimul ghid cu exemple