35
TDD Magyar Attila (@athoshun)

Open academy - Test Driven Development

Embed Size (px)

DESCRIPTION

My talk (in Hungarian) at BalaBit Open Academy, 2012-06-07 The TDD demonstration screencast is available on YouTube at http://www.youtube.com/watch?v=QmLls4PXuYA

Citation preview

Page 1: Open academy - Test Driven Development

TDDMagyar Attila (@athoshun)

Page 2: Open academy - Test Driven Development

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???

Page 3: Open academy - Test Driven Development

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ó

● ...

Page 4: Open academy - Test Driven Development

A szoftverfejlesztés nehézségei

● Röviden: legacy kód

Page 5: Open academy - Test Driven Development

A szoftverfejlesztés nehézségei

● Röviden: legacy kód● Na jó, de mi a fene az a legacy kód?!?!

Page 6: Open academy - Test Driven Development

Legacy kód

● Legacy kód = olyan kód, amelyet nem vizsgál unit teszt

Page 7: Open academy - Test Driven Development

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!

Page 8: Open academy - Test Driven Development

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!

Page 9: Open academy - Test Driven Development

Hogyan írjunk megbízható unit

teszteket?

Page 10: Open academy - Test Driven Development

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

Page 11: Open academy - Test Driven Development

Test Driven Development

● 1. lépés: írj legfeljebb annyi teszt kódot, ami már FAIL-el!

Page 12: Open academy - Test Driven Development

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!

Page 13: Open academy - Test Driven Development

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!

Page 14: Open academy - Test Driven Development

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

Page 15: Open academy - Test Driven Development

Demó

Page 16: Open academy - Test Driven Development

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

Page 17: Open academy - Test Driven Development

Game of Life

● Minden élő sejt meghal, aminek 2-nél kevesebb élő szomszédja van

Page 18: Open academy - Test Driven Development

Game of Life

● Minden élő sejt túlél, aminek 2 vagy 3 élő szomszédja van

Page 19: Open academy - Test Driven Development

Game of Life

● Minden élő sejt meghal, aminek 3-nál több szomszédja van

Page 20: Open academy - Test Driven Development

Game of Life

● Minden halott sejt életre kel, aminek pontosan 3 élő szomszédja van

Page 21: Open academy - Test Driven Development

A terv

Page 22: Open academy - Test Driven Development

A terv

Page 23: Open academy - Test Driven Development

TDD!

Page 24: Open academy - Test Driven Development

Tippek & trükkök

● Hogyan teszteljem a private metódusokat?● Sehogy! Az osztályok public (esetleg protected) felületét teszteld!

Page 25: Open academy - Test Driven Development

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?

Page 26: Open academy - Test Driven Development

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!

Page 27: Open academy - Test Driven Development

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!

Page 28: Open academy - Test Driven Development

A TDD számokban

● Realizing quality improvement through test driven development (IBM&Microsoft, 2008)

Page 29: Open academy - Test Driven Development

A TDD számokban

● Realizing quality improvement through test driven development (IBM&Microsoft, 2008)

Page 30: Open academy - Test Driven Development

A TDD számokban

● Realizing quality improvement through test driven development (IBM&Microsoft, 2008)

Page 31: Open academy - Test Driven Development

Hol lehet kipróbálni?

● CodeRetreat! (http://coderetreat.org)● Budapesti CR közösség: facebook,

„CodeRetreat Budapest”

Page 32: Open academy - Test Driven Development

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!

Page 33: Open academy - Test Driven Development

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

Page 34: Open academy - Test Driven Development

Kérdés?

Page 35: Open academy - Test Driven Development

Köszönöm a figyelmet!