Automaattinen yksikkötestaus

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

L models. Testisuunnitelma. Ryhmä Rajoitteiset

Ohjelmistojen mallintaminen. Luento 11, 7.12.

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

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

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

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

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

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

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

Ohjelmistotuotantoprojekti

58160 Ohjelmoinnin harjoitustyö

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

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

Test-Driven Development

Test-Driven Development

Testaussuunnitelma Labra

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

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

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

COTOOL dokumentaatio Testausdokumentit

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

Testausraportti. Oppimistavoitteiden hallintajärjestelmä harri

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

UCOT-Sovellusprojekti. Testausraportti

Convergence of messaging

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

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

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

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

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

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

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

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

T SEPA päiväkirja

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

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

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

CT60A4150 OHJELMISTOTESTAUKSEN PERUSTEET. Jussi Kasurinen Kevät 2016

Menetelmäraportti - Konfiguraationhallinta

Systemaattinen apina ja miten se tehdään fmbt:llä

SEPA päiväkirja. BetaTeam. Kauko Huuskonen, 54396W, Hannu Kankaanpää, 58605L,

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

Siimasta toteutettu keinolihas

COTOOL dokumentaatio SEPA: Refaktorointi

Ohjelmistotestaus -09

Onnistunut SAP-projekti laadunvarmistuksen keinoin

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

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

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

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

T Testiraportti - järjestelmätestaus

Harjoitustyön testaus. Juha Taina

T Testiraportti - integraatiotestaus

Laaturaportti [iteraatio 2] Ryhmä 14

17/20: Keittokirja IV

Ohjelmien testaustyökalut

T Tietojenkäsittelyopin ohjelmatyö Tietokonegrafiikka-algoritmien visualisointi Vaatimustenhallinta

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

Tutkittua tietoa. Tutkittua tietoa 1

statbeatmobile PROJECT REVIEW iteration 1

SEPA päiväkirja. BetaTeam. Juho Mäkinen, 57796V, Jari Leppä, 42710V, Versio Pvm Tekijä Kuvaus

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

Oodin versiot, havaittujen virheiden korjaus sekä kehitysehdotusten eteneminen

Kuopio Testausraportti Asiakkaat-osakokonaisuus

LAATURAPORTTI Iteraatio 1

Good Minton QA Raportti Iteraatio 1 Sulkapalloliiton Kilpailujärjestelmä

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

T Tietojenkäsittelyopin ohjelmatyö. Testisarja Ray tracing. Tietokonegrafiikka-algoritmien visualisointi. Testisarja Ray tracing

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

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

Alkukartoitus Opiskeluvalmiudet

Testauksen hallintaa teekkareille (ja muille kiinnostuneille) Arto Stenberg

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

Mahtispalautteen antaminen

T Testiraportti - integraatiotestaus

ohjelman arkkitehtuurista.

Testaaminen ohjelmiston kehitysprosessin aikana

8/20: Luokat, oliot ja APIt

Testivetoinen ohjelmistokehitys

Hirviö Laadunvarmistussuunnitelma

E-kirjan kirjoittaminen

Laadunvarmistuksen suunnitelma. Ryhmä ExtraTerrestriaLs Aureolis Oy

Hirviö Laadunvarmistussuunnitelma

Ohjelmoinnin perusteet, syksy 2006

Pariohjelmointi. Ryhmä Rajoitteiset

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Menetelmäraportti Ohjelmakoodin tarkastaminen

Ohjelmiston testaus ja laatu. Testaustasot

Opiskelija osaa suunnitella ohjelmiston toteuttamisen, toteuttaa, testata ja dokumentoida ohjelmiston.

tsoft Tarkastusmenettelyt ja katselmukset Johdanto Vesa Tenhunen

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

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaihe 3. Antti Jääskeläinen Matti Vuori

T harjoitustyö, kevät 2012

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

ELM GROUP 04. Teemu Laakso Henrik Talarmo

11/20: Konepelti auki

Ohjelmistojen suunnittelu

Transkriptio:

Teknillinen Korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Automaattinen yksikkötestaus Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset 0.1 15.01.2004 Vesa Salento Suunnitelma yksikkötestauksen toteuttamisesta projektissa. 1.0 03.04.2004 Vesa Salento Lisätty loppupäätelmät.

Sisällysluettelo 1 Johdanto... 1 2 Käyttö projektissa... 1 2.1 Ajatus... 1 2.2 Edut... 1 2.3 Haitat... 2 2.4 Tavoitteet... 2 3 Tulokset... 2 3.1 Arvioimisperusteet... 3 3.2 Mittarit... 3 4 Yhteenveto... 4

1 Johdanto Automaattisella yksikkötestauksella tarkoitetaan testausta, jossa yleensä samalla ohjelmointikielellä tehdään testitapauksia kuin millä itse testattava ohjelma on myös toteutettu. Testit tehdään sellaisiksi, että ne voidaan koska tahansa ajaa automaattisesti uudelleen ja ajon lopputuloksesta saadaan raportti, joka kertoo mitkä testit menivät läpi ja mitkä epäonnistuivat. Yksikkötestaus tarkoittaa pääasiassa hyvin pienten yksityiskohtien testausta, jossa testaus kohdistuu pääosin yhden olion tai luokan yhteen metodiin tai funktioon. Tarkoituksena ei ole testata koko järjestelmää vaan vain pienten osien toimintaa. Testit on tapana yleensä kirjoittaa joko yhdessä itse toiminnallisuuden toteutuksen kanssa tai sitten ne voidaan myös kirjoittaa jälkikäteen, mutta tehokkainta olisi kirjoittaa ne yhdessä toteutuksen kanssa. 2 Käyttö projektissa Automaattista yksikkötestausta tullaan käyttämään tässä projektissa. Pääpaino tällä on tutustuttaa koko ryhmä testaustapaan ja kerätä ryhmän jäsenten mielipiteitä ja arvioita toimintatavan toimivuudesta kuin että saada täysin kattava testikokoelma projektille. 2.1 Ajatus Yksikkötestauksen idea tulee pääosin siitä, että sen avulla voidaan toteutuksen aikana luoda testejä, jotka eräällä tavalla todistavat ohjelman toimivan oikealla tavalla. Mikäli toiminnallisuutta myöhemmin muutetaan tai laajennetaan niin ajamalla testit uudelleen voidaan havaita, että onko aiempaan toimivaan ohjelmakoodiin ilmestynyt virheitä, jotka aiheuttaisivat testien ajon epäonnistumisen. Testit muodostavat siis eräänlaisen diagnostiikka keinon, jolla voidaan varmistua järjestelmän toimivuudesta. Olettaen tietysti, että testit ovat kattavia niin testien ajamisella voidaan saada tieto järjestelmän kyvystä toimia oikealla tavalla. Todistus ei ole tietysti täysin varma, mutta on sentään parempi kuin jos ei olisi mitään keinoa arvioida toimivuutta. 2.2 Edut Yksikkötestauksen edut tulevat parhaiten esille siitä, että sen avulla voidaan kirjoittaa ohjelmakoodia, mikä toimii varmemmin ja missä on vähemmän bugeja kuin tavalliseen tapaan kirjoitetussa koodissa. Se ei tietysti mahdollista täysin virheettömän ohjelman kirjoittamista, mutta yleisesti kaikki testaaminen vähentää virheiden määriä. Toinen selkeä etu yksikkötestauksesta on se, että mikäli testit kirjoitetaan yhdessä itse toteutuksen kanssa niin tällöin testejä kirjoittaessa ohjelman rajapinnat tulevat tehtyä paljon selkeämmin. Tämä johtuu siitä, että testeistä käsin pitää käyttää toiminnallisuutta samalla tavoin kuin muut ohjelman osat joutuvat sitä käyttämään ja rajapinnan ollessa huono se on helppo korjata tässä vaiheessa kun sitä ei käytetä kymmenistä muista paikoista. Hyötyä tulee myös siitä, että kun testit on kerran tehty automaattisesti ajettaviksi niin niitä on helppo ajaa yhä uudelleen ja uudelleen. Normaalisti ohjelmoijat eivät paljon ehdi tai kykene testaamaan vanhojen ohjelmalohkojen toiminnallisuutta kun he lisäävät uutta 1

toiminnallisuutta ja siksi välillä aiemmin toimiva ohjelma voi yllättäen lakata toimimasta samalla tavalla uuden version myötä. Jos kuitenkin on olemassa yksikkötestejä, jotka testaavat toiminnallisuutta niin uudet versiot eivät niin helpolla voi rikkoa toiminnallisuutta kenenkään sitä huomaamatta. 2.3 Haitat Suurin ongelma yksikkötestauksen automatisoinnissa on siinä, että testien tekemiseen menee hyvin paljon aikaa ja tätä ei välttämättä sallita projekteissa, joissa aikataulu on tiukka. Osittain ongelma johtuu siitä, että tapa on melko uusi ja projektinhallinnasta vastaavilla ei ole käsitystä mitä hyötyä tästä testauksesta on pidemmällä aikavälillä. Nykypäivänä kun ohjelmia yritetään tehdä mahdollisimman tehokkaasti niin toimivan järjestelmän rakentaminen ei ole yhtä tärkeää kuin sen saaminen asiakkaalle mahdollisimman nopeasti ja mahdollisimman vähällä työmäärällä. On myös tietysti mahdollista, että testejä tehdään liikaa ja myös sellaiseen koodiin, jonka toimivuus tulee testattua muulla tavalla ja näin testeihin käytetystä ajasta ei olisi siinä mielessä ollenkaan hyötyä. 2.4 Tavoitteet Tämän projektin puitteissa yksikkötestauksen tavoitteet ovat seuraavat: ryhmän jäsenet saavat kuvan siitä mitä yksikkötestaus on sekä minkälainen työ testien tekeminen on ryhmän jäsenet ymmärtävät testauksen tarpeellisuuden, mutta myös kykenevät hahmottamaan tilanteet, joissa testaus ei välttämättä olisi tarpeellista kaikki ryhmän jäsenet tekevät itse jonkin verran yksikkötestejä lopputuotteelle saadaan aikaiseksi kokoelma yksikkötestejä, jotka aina suoritetaan automaattisesti jokaista julkaisuversiota kohden Tavoitteisiin on tarkoitus päästä sillä, että jokainen ryhmän jäsen saa joko itse valita ohjelmakoodin, jolle hän kirjoittaa yksikkötestejä tai sitten hänelle osoitetaan koodi jolle testit kirjoitetaan. Tämä lähestymistapa siksi, että tavan ymmärtää niin paljon nopeammin kun itse pääsee sitä käyttämään, ja toisaalta tunnin parin käyttäminen testien kirjoittamiseen ei ole liian suuri sijoitus koko projektin aikataulun puitteissa. Tarkoituksena olisi, että testejä kirjoitettaisiin pääosin siihen koodiin, jonka henkilö itse on toteuttanut, mutta tämä on vain suositus ja siksi tässä annetaan vapaampi valinta henkilöille itselleen. Tämän lisäksi automaattisesta yksikkötestauksesta vastaava henkilö kirjoittaa projektille riittävästi testejä, että järjestelmän perustoiminnallisuus voidaan testata testit ajamalla. Tarkoituksena tällä ei ole hakea ymmärrystä yksikkötestauksesta vaan enemmänkin vähentää järjestelmässä olevia bugeja ja varmentaa järjestelmän toimintaa. 3 Tulokset Tuloksia arvioidaan projektin loppupuolella sen jälkeen kun kaikki ryhmän jäsenet ovat kirjoittaneet testejä ja he voivat siten kommentoida testauskäytäntöä. Tällöin myös voidaan nähdä paremmin, että ovatko testit auttaneet virheiden paikallistamisessa tai sen 2

varmistamisessa, että järjestelmä ei ole hajonnut uutta toiminnallisuutta lisättäessä. 3.1 Arvioimisperusteet Testauksen onnistumisen arviointi tulee perustumaan käyttäjien antamaan palautteeseen toimintatavasta projektin loppupuolella. 3.2 Mittarit Arvioinnin mittarina käytettiin kyselyä, johon ryhmän muut jäsenet vastasivat sähköpostilla. Joihinkin vastauksiin pyydettiin vapaampaa vastausta, mutta pääosin kysymykset olivat monivalintakysymyksiä. Käytetyt kysymykset ja vastausten hajonta on nähtävillä seuraavasta taulukosta: Kysymys Kyllä Ei EOS 1. Oletko aiemmin tehnyt yksikkötestejä muissa projekteissa? 1 4 0 2. Oliko käsite yksikkötestaus tuttu ennen projektin alkua? 3 1 1 3. Paraniko käsityksesi yksikkötestauksessa projektin aikana? 3 1 1 4. Olisitko kaivannut selkeämpää ohjausta yksikkötestien tekemiseen kuin mitä nyt oli saatavilla? 5. Teitkö omasta mielestäsi riittävästi testejä, jotta sait hyvän käsityksen mitä niiden tekeminen vaatii? 6. Oliko sinulla testejä tehdessäsi ylivoimaisia vaikeuksia junitympäristön, API:n tms. kanssa? Mikäli oli niin tarkenna missä. 7. Auttoiko testien kirjoittaminen sinua huomaamaan yhtään bugia tässä projektissa? 8. Korjasitko yhtään bugia järjestelmässä tämän projektin aikana joka olisi huomattu yksikkötestejä ajamalla? 9. Tuliko yksikkötestejä tehdessä yhtään mieli parannella testattavien luokkien rajapintoja tai muuten refaktoroida koodia? a. Kuinka monta testiä kirjoitit kaikkiaan järjestelmään? 0 5 b. Mikäli kirjoitit testejä sekä itse kirjoittamaasi sekä toisten kirjoittaman koodin testaamiseen niin huomasitko mitään eroa näissä tapauksissa? 1 2 2 2 3 0 0 4 1 1 3 1 0 5 0 2 2 1 Ei tapahtunut c. Kuinka kauan käytit keskimäärin aikaa testien kirjoittamiseen? 0 3 tuntia I. Oliko yksikkötesteistä mielestäsi hyötyä ja jos oli niin mitä? Mikäli et nähnyt niistä olevan hyötyä niin arvioi miksi näin oli. II. Olisiko sinun mielestäsi yksikkötestejä pitänyt olla enemmän ja jos olisi niin miksi? III. Olisitko itse tehnyt yksikkötestausta eri tavalla? Mikäli olisit niin selitä miten. IV. Oliko mielestäsi yksikkötestauksesta tässä projektissa mitään hyötyä vai oliko se pelkkää ajanhukkaa? Perustele. 3

4 Yhteenveto Ryhmän jäsenten vastausten perusteella nähdään, että yksikkötestauksella ei tässä projektissa hyödytty hirveästi bugien löytämisen suhteen. Tämä ei ole ollenkaan yllättävää, sillä yksikkötestaus on parhaimmillaan diagnostinen työkalu, jolla voidaan myöhemmin varmistaa perustoiminnallisuuden toimivan muutosten jälkeen. Kuitenkin moni ryhmän jäsen ei ollut aiemmin tehnyt yksikkötestausta ja heidän käsityksensä parani projektin aikana mikä olikin yksi tavoitteista. Kaiken kaikkiaan palautteen mukaan tuli selkeä kuva siitä, että hyödyt yksikkötestauksesta jäi melko vähäiseksi, mutta ei niihin käytetty kuitenkaan niin hirveästi aikaa, että tätä voitaisiin pitää täysin turhana. Alkuperäisistä tavoitteista saavutettiin kaikki muut, mutta täysin kattavaa yksikkötestien kokoelmaa ei saatu aikaiseksi projektille. Tämä oli osittain oletettavissa, sillä testien tekemiseen olisi kulunut huomattavasti enemmän aikaa kuin mitä projektin puitteissa oli mahdollista käyttää. 4