hello bdd @ webconf/2013
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örreTRANSCRIPT
![Page 1: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/1.jpg)
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 3: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/3.jpg)
SZÁSZ ZOLTÁNzoltan at szasz.me
@szaszz
/in/zoltanszasz
![Page 4: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/4.jpg)
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 5: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/5.jpg)
BUSINESSDRIVEN DEVELOPMENT
VSBEHAVIORDRIVEN DEVELOPMENT
![Page 6: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/6.jpg)
BUSINESSDRIVEN DEVELOPMENT
=BEHAVIORDRIVEN DEVELOPMENT
![Page 7: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/7.jpg)
TÖRTÉNETFELTALÁLÓK
Dan North
Chris Matts
Liz Keogh
@tastapod
@papachrismatts
@lunivore
![Page 8: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/8.jpg)
FELTALÁLTÁKBehavior Driven Development
MEGCSINÁLTÁKRBehave » RSpecJBehave
![Page 9: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/9.jpg)
TESZTELÉS~ISMÉTLÉS A TUDÁS ATYJA~
![Page 10: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/10.jpg)
MIÉRT TESZTELJÜNK?helyességteljességrobusztusságregressziók
kizárásahibák
megelőzésestb.
![Page 11: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/11.jpg)
MI TÖRTÉNIK, HA
NEMTESZTELÜNK?
![Page 12: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/15.jpg)
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 16: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/16.jpg)
„TOVÁBB IS VAN! MONDJAM MÉG?” Mindig csak a szükséges dolgokat
implementáld Mindent csak egyszer írj meg Tartsd egyszerűen
Tesztek
YAGNI
DRYKISSFIRST
AJÁNLÓMagyar Attila – Clean Code Orcsik Antal – Objektum orientált mérések a
gyakorlatban Ördög Rafael – Test driven mockery
slide video
slide videoslide video
![Page 17: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/18.jpg)
BDDALAPOK
![Page 20: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/25.jpg)
EZ MÁR AUTOMATA TESZT?NEM! ✱ ✱De jó úton járunk :)
![Page 27: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/36.jpg)
BDD != TDDAVAGY MIT TESZTELJÜNK?
![Page 37: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/38.jpg)
PÉLDÁUL...
![Page 40: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/42.jpg)
KÓD/** * @When /̂I create new thumbnails$/ */ public function createThumbnails() {}
/** * @Then /̂newly created thumbnail exists "([̂""]*)"$/ * @Then /̂file exists "([̂""]*)"$/ */ public function fileExists($file) {}}
![Page 44: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/44.jpg)
KÉRDÉSEK?Szász Zoltán
zoltan at szasz.me
@szaszz
/in/zoltanszasz
![Page 45: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/45.jpg)
READ_IT_LATER.TXT
BusinessBehavior@tastapod @papachrismatts @lunivoreXP teszt alapokKent Beck - Extreme Programming
ExplainedTDDSOLIDSRP: Single Responsibility Principle
![Page 46: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/46.jpg)
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
![Page 47: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/47.jpg)
READ_MORE_LATER_2.TXT
Magyar Attila - Clean Code Orcsik Antal - Objektum orientált mérések a
gyakorlatban Ördög Rafael - Test driven mockery
FIRST: Fast, Independent, Repetable, Self-validating,Timely
slide video
slide videoslide video
Robert C. Martin - Clean Code: A Handbook of AgileSoftware Craftsmanship
Robert C. Martin - Tiszta kódRobert C. Martin - The Clean Coder: A Code of
Conduct for Professional ProgrammersRobert C. Martin - Túlélőkönyv programozóknak
![Page 48: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/48.jpg)
READ_MORE_LATER_3.TXT„Betört ablak”-elvSpecifikációformális specifikációUser Story
C3
User StoryOn Acceptance criteria for user
storiesDSLGherkin - a nyelv
![Page 49: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/49.jpg)
READ_MORE_LATER_4.TXT
.Net: , , Java: , ,JavaScript: , PHP: , Python: , ,
Ruby: , ,
Scala: ,
Gherkin ~40 nyelvenGiven-When-Then
NBehave NSpec ConcordionJBehave Spock Concordion
Jasmine Vows (node.js)Behat PHPUnit Story
Behave LetucceConcordion
RSpec CucumberConcordion
ScalaTest Concordion
![Page 50: Hello BDD @ WebConf/2013](https://reader034.vdocuments.site/reader034/viewer/2022051617/559a92b21a28ab6e1d8b47a6/html5/thumbnails/50.jpg)
READ_MORE_LATER_5.TXT
&
Dan North - IntroducingBDD
Dan North - What’s in aStory?
BBD » TDDBehat MinkPHP Meetup Budapest@szaszz /in/zoltanszasz