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.
BDD zformuloval Dan North v roce 2003 jako reakci na běžné problémy TDD:
Klíčové principy 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.
BDD využívá formální, ale člověkem čitelný jazyk Gherkin k popisu scénářů. Každý scénář má strukturu:
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.
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).
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).