Käitumisel põhinev arendus

**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ündmustik: Lühike, sissejuhatav osa.
:* Kes on loo põhitegelane (klient, kasutaja, administraator jne)?
:* Mida ta tahab teha?
:* Miks ta seda teha tahab?
;Stsenaarium: Kirjeldus 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  kurki
  **Kui** ma söön  kurki ära
  **Siis** peaks alles jääma  kurki
  **Juhtumid**:
    | kurke | söön | alles |
    |    12 |   5 |    7 |
    |    20 |   5 |   15 |

## Viited