hello BDD
É,mn eőd
n it laó
Emno,hg métngseűaBD
lodm oy ir ayzr
D
Íyajlnéő i mgsehtkat
g
eelvk s eimrei z
Fraóöy:skrseőds:...
hello BDD

TDD, BDD és sok egyéb xBR
SZÁSZ ZOLTÁN
zoltan at szasz.me
@szaszz
/in/zoltanszasz
BEMUTATKOZÁS
10+ éve dev bizniszben
Önjelölt Clean Coder
Dev & Ops, többnyire Dev
Agile / Scrum / Kanban / XP
kedvelő
TDD ...
BUSINESS
DRIVEN DEVELOPMENT

VS
BEHAVIOR
DRIVEN DEVELOPMENT
BUSINESS
DRIVEN DEVELOPMENT

=
BEHAVIOR
DRIVEN DEVELOPMENT
TÖRTÉNET
FELTALÁLÓK

Dan North
Chris Matts
Liz Keogh

@tastapod
@papachrismatts
@lunivore
FELTALÁLTÁK
Behavior Driven Development

MEGCSINÁLTÁK
RBehave » RSpec
JBehave
TESZTELÉS

~ISMÉTLÉS A TUDÁS ATYJA~
MIÉRT TESZTELJÜNK?
helyesség
teljesség
robusztusság
regressziók
kizárása
hibák
megelőzése
stb.
MI TÖRTÉNIK, HA

NEM

TESZTELÜNK?
MIÉRT
AUTOMATA TESZTELJÜNK?
úgyis tesztelsz
miért csinálnád
kézzel?
teszt is lehet
komplex
hamar megtérül
stb, stb.
XP TESZT ALAPOK
minden kód unit tesztelt
minden kód „átmegy” a unit teszteken
a tesztek felfedik a hibákat
a tesztek gyors...
TDD a legegyszerűbb tesztet, és
1. Írd meg
lásd, hogy úgy fail-el, ahogy vártad
2. Teljesítsd a tesztet a
legegyszerűbb kó...
CLEAN CODE
SOLID
SRP Egy osztály egy dologért felel
OCP Az osztály kiterjeszthető, de nem módosítható
LSP Egy osztály hely...
„TOVÁBB IS VAN! MONDJAM MÉG?”
YAGNI Mindig csak a szükséges dolgokat
implementáld
DRY Mindent csak egyszer írj meg
KISS Ta...
SZUPER-ZÖLD!
AVAGY A 
„BETÖRT ABLAK”-ELV

is!

Óvakodj a „flaky” teszttől,
meg a „skipped” teszttől
és persze az „incomple...
BDD
ALAPOK
SPECIFIKÁCIÓ
FORMÁLIS SPECIFIKÁCIÓ
üzleti szemléletben már a 60-as
évektől
több paradigma
több leíró nyelv
kötöttek
nem 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
Flazáó krss
ehsnlk eeée

#il
tte

Mn rnse amnstáo
it edzr diizrtr
Seenkaflazáó kz krsi
zrté
ehs...
BDD SPECIFIKÁCIÓ
Ami bevált azon miért változtatnánk?

USER STORY
Faue AcutHle wtdascs
etr: con odr ihrw ah

#il
tte

A a ...
AKKOR MI AZ ÚJ?
Scenariók, mint automatán tesztelhető elfogadási
kritériumok
Seai:Acuthssfiin fns
cnro con a ufcet ud
Gvnt...
EZ MÁR AUTOMATA TESZT?
NEM! ✱

✱

De jó úton járunk :)
DSL
GHERKIN - A NYELV
pontosabban DSL (domain specific language)
leírja a viselkedést, az implementáció ismerete nélkül
„nyakk...
USER STORY
FEATURE | BUSINESS NEED | ABILITY
Faue Ccme etn
etr: uubr aig
A ahnr mn
s
ugy a
Iwn t etsm ccme
at o a oe uubr
...
LÉPÉSEK
GIVEN (AMENNYIBEN|ADOTT)
Gvnteeae1 ccmes
ie hr r 2 uubr
Ad6ptt
n
oao
#öboo agmnuo
tbsrs ruetmk
GvnTeevgtbe aeo tet...
LÉPÉSEK
THEN (AKKOR)
Te Isol hv 7ccmes
hn
hud ae
uubr
Ad4ptte
n
oaos

AND (ÉS), BUT (DE)
Te iseccmes
hn
e uubr
Adptte
n oa...
TESZT VÁZLAT
SCENARIO (OUTLINE | TEMPLATE)
Seai Otie Etn
cnro uln: aig
Gvnteeae<tr>ccmes
ie hr r sat uubr
We Iet<a>ccmes
h...
ALAPVETÉS
BACKGROUND (HÁTTÉR)
Bcgon:
akrud
Gvnteeae1 ccmes
ie hr r 2 uubr
Seai:Et5oto 1
cnro a
u f 2
We Iet5ccmes
hn
a
uub...
I18N
EN
Seai:Acuthssfiin fns
cnro con a ufcet ud
Gvnteacutblnei $0
ie h con aac s 10
Adtecr i vld
n h ad s ai
Adtemciecnan...
ESZKÖZÖK
✱
ÉS KERETRENDSZEREK
.Net: NBehave, NSpec, Concordion
Java: JBehave, Spock, Concordion
JavaScript: Jasmine, Vows ...
SCENARIO
A teszt metódus nevek legyenek mondatok
Egy kifejező teszt név nagyon hasznos, ha failel a
teszt
Viselkedést defi...
BDD != TDD
AVAGY MIT TESZTELJÜNK?
BBD » TDD
TDD
test
class under test
method under test
passing / behaving
failing / misbehaving
100% coverage

BDD
example
...
PÉLDÁUL...
BEHAT & MINK
SCENARIO
Seai:Cekgnrt tubal
cnro hc eeae hmnis
GvnIa i adrcoy"m"
ie
m n
ietr ig
AdIhv a iptiae"et12_6.n"
n
ae n nu mg ts_0...
KÓD
<pp
?h
/ FlSseCnetetnsBhtBhtCnetBhtotx;
/ ieytmotx xed eaeaotxeaCnet
casTubaletrsetnsFlSseCnet
ls hmniFaue xed ieytmot...
KÓD
/*
*
*@hn/Icet nwtubal$
We ^ rae e hmnis/
*
/
pbi fnto cetTubal( {
ulc ucin raehmnis) }
/*
*
*@hn/nwycetdtubaleit "["]...
SHAMELESS SELF PROMO
KÉRDÉSEK?
Szász Zoltán

zoltan at szasz.me
@szaszz
/in/zoltanszasz
READ_IT_LATER.TXT
Business
Behavior
@tastapod @papachrismatts @lunivore
XP teszt alapok
Kent Beck - Extreme Programming
Ex...
READ_MORE_LATER.TXT
OCP: Open Closed Principle
LSP Liskov Substitution Principle
ISP: Interface Segregation
Principle
DIP:...
READ_MORE_LATER_2.TXT
FIRST: Fast, Independent, Repetable, Self-validating,
Timely
Magyar Attila - Clean Code slide video
...
READ_MORE_LATER_3.TXT
„Betört ablak”-elv
Specifikáció
formális specifikáció
User Story
C3
User Story
On Acceptance criteri...
READ_MORE_LATER_4.TXT
Gherkin ~40 nyelven
Given-When-Then
.Net: NBehave, NSpec, Concordion
Java: JBehave, Spock,Concordion...
READ_MORE_LATER_5.TXT
Dan North - Introducing
BDD
Dan North - What’s in a
Story?
BBD » TDD
Behat & Mink
PHP Meetup Budapes...
Upcoming SlideShare
Loading in …5
×

Hello BDD @ WebConf/2013

1,126 views

Published on

É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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,126
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Hello BDD @ WebConf/2013

  1. 1. hello BDD É,mn eőd n it laó Emno,hg métngseűaBD lodm oy ir ayzr D Íyajlnéő i mgsehtkat g eelvk s eimrei z Fraóöy:skrseőds: ogtknv iee laá ] Aenie ehnzt a eőds mnybn lagot z laá É ahlgtkmgri a ehnztaa s alaó eétk z lagotkt Mj hsnstá atamnenp mnáubn ad azoíjk z idnai ukjka Akreátlbloabklsnk ko zla odgba eze É ööübnmgíjka eődt12sre s rmke ehvá z laó - ör Fraóöy:skree eőds: ogtknv ietln laá [ Aenie ehnzt a eőds mnybn lagot z laá É ahlgtkuamka eautk s alaó nlubn llda Mj a eődsvgnflbenk ad z laá éé eérde Akrmgoájka eődttjsa ko edblá z laó oásl D a bzo,hg nmhvá mg12sre e z its oy e íjk e - ör
  2. 2. hello BDD TDD, BDD és sok egyéb xBR
  3. 3. SZÁSZ ZOLTÁN zoltan at szasz.me @szaszz /in/zoltanszasz
  4. 4. BEMUTATKOZÁS 10+ éve dev bizniszben Önjelölt Clean Coder Dev & Ops, többnyire Dev Agile / Scrum / Kanban / XP kedvelő TDD & automata teszt hívő Symfony2 fan PHP Meetup alapító & szervező 2 gyermek büszke apukája
  5. 5. BUSINESS DRIVEN DEVELOPMENT VS BEHAVIOR DRIVEN DEVELOPMENT
  6. 6. BUSINESS DRIVEN DEVELOPMENT = BEHAVIOR DRIVEN DEVELOPMENT
  7. 7. TÖRTÉNET FELTALÁLÓK Dan North Chris Matts Liz Keogh @tastapod @papachrismatts @lunivore
  8. 8. FELTALÁLTÁK Behavior Driven Development MEGCSINÁLTÁK RBehave » RSpec JBehave
  9. 9. TESZTELÉS ~ISMÉTLÉS A TUDÁS ATYJA~
  10. 10. MIÉRT TESZTELJÜNK? helyesség teljesség robusztusság regressziók kizárása hibák megelőzése stb.
  11. 11. MI TÖRTÉNIK, HA NEM TESZTELÜNK?
  12. 12. MIÉRT AUTOMATA TESZTELJÜNK? úgyis tesztelsz miért csinálnád kézzel? teszt is lehet komplex hamar megtérül stb, stb.
  13. 13. XP TESZT ALAPOK minden kód unit tesztelt minden kód „átmegy” a unit teszteken a tesztek felfedik a hibákat a tesztek gyorsak, és gyakran futnak + a tesztek determinisztikusak és koherensek a cél továbbra is pontosan ez
  14. 14. TDD a legegyszerűbb tesztet, és 1. Írd meg lásd, hogy úgy fail-el, ahogy vártad 2. Teljesítsd a tesztet a legegyszerűbb kóddal 3. Refaktorálj! Ismételd, a fenti 3 lépést, míg készen nem vagy
  15. 15. CLEAN CODE SOLID SRP Egy osztály egy dologért felel OCP Az osztály kiterjeszthető, de nem módosítható LSP Egy osztály helyett, bármely gyereke használható ISP Ne függj olyantól, amit nem használsz. A logika kis interface-eknek feleljen meg. DIP A működés (logikai szinten) nem a konkréttól, csupán az absztrakttól függ (decoupling)
  16. 16. „TOVÁBB IS VAN! MONDJAM MÉG?” YAGNI Mindig csak a szükséges dolgokat implementáld DRY Mindent csak egyszer írj meg KISS Tartsd egyszerűen FIRST Tesztek AJÁNLÓ Magyar Attila – Clean Code slide video Orcsik Antal – Objektum orientált mérések a gyakorlatban slide video Ördög Rafael – Test driven mockery slide video
  17. 17. SZUPER-ZÖLD! AVAGY A  „BETÖRT ABLAK”-ELV is! Óvakodj a „flaky” teszttől, meg a „skipped” teszttől és persze az „incomplete” teszttől
  18. 18. BDD ALAPOK
  19. 19. SPECIFIKÁCIÓ
  20. 20. FORMÁLIS SPECIFIKÁCIÓ üzleti szemléletben már a 60-as évektől több paradigma több leíró nyelv kötöttek nem rugalmasak
  21. 21. INFORMÁLIS SPECIFIKÁCIÓ szeretnék egy olyat... legyen... kék! nem jó kék! nem is!... inkább piros!
  22. 22. XP SPECIFIKÁCIÓ USER STORY Flazáó krss ehsnlk eeée #il tte Mn rnse amnstáo it edzr diizrtr Seenkaflazáó kz krsi zrté ehsnlk öt een Aét hg mgéhse a aaakt zr, oy enzesm z dtia #oe rl #eur fate #eei bnft ELFOGADÁSI KRITÉRIUMOK •flazáó krseőknvé emi cmaajn ehsnlk eehte é s -al í lpá •lsanzte ltmanvt emi cmt tlfnzmt it éebn áo eé, -al íé, eeosáá •lsanzte anvektitaarsltsnztjlnkmg it éebn ér atnv ézee ée eei e •rsltsnzte ltmmne mnetaaá cootsta ézee éebn áo idn ett dtt sproív
  23. 23. BDD SPECIFIKÁCIÓ Ami bevált azon miért változtatnánk? USER STORY Faue AcutHle wtdascs etr: con odr ihrw ah #il tte A a AcutHle s n con odr Iwn t wtda cs fo a AM at o ihrw ah rm n T S ta Icngtmnywe tebn i coe o ht a e oe hn h ak s lsd #oe rl #etr faue #eei bnft
  24. 24. AKKOR MI AZ ÚJ? Scenariók, mint automatán tesztelhető elfogadási kritériumok Seai:Acuthssfiin fns cnro con a ufcet ud Gvnteacutblnei $0 ie h con aac s 10 Adtecr i vld n h ad s ai Adtemciecnan eog mny n h ahn otis nuh oe We teAcutHle rqet $0 hn h con odr euss 2 Te teAMsol dses $0 hn h T hud ipne 2 Adteacutblnesol b $0 n h con aac hud e 8 Adtecr sol b rtre n h ad hud e eund Seai:Acuthsisfiin fns cnro con a nufcet ud Gvnteacutblnei $0 ie h con aac s 1 Adtecr i vld n h ad s ai Adtemciecnan eog mny n h ahn otis nuh oe We teAcutHle rqet $0 hn h con odr euss 2 Te teAMsol ntdses aymny hn h T hud o ipne n oe AdteAMsol syteeaeisfiin fns n h T hud a hr r nufcet ud Adteacutblnesol b $0 n h con aac hud e 1 Adtecr sol b rtre n h ad hud e eund #il tte #otx cnet #otx cnet #otx cnet #vn eet #ucm otoe #ucm otoe #ucm otoe
  25. 25. EZ MÁR AUTOMATA TESZT? NEM! ✱ ✱ De jó úton járunk :)
  26. 26. DSL
  27. 27. GHERKIN - A NYELV pontosabban 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, Marketing fejlesztők is megértik kötött szintaxissal, de természetes nyelven írható (~40 nyelv) .feature fileok (user story + scenariók) natívan: Ruby, Java, Js, .Net sok BDD eszköz alap DSL-je (pl: Behat, Behave)
  28. 28. USER STORY FEATURE | BUSINESS NEED | ABILITY Faue Ccme etn etr: uubr aig A ahnr mn s ugy a Iwn t etsm ccme at o a oe uubr S ta Iwntb hnr o ht o' e ugy TESZT ESET SCENARIO (FORGATÓKÖNYV) Seai:Et5oto 1 cnro a u f 2 Gvnteeae1 ccmes ie hr r 2 uubr We Iet5ccmes hn a uubr Te Isol hv 7ccmes hn hud ae uubr
  29. 29. LÉPÉSEK GIVEN (AMENNYIBEN|ADOTT) Gvnteeae1 ccmes ie hr r 2 uubr Ad6ptt n oao #öboo agmnuo tbsrs ruetmk GvnTeevgtbe aeo tetbe ie hs eeals r n h al: |vgtbe|aon | eeal mut |ccme |1 uubr 2 | |ptt oao |6 | WHEN (MAJD|HA|AMIKOR) We Iet5ccmes hn a uubr Ad2ptte n oaos
  30. 30. LÉPÉSEK THEN (AKKOR) Te Isol hv 7ccmes hn hud ae uubr Ad4ptte n oaos AND (ÉS), BUT (DE) Te iseccmes hn e uubr Adptte n oaos Btid ntseoin u o o e no
  31. 31. TESZT VÁZLAT SCENARIO (OUTLINE | TEMPLATE) Seai Otie Etn cnro uln: aig Gvnteeae<tr>ccmes ie hr r sat uubr We Iet<a>ccmes hn a et uubr Te Isol hv <et ccmes hn hud ae lf> uubr Eape: xmls |sat|et|lf | tr a et | 1 2 | 5 | 7 | | 2 0 | 5 | 1 | 5
  32. 32. ALAPVETÉS BACKGROUND (HÁTTÉR) Bcgon: akrud Gvnteeae1 ccmes ie hr r 2 uubr Seai:Et5oto 1 cnro a u f 2 We Iet5ccmes hn a uubr Te Isol hv 7ccmes hn hud ae uubr Seai:Et6oto 1 cnro a u f 2 We Iet6ccmes hn a uubr Te Isol hv 6ccmes hn hud ae uubr
  33. 33. I18N EN Seai:Acuthssfiin fns cnro con a ufcet ud Gvnteacutblnei $0 ie h con aac s 10 Adtecr i vld n h ad s ai Adtemciecnan eog mny n h ahn otis nuh oe We teAcutHle rqet $0 hn h con odr euss 2 Te teAMsol dses $0 hn h T hud ipne 2 Adteacutblnesol b $0 n h con aac hud e 8 Adtecr sol b rtre n h ad hud e eund HU #agae h lnug: u Fraóöy:Vneé pn asáln ogtknv a lg éz zmá Aenie asáleyne $0 mnybn zmagelg 10 É akry évne s áta réys É a AMbneeed pn vn s z T-e lgnő éz a Aio tljoo kvs $0t mkr uadns iez 2Akra AMka $0t ko z T id 2É asál eynee$0 s zma gelg 8 É akrytkat a AM s átá ida z T
  34. 34. ESZKÖZÖK ✱ ÉS KERETRENDSZEREK .Net: NBehave, NSpec, Concordion Java: JBehave, Spock, Concordion JavaScript: Jasmine, Vows (node.js) PHP: Behat, PHPUnit Story Python: Behave, Letucce, Concordion Ruby: RSpec, Cucumber, Concordion Scala: ScalaTest, Concordion ✱ a nyelvek ABC sorrendben szerepelnek
  35. 35. SCENARIO A teszt metódus nevek legyenek mondatok Egy kifejező teszt név nagyon hasznos, ha failel a teszt Viselkedést definiáljunk, ne tesztet írjunk A követelmény viselkedés is Mindennapi (mindenki számára érthető) nyelven Az elfogadási kritériumok legyenek futtathatók Legyen a story olvasmányos Mi lenne ha?
  36. 36. BDD != TDD AVAGY MIT TESZTELJÜNK?
  37. 37. BBD » TDD TDD test class under test method under test passing / behaving failing / misbehaving 100% coverage BDD example class we’re describing valuable behaviour working, providing value should it do what I’ve described? Please, come change my code. I believe I’ve given you enough information to do this safely.
  38. 38. PÉLDÁUL...
  39. 39. BEHAT & MINK
  40. 40. SCENARIO Seai:Cekgnrt tubal cnro hc eeae hmnis GvnIa i adrcoy"m" ie m n ietr ig AdIhv a iptiae"et12_6.n" n ae n nu mg ts_0478pg We Icet nwtubal hn rae e hmnis Te nwycetdtubaleit "etspg hn el rae hmni xss ts_.n" Adnwycetdtubaleit "etmpg n el rae hmni xss ts_.n"
  41. 41. KÓD <pp ?h / FlSseCnetetnsBhtBhtCnetBhtotx; / ieytmotx xed eaeaotxeaCnet casTubaletrsetnsFlSseCnet ls hmniFaue xed ieytmotx { /* * *@ie /Ia i adrcoy"["])$ Gvn ^ m n ietr (^"*"/ *@ie /Ig t adrcoy"["])$ Gvn ^ o o ietr (^"*"/ * / pbi fnto cagDro$ietr){ ulc ucin hneiT(drcoy } /* * *@ie /Ihv a iptiae"["])$ Gvn ^ ae n nu mg (^"*"/ * / pbi fnto raFl(fl){ ulc ucin edie$ie }
  42. 42. KÓD /* * *@hn/Icet nwtubal$ We ^ rae e hmnis/ * / pbi fnto cetTubal( { ulc ucin raehmnis) } /* * *@hn/nwycetdtubaleit "["])$ Te ^el rae hmni xss (^"*"/ *@hn/fl eit "["])$ Te ^ie xss (^"*"/ * / pbi fnto flEit(fl){ ulc ucin iexss$ie } }
  43. 43. SHAMELESS SELF PROMO
  44. 44. KÉRDÉSEK? Szász Zoltán zoltan at szasz.me @szaszz /in/zoltanszasz
  45. 45. READ_IT_LATER.TXT Business Behavior @tastapod @papachrismatts @lunivore XP teszt alapok Kent Beck - Extreme Programming Explained TDD SOLID SRP: Single Responsibility Principle
  46. 46. READ_MORE_LATER.TXT OCP: Open Closed Principle LSP Liskov Substitution Principle ISP: Interface Segregation Principle DIP: Dependency Inversion Principle Clean Coders YAGNI: You ain't gonna need it DRY: Don't Repeat Yourself KISS: Keep It Simple Stupid
  47. 47. READ_MORE_LATER_2.TXT FIRST: Fast, Independent, Repetable, Self-validating, Timely Magyar Attila - Clean Code slide video Orcsik Antal - Objektum orientált mérések a gyakorlatban slide video Ördög Rafael - Test driven mockery slide video Robert C. Martin - Clean Code: A Handbook of Agile Software Craftsmanship Robert C. Martin - Tiszta kód Robert C. Martin - The Clean Coder: A Code of Conduct for Professional Programmers Robert C. Martin - Túlélőkönyv programozóknak
  48. 48. READ_MORE_LATER_3.TXT „Betört ablak”-elv Specifikáció formális specifikáció User Story C3 User Story On Acceptance criteria for user stories DSL Gherkin - a nyelv
  49. 49. READ_MORE_LATER_4.TXT Gherkin ~40 nyelven Given-When-Then .Net: NBehave, NSpec, Concordion Java: JBehave, Spock,Concordion JavaScript: Jasmine, Vows (node.js) PHP: Behat, PHPUnit Story Python: Behave, Letucce, Concordion Ruby: RSpec, Cucumber, Concordion Scala: ScalaTest, Concordion
  50. 50. READ_MORE_LATER_5.TXT Dan North - Introducing BDD Dan North - What’s in a Story? BBD » TDD Behat & Mink PHP Meetup Budapest @szaszz /in/zoltanszasz

×