hello bdd @ webconf/2013

Post on 06-Jul-2015

876 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

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

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

hello BDDTDD, BDD és sok egyéb xBR

SZÁSZ ZOLTÁNzoltan at szasz.me

@szaszz

/in/zoltanszasz

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

TÖRTÉNETFELTALÁLÓK

Dan North

Chris Matts

Liz Keogh

@tastapod

@papachrismatts

@lunivore

FELTALÁLTÁKBehavior Driven Development

MEGCSINÁLTÁKRBehave » RSpecJBehave

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

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

kizárásahibák

megelőzésestb.

MI TÖRTÉNIK, HA

NEMTESZTELÜNK?

MIÉRTAUTOMATA TESZTELJÜNK?

úgyis tesztelszmiért csinálnád

kézzel?teszt is lehet

komplexhamar megtérülstb, stb.

 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

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

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

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!

BDDALAPOK

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

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

INFORMÁLIS SPECIFIKÁCIÓszeretnék egy

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

piros!

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

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

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

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

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

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

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

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

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 |

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

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

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

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?

BDD != TDDAVAGY MIT TESZTELJÜNK?

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.

PÉLDÁUL...

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"

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) {}

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

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

SHAMELESS SELF PROMO

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

zoltan at szasz.me

@szaszz

/in/zoltanszasz

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

top related