hello bdd @ webconf/2013

50
hello BDD Én, mint előadó Elmondom, hogy miért nagyszerű a BDD Így a jelenlévők is megismerhetik azt Forgatókönyv: sikeres előadás :] Amennyiben elhangzott az előadás És a hallgatók megértik az elhangzottakat Majd hasznosítják azt a mindennapi munkájukban Akkor ezáltal boldogabbak lesznek És örömükben meghívják az előadót 1 - 2 sörre Forgatókönyv: sikertelen előadás :[ Amennyiben elhangzott az előadás És a hallgatók unalmukban elaludtak Majd az előadás végén felébrednek Akkor megdobálják az előadót tojással De az biztos, hogy nem hívják meg 1 - 2 sörre

Upload: zoltan-szasz

Post on 06-Jul-2015

874 views

Category:

Technology


4 download

DESCRIPTION

Én, mint előadó Elmondom, hogy miért nagyszerű a BDD Így a jelenlévők is megismerhetik azt Forgatókönyv: sikeres előadás :] Amennyiben elhangzott az előadás És a hallgatók megértik az elhangzottakat Majd hasznosítják azt a mindennapi munkájukban Akkor ezáltal boldogabbak lesznek És örömükben meghívják az előadót 1-2 sörre Forgatókönyv: sikertelen előadás :[ Amennyiben elhangzott az előadás És a hallgatók unalmukban elaludtak Majd az előadás végén felébrednek Akkor megdobálják az előadót tojással De az biztos, hogy nem hívják meg 1-2 sörre

TRANSCRIPT

Page 1: Hello BDD @ WebConf/2013

hello BDDÉn, mint előadóElmondom, hogy miért nagyszerű a BDDÍgy a jelenlévők is megismerhetik azt

Forgatókönyv: sikeres előadás :] Amennyiben elhangzott az előadás És a hallgatók megértik az elhangzottakat Majd hasznosítják azt a mindennapi munkájukban Akkor ezáltal boldogabbak lesznek És örömükben meghívják az előadót 1-2 sörre

Forgatókönyv: sikertelen előadás :[ Amennyiben elhangzott az előadás És a hallgatók unalmukban elaludtak Majd az előadás végén felébrednek Akkor megdobálják az előadót tojással De az biztos, hogy nem hívják meg 1-2 sörre

Page 2: Hello BDD @ WebConf/2013

hello BDDTDD, BDD és sok egyéb xBR

Page 3: Hello BDD @ WebConf/2013

SZÁSZ ZOLTÁNzoltan at szasz.me

@szaszz

/in/zoltanszasz

Page 4: Hello BDD @ WebConf/2013

BEMUTATKOZÁS10+ éve dev bizniszbenÖnjelölt Clean CoderDev & Ops, többnyire DevAgile / Scrum / Kanban / XP

kedvelőTDD & automata teszt hívőSymfony2 fanPHP Meetup alapító & szervező2 gyermek büszke apukája

Page 7: Hello BDD @ WebConf/2013

TÖRTÉNETFELTALÁLÓK

Dan North

Chris Matts

Liz Keogh

@tastapod

@papachrismatts

@lunivore

Page 8: Hello BDD @ WebConf/2013

FELTALÁLTÁKBehavior Driven Development

MEGCSINÁLTÁKRBehave » RSpecJBehave

Page 9: Hello BDD @ WebConf/2013

TESZTELÉS~ISMÉTLÉS A TUDÁS ATYJA~

Page 10: Hello BDD @ WebConf/2013

MIÉRT TESZTELJÜNK?helyességteljességrobusztusságregressziók

kizárásahibák

megelőzésestb.

Page 11: Hello BDD @ WebConf/2013

MI TÖRTÉNIK, HA

NEMTESZTELÜNK?

Page 12: Hello BDD @ WebConf/2013

MIÉRTAUTOMATA TESZTELJÜNK?

úgyis tesztelszmiért csinálnád

kézzel?teszt is lehet

komplexhamar megtérülstb, stb.

Page 13: Hello BDD @ WebConf/2013

 TESZT ALAPOKXPminden kód unit teszteltminden kód „átmegy” a unit tesztekena tesztek felfedik a hibákata tesztek gyorsak, és gyakran futnak

+ a tesztek determinisztikusak éskoherensek

a cél továbbra is pontosan ez

Page 14: Hello BDD @ WebConf/2013

TDD1. Írd meg a legegyszerűbb tesztet, és

lásd, hogy úgy fail-el, ahogy vártad2. Teljesítsd a tesztet a

legegyszerűbb kóddal3. Refaktorálj!

Ismételd, a fenti 3 lépést, míg készennem vagy

Page 15: Hello BDD @ WebConf/2013

CLEAN CODESOLID

Egy osztály egy dologért felel Az osztály kiterjeszthető, de nem módosítható

Egy osztály helyett, bármely gyereke használható Ne függj olyantól, amit nem használsz. A logika kis

interface-eknek feleljen meg. A működés (logikai szinten) nem a konkréttól,

csupán az absztrakttól függ (decoupling)

SRPOCPLSPISP

DIP

Page 17: Hello BDD @ WebConf/2013

SZUPER-ZÖLD!AVAGY A 

„BETÖRT ABLAK”-ELVÓvakodj a „flaky” teszttől,meg a „skipped” teszttőlés persze az „incomplete” teszttől

is!

Page 18: Hello BDD @ WebConf/2013

BDDALAPOK

Page 20: Hello BDD @ WebConf/2013

FORMÁLIS SPECIFIKÁCIÓüzleti szemléletben már a 60-as

évektőltöbb paradigmatöbb leíró nyelvkötötteknem rugalmasak

Page 21: Hello BDD @ WebConf/2013

INFORMÁLIS SPECIFIKÁCIÓszeretnék egy

olyat...legyen... kék!nem jó kék!nem is!... inkább

piros!

Page 22: Hello BDD @ WebConf/2013

XP SPECIFIKÁCIÓUSER STORY

Felhasználók keresése #title

Mint rendszer adminisztrátor #roleSzeretnék a felhasználók közt keresni #feautreAzért, hogy megnézhessem az adataikat #benefit

ELFOGADÁSI KRITÉRIUMOK• felhasználók kereshetőek név és e-mail cím alapján• lista nézetben látom a nevét, e-mail címét, telefonszámát• lista nézetben a névre kattintva a részletes nézet jelenik meg• részletes nézetben látom minden mentett adatát csoportosítva

Page 23: Hello BDD @ WebConf/2013

BDD SPECIFIKÁCIÓAmi bevált azon miért változtatnánk?

USER STORYFeature: Account Holder withdraws cash #title

As an Account Holder #roleI want to withdraw cash from an ATM #featureSo that I can get money when the bank is closed #benefit

Page 24: Hello BDD @ WebConf/2013

AKKOR MI AZ ÚJ?Scenariók, mint automatán tesztelhető elfogadási

kritériumokScenario: Account has sufficient funds #title Given the account balance is $100 #context And the card is valid #context And the machine contains enough money #context When the Account Holder requests $20 #event Then the ATM should dispense $20 #outcome And the account balance should be $80 #outcome And the card should be returned #outcome

Scenario: Account has insufficient funds Given the account balance is $10 And the card is valid And the machine contains enough money When the Account Holder requests $20 Then the ATM should not dispense any money And the ATM should say there are insufficient funds And the account balance should be $10 And the card should be returned

Page 25: Hello BDD @ WebConf/2013

EZ MÁR AUTOMATA TESZT?NEM! ✱ ✱De jó úton járunk :)

Page 27: Hello BDD @ WebConf/2013

GHERKIN - A NYELVpontosabban DSL (domain specific language)leírja a viselkedést, az implementáció ismerete nélkül„nyakkendősök” is megértik: ügyfél, Product Owner,

Project Manager, Business Analyst, Marketingfejlesztők is megértikkötött szintaxissal, determészetes nyelven írható ( ).feature fileok (user story + scenariók)natívan: Ruby, Java, Js, .Netsok BDD eszköz alap DSL-je (pl: Behat, Behave)

~40 nyelv

Page 28: Hello BDD @ WebConf/2013

USER STORYFEATURE | BUSINESS NEED | ABILITYFeature: Cucumber eating

As a hungry manI want to eat some cucumberSo that I won't be hungry

TESZT ESETSCENARIO (FORGATÓKÖNYV)

Scenario: Eat 5 out of 12 Given there are 12 cucumbers When I eat 5 cucumbers Then I should have 7 cucumbers

Page 29: Hello BDD @ WebConf/2013

LÉPÉSEKGIVEN (AMENNYIBEN|ADOTT)

Given there are 12 cucumbers And 6 potato

#többsoros argumentumokGiven These vegetables are on the table: | vegetable | amount | | cucumber | 12 | | potato | 6 |

WHEN (MAJD|HA|AMIKOR)When I eat 5 cucumbers And 2 potatoes

Page 30: Hello BDD @ WebConf/2013

LÉPÉSEKTHEN (AKKOR)

Then I should have 7 cucumbers And 4 potatoes

AND (ÉS), BUT (DE)Then i see cucumbers And potatoes But i do not see onion

Page 31: Hello BDD @ WebConf/2013

TESZT VÁZLATSCENARIO (OUTLINE | TEMPLATE)

Scenario Outline: Eating Given there are <start> cucumbers When I eat <eat> cucumbers Then I should have <left> cucumbers

Examples: | start | eat | left | | 12 | 5 | 7 | | 20 | 5 | 15 |

Page 32: Hello BDD @ WebConf/2013

ALAPVETÉSBACKGROUND (HÁTTÉR)

Background: Given there are 12 cucumbers

Scenario: Eat 5 out of 12 When I eat 5 cucumbers Then I should have 7 cucumbers

Scenario: Eat 6 out of 12 When I eat 6 cucumbers Then I should have 6 cucumbers

Page 33: Hello BDD @ WebConf/2013

I18NEN

Scenario: Account has sufficient funds Given the account balance is $100 And the card is valid And the machine contains enough money When the Account Holder requests $20 Then the ATM should dispense $20 And the account balance should be $80 And the card should be returned

HU#language: huForgatókönyv: Van elég pénz a számlán Amennyiben a számlaegyenleg $100 És a kártya érvényes És az ATM-ben elegendő pénz van Amikor tulajdonos kivesz $20-t Akkor az ATM kiad $20-t És a számla egyenlege $80 És a kártyát kiadta az ATM

Page 34: Hello BDD @ WebConf/2013

ESZKÖZÖKÉS KERETRENDSZEREK✱

.Net: , , Java: , , JavaScript: , PHP: , Python: , , Ruby: , , Scala: ,

NBehave NSpec ConcordionJBehave Spock Concordion

Jasmine Vows (node.js)Behat PHPUnit Story

Behave Letucce ConcordionRSpec Cucumber ConcordionScalaTest Concordion

✱a nyelvek ABC sorrendben szerepelnek

Page 35: Hello BDD @ WebConf/2013

SCENARIOA teszt metódus nevek legyenek mondatokEgy kifejező teszt név nagyon hasznos, ha failel a

tesztViselkedést definiáljunk, ne tesztet írjunkA követelmény viselkedés isMindennapi (mindenki számára érthető) nyelvenAz elfogadási kritériumok legyenek futtathatókLegyen a story olvasmányosMi lenne ha?

Page 36: Hello BDD @ WebConf/2013

BDD != TDDAVAGY MIT TESZTELJÜNK?

Page 37: Hello BDD @ WebConf/2013

BBD » TDDTDD BDDtest exampleclass under test class we’re describingmethod under test valuable behaviourpassing / behaving working, providing valuefailing / misbehaving should it do what I’ve described?100% coverage Please, come change my code. I

believe I’ve given you enoughinformation to do this safely.

Page 38: Hello BDD @ WebConf/2013

PÉLDÁUL...

Page 40: Hello BDD @ WebConf/2013

SCENARIOScenario: Check generate thumbnails Given I am in a directory "img" And I have an input image "test_1024_768.png" When I create new thumbnails Then newly created thumbnail exists "test_s.png" And newly created thumbnail exists "test_m.png"

Page 41: Hello BDD @ WebConf/2013

KÓD<?php// FileSystemContext extends Behat\Behat\Context\BehatContext;class ThumbnailFeatures extends FileSystemContext{ /** * @Given /̂I am in a directory "([̂""]*)"$/ * @Given /̂I go to a directory "([̂""]*)"$/ */ public function changeDirTo($directory) {}

/** * @Given /̂I have an input image "([̂""]*)"$/ */ public function readFile($file) {}

Page 42: Hello BDD @ WebConf/2013

KÓD/** * @When /̂I create new thumbnails$/ */ public function createThumbnails() {}

/** * @Then /̂newly created thumbnail exists "([̂""]*)"$/ * @Then /̂file exists "([̂""]*)"$/ */ public function fileExists($file) {}}

Page 43: Hello BDD @ WebConf/2013

SHAMELESS SELF PROMO

Page 44: Hello BDD @ WebConf/2013

KÉRDÉSEK?Szász Zoltán

zoltan at szasz.me

@szaszz

/in/zoltanszasz

Page 46: Hello BDD @ WebConf/2013

READ_MORE_LATER.TXTOCP: Open Closed PrincipleLSP Liskov Substitution PrincipleISP: Interface Segregation

PrincipleDIP: Dependency Inversion

PrincipleClean CodersYAGNI: You ain't gonna need itDRY: Don't Repeat YourselfKISS: Keep It Simple Stupid