Open academy - Test Driven Development
-
Upload
attila-magyar -
Category
Technology
-
view
828 -
download
6
description
Transcript of Open academy - Test Driven Development
TDDMagyar Attila (@athoshun)
GY.I.K.
● Mire való ez a vacak?!● Hogy működik ez a vacak?!● Hogy működhetett ez valaha?!● Mit ronthatok el, ha kitakarítom
ezt a disznóólat???
A szoftverfejlesztés nehézségei
● Változó követelmények● Szoros határidők● Spagettivé váló kódok
● Tervezési hiányosságok● Quickfixek, workaroundok● Copy&paste● TODO-k, FIXME-k, elavult kommentek
● Hiányos, félreérthető/félrevezető/elavult dokumentáció
● ...
A szoftverfejlesztés nehézségei
● Röviden: legacy kód
A szoftverfejlesztés nehézségei
● Röviden: legacy kód● Na jó, de mi a fene az a legacy kód?!?!
Legacy kód
● Legacy kód = olyan kód, amelyet nem vizsgál unit teszt
Legacy kód
● Legacy kód = olyan kód, amelyet nem vizsgál unit teszt
● Szinte minden kódot könnyű átalakítani, amihez van hatékony tesztkészlet!
Legacy kód
● Legacy kód = olyan kód, amelyet nem vizsgál unit teszt
● Szinte minden kódot könnyű átalakítani, amihez van hatékony tesztkészlet!
Hogyan írjunk megbízható unit
teszteket?
Test Driven Development
● Kent Beck, 2003 (XP, JUnit, Agile Manifesto):● 1. lépés: tesztelés● 2. lépés: implementáció● 3. lépés: tervezés
Test Driven Development
● 1. lépés: írj legfeljebb annyi teszt kódot, ami már FAIL-el!
Test Driven Development
● 1. lépés: írj legfeljebb annyi teszt kódot, ami már FAIL-el!
● 2. lépés: írd meg a lehető legegyszerűbb production kódot, ami az előző lépésben készült tesztesetet PASS-re változtatja!
Test Driven Development
● 1. lépés: írj legfeljebb annyi teszt kódot, ami már FAIL-el!
● 2. lépés: írd meg a lehető legegyszerűbb production kódot, ami az előző lépésben készült tesztesetet PASS-re változtatja!
● 3. lépés: REFACTOR!
Test Driven Development
● 1. lépés: írj legfeljebb annyi teszt kódot, ami már FAIL-el!
● 2. lépés: írd meg a lehető legegyszerűbb production kódot, ami az előző lépésben készült tesztesetet PASS-re változtatja!
● 3. lépés: REFACTOR!● Refactoring: a meglévő kód szerkezetének
átalakítása a működés megváltoztatása nélkül
Demó
Game of Life
● A világ egy végtelen négyzetrács, amelyen sejtek élnek, cellánként max. 1 sejt
● Minden cellának 8 szomszédos cellája van
● Körökre osztott játék, minden körben:● Minden élő sejt meghal, aminek 2-nél kevesebb
élő szomszédja van● Minden élő sejt túlél, aminek 2 vagy 3 élő
szomszédja van● Minden élő sejt meghal, aminek 3-nál több
szomszédja van● Minden halott sejt életre kel, aminek pontosan 3
élő szomszédja van
Game of Life
● Minden élő sejt meghal, aminek 2-nél kevesebb élő szomszédja van
Game of Life
● Minden élő sejt túlél, aminek 2 vagy 3 élő szomszédja van
Game of Life
● Minden élő sejt meghal, aminek 3-nál több szomszédja van
Game of Life
● Minden halott sejt életre kel, aminek pontosan 3 élő szomszédja van
A terv
A terv
TDD!
Tippek & trükkök
● Hogyan teszteljem a private metódusokat?● Sehogy! Az osztályok public (esetleg protected) felületét teszteld!
Tippek & trükkök
● Hogyan teszteljem a private metódusokat?● Sehogy! Az osztályok public (esetleg protected) felületét teszteld!
● Lehet, hogy az extract class refactoring lépésre van szükséged?
Tippek & trükkök
● Hogyan teszteljek I/O-t, 3rd party függő kódot, ...?● Egyszerű wrapper osztályok a 3rd party köré
tesztkörnyezetben helyettük test double-ök →(stub, mock).– http://en.wikipedia.org/wiki/Test_double
● DI: dependency inversion, dependency injection!
Majd utólag írok tesztet!
● Nem nagyon szokott rá idő maradni...● Ha mégis van idő, akkor az implementáció után a
lelkesedés csökken.● Ha mégis készül teszt, semmi sem garantálja, hogy
minden fontos követelményt megvizsgál.● A teszt nélkül készült kódot macerásabb utólag
tesztelni kisebb-nagyobb átalakítások nélkül.● Tesztek nélkül refaktorálni veszélyes mutatvány!
A TDD számokban
● Realizing quality improvement through test driven development (IBM&Microsoft, 2008)
A TDD számokban
● Realizing quality improvement through test driven development (IBM&Microsoft, 2008)
A TDD számokban
● Realizing quality improvement through test driven development (IBM&Microsoft, 2008)
Hol lehet kipróbálni?
● CodeRetreat! (http://coderetreat.org)● Budapesti CR közösség: facebook,
„CodeRetreat Budapest”
Hol lehet kipróbálni?
● CodeRetreat! (http://coderetreat.org)● Budapesti CR közösség: facebook,
„CodeRetreat Budapest”● Sőt: akár már holnap, a
munkahelyeden!
Olvasnivaló
• http://en.wikipedia.org/wiki/Test-driven_development
• http://martinfowler.com/articles/mocksArentStubs.html
• http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf
Kérdés?
Köszönöm a figyelmet!