• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Open academy - Test Driven Development
 

Open academy - Test Driven Development

on

  • 960 views

My talk (in Hungarian) at BalaBit Open Academy, 2012-06-07

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

Statistics

Views

Total Views
960
Views on SlideShare
946
Embed Views
14

Actions

Likes
1
Downloads
6
Comments
0

2 Embeds 14

http://localhost 13
https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Open academy - Test Driven Development Open academy - Test Driven Development Presentation 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 írjunkmegbí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!