58
Yksikkötestauksen käyttöönotto Jouni Heikniemi, Offbeat Solutions @jouniheikniemi [email protected]

Yksikkötestauksen käyttöönotto

  • Upload
    nova

  • View
    55

  • Download
    0

Embed Size (px)

DESCRIPTION

Yksikkötestauksen käyttöönotto. Jouni Heikniemi, Offbeat Solutions. @ jouniheikniemi [email protected]. No heippa!. Jouni Heikniemi yleisjyrä Offbeat Solutions [email protected] www.heikniemi.net/hardcoded @jouniheikniemi. #tddev. #td2012fi. Odotukset kuulijalle. - PowerPoint PPT Presentation

Citation preview

Page 1: Yksikkötestauksen käyttöönotto

Yksikkötestauksen käyttöönottoJouni Heikniemi, Offbeat Solutions

@[email protected]

Page 2: Yksikkötestauksen käyttöönotto

No heippa!

Jouni Heikniemi

yleisjyrä

Offbeat Solutions

[email protected]/hardcoded@jouniheikniemi

Page 3: Yksikkötestauksen käyttöönotto

#td2012fi #tddev

Page 4: Yksikkötestauksen käyttöönotto

Odotukset kuulijalle

• Tietää mitä yksikkötestaus on

• Osaa kirjoittaa perustestin

• Kehittäjä tai muuten prosessissa tiukasti kiinni

• Ei vielä aktiivinen yksikkötestaaja

Page 5: Yksikkötestauksen käyttöönotto

Miksi et yksikkötestaa?

Softamme on liian monimutkainen

Minulla ei ole aikaa

Yritin, mutta en osannut

Esimieheni ei anna lupaa

(... jolloin testit ovat osa ratkaisua, eivät ongelmaa)

... No mutta siksihän olet täällä!

Page 6: Yksikkötestauksen käyttöönotto

Miksi edes kysyt?

Esimieheni ei anna lupaa

Page 7: Yksikkötestauksen käyttöönotto

Esimieheni ei anna lupaa

KulttuuriTulospaineKvartaali

ROI

Page 8: Yksikkötestauksen käyttöönotto

Esimieheni ei anna lupaa

Täysverinen yksikkötestauksen käyttöönotto on organisaatiokysymys.

Se, että sinä opettelet testaamaan töitä tehdessäsi, ei ole.

Kun olet ensin opetellut, olet paljon vakuuttavampi.

Page 9: Yksikkötestauksen käyttöönotto

Esimieheni ei anna lupaa

Muista: Esimiestäkin voi

vaihtaa!www.mol.fi

www.monster.fi

tyopaikat.oikotie.fi

jne.

(ilmainen mainos)

Page 10: Yksikkötestauksen käyttöönotto

Enemmän realismia,

vähemmän höpinää

tai sitten presentoija kuuseen?

Page 11: Yksikkötestauksen käyttöönotto

Mitä yksikkötestauksella...

• Laadukasta koodia kustannustehokkuutta

• Dokumentaatiota• Luottamusta koodin

oikeellisuuteen

• Bugittomuutta• Testaajien

tarpeettomuutta

saa ei saa

(= toimii kuten toteuttaja on aikonut)

Yksikkötestaus ”Koodinvarmistus”

Page 12: Yksikkötestauksen käyttöönotto

Paljonko se vie aikaa?

Kehitys-työ

Ilman yksikkötestejä Yksikkötestien kanssa

Kehitys-työ

Testientoteutus

”Lisäsuunnittelu”

+ 20 .. 100 %

Page 13: Yksikkötestauksen käyttöönotto

Paljonko se vie aikaa?

Kehitys-työ

Ilman yksikkötestejä Yksikkötestien kanssa

Kehitys-työ

Testientoteutus

Lisä-suunnittelu

Ylläpito-koodaus

Ylläpito-koodaus

Virhe-jahti

Virhejahti

Testienylläpito

… “mutta”

Page 14: Yksikkötestauksen käyttöönotto

Paljonko se vie aikaa?

Kehitys-työ

Ilman yksikkötestejä Yksikkötestien kanssa

Kehitys-työ

Testientoteutus

Lisä-suunnittelu

Ylläpito-koodaus

Ylläpito-koodaus

Virhe-jahti

Virhejahti

Testienylläpito

Tiimin refaktorointitaidot

ratkaisevat, väheneekö ylläpitovaiva.

Page 15: Yksikkötestauksen käyttöönotto

Paljonko se vie aikaa?

Kehitys-työ

Ilman yksikkötestejä Yksikkötestien kanssa

Kehitys-työ

Testientoteutus

Lisä-suunnittelu

Ylläpito-koodaus

Ylläpito-koodaus

Virhe-jahti

Virhejahti

Testienylläpito

Testinkirjoitustaidot ratkaisevat,

väheneekö virhejahti.

Page 16: Yksikkötestauksen käyttöönotto

Paljonko se vie aikaa?

Kehitys-työ

Ilman yksikkötestejä Yksikkötestien kanssa

Kehitys-työ

Testientoteutus

Lisä-suunnittelu

Ylläpito-koodaus

Ylläpito-koodaus

Virhe-jahti

Virhejahti

Testienylläpito

Huonot testit ovat myös tuskaisia

ylläpitää.

Page 17: Yksikkötestauksen käyttöönotto

Vaikuttaako lohduttomalta?

Kehitys-työ

Ilman yksikkötestejä Yksikkötestien kanssa

Kehitys-työ

Testientoteutus

Lisä-suunnittelu

Ylläpito-koodaus

Ylläpito-koodaus

Virhe-jahti

Virhejahti

Testienylläpito

Jopa 80 % sovelluksen TCO:sta kohdistuu ylläpitoon.

Page 18: Yksikkötestauksen käyttöönotto

Elinkaari huomioidenKe

hity

styö

Ilman yksikkötestejä Yksikkötestien kanssaKe

hity

styö

Testi

ento

teut

us

Lisä-

suun

nitte

lu

Ylläpitokoodaus

Ylläpito-koodaus

Virhejahti

Virhejahti

Testien ylläpito

Page 19: Yksikkötestauksen käyttöönotto

Tiimin kehityksen myötäKe

hity

styö

Ilman yksikkötestejä Yksikkötestien kanssaKe

hity

styö

Testi

ento

teut

us

Lisä

-su

unni

ttelu

Ylläpitokoodaus

Ylläpito-koodaus

Virhejahti

Virhejahti

Testien ylläpito

Page 20: Yksikkötestauksen käyttöönotto

Testauksen aloittamisen työmäärä

Idean tajuaminen

Työkalut kuntoon

Testien kirjoittaminen

Riippuvuuksien poistaminen

Siis: Kaikki oikeasti vaikea duuni on

omien jälkien siivoamista.

Page 21: Yksikkötestauksen käyttöönotto

Siis mitkä riippuvuudet?

Page 22: Yksikkötestauksen käyttöönotto

Logiikkaan sekaantujat, the usual suspects

• Tiedostojärjestelmä

• Verkon käyttö

• Tietokanta

• Ajoympäristön käsittely

Page 23: Yksikkötestauksen käyttöönotto

No mitä sit ku?(eli kuinka voitat sen monimutkaisen softan)

Page 24: Yksikkötestauksen käyttöönotto

Aloita järkevästä vastuksesta

Page 25: Yksikkötestauksen käyttöönotto

Menestys liian helpossa projektissa johtaa harhaan!

(eikä välttämättä edes vakuuta ketään)

Page 26: Yksikkötestauksen käyttöönotto

Turha myöskäänottaa täysillä turpaan...

Page 27: Yksikkötestauksen käyttöönotto

• Keskikokoinen projekti tai moduuli

• Tunnetusti ongelmallinen

• Jonka tunnet melko hyvin

Ideaalinen Frankenstein

Page 28: Yksikkötestauksen käyttöönotto

Uusi on aina uusi?

— Legacyssa löytyy (tm)— Oma tupa, oma lupa— Sekasorron voi kääntää

myös voitoksi— ”Kukaan ei huomaa”

— Ehkä parempaa koodia— Uusissa alustoissa

parempi testaustuki— Hermoraunio

projektipäällikkö niskassa?

Page 29: Yksikkötestauksen käyttöönotto

Mitä kannattaa testata?

Kilauta kehittäjälle!

Page 30: Yksikkötestauksen käyttöönotto

Tehokkuus koodiluokittainRi

ippu

vuuk

sien

vaik

eus

Testauskelpoisen logiikan määrä

Data access(yleensä)

”Älyttömät” oliot

Työkalu-metodit

Parserit ym. muuntimet

Laskenta ja päättely

Fasadi-kerrokset

Ohjaus-kerrokset

Page 31: Yksikkötestauksen käyttöönotto

Testaushyöty Logiikan määrä Testaushyöty = Riippuvuuksien määrä

Huomioi myös:

• Koodin bugialttius ja bugien kriittisyys• Kuinka usein koodi muuttuu?• Kuinka paljon dokumentaatiosta on hyötyä?

Page 32: Yksikkötestauksen käyttöönotto

Mitä kannattaisi testata?Ri

ippu

vuuk

sien

vaik

eus

Testauskelpoisen logiikan määrä

Data access(yleensä)

”Älyttömät” oliot

Työkalu-metodit

Parserit ym. muuntimet

Laskenta ja päättely

Fasadi-kerrokset

Ohjaus-kerrokset

Page 33: Yksikkötestauksen käyttöönotto

Helpot testit

Vaikeat testit

Yksikkötestien työmäärävaikutukset

Kehitys-työ

Ylläpito-koodaus

Virhejahti

Testienylläpito

Testientoteutus

Lisä-suunnittelu

Miksi testata vaikeita asioita?

Page 34: Yksikkötestauksen käyttöönotto

Helpot vai vaikeat ensin?Ri

ippu

vuuk

sien

vaik

eus

Testauskelpoisen logiikan määrä

Data access(yleensä)

”Älyttömät” oliot

Työkalu-metodit

Parserit ym. muuntimet

Laskenta ja päättely

Fasadi-kerrokset

Ohjaus-kerrokset

Page 35: Yksikkötestauksen käyttöönotto

Helpot vai vaikeat ensin?

• Jos haluat hyödyn irti nopeasti, aloita vaikeista– ... Mutta sitten pitää oikeasti osata

• Jos sinä tai tiimisi olette aloittelijoita, lähtekää helposta päästä liikkeelle– ... Mutta varaudu olemaan kärsivällinen – osa

hyödyistä tulee vasta paljon myöhemmin

Page 36: Yksikkötestauksen käyttöönotto

”Testaa kun korjaat”-malli

1. Kirjoita testi aina ennen kuin refaktoroit– Varmista että testi testaa oikeat asiat – ja menee läpi

sekä ennen että jälkeen

2. Kirjoita testi aina ennen kuin korjaat bugin– Varmista että testi ei mene läpi ennen korjausta, ja

menee sen jälkeen

• Hyvä, mutta vaikea tehdä organisoidusti aloittelevalla porukalla

Page 37: Yksikkötestauksen käyttöönotto

Black vs. White box

Page 38: Yksikkötestauksen käyttöönotto

Elämää mustassa laatikossa

Valmis?

Page 39: Yksikkötestauksen käyttöönotto

Elämää valkeassa laatikossa

Page 40: Yksikkötestauksen käyttöönotto

Elämää valkeassa laatikossa

Page 41: Yksikkötestauksen käyttöönotto

Black vs. White box

• Testit ovat toteutusriippumattomia

• Lähes aina jotain jää testaamatta

• Lähes aina on myös turhia testejä

• ... ja käytännössä mahdotonta tehdä,ellei testejä tee joku muu kuin koodari unohda tämä

Page 42: Yksikkötestauksen käyttöönotto

Black vs. White box

• Testit varmentavat yleensä koodinlaadun melko hyvin

• Testit toimivat myös dokumentaationa

• Syntyy helposti ”huonoja testejä”: rikkoutuvat koodin rakenteen muuttuessa

Page 43: Yksikkötestauksen käyttöönotto

Code Coverage

Page 44: Yksikkötestauksen käyttöönotto

Code Coverage

Page 45: Yksikkötestauksen käyttöönotto
Page 46: Yksikkötestauksen käyttöönotto
Page 47: Yksikkötestauksen käyttöönotto
Page 48: Yksikkötestauksen käyttöönotto

Code coverage

• Hyvä apuväline, kun etsit paikkoja, joita testikoodi ei ainakaan testaa

• Älä käytä peittoprosenttia mittarina tai tavoitteena– ”Execution coverage” != ”Assertion coverage”

Page 49: Yksikkötestauksen käyttöönotto

Mitä voisin mitata?

• Riippuvuuksien määrän vähenemistä– Esim. NDepend-metriikat

• Regressiobugien määrää– Hyvä, mutta usein hidas mittari

• Uusien koodarien työhönoppimisen nopeus• Virheiden korjausnopeus• Debuggaukseen käytetty aika

Page 50: Yksikkötestauksen käyttöönotto

Työkaluja

• Apua mikä määrä!– nUnit, xUnit, Mbunit, Mstest, ...– Moq, Typemock Isolator, RhinoMocks, ...– Visual Studio, ReSharper, TeamCity, TFS, ...

• Oikeasti valinnalla ei ole yhtään mitään väliä kun olet aloittamassa

Hyvä setti aloittelijalle:

xUnit + (TestDriven.net tai ReSharper)

Page 51: Yksikkötestauksen käyttöönotto

Tarvittavaa osaamista

• Vähän testauksen filosofiaa• Jokin testaustyökalu• Refaktorointi• Oman softan toimintasäännöt• Mock-tekniikat, IoC, testien skriptaus, ...

Page 52: Yksikkötestauksen käyttöönotto

Test-driven development

• Ei ole pakko. Sehän on tiiliseinä --->

• Harkitse sitten, kun testaus alkaa sujua hyvin.

Page 53: Yksikkötestauksen käyttöönotto

Miten varmistua testien laadusta?

• Katselmointi. Erityisesti testien.

• Loistava tapa saada palautetta myös koodin ajattelusta ja API-suunnittelusta

http://bit.ly/katselmointi1http://bit.ly/katselmointi2

Page 54: Yksikkötestauksen käyttöönotto

Integraatio- vs. Yksikkötestit?

• Onko erottelu sinulle oikeasti merkityksellinen?

• Yksikkötesti = ”testaa vain yhtä luokkaa” ... vai ...• Yksikkötesti = ”riittävän nopea ja simppeli,

vapaasti toistettavissa oleva testi”

Page 55: Yksikkötestauksen käyttöönotto

Testien ajoympäristöt

Testien pitää suorittua nopeastikehittäjän työasemalla

Version-hallintacheckin

Build + test

palaute

Page 56: Yksikkötestauksen käyttöönotto
Page 57: Yksikkötestauksen käyttöönotto

Kokeile rohkeasti.Kehityt koodaajana.

Page 58: Yksikkötestauksen käyttöönotto

[email protected]@jouniheikniemi

www.heikniemi.net/hardcoded?