TDD Käytännössä Todellinen työkalu vai lehmipoikien laukkaa? Harri Kulmala Solita Oy

Samankaltaiset tiedostot
Ohjelmistojen mallintaminen. Luento 11, 7.12.

Testaus-tietoisku: Tärkeimpiä asioita testauksesta projektityökurssilaisille

Testaussuunnitelma. Koskelo. Helsinki Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Automaattinen yksikkötestaus

Testaussuunnitelma. Ohjelmistotuotantoprojekti Nero. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

Tutkittua tietoa. Tutkittua tietoa 1

Good Minton QA Raportti Iteraatio 1 Sulkapalloliiton Kilpailujärjestelmä

Mihin kaikkeen voit törmätä testauspäällikön saappaissa?

Testaussuunnitelma PULSU. Syksy 2008 Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

T Tietojenkäsittelyopin ohjelmatyö. Testiraportti, vaihe T1. Tietokonegrafiikka-algoritmien visualisointi. Testiraportti, vaihe T1

Tarjolla tänää: Ohjelmiston toteutuksesta. Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit. Testilähtöinen kehittäminen JOT2007. Uudelleenrakentaminen

Testaussuunnitelma Labra

Ohjelmistotuotantoprojekti

statbeatmobile PROJECT REVIEW iteration 1

dokumentin aihe Dokumentti: Testausraportti_I1.doc Päiväys: Projekti : AgileElephant

Onnistunut Vaatimuspohjainen Testaus

Test-Driven Development

Mihin kaikkeen voit törmätä testauspäällikön saappaissa?

Tik Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu. LiKe Liiketoiminnan kehityksen tukiprojekti

Ohjelmistotestaus -09

statbeatmobile FINAL PROJECT REVIEW

Ohjelmistotekniikka - Luento 2

Testauksen tuki nopealle tuotekehitykselle. Antti Jääskeläinen Matti Vuori

Testauksen hallintaa teekkareille (ja muille kiinnostuneille) Arto Stenberg

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

Automaattinen regressiotestaus ilman testitapauksia. Pekka Aho, VTT Matias Suarez, F-Secure

Ohjelmistotekniikka - Luento 2 Jouni Lappalainen

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Kuopio Testausraportti Asiakkaat-osakokonaisuus

Testaus käsite. Sekalaista testausasiaa. Testauksen käsitteestä. Kattavuusmitat. Jos ajatellaan, että testaus = V&V, voidaan erottaa:

Test-Driven Development

Lohtu-projekti. Testaussuunnitelma

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 2: Vaiheet 3 & 4. Antti Jääskeläinen Matti Vuori

Kontrollipolkujen määrä

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 2: Vaiheet 3 & 4. Antti Jääskeläinen Matti Vuori

T SEPA päiväkirja

Convergence of messaging

Ylläpito. Ylläpito. Ylläpidon lajeja Ohjelmistotuotanto, syksy 1998 Ylläpito

Käyttötapausanalyysi ja testaus tsoft

COTOOL dokumentaatio SEPA: Refaktorointi

Testaussuunnitelma. PUSU-ryhmä. Helsinki Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmistojen laadun parantaminen refaktoroinnilla Simo Mäkinen Tietojenkäsittelytieteen laitos Helsingin yliopisto

Ohjelmistojen suunnittelu

Onnistunut ohjelmistoprojekti

Simulaattoriavusteinen ohjelmistotestaus työkoneympäristössä. Simo Tauriainen

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori

T Tietojenkäsittelyopin ohjelmatyö. Testiraportti, vaihe LU. Tietokonegrafiikka-algoritmien visualisointi. Testiraportti, vaihe T3

Testausoppeja toimialavaihdoksesta

T Projektikatselmus

Tapahtuipa Testaajalle...

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant Versio: V0.3

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi. Test-Driven Development, TDD

Työn ositusmalleista. Luennon tavoitteista. Motivointia. Walker Royce, Software Project Management, A Unified Framework

Ohjelmistotuotanto. Luento

Ohjelmistotuotanto vs. muut insinööritieteet. (Usein näennäinen) luotettavuus ja edullisuus

Yhteenvetodokumentti. PLAYOFF Jari Anttila Sanna Fröblom Aarno Sandvik Tommi Paavilainen Miikka Kohijoki. Päivi Pääkkö, ohjaaja

Projektityö

Testausraportti. Oppimistavoitteiden hallintajärjestelmä harri

SYSTEEMITYÖ. Tärkeitä sanoja

L models. Testisuunnitelma. Ryhmä Rajoitteiset

Versio Päiväys Tekijä Kuvaus Tikkanen varsinainen versio

58160 Ohjelmoinnin harjoitustyö

COTOOL dokumentaatio Testausdokumentit

LAATURAPORTTI Iteraatio 1

CT60A4150 OHJELMISTOTESTAUKSEN PERUSTEET. Jussi Kasurinen Kevät 2016

UCOT-Sovellusprojekti. Testausraportti

Testausautomaation mahdollisuudet käyttöliittymän testauksessa. Anssi Pekkarinen

Ohjelmiston testaus ja laatu. Testausmenetelmiä

Luku 8 Rakennusvaihe. Detailed Design. Programming. Moduulisuunnittelu. Ohjelmointi

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Ylläpito. Ylläpidon lajeja

Testaaminen ohjelmiston kehitysprosessin aikana

T Tietojenkäsittelyopin ohjelmatyö Hirviöryhmä loppukatselmointi. Hirviö. Projektikatselmointi

Laaturaportti [iteraatio 2] Ryhmä 14

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Hankinnan problematiikka

TIE Ohjelmistojen testaus 2016 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori

Lyhyt johdatus ketterään testaukseen

Testaussuunnitelma. Pizzeria - Pitseria HAAGA-HELIA ammattikorkeakoulu Tietojenkäsittelyn koulutusohjelma. WebPizza

Tik Projektiryhmä: TeamAhma. Projektin HAYABUSA opponointi. Opponointisuunnitelma

T Testiraportti - järjestelmätestaus

Harjoitustyön testaus. Juha Taina

Onnistunut SAP-projekti laadunvarmistuksen keinoin

Software engineering

Esityksen sisältö Määrittelyjen mukaisuudesta varmistuminen - PlugIT-leima

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Testauspäällikön tarinoita Arto Stenberg

TOIMINNALLINEN MÄÄRITTELY MS

Oodin versiot, havaittujen virheiden korjaus sekä kehitysehdotusten eteneminen

Ketterä vaatimustenhallinta

Onnistunut ohjelmistoprojekti

Testiautomaatio tietovarastossa. Automaattisen regressiotestauksen periaate ja hyödyt

Oleelliset vaikeudet OT:ssa 1/2

Transkriptio:

www.solita.fi solita@solita.fi TDD Käytännössä Todellinen työkalu vai lehmipoikien laukkaa? Harri Kulmala Solita Oy 1

TDD Käytännössä Test Driven Development yleisesti Lupaukset Esimerkki Projektin ja menetelmän yhteensopivuus Lupausten lunastus Test Driven Development Pragmaattinen lähestymistapa ohjelmistosuunnitteluun TDD on hybridi suunnittelu- ja toteutusvaiheista suunnitellaan pienissä palasissa voi korvata up-front -suunnitteluvaiheen Liittyy XP-metodologiaan, mutta ajatukset sovellettavissa prosessista riippumatta Teknologiariippumaton Java,.NET, Python,... 2

Periaatteet Pohjana järjestelmän käyttötapaukset ja vaatimukset Jokainen muutos testataan Edetään pienissä paloissa Virheettömyys Lupaukset 100% testikattavuus, bugiton järjestelmä Yksinkertainen arkkitehtuuri KISS-periaate Ylläpidettävyys muutosten aiheuttamat ongelmat havaitaan välittömästi Ennustettavuus koodi on todella valmista silloin, kun se on valmista 3

Vaatimukset Itsekuri Työkalut Kokemus Motivaatio Prosessi: Kädet saveen 1. Tee testi 2. Aja testit, varmista, että uusi testi epäonnistuu 3. Tee pieni muutoskoodiin 4. Aja testit, varmista, että kaikki onnistuvat 5. Refaktoroi, poista copy/paste koodi Keskity yhteen asiaan kerrallaan, kirjaa kaikki muut mieleentulevat muutokset tai ideat todo-listaan 4

Esimerkki Vaatimus: Numeroluokka, joka osaa yhteenlaskun 1. Tehdään testi, varmistetaan että se epäonnistuu Esimerkki Vaatimus: Numeroluokka, joka osaa yhteenlaskun 1. Tehdään testi, varmistetaan että se epäonnistuu 2. Tehdään pieni muutos, jolla testi saadaan toimimaan 5

Esimerkki Vaatimus: Numeroluokka, joka osaa yhteenlaskun 1. Tehdään testi, varmistetaan että se epäonnistuu 2. Tehdään pieni muutos, jolla testi saadaan toimimaan 3. Refaktoroidaan, poistetaan copy/paste 4. Jatketaan kohdasta 1, kunnes lopputulos tyydyttää Testikattavuus 100% Mitä meillä on? Joukko automatisoituja regressiotestejä koska sääntönä on, että uuden ominaisuuden lisääminen vaatii uuden testitapauksen, on testeissä myös sisältöä 6

Virheettömyys Testikattavuus koko ajan 100% Onko silti testattu kaikki tarpeellinen? Mihin asti testausta pitää jatkaa? Entä järjestelmän osien välinen integraatio ja sen testaaminen? Järjestelmätestaus? Toiminnallinen testaus? Skaalautuvuus ja suorituskyky TDD ei poista muiden testausvaiheiden tarvetta Yksikkötestit korvataan (lähes?) täydellisesti Lähtökohta on toiminnallisuudessa Yksinkertainen arkkitehtuuri Pääpaino on ominaisuuksien, vaatimuksien ja käyttötapausten ajattelussa Arkkitehtuuri on juuri niin yksinkertainen, kuin toiminnallisuus vaatii Luotetaan refaktorointiin 7

Ylläpidettävyys Arkkitehtuuri on yksinkertainen Regressiotestit ovat kattavat ja automatisoidut Muutosten vaikutusten arviointi helpottuu ja nopeutuu Testitapaukset dokumentoivat luokkien käyttötavat laajemmin kuin metodidokumentaatio toimivat informaation lähteenä kehittäjien välillä Ennustettavuus Kun koodi on valmista, se on todella valmista Ei kuitenkaan sinällään auta arvioimaan sen tarkemmin etukäteen, kuinka suureksi työmäärä muotoutuu 8

Hopealuoti? Hankalat asiat Testaaminen on edelleen vaikeaa vaatii osaamista ja kokemusta Kaikkia vaatimuksia ei ole mahdollista pukea suoraan testitapauksiksi täytyy muistaa, että ne on kuitenkin puettava tekniseksi toteutukseksi Joskus testien teko vaatii hyötyyn nähden kohtuuttoman työmäärän tai ainakin näyttää vaativan Kurinalaisuudesta tinkiminen johtaa nopeasti rappioon testikattavuus saattaa olla silti 100% 9

Päättelyketju 1. TDDataanpas tämä meidän sovellus! 2. Jaha, tässä on webbiui:ta, monisäikeisyyttä, ja tietokanta 3....aikaa kuluu... 4....aikaa kuluu PALJON... 5. Webbiui:ta ei kannata testata, liikaa työtä. Tietokantaa on järjetöntä lähteä testaamaan, ja monisäikeisyyttä on paha pukea testitapauksiksi 6. Hävittiin aikaa ja rahaa, ei enää koskaan TDD:tä! Asioita, joita on hankala testata Tietokantaintensiiviset operaatiot Käyttöliittymät Servletit/J2EE Riippuvuudet Monisäikeisyys, ajastetut operaatiot 10

Asioita, joita on hankala testata Tietokantaintensiiviset operaatiot Käyttöliittymät Servletit/J2EE Riippuvuudet Kokemus Työkalut Työkalut Kokemus Monisäikeisyys, ajastetut operaatiot Kokemus Case: Projekti X Suurehko (yli 150 KLOC) Siirtyi toisesta organisaatiosta ylläpidettäväksi ja jatkokehitykseen Lähdettiin tutustumaan järjestelmään testitapausten avulla Ongelmia yksikkötesteissä: Suurin osa oli kiireessä tekaistu Osa ei testannut mitään, ajoi vain koodin Testattavaa yksikköä ei oltu eriytetty ympäristöstään 11

Osaamisen siirto Kirjoitettiin kriittisten komponenttien osalta yksikkötestit uudelleen eriytys ympäristöstä pala kerrallaan rakennettiin testitapauksia hankalien asioiden testaamiseen etsittiin keinoja testauspatterneista tarvittaessa refaktoroitiin Osaamisen siirron tulokset Prosessin aikana (tuotannossa olevasta komponentista) paljastui n. 30 ennen löytymätöntä virhettä jälkikäteen tehtyyn testaukseen upposi iso työmäärä voidaan ajatella kuitenkin, että ensimmäinen testauskierros oli hyödytön: olisiko TDD-ajatuksia seuraten päästy samaan työmäärään on myös vaikea arvioida paljonko nuo löytymättömät virheet olisivat aiheuttaneet ylläpitotyötä testaaminen hyvin suoraviivaista, ojankaivuutyötä Testaukseen kannatti panostaa 12

Jatkokehitys #2 Osa uusista komponenteista toteutettutddperiaatteella yksittäisten kehittäjien vastuulla Vuoden mittaisen inkrementaalisen kehitystyön aikana on raportoitu keskimäärin yksi virhe/kompontti Virheitä muualla järjestelmässä on löytynyt kumulatiivisesti kymmeniä Miten maailmalla Chrysler ja portaaliprojekti: ensimmäisen version aikana 1 raportoitu virhe kuukaudessa toisen vuoden aikana 1 raportoitu virhe, tuolla ajanjaksolla uusi versio + useita välitoimituksia Thoughtworks kehittäjätalo, perustaa toimintansa XPmetodologiaan varovainen arvioissaan, mutta ns. huipputiimit pääsevät 1 bugi/kk tahtiin 13

TDD:n ominaisuuksia Voi olla yksittäisen kehittäjän työväline vaatimuksena on joka tapauksessa kattavat yksikkötestit, joten miksi ei sopisi? Voi myös olla projektiryhmän yhteinen menetelmä suurimmat tehonlisäykset löytyvät tästä Yhteensopiva minkä tahansa prosessin kanssa ei sinällään ota kantaa erillisen suunnitteluvaiheen tai muiden vaiheiden olemassaoloon Millainen projekti Vaatimukset ja ominaisuudet selkeitä voidaan hajoittaa osakokonaisuuksiin Teknologia-alue tuttu ei sovi prototyyppikehitykseen kovin hyvin Uusi projekti, vanhan ylläpito vain uusien ominaisuuksien osalta arkkitehtuurissa tulee ottaa huomioon testattavuus Projektin koko ei sinällään vaikuta 14

TDD ei automaattisesti takaa mitään......mutta oikeissa käsissä on hyvä mahdollisuus, että testit ovat olemassa testit ovat keskimääräistä kattavampia testit mittaavat oikeita asioita muutokset ovat hallittavissa järjestelmä on suunniteltu testattavaksi TDD pakottaa ajattelemaan testausta ja testattavuutta. testausta ei voi vain sivuuttaa TDD ei toimi ainakaan, jos... Projektiryhmä ei ole motivoitunut sen käyttöön luovuutta on vaikea pakottaa menetelmää on helppo syyttää Työkalut eivät ole ajan tasalla ei helpotusta vaikeiden asioiden testaamiseen Tavoitteista lipsutaan TDD:ssä on olennaista, että TDD-prosessia seurataan hyvin kurinalaisesti 15

Tehokkuus Optimaalisestikin onnistuneessa projektissa täytyy muistaa, että varsinaisen koodaamisen osuus kokonaisuudesta on varsin pieni lähteestä riippuen n. 20-40% Työmäärä ei välttämättä alene, mutta tavoitteena onkin parempi laatu Worst-case -skenaario Projektin loppuvaiheessa Kattavuus sallituissa rajoissa (yli 80%), mutta testit ovat rispaantuneet ja toimivat vain osittain Tekninen dokumentaatio kokonaan hajanaisten testitapausten sisällä Testien teko työlästä, jatkuvaa virittelyä Järjestelmä ei toimi, virheitä edelleen vanhaan malliin Ominaisuuksien toteutuksessa on menty siitä mistä aita on matalin, jotta testaus ei olisi liian työlästä 16

TDD Yhteenveto parhaimmillaan tarjoaa ylläpidettävyyttä, automaattiset regressiotestit ja robustisuuden ei poista prosessia hyvän kehittäjän soveltamana erinomainen menetelmä ei välttämättä jokaiseen projektiin tai tarkoitukseen TDD menetelmänä ei ole vaikea, mutta onnistunut testaaminen on edelleen haaste Itsekuri, osaaminen, motivaatio ja oikeat työkalut Lähdemateriaalia Kirjoja Test Driven Development: By Example, Kent Beck JUnit Recipes, J.B. Rainsberger Test-Driven Development in Microsoft.NET, James W. Newkirk Refactoring: Improving the Design of Existing Code, Martin Fowler Web http://testdriven.com http://c2.com/cgi/wiki?testdrivendevelopment Agile software development: www.agilealliance.com 17