Obsah
BDD (Behavior-Driven Development)
BDD (z anglického Behavior-Driven Development, česky vývoj řízený chováním) je agilní softwarová metodika, která rozšiřuje principy TDD (Test-Driven Development) o spolupráci mezi vývojáři, testery a obchodními zástupci (product owners). Cílem BDD je zajistit, že tým vyvíjí správnou funkcionalitu, která skutečně splňuje potřeby uživatelů a podnikání.
Na rozdíl od klasického testování, kde se testy píší až dodatečně, BDD začíná definicí požadovaného chování systému před samotným kódováním – a to v jazyce srozumitelném všem zúčastněným stranám.
Původ a principy
BDD zformuloval Dan North v roce 2003 jako reakci na běžné problémy TDD:
- Testy psané pouze vývojáři často neodpovídají skutečným obchodním požadavkům.
- Nedostatek komunikace mezi technickým a netechnickým týmem.
Klíčové principy BDD:
- Společný jazyk – tým používá „doménový jazyk“ (Ubiquitous Language) pro popis požadavků.
- Příklady místo abstrakcí – chování se specifikuje pomocí konkrétních případů použití (scénářů).
- Automatizace specifikací – tyto příklady lze spustit jako živé testy.
- Zpětná vazba v reálném čase – okamžitě vidíme, zda systém chová podle očekávání.
Rozdíl mezi TDD, ATDD a BDD
| Metodika | Zaměření | Hlavní aktéři | Forma specifikace |
|---|---|---|---|
| TDD (Test-Driven Development) | Jednotkové testy, nízkoúrovňová logika | Vývojáři | Kód (např. JUnit, pytest) |
| ATDD (Acceptance Test-Driven Development) | Akcepční kritéria, shoda na požadavcích | Vývojáři, testeři, product owner | Tabulky, příklady |
| BDD | Chování systému z pohledu uživatele | Celý tým (včetně netechnických členů) | Přirozený jazyk (Gherkin) |
BDD je tedy nadstavbou TDD, která přidává komunikační a specifikační vrstvu.
Gherkin – jazyk pro popis chování
BDD využívá formální, ale člověkem čitelný jazyk Gherkin k popisu scénářů. Každý scénář má strukturu:
- Given – počáteční stav („předpoklady“),
- When – akce uživatele nebo událost,
- Then – očekávaný výsledek.
Příklad:
Scenario: User adds item to cart Given I am on the product page for "Notebook XYZ" When I click the "Add to Cart" button Then the cart should contain 1 item And I should see a confirmation message
Tyto scénáře se ukládají do souborů s příponou `.feature` a slouží jako živá dokumentace i jako spustitelné testy.
Nástroje pro BDD
Nejznámějším nástrojem pro BDD je Cucumber, ale existují i alternativy:
| Jazyk | Nástroj | Poznámka |
| ————- | ——————- | ———- |
| Java | Cucumber-JVM | Nejrozšířenější implementace |
| JavaScript | @cucumber/cucumber, Playwright + Gherkin | Podpora pro moderní E2E testování |
| .NET (C#) | SpecFlow | Plně integrován do Visual Studia |
| Python | behave, pytest-bdd | behave je nejbližší Cucumberu |
| Ruby | Cucumber | Původní implementace |
Tyto nástroje mapují řádky Gherkinu na tzv. step definitions – funkce v programovacím jazyce, které skutečně provádějí test (např. ovládají webový prohlížeč přes Selenium).
Výhody BDD
- Lepší komunikace – odstraňuje nedorozumění mezi obchodní a technickou stránkou.
- Jasnější požadavky – chování je popsáno konkrétními příklady, ne vágními popisy.
- Živá dokumentace – `.feature` soubory jsou vždy aktuální, protože selhání testu signalizuje nesoulad.
- Rané odhalení chyb – chyby v pochopení požadavků se projeví hned při psaní scénářů.
- Automatizace akcepčních testů – snadná validace, že systém dělá to, co má.
Nevýhody a rizika
- Náklady na zavádění – vyžaduje změnu myšlení a školení týmu.
- Nadměrná automatizace – BDD není vhodný pro všechny typy testů (např. jednotkové testy).
- Technické detaily v Gherkinu – pokud scénáře popisují „jak“ místo „co“, ztrácí se hlavní výhoda.
- Údržba testů – změna UI může vyžadovat úpravu mnoha step definitions.
Doporučené postupy (Best Practices)
- Začněte workshopy „Three Amigos“ – společné schůzky vývojáře, testera a product ownera k definici chování.
- Používejte přirozený jazyk – scénář by měl číst jako uživatelský příběh.
- Vyhněte se podmínkám a cyklům v `.feature` souborech – raději vytvořte samostatné scénáře.
- Nepřetěžujte Gherkin technickými detaily – ty patří do kódu, ne do specifikace.
- Integrujte BDD do CI/CD – automaticky spouštějte scénáře při každém commitu.
BDD v praxi – typický workflow
1. **Definice požadavku** – product owner popíše uživatelský příběh. 2. **Týmový workshop** – společně se vytvoří konkrétní příklady (scénáře v Gherkinu). 3. **Automatizace** – vývojář naimplementuje step definitions. 4. **Vývoj kódu** – vývojář píše kód tak, aby všechny scénáře prošly. 5. **Ověření** – tým společně ověří, že chování odpovídá očekávání. 6. **Refaktoring** – kód se upravuje, ale scénáře zůstávají stejné (zajišťují regresní bezpečnost).
Související pojmy
Externí odkazy
- Dan North – „Introducing BDD“ (původní článek): https://dannorth.net/introducing-bdd/
- Oficiální Cucumber dokumentace: https://cucumber.io/docs/bdd/
- BDD v češtině – komunitní zdroje: https://www.agilecz.cz (vyhledávej „BDD“)
