Test-Driven Development

Samankaltaiset tiedostot
Test-Driven Development

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

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

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

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

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

Ohjelmistojen mallintaminen. Luento 11, 7.12.

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

Ohjelmien testaustyökalut

58160 Ohjelmoinnin harjoitustyö

Eclipse ja JUnit-ohjelmoijatestit

JUnit ja EasyMock (TilaustenKäsittely)

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Automaattinen yksikkötestaus

Ohjelmoinnin perusteet, syksy 2006

8/20: Luokat, oliot ja APIt

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

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

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

Interaktiivinen tarinankerronta

Testivetoinen ohjelmistokehitys

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

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

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

Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Harjoitustyön testaus. Juha Taina

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

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

Ohjelmoinnin perusteet Y Python

1 Tehtävän kuvaus ja analysointi

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

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ohjelmoinnin jatkokurssi, kurssikoe

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi.

Ohjelmistojen testaus ja hallinta. Gradle

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

5. HelloWorld-ohjelma 5.1

Luokat ja oliot. Ville Sundberg

Ohjelmointi Tunnilla 1 (5) Viikko 7 tuntitehtäviä: metodien tekeminen Javalla

UCOT-Sovellusprojekti. Testausraportti

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

1. Olio-ohjelmointi 1.1

Ohjelmointi 2 / 2011 Välikoe / 25.3

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Ohjelmoinnin perusteet Y Python

Eclipse 3.2 pikku opas versio 1.0. Esittely Uuden projektin perustaminen Sovelluksen luominen Koodin siistiminen Vinkkejä

4. Luokan testaus ja käyttö olion kautta 4.1

Ryhmäharjoitus III: Mitä on koodaaminen? A. TIEY4 Tietotekniikkataidot, kevät 2017 Tehdään ryhmäharjoitustunnilla 20.3.

15. Ohjelmoinnin tekniikkaa 15.1

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 1: Yleisinfo ja vaiheet 1 & 2. Antti Jääskeläinen Matti Vuori

Java kahdessa tunnissa. Jyry Suvilehto

statbeatmobile PROJECT REVIEW iteration 1

Javan perusteita. Janne Käki

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmoinnin perusteet Y Python

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

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Tutkittua tietoa. Tutkittua tietoa 1

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

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

Sähköpostimarkkinointi Spämmistä liidikoneeksi

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

Ohjelmistotuotantoprojekti

Good Minton QA Raportti Iteraatio 1 Sulkapalloliiton Kilpailujärjestelmä

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

MITÄ JAVASCRIPT ON?...3

Alkukartoitus Opiskeluvalmiudet

Lakki. Lisää ot sik k o osoit t am alla. Nöyrästi vain lakki kourassa... Jussi Vänskä Espotel Oy. vierailuluentosarja OTM kurssi 2010

Liikennevalot. Arduino toimii laitteen aivoina. Arduinokortti on kuin pieni tietokone, johon voit ohjelmoida toimintoja.

Good Minton Sulkapalloliiton Kilpailujärjestelmä SEPA: Heuristinen arviointi

Testaussuunnitelma Labra

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

KADA (Drupal 7) migraatio uuteen (versioon) webiin

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

Määrittelydokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

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

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

2 Konekieli, aliohjelmat, keskeytykset

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 1: Yleisinfo ja vaiheet 1 & 2. Antti Jääskeläinen Matti Vuori

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

7. Näytölle tulostaminen 7.1

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmointi 2, välikoe

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

P e d a c o d e ohjelmointikoulutus verkossa

Transkriptio:

Test-Driven Development Syksy 2006 Jyväskylän yliopisto Test-Driven Development Testilähtöinen ohjelmistojen kehitystapa. Tehdään ensin testi, sitten vasta koodi. Tarkoituksena ei ole keksiä kaikkia mahdollisia tapoja löytää virheitä, vaan suunnitella ja toteuttaa vaatimukset täyttävä ohjelma. TDD ei ole testausta, vaan kehitystä!

Testi! Testi Testilähtöisessä ohjelmoinnissa testien avulla suunnitellaan ohjelma. Ensin tehdään testi, sitten vasta ohjelma. Toimitaan valmiiden vaatimusten mukaan, eikä koeteta keksiä uusia samalla. Testi! Testi Yksikkötestauksessa varmistetaan ohjelman toiminta. Testi tehdään ohjelman jälkeen. Kaikki poikkeukset ja erikoisuudet koetetaan löytää ja testata.

Mitä saavutetaan Tulos 1: Voidaan olla varmoja siitä, että ohjelma toimii (testien mukaan). Tulos 2: Saadaan esimerkkejä ohjelman rajapintojen käytöstä. Tulos 3: Ohjelma on ylläpidettävämpi ja testattavampi. Historia Lähtöisin samasta sylttytehtaasta kuin XP (= Extreme Programming), ja Smalltalkista. (Eli Ward Cunninghamilta). Mitkään XP:n käytännöt eivät ole uusia (paitsi "tehdään kaikki 110%"), ei tämäkään. Nykyään: xunit työkalut useille kielille. Muita nimiä: yksikkötestaus, ohjelmoijatestaus.

TDD säännöt Älä kirjoita riviäkään uutta koodia, ennen kuin sinulla on sille epäonnistuva testi kirjoitettuna. Poista monikerrat. Sääntöjen seuraukset Suunnittelu on interaktiivista. Ajettava ohjelma antaa palautteen, jonka mukaan edetään. Teet itse testisi, sillä ei ole aikaa odottaa toisten kirjoittavan niitä. Kehitysympäristön on annettava nopea palaute muutoksista. Suunniteltava korkean koheesion ja löyhän kytkennän komponentteja, jotka ovat siten testattavia.

TDD Vaiheet 1. RED Kirjoita testi. Aja testi, eikä se mene läpi. 2. GREEN Muuta tai tuota ohjelmaa niin kauan, että testin ajo menee läpi. 3. REFACTOR Siivoa koodi (eli uudelleenrakenna se). Toista ylläolevia, kunnes ohjelma on valmis. Muita seurauksia Laatuosasto (QA) voi tehdä työnsä proaktiivisesti, eikä reaktiivisesti. Paremmat arviot, vähemmän yllätyksiä. Kommunikointi kehittäjien välillä helpompaa ja nopeampaa (aina toimiva koodi esillä). Uusi versio uusin ominaisuuksin tarjolla asiakkaalle joka päivä.

Miksi näin ei tehdä? "Tämä on tyhmää ja hidastaa kehitystä!" "Tämä estää ajattelun / suunnittelun!" "Tämä rikkoo mun flown!" Taustalla pelko: "Tämä on liian hankala ominaisuus, enkä tiedä mistä aloittaa!" Pelko Seurauksena epävarmuus, kommunikoimattomuus, ujous ja äreys, kun pitäisi opetella, kommunikoida, hakea rohkeasti apua. TDD auttaa, se antaa varmuuden siitä, että se mitä on tehty toimii.

Kuinka alkuun? Aloita nyt heti, ei kohta tai huomenna. Jos et voi aloittaa puhtaalta pöydältä, ala tekemään testejä bugikorjauksille ja uusille ominaisuuksille. Joitain asioita on hankalaa testata (GUI, DB), tai erittäin hankalaa testata (salaus, samanaikaisuus). Tekemällä oppii! (Harjoitteluun esim. katat.) Bob-sedän neuvoja Bob-setä on "Uncle Bob", eli Robert Martin. Kymmenen minuuttia testiajojen välillä on liian pitkä aika. Emme korjaa sotkuista koodia, koska pelkäämme rikkovamme jotain. Testilähtöisyys osoittaa heti, jos jotain rikkoontuu. (Toimivaa ohjelmaa on eri ikävä testata.)

TDD Vaiheet 1. RED Kirjoita testi. Aja testi, eikä se mene läpi. 2. GREEN Muuta tai tuota ohjelmaa niin kauan, että testin ajo menee läpi. 3. REFACTOR Siivoa koodi (eli uudelleenrakenna se). Toista ylläolevia, kunnes ohjelma on valmis. Kirjoita testi Kirjoita testi selkeästi. Kirjoita se, kuten kirjoittaisit esimerkkiä (testattavan) ominaisuuden käytöstä. UB: Kirjoita vain sen verran, että testi ei mene läpi.

Muokkaa, kunnes toimii Yksinkertaisin koodi, millä testi toteutuu! Älä pelkää tyhmiä ratkaisuja tai järjetöntä koodia. Koodin on oltava yksinkertaista. Liian hienoa kikkailua tulee välttää. UB: Älä kirjoita mitään, mille ei ole testiä. UB: Kirjoita vain sen verran, että testi menee läpi. Siivoa ohjelmakoodi Poista turhat kikkailut ja tuplakoodi. Tuplakoodin huomaaminen voi olla hankalaa. Siisti myös testit!

Variaatio Kirjoitetaan yksi rivi testistä. Ajetaan testi, muokataan koodia, kunnes testi menee läpi. Kirjoitetaan seuraava rivi testistä.... toistetaan, kunnes valmis. JUnit = Java + TDD Jos JUnitia ei löydy kehitysympäristöstäsi, vaihda kehitysympäristöä. Luokasta junit.framework.testcase periytetään omat testiluokat. Nimeksi jotain Test-alkuista, vaikka TestJäsen. Java 1.5:ssä hieman hienompi toteutus. (HT)

JUnit testit Testit test-alkuisiin, julkisiin ja arvoa palauttamattomiin metodeihin, esim. public void testlisääjäsen() { /* */ } Testaus TestCase-luokan assert-metodeilla, esim. assertequals("aku", jäsen.etunimi()); JUnit testin ajo Testien ajo palauttaa vihreän palkin, jos testit menivät läpi. Jos eivät, tulee punainen palkki ja virheilmoitus, joka kertoo virheen paikan. Assert-metodeille voi myös antaa kolmantena parametrina merkkijonon, joka selittää testin. Se tulostetaan virheilmoituksen yhteydessä.

JUnit apuja Jokainen test-alkuinen metodi suoritetaan erikseen. Metodi setup suoritetaan ennen jokaista test-alkuisen metodin ajoa. Metodi teardown suoritetaan jokaisen testalkuisen metodin ajon jälkeen. Konstruktori suoritetaan vain kerran. Lyhyesti Testi ensin, sitten koodi. Muista siivota. Testilähtöinen kehitys ei ole sama asia kuin perinteinen V-mallin yksikkötestaus. Kehitetään, ei etsitä virheitä. Edustava ote testeistä riittää. "Eat your own dog food!"

Linkit JUnit & TDD: http://www.junit.org/ Bob-sedän pakinoita: http://butunclebob.com/ ArticleS.UncleBob.TheThreeRulesOfTdd Viikkotehtävä Keilailu-kata: http://butunclebob.com/ ArticleS.UncleBob.TheBowlingGameKata 1. Tee keilailukata. 2.Tee keilailukata. 3.Tee keilailukata. 4.Tee keilailukata. 5.Tee keilailukata. Voit myös heti aluksi tehdä tehtävät jollain sinulle uudella ohjelmointikielellä! 6.Bonustehtävä: Toista edelliset tehtävät jollain toisella ohjelmointikielellä.