**Käitumisel põhinev arendus** (ingl. *behavior-driven development*, lühendatult BDD) on tarkvaraarenduse meetod, mis on välja arenenud testimisel põhinevast arendusest. Käitumisel põhinev arendus kombineerib testimisel põhineva arenduse üldiseid tehnikaid ja põhimõtted. Selle eesmärk on pakkuda arendustiimile ja juhtivtiimile jagatud tööriista tarkvara arendamisel.

Käitumisel põhineva arenduse osana kasutatakse tavalise lause konstruktsiooni, mis väljendab käitumist või tulemust.

Ajalugu
-------

Käitumisel põhinev arendus on testimisel põhineva arenduse laiendus. Selleks kasutatakse lihtsat valdkonnaspetsiifilist keelt, mis omakorda genereerib tavalised laused testideks. 

BDD kesksed küsimused on järgnevad.

* Kust alustada testimist?
* Mida testida ja mida mitte?
* Kui palju testida ühe korraga?
* Kuidas aru saada, miks test ebaõnnestub?

Paljud inimesed on aastate jooksul BDD raamistikku arendanud, lõpuks kujunes sellest suhtlemis- ja koostööraamistik tarkvaraprojektis arendajatele, testijatele ja tehnilise taustata inimestele (nt kliendid, äripartnerid).

BDD põhimõtted
--------------

Käitumisel põhinev testimine kasutab käitumise väljendamiseks poolformaalset vormingut, mis on võetud kasutusloost (ingl *user story*). BDD eeldab, et analüütikud ja arendajad teevad koostööd. Nende ülesanne on kirjutada käitumisel põhinevad laused vastavasse dokumenti.

### Struktuur

**Pealkiri: Omadus peaks olema selge ja kõigile arusaadav.**

SündmustikLühike, sissejuhatav osa.
* Kes on loo põhitegelane (klient, kasutaja, administraator jne)?
* Mida ta tahab teha?
* Miks ta seda teha tahab?

StsenaariumKirjeldus stsenaariumist. 
* Vajaliku konditsiooni spetsifikatsioon stsenaariumi alguses.
* Stsenaariumi algatav tegevus.
* Oodatav tulemus.

  

```
**Omadus**: Tagastatud kaubad lähevad lattu

**Mina** poe omanikuna
**Tahan hoida** laol toimuval silma peal  
**Selleks** tuleb tagastatud tooted lisada lattu.

**Stsenaarium:** Tagasimakstud tooted peaksid olema laos
**Antud** klient ostis kampsuni
**Ja** lattu jäi 10 kampsunit
**Kui** üks klient tagastab kampsuni
**Siis** laos peaks olema 11 kampsunit

**Stsenaarium:** Väljavahetatud tooted peaks olema laos
**Antud** klient ostis enne lühikesed püksid
**Ja** nüüd on kolm paari lühikesi pükse laos
**Ja** nüüd on neli paari pikki pükse laos
**Kui** klient tahab lühikesed püksid pikkade vastu vahetada
**Siis** nüüd peaks olema neli paari lühikesi pükse laos
**Ja** kolm paari pikki pükse
```

  

Formaat on Gherkini keele järgi.
Näide esimese stsenaariumi järgi testimiseks Javas.

```
   **@Antud**("klient ostis kampsuni")
   public void klient_ostis_kampsuni() {
       //vastav kood
   }
   **@Ja**("lattu jäi 10 kampsunit")
   public void lattu_jäi_10_kampsunit() {
       //vastav kood
   }
   **@Kui**("üks klient tagastab kampsuni")
   public void üks_klient_tagastab_kampsuni() {
       //vastav kood
   }
   **@Siis**("laos peaks olema 11 kampsunit")
   public void laos_peaks_olema_11_kampsunit() {
       //vastav kood
   }
```

  

Omaduse fail juhtumitega.

```
 **Raamstsenaarium**: Kurgi söömine
 **Antud** alguses on <kurke> kurki
 **Kui** ma söön <söön> kurki ära
 **Siis** peaks alles jääma <alles> kurki
 **Juhtumid**:
   | kurke | söön | alles |
   |    12 |   5 |    7 |
   |    20 |   5 |   15 |
```

Viited
------

1. 1 2 3  "Behaviour-Driven Development". Vaadatud 6.12.2018. `{{netiviide}}`: `|archiveurl=` nõuab parameetrit `|archive-date=` (juhend)
2. ↑  Haring, Ronald. de Ruiter, Robert (toim). "Behavior Driven development: Beter dan Test Driven Development". *Java Magazine* (hollandi). Veen Magazines. Lk-d 14–17. ISSN 1571-6236. `{{netiviide}}`: parameeter `|vaadatud=` nõuab parameetrit `|url=` (juhend); puuduv või tühi `|url=` (juhend)
3. ↑  Solis, Carlos; Wang, Xiaofeng. "A Study of the Characteristics of Behaviour Driven Development". *Software Engineering and Advanced Applications (SEAA), 2011 37th EUROMICRO Conference on*. Lk-d 383–387. DOI:10.1109/SEAA.2011.76. Vaadatud 6.12.2018.
4. ↑  Bellware, Scott. "Behavior-Driven Development". *Code Magazine*. Vaadatud 6.12.2018.
5. ↑    The RSpec Book – Question about Chapter 11: Writing software that matters | Kasutatud=6.12.2018
6. ↑  North, Dan. "What's in a Story?". Dan North. Vaadatud 6.12.2018.
7. 1 2  "Gherkin". Originaali arhiivikoopia seisuga 16.12.2018. Vaadatud 6.12.2018.