tdd vs bdd analyze differences with examples
Tento výukový program vysvětluje rozdíly mezi TDD a BDD s příklady:
TDD nebo Test Driven Development a BDD nebo Behavior Driven Development jsou dvě techniky vývoje softwaru.
Než se ponoříme hlouběji do rozdílu mezi těmito dvěma, nejprve pochopíme, co znamenají jednotlivě a jak se používají?
jak spustit soubory jar v systému Windows 10
Začněme!!
Co se naučíte:
Co je TDD?
TDD znamená Test Driven Development. V této technice vývoje softwaru nejprve vytvoříme testovací případy a poté napíšeme kód, který je základem těchto testovacích případů. Ačkoli TDD je vývojová technika, lze ji použít také pro vývoj testování automatizace.
Týmy, které implementují TDD, potřebují více času na vývoj, ale mají tendenci najít jen velmi málo defektů. TDD má za následek vylepšenou kvalitu kódu a kód, který je více použitelný a flexibilní.
TDD také pomáhá při dosahování vysokých hodnot testovací pokrytí asi 90-100%. Nejnáročnější věcí pro vývojáře následující po TDD je napsat své testovací případy před napsáním kódu.
Doporučené čtení => Průvodce pro psaní vynikajících testovacích případů
Proces TDD
Metodika TDD sleduje velmi jednoduchý 6krokový proces:
1) Napište testovací případ: Na základě požadavků napište automatický testovací případ.
2) Spusťte všechny testovací případy: Spusťte tyto automatizované testovací případy na aktuálně vyvinutém kódu.
3) Vytvořte kód pro dané testovací případy: Pokud testovací případ selže, napište kód, aby testovací případ fungoval podle očekávání.
4) Spusťte znovu testovací případy: Spusťte znovu testovací případy a zkontrolujte, zda jsou implementovány všechny dosud vyvinuté testovací případy.
5) Refaktorujte svůj kód: Toto je volitelný krok. Je však důležité upravit váš kód, aby byl čitelnější a znovu použitelný.
6) Opakujte kroky 1 až 5 pro nové testovací případy: Opakujte cyklus pro ostatní testovací případy, dokud nebudou implementovány všechny testovací případy.
Příklad implementace testovacího případu v TDD
Předpokládejme, že máme požadavek na vývoj funkce přihlášení pro aplikaci, která má pole pro uživatelské jméno a heslo a tlačítko pro odeslání.
Krok 1: Vytvořte testovací případ.
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Krok 2: Spusťte tento testovací případ a zobrazí se chyba, která říká, že přihlašovací stránka není definována a neexistují žádné metody s názvy enterUserName, enterPassword a submit.
Krok 3: Vytvořte kód pro daný testovací případ. Napíšeme základní kód, který zadá uživatelské jméno a heslo, a po zadání správného objektu domovské stránky.
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(); } } }
Krok 4: Spusťte testovací případ znovu a my získáme instanci domovské stránky.
Krok 5: Refaktorujte kód, abychom poskytli správné chybové zprávy, pokud podmínky if v metodě odeslání nejsou pravdivé.
//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'); }
Krok 6: Nyní napíšeme nový testovací případ s prázdným uživatelským jménem a heslem.
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Nyní, pokud se pokusíte spustit tento testovací případ, se nezdaří. Opakujte kroky 1 až 5 pro tento testovací případ a poté přidejte funkci pro zpracování prázdných řetězců uživatelského jména a hesla.
Co je BDD?
BDD znamená Behavior Driven Development. BDD je rozšíření TDD, kde místo psaní testovacích případů začneme psaním chování. Později vyvíjíme kód, který je vyžadován pro naši aplikaci k provádění chování.
Scénář definovaný v přístupu BDD usnadňuje spolupráci vývojářům, testerům a podnikovým uživatelům.
BDD je považován za nejlepší postup, pokud jde o automatizované testování protože se zaměřuje na chování aplikace a ne na přemýšlení o implementaci kódu.
Chování aplikace je středobodem zájmu BDD a nutí vývojáře a testery, aby vstoupili do obuvi zákazníka.
Proces BDD
Proces zapojený do metodiky BDD také sestává ze 6 kroků a je velmi podobný procesu TDD.
1) Napište chování aplikace: Chování aplikace je napsáno v jednoduché angličtině, jako je jazyk, vlastníkem produktu nebo obchodními analytiky nebo QA.
2) Napište automatické skripty: Tento jednoduchý anglický jazyk se poté převede na programovací testy.
3) Implementujte funkční kód: Poté je implementován funkční kód, který je základem chování.
4) Zkontrolujte, zda je chování úspěšné: Spusťte chování a zjistěte, zda je úspěšné. Pokud je úspěšné, přejděte na další chování, jinak opravte chyby ve funkčním kódu, abyste dosáhli chování aplikace.
5) Refaktor nebo organizační kód: Refaktorujte nebo uspořádejte svůj kód, aby byl čitelnější a znovu použitelný.
jak otevřít soubor .dat v systému Windows
6) Opakujte kroky 1-5 pro nové chování: Opakováním těchto kroků implementujte do své aplikace více chování.
Přečtěte si také => Jak se testeři účastní technik TDD, BDD a ATDD
Příklad implementace chování v BDD
Předpokládejme, že máme požadavek na vývoj funkce přihlášení pro aplikaci, která má pole pro uživatelské jméno a heslo a tlačítko pro odeslání.
Krok 1: Napište chování aplikace pro zadávání uživatelského jména a hesla.
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.
Krok 2: Napište automatický testovací skript pro toto chování, jak je uvedeno níže.
@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); } }
Krok 3: Implementujte funkční kód (Toto je podobný funkčnímu kódu v příkladu kroku 3 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(); } } }
Krok 4: Spusťte toto chování a zkontrolujte, zda je úspěšné. Pokud je úspěšná, přejděte na krok 5, jinak odlaďte funkční implementaci a poté ji znovu spusťte.
Krok 5: Refaktoring implementace je volitelný krok a v tomto případě můžeme refaktorovat kód v metodě odeslání pro tisk chybových zpráv, jak je ukázáno v kroku 5 pro příklad 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'); }
Krok 6: Napište jiné chování a postupujte podle kroků 1 až 5 pro toto nové chování.
Můžeme napsat nové chování, abychom zkontrolovali, zda se nám zobrazí chyba, že jsme nezadali uživatelské jméno, jak je uvedeno níže:
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 - klíčové rozdíly
TDD | BDD |
---|---|
Může to být lepší přístup pro projekty, které zahrnují API a nástroje třetích stran. | Může to být lepší přístup k projektům, které jsou řízeny akcemi uživatelů. Například: webová stránka elektronického obchodu, aplikační systém atd. |
Znamená vývoj řízený testem. | Stojí za vývojem řízeným chováním. |
Proces začíná napsáním testovacího případu. | Proces začíná napsáním scénáře podle očekávaného chování. |
TDD se zaměřuje na to, jak je funkce implementována. | BDD se zaměřuje na chování aplikace pro koncového uživatele. |
Testovací případy jsou psány v programovacím jazyce. | Scénáře jsou ve srovnání s TDD čitelnější, protože jsou psány v jednoduchém anglickém formátu. |
Změny v tom, jak funkce aplikace hodně ovlivňují testovací případy v TDD. | Scénáře BDD nejsou příliš ovlivněny změnami funkčnosti. |
Spolupráce je nutná pouze mezi vývojáři. | Je nutná spolupráce mezi všemi zúčastněnými stranami. |
Mezi nástroje podporující TDD patří: JUnit, TestNG, NUnit atd. | Některé z nástrojů, které podporují BDD, jsou SpecFlow, Cucumber, MSpec atd. |
Testy v TDD mohou pochopit pouze lidé se znalostmi programování, | Testům v BDD rozumí každá osoba, včetně těch, které nemají znalosti programování. |
TDD snižuje pravděpodobnost výskytu chyb ve vašich testech. | Chyby v testech je obtížné sledovat ve srovnání s TDD. |
Závěr
Výběr mezi TDD vs. BDD může být velmi složitý. Někteří by mohli namítnout, že BDD je lepší pro hledání chyb, zatímco jiní by mohli jen říci, že TDD poskytuje vyšší pokrytí kódem.
Ani jedna metodika není lepší než ta druhá. Záleží na osobě a projektovém týmu, aby se rozhodli, kterou metodiku použít.
Doufáme, že tento článek vyřešil vaše pochybnosti o TDD vs BDD !!
Doporučené čtení
- 180+ příkladů testování webových aplikací Testovací případy (ukázkový kontrolní seznam)
- Jak převést ruční testovací případy do automatizačních skriptů? - Průvodce krok za krokem s příkladem
- Testovací případy Dotaz na rozhovor: Napište testovací případy na základě scénáře
- Jak se testeři účastní technik TDD, BDD a ATDD
- Testování pokrytí při testování softwaru (tipy k maximalizaci pokrytí testování)
- 8 nástrojů pro nejlepší vývoj na základě chování (BDD) a testovací rámce
- Výukový program Specflow: The Ultimate Guide to BDD Tool
- Jak psát testovací případy: Ultimate Guide s příklady