BDD (programozás)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2020. április 20-án felülvizsgált verziótól ; az ellenőrzések 4 szerkesztést igényelnek .

A BDD (rövidítve az angol  Behavior-driven development szóból , szó szerint „ fejlesztés a viselkedésen keresztül ”) egy olyan szoftverfejlesztési módszertan, amely a tesztvezérelt fejlesztési (TDD) módszertanból származik.

Ennek a módszernek a fő gondolata a tisztán technikai és üzleti érdekek ötvözése a fejlesztési folyamatban, lehetővé téve ezáltal, hogy a vezetők és a programozók ugyanazt a nyelvet beszéljék. A személyzet ezen csoportjai közötti kommunikációhoz egy tartomány-specifikus nyelvet használnak , amely a nem szakember számára érthető természetes nyelvi konstrukciókon alapul, és általában egy szoftvertermék viselkedését és az elvárt eredményeket fejezi ki.

Úgy gondolják, hogy ez a megközelítés akkor hatékony, ha a szoftvertermék működési területét nagyon összetett módon írják le.

Leírás

A BDD módszertan a TDD kiterjesztése abban az értelemben, hogy mielőtt bármilyen tesztet írna, először le kell írnia a hozzáadott funkcionalitás kívánt eredményét egy tartományspecifikus nyelven. Miután ez megtörtént, ennek a nyelvnek a konstrukcióit szakemberek vagy speciális szoftver lefordítják tesztleírásba.

A BDD a következő kérdésekre összpontosít:

E kérdések alapján a BDD megköveteli, hogy a tesztnevek egész mondatok legyenek, amelyek igével kezdődnek a kötőszóban, és követik az üzleti célokat. Az elfogadási tesztek leírásait rugalmas felhasználói sztori nyelven kell megírni, pl.

Mint [olyan szerepkör, akinek üzleti érdekeit szolgálják] szeretném [leírni a funkcionalitást, ahogyan annak működnie kell] annak érdekében, hogy [leírjam az előnyt].

Az elfogadási feltételeket egy olyan forgatókönyv formájában kell leírni, amelyet a felhasználó az eredmény elérése érdekében végrehajt.

A BDD alapelvei

Mint már említettük, egy szoftver tesztjét a programozható eszköz kívánt viselkedése alapján kell leírni. A kívánt viselkedés itt olyan viselkedésre vonatkozik, amely értéket képvisel a vállalkozás számára. A kívánt viselkedés leírását viselkedési specifikáció segítségével adjuk meg . 

A viselkedési specifikáció félig formális formában van felépítve. Jelenleg a következő struktúra alakult ki a BDD gyakorlatában:

  1. Cím ( eng.  Title ). Kötelező formában meg kell adni az üzleti cél leírását.
  2. Leírás ( angol  elbeszélés ). Rövid és szabad formában a következő kérdéseket kell közzétenni:
    1. Ki ennek a történetnek az érintettje;
    2. Mit tartalmaz ez a történet?
    3. Milyen értéket ad ez a történet a vállalkozás számára.
  3. Forgatókönyvek ( eng.  Scenarios ). Egy specifikációban egy vagy több forgatókönyv lehet, amelyek mindegyike felfedi a felhasználói viselkedés egy-egy helyzetét, ezáltal konkretizálja a specifikáció leírását. Minden forgatókönyv általában ugyanazon minta szerint épül fel:
    1. Kezdeti feltételek (egy vagy több);
    2. Az esemény, amely kiváltja a szkript elindítását;
    3. Várható eredmény vagy eredmények.

A BDD nem ad semmilyen formális szabályt, de ragaszkodik ahhoz, hogy korlátozott szabványos kifejezéskészletet használjanak, amely magában foglalja a viselkedési specifikáció összes elemét. 2007-ben Dan North egy specifikációs sablont javasolt, amely népszerűvé vált, és uborkanyelvként vált ismertté [1] [2] .

Az uborka nyelv alapvető kifejezéseit a következő táblázat mutatja be.

Uborka nyelv
Kulcsszó angolul Orosz nyelvi adaptáció Leírás
Történet
( [3] szolgáltatás )
Sztori Minden új specifikáció ezzel a kulcsszóval kezdődik, amelyet kettőspont követ a történet nevének kötőszóban.
Mint a Hogyan (egy szerepben) Annak a személynek a szerepe az üzleti modellben, akit érdekel ez a funkció.
Azért, hogy Megvalósítani Röviden, mik a személy céljai.
akarok akarok Röviden írja le a végeredményt.
Forgatókönyv Forgatókönyv Egy történet minden forgatókönyve ezzel a szóval kezdődik, majd a forgatókönyv célját aláíró formában, kettősponttal elválasztva írják le. Ha egy történetben több forgatókönyv van, akkor a kulcsszó után annak sorszámát kell írni.
Adott Adott Kezdeti állapot. Ha több kezdeti feltétel van, akkor minden új feltétel egy új sorból kerül hozzáadásra az És kulcsszó használatával.
Mikor Mikor ( megjegyzés : történik valami) Az esemény, amely elindítja ezt a szkriptet. Ha az eseményt nem lehet egy mondatban feltárni, akkor minden további részlet az És és a De kulcsszavakon keresztül derül ki.
Akkor Akkor Az eredmény, amelyet a felhasználónak végül meg kell figyelnie. Ha az eredményt nem lehet egy mondatban felfedni, akkor minden további részlet az És és a De kulcsszavakon keresztül derül ki.
És És Segédszó, a kötőszó analógja .
De De Segédszó, a tagadás analógja .

A következő példa egy viselkedésspecifikációt mutat be a Gherkin nyelv használatával.

Történet: A visszáru készletre megy Bolttulajdonosként A készlet nyomon követése érdekében szeretném visszahelyezni a készletbe a termékeket, amikor visszaküldik őket. 1. forgatókönyv : A visszatérített tételeket vissza kell raktározni Tekintettel arra , hogy egy ügyfél korábban fekete pulóvert vásárolt tőlem, és három fekete pulóverem van raktáron. Amikor visszaküldik a fekete pulóvert a visszatérítésért , akkor négy fekete pulóvernek kell lennie raktáron. 2. forgatókönyv : A kicserélt cikkeket vissza kell küldeni a készletbe Tekintettel arra , hogy egy ügyfél korábban vásárolt tőlem egy kék ruhát, és két kék ruhadarabom van raktáron, és három fekete ruhadarabom van raktáron. Amikor visszaküldik a kék ruhadarabot fekete cserére, akkor három kék ruhadarabnak kell lennie raktáron és két fekete ruhadarabnak készleten. Előzmények: A visszaküldött terméket készleten kell tartani Üzlettulajdonosként A raktárban lévő készlet nyomon követéséhez vissza szeretném állítani a raktárba visszaküldött cikkek nyilvántartását. 1. forgatókönyv : A visszaküldött tételeket raktáron kell elhelyezni Tekintettel arra, hogy egy vásárló korábban fekete pulóvert vásárolt tőlem, ÉS már három egyforma van raktáron. Amikor a vásárló visszaküldi a vásárolt pulóvert Akkor látnom kell, hogy most 4 db fekete pulóver van raktáron. 2. forgatókönyv : A kicserélt cikkeket vissza kell küldeni a raktárba Tekintettel arra, hogy egy ügyfél kék ruhát vásárolt tőlem, ÉS ezek közül kettő kék és három fekete cikk van a raktáromban. Amikor a vásárló visszaküld egy kék ruhadarabot, hogy egy hasonlóra, de feketére cserélje ki, akkor látnom kell, hogy a kék ruhadarabból három , a fekete ruhadarabból pedig két cikk van raktáron.

A BDD koncepció megvalósításának módjai

A félig formális viselkedésspecifikációs formátum korlátozott számú javaslat használatát teszi szükségessé, amelyeket a vezetőknek és a fejlesztőknek előzetesen meg kell állapodniuk. Ennek alapján a BDD támogatására szolgáló keretrendszerek az alábbi elvek szerint épülnek fel:

Az olyan keretrendszerek, mint a JBehave és az RBehave, amelyek a Gherkin nyelven alapulnak, erre az elvre épülnek. Néhány keretrendszer hasonlóan épül fel, például a CBehave és az Cucumber.

Megvalósítás a JBehave példával

Tegyük fel, hogy egy motort fejlesztünk a "Life" játékhoz , és hozzá kell adnunk azt a képességet, hogy először élő sejteket helyezzünk el a pályán. Tegyük fel, hogy amikor a felhasználó kiválaszt egy szabad pontot a mezőben, egy élő cella jelenik meg rajta. Ha a felhasználó olyan mezőpontot választ ki, amelyet egy cella már foglalt, a cella eltűnik, és a mezőpont szabaddá válik. A mező koordinátáit (x,y) formátumban kell megadni, ahol x a vízszintes pont száma, y ​​pedig a függőleges pont száma. Mindkét koordináta referenciapontja a bal felső sarokból, az egyiktől kezdődik.

A viselkedési specifikáció leírását az egyszerűség kedvéért elhagyva írhatunk egy ilyen szkriptet Gherkin nyelven.

Adott egy 5 : 5 -ös játék Amikor átkapcsolom a cellát a ( 3 , 4 ) értéknél, akkor a rácsnak így kell kinéznie: ..... ..... ..... ..X.. ..... Amikor én a cella átváltása a ( 3 , 5 ) pontnál . Ekkor a rácsnak így kell kinéznie ) Ekkor a rácsnak így kell kinéznie: ..... ..... ..... ..... ..X..

A JBehave keretrendszer Java nyelven íródott, így a teszteket Java kódra fordítják. A JBehave keretrendszer esetében ez a szkript egyszerű szöveges fájlként kerül átadásra, amelyet soronként olvasnak be. A fejlesztőnek csak olyan függvényeket kell biztosítania, amelyeket a JBehave-nek meg kell hívnia, amikor a következő sorra ugrik. Például egy tesztmegvalósítás így nézhet ki:

privát játék játék ; privát StringRenderer ; _ @Given ( "egy $szélesség x magasság játék" ) public void theGameIsRunning ( int szélesség , int magasság ) { game = new Game ( szélesség , magasság ); renderer = new StringRenderer (); játék . setObserver ( renderer ); } @When ( "Átkapcsolom a cellát itt: ($oszlop, $sor)" ) public void iToggleTheCellAt ( int oszlop , int sor ) { game . toggleCellAt ( oszlop , sor ); } @Then ( "a rácsnak úgy kell kinéznie, mint $rács" ) public void theGridShouldLookLike ( String grid ) { assertThat ( renderer . asString (), egyenlőTo ( grid )); }

Egy függvény Gherkin-javaslathoz való egyértelmű leképezéséhez Java annotációkat használnak, amelyeket a JBehave keretrendszer biztosít. Például amikor a motor elemzője eléri a hasonló mondatok bármelyikét

Amikor átkapcsolom a cellát (n, n)

a JBehave motor a megjegyzésből kiszámítja, hogy a metódust meg kell hívni

void iToggleTheCellAt ( belső oszlop , belső sor )

ráadásul az annotációt úgy írják, hogy a motor „megértse”, hogy a mondat egyes részeit rögzíteni kell és bemenetként át kell adni a függvénynek (ebben a példában ezek a mezőpont koordinátái). Ezután a függvény maga a „Life” játék funkcióit hívja meg, a fejlesztő pedig a szokásos TDD eszközök segítségével ellenőrzi a játékmotor viselkedését.

Példák BDD keretrendszerekre

C/C++
  • Fogás
  • CBehave
rubin
  • Rbehave
  • rspec
Piton
  • viselkedni [4]
  • saláta [5]
  • [ 6]
  • Robot keretrendszer [7]
.HÁLÓ
  • NViselkedj
  • MSpec/Machine.Specifications
  • Specflow
  • Savanyúság
  • Concordion.NET
  • fspec
  • természetes spec
  • tickspec
  • alspec
Jáva
  • Jbehave
  • Jnario
  • JGiven
  • Vividus Framework
JavaScript / TypeScript
  • Jázmin
Lua
  • Lebukott
Perl
  • Teszt::BDD::Uborka [8]
  • Teszt::Uborka::Apró [9]
  • Teszt::Cukes [10]
  • Teszt::Pcuke [11]
PHP
  • Behat
  • Kodecepció
Megy
  • Ginkgo
1C
  • Vanessa automatizálás vezérelt fejlesztés
Cross-platform
  • Uborka
  • fecskendez
  • Yulup

Irodalom

  • Carlos Solis , Xiaofeng Wang. A BDD koncepció áttekintése  (angolul)  = A Study of the Characteristics of Behaviour Driven Development // IEEE 2011 37th EUROMICRO Conference on Software Engineering and Advanced Applications : a collection. - Oulu, Finnország, 2011. - november 3. - P. 383-387 . — ISBN 978-1-4577-1027-8 . — ISSN 1089-6503 . - doi : 10.1109/SEAA.2011.76 .

Jegyzetek

  1. Észak .
  2. Szigorúan véve a Gherkin egy viselkedés-specifikációs nyelv az Cucumber's BDD keretrendszerhez, de a keretrendszer népszerűsége miatt az ehhez a specifikációhoz hasonlót Gherkinnek hívják.
  3. Uborka. Uborka referencia .
  4. Behave dokumentáció . MetaCPAN (2019. február 26.). Letöltve: 2019. február 26. Az eredetiből archiválva : 2019. február 26..
  5. Saláta python bdd keretrendszer . MetaCPAN (2019. február 26.). Letöltve: 2019. február 26. Az eredetiből archiválva : 2020. november 1.
  6. Retek keretrendszer - python bdd framework . MetaCPAN (2019. február 26.). Letöltve: 2019. február 26. Az eredetiből archiválva : 2019. február 26..
  7. Robot keretrendszer - python bdd keretrendszer . MetaCPAN (2019. február 26.). Letöltve: 2019. február 26. Az eredetiből archiválva : 2019. február 27..
  8. Teszt::BDD::Cucumber - Teljes szolgáltatás Uborka-stílusú tesztelés Perlben . MetaCPAN (2018. április 21.). Letöltve: 2018. november 1. Az eredetiből archiválva : 2018. november 1..
  9. Teszt::Uborka::Tiny - Uborka-stílusú tesztelés perlben . MetaCPAN (2014. február 14.). Letöltve: 2018. november 1. Az eredetiből archiválva : 2018. november 1..
  10. Teszt::Cukes - Uborka által ihletett BBD teszteszköz . MetaCPAN (2010. december 12.). Letöltve: 2018. november 1. Az eredetiből archiválva : 2018. november 1..
  11. Test::Pcuke::Manual - a Test::Pcuke csomag proto kézikönyve . MetaCPAN (2011. december 3.). Letöltve: 2018. november 1. Az eredetiből archiválva : 2018. november 1..

Linkek

  • Bellware, Scott. Viselkedésvezérelt fejlesztés  . www.codemag.com _ Hozzáférés időpontja: 2018. szeptember 24.
  • Tharayil, Ranjith. Viselkedésvezérelt fejlesztés : A komplex problématerület egyszerűsítése  . www.solutionsiq.com (2018. április 4.). Hozzáférés időpontja: 2018. szeptember 24.
  • North, Dan. Az RBehave  bemutatása . dannorth.net (2007. június 17.). Hozzáférés időpontja: 2018. szeptember 24.
  • Gherkin Reference  (angol)  (hivatkozás nem érhető el) . docs.cucumber.io _ Letöltve: 2018. szeptember 25. Az eredetiből archiválva : 2019. február 9..