open academy - test driven development

Post on 06-May-2015

828 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

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!

top related