Hirviö Laadunvarmistussuunnitelma Jani Heikkinen Anssi Kalliolahti Jukka Larja Kim Nylund Liia Sarjakoski Samuli Sorvakko Timo Toivanen 8. helmikuuta 2005 1
Sisältö 1 Johdanto 3 1.1 Testauksen tavoitteet ja laajuus.......................... 3 1.1.1 Implementaatiokierros 1.......................... 3 1.1.2 Implementaatiokierros 2.......................... 3 1.2 Viittaukset muihin dokumentteihin........................ 3 2 Testauksen kohde 3 2.1 Testattavat ominaisuudet............................. 4 2.1.1 Implementaatiokierros 1.......................... 4 2.1.2 Implementaatiokierros 2.......................... 4 2.2 Ominaisuudet joita ei testata........................... 5 2.2.1 Implementaatiokierros 1.......................... 5 2.2.2 Implementaatiokierros 2.......................... 5 3 Testauslähestymistavat 6 3.1 Testausmenetelmät................................. 6 3.1.1 Yksikkötestaus............................... 6 3.1.2 Integraatiotestaus............................. 6 3.1.3 Systeemitestaus............................... 6 3.1.4 Hyväksymistestaus............................. 6 3.1.5 Regressiotestaus.............................. 6 3.1.6 Katselmoinnit................................ 7 3.1.7 Käyttöliittymän heuristinen arviointi................... 7 3.2 Testaustyökalut................................... 7 3.3 Testitapausten hallinta ja dokumentointi..................... 7 3.4 Vikojen hallinta ja dokumentointi......................... 7 3.5 Etenemisen seuranta ja mittarit.......................... 8 3.6 Testidata ja aineistot................................ 8 3.7 Testien läpäisy- ja hylkäyskriteerit........................ 8 3.8 Testauksen keskeytys- ja uudelleenaloituskriteerit................ 8 3.9 Testauksen lopetuskriteerit............................ 8 4 Resurssit 9 4.1 Vastuut ja henkilöstö................................ 9 4.2 Testausympäristö.................................. 9 5 Tehtävät ja aikataulu 9 5.1 Testaustehtävät................................... 9 5.1.1 Implementaatiokierros 1.......................... 9 5.1.2 Implementaatiokierros 2.......................... 9 5.2 Aikataulu...................................... 10 5.3 Tuotokset...................................... 10 2
Versio Päivämäärä Tekijä Versio 0.5 5.11.2004 Kalliolahti Ensimmäinen versio 1.0 30.11.2004 Kalliolahti I1-päätteeksi palautettu versio 1.1 11.1.2005 Kalliolahti I2-vaiheen suunnitelma lisätty 1.2 8.2.2005 Kalliolahti I2-vaiheen päätteeksi palautettu versio 1 Johdanto Tässä laadunvarmistussuunnitelmassa kuvataan testaus- ja laadunvalvontamenetelmät, joita käytetään Hirviö-järjestelmän kehityksessä. Jokaiselle implementaatiokierrokselle eritellään järjestelmän testattavat ominaisuudet, resurssit, testauksen tavoitteet sekä tehtävät ja aikataulut. 1.1 Testauksen tavoitteet ja laajuus Testauksen tavoitteena on jokaisella kierroksella taata asiakkaalle toimitettavan järjestelmän ja vaatimusten vastaavuus, löytää ja ratkaista kriittiset ongelmat sekä varmistaa testaus- ja muiden laatukriteerien täyttyminen. 1.1.1 Implementaatiokierros 1 Implementaatiokierroksella 1 laadunvarmistuksen ensisijaisena tavoitteena on varmistaa riittävä luotettavuus, tietoturva ja suorituskyky sovelluksen perusarkkitehtuurille ja alustalle. Toissijainen tavoite on varmistaa riittävä toimivuus niille järjestelmän osille, jotka näkyvät käyttäjille. Tämän lisäksi implementaatiokierroksella 1 on tarkoitus kartoittaa ryhmän yleinen osaamistaso virheiden tuottamisen ja niiden löytämisen kannalta. Tästä saatavaa tietoa käytetään mittareiden tarkentamiseen myöhemmillä kierroksilla. 1.1.2 Implementaatiokierros 2 Implementaatiokierroksella 2 testausaktiviteetit painottuvat järjestelmätestaukseen ja dokumenttien katselmointiin. Kierroksella ei suoriteta erillistä integraatiota, jolloin varsinainen intergraatiotestausvaihe sivuutetaan. Kierroksen tavoitteena on varmistaa Hirviölle riittävä laatu siten, että se voidaan luovuttaa kierroksen päätyttyä asiakkaalle testattavaksi (eli asiakas voi aloittaa kaikkien implementoitujen vaatimusten hyväksymistestauksen) ja että se voidaan luovuttaa vertaistestausryhmälle testattavaksi. 1.2 Viittaukset muihin dokumentteihin Projektisuunnitelma - Projektisuunnitelmassa on kuvattu projektin eri osapuolet, resurssit ja aikataulut. Vaatimusmäärittely - Vaatimusmäärittelyssä on kuvattu järjestelmän vaatimukset, joihin testaus tulee perustumaan. 2 Testauksen kohde Testauksen kohteena on Hirviö-järjestelmä ja siihen liittyvä dokumentaatio. Jokaisella kierroksella kohteena on toteutettu järjestelmän osa-alue ja sitä vastaava dokumentaatio. 3
2.1 Testattavat ominaisuudet Jokaisen kierroksen testattavat asiat on listattuna alla. Testausprioriteetti on merkitty listoihin testattavan asian jälkeen asteikolla 1-3. 2.1.1 Implementaatiokierros 1 Implementaatiokierroksella 1 testataan katselmoimalla seuraavat iteraatiosuunnitelmassa mainitut dokumentit: Päivitetty vaatimusmäärittely (2) Arkkitehtuurikuvaus (1) Testaussuunnitelma (1) Implementaatiokierroksella 1 testataan myöhemmin dokumentissa mainituilla tavoilla seuraavat iteraatiosuunnitelmassa toteuttettavaksi merkityt järjestelmän osa-alueet: Tietokanta-moduli (1) AAA-moduli (1) Sisään- ja uloskirjautuminen (1) Yksinkertaisen muistiinpanon kirjaus (1) Työryhmän muistiinpanojen katselu (2) 2.1.2 Implementaatiokierros 2 Implementaatiokierroksella 2 testataan katselmoimalla seuraavat iteraatiosuunnitelmassa mainitut dokumentit: Päivitetty vaatimusmäärittely (1) Käyttöohjeen ensiversio (1) Päivitetty arkkitehtuurikuvaus (2) Päivitetty tietokantarakenne (3) Implementaatiokierroksella 2 testataan myöhemmin dokumentissa mainituilla tavoilla seuraavat iteraatiosuunnitelmassa toteutettavaksi merkittyjen vaatimusten implementaatiot: Opiskelijakohtaisten muistiinpanojen tallennus (F1) (1) Hakujen tekeminen (F2) (1) Opiskelijan tietojen tallentaminen (F3) (1) Tiedostojen tallennus (F4) (2) Diplomitöiden seuraaminen (F5) (1) Raportit (F8) (2) Edellämainittujen lisäksi implementaatiokierroksella 2 testataan myös käyttöliittymän käytettävyyttä. 4
2.2 Ominaisuudet joita ei testata 2.2.1 Implementaatiokierros 1 Implementaatiokierroksella 1 ei testata seuraavaa järjestelmään liittyvää dokumentointia: Päivitetty projektisuunnitelma. Tilannekatsaus. Testiraportti. Kaikki yllä listatut dokumentit jätetään testaamatta, koska niitä tai niiden päivityksiä ei katsota merkittäviksi Hirviön laatutekijöiden kannalta. Implementaatiokierroksella 1 ei testata seuraavia järjestelmään toteutettavia osa-alueita. Tietokantarakenne. Testioraakkelia on vaikea määritellä, koska mitään tietokantarakennetta hyödyntävää, ja samalla testausta helpottavaa, toiminnallisuutta ei toteuteta implementaatiokierroksella 1. Testaaminen jätetään myöhemmille kierroksille. Käyttöliittymä. Käyttöliittymästä puuttuu lähes kaikki ydintoiminnallisuus, joten sen testaaminen siirretään myöhemmille kierroksille. 2.2.2 Implementaatiokierros 2 Implementaatiokierroksella 2 ei testata seuraavaa järjestelmään liittyvää dokumentointia: Päivitetty projektisuunnitelma Päivitetty testaussuunnitelma Testiraportti Päivitetty tietoturvakuvaus Tilannekatsaus Kaikki yllä listatut dokumentit jätetään testaamatta, koska niitä tai niiden päivityksiä ei katsota merkittäviksi Hirviön laatutekijöiden kannalta. Implementaatiokierroksella 2 ei testata seuraavia järjestelmään toteutettavia osa-alueita: Ylläpitotyökalu (F7) Varmuuskopiointi (F10) Yllä mainitut ominaisuudet eivät vaikuta suoraan Hirviön normaalin käyttäjän toimiin, joihin kierroksen testausresurssit on tarkoitus keskittää. Ne jätetään testattaviksi viimeiselle kierrokselle. 5
3 Testauslähestymistavat 3.1 Testausmenetelmät 3.1.1 Yksikkötestaus Kaikki järjestelmät modulit, poislukien käyttöliittymäkomponentit, yksikkötestataan. Yksikkötestaus toteutetaan käyttäen PHPUnit- alustaa. PHPUnit mahdollistaa testien suorittamisen automatisoinnin sekä antaa pohjan regressio- ja integraatiotestaukselle. Jokainen ohjelmoija on itse vastuussa toteuttamiensa modulien yksikkötestien luomisesta. Toteutettavalle toiminnallisuudelle luodaan ensin testi ja vasta tämän jälkeen vastaava toiminnallisuus (Test-driven developement). Tällä tavoin voidaan varmistua siitä, että yksikkötestit toteutetaan jokaiselle modulille. Vaihtoehtoinen tapa, jossa yksikkötestauksen tekee eri henkilö kuin toteuttaja, vaatisi ylimääräistä organisointia. 3.1.2 Integraatiotestaus Yksittäiset modulit integroidaan suuremmiksi kokonaisuuksiksi kun ne ovat valmiita ja niitä on yksikkötestattu riittävästi. Järjestelmä integroidaan klusteripohjaisesti (object cluster), jolloin lopputuloksena on testattuja, toiminnallisia kokonaisuuksia, joilla ei ole suuria keskinäisiä riippuvuuksia. Yksikkötestauksen yhteydessä luotuja automaattisia testejä hyödynnetään soveltuvin osin integraatiotestauksessa. Ylimmän tason integroinnin ja integraatiotestaamisen suorittavat arkkitehtuurista vastaavat henkilöt, koska heillä on paras tietämys odotetusta toiminnallisuudesta. Ylimmän tason integroinnilla tarkoitetaan toimitettavan järjestelmän kokoamista ensimmäisellä implementaatiokierroksella, sekä testattujen klustereiden liittämistä järjestelmään myöhemmillä kierroksilla. 3.1.3 Systeemitestaus Jokaisen implementaatiokierroksen loppuvaiheessa suoritetaan systeemitestausta asiakkaalle toimitettavalle järjestelmän osalle. Systeemitestaus käsittää pääasiassa toiminnallista testausta ja tietoturvan testausta. Toiminnallinen testaus tehdään asiakkaan asettamien toiminnallisten vaatimusten perusteella, jotka on kirjattu vaatimusmäärittelyyn. Testaus tehdään käsin ennalta määrättyjen testitapausten mukaisesti. Testitapaukset pohjautuvat vaatimusmäärittelyn käyttötapauksiin. 3.1.4 Hyväksymistestaus Viimeistelykierroksella järjestelmälle suoritetaan hyväksymistestaus yhdessä asiakkaan kanssa. Hyväksymistestaus suoritetaan, kun systeemitestauksessa löydetyt virheet on korjattu ja testaus on niiltä osin suoritettu uudelleen. 3.1.5 Regressiotestaus Kun testattua järjestelmän osaa korjataan tai muutetaan, suoritetaan muutosten jälkeen regressiotestausta. Regressiotestaus käsittää vähintään kaikkien yksikkötestien automaattisen uudelleensuorituksen. Järjestelmälle voidaan suorittaa myös muita testejä yksikkötestien lisäksi laatuvastaavan harkinnan perusteella. 6
3.1.6 Katselmoinnit Tärkeimmät dokumentit katselmoidaan ennen palautusta. Katselmoinnissa on tarkoituksena löytää dokumentin puutteet asetettujen vaatimusten osalta ja ristiriidat muiden dokumenttien kanssa. Katselmoitavat dokumentit lähetetään ennen tilaisuutta katselmoijille, jotka lukevat ne läpi ja tekevät listan havaitsemistaan epäkohdista. Katselmoinneissa ei ole tarkoitus puuttua mielipiteillä enää varsinaiseen asiasisältöön, ellei kyseessä ole yksimielisesti selkeä virhe. 3.1.7 Käyttöliittymän heuristinen arviointi Toteutettu käyttöliittymä arvioidaan heuristisesti kummankin iteraatiovaiheen lopussa. Tarkemmat menetelmät on eritelty aiheeseen liittyvässä SEPA-päiväkirjassa. 3.2 Testaustyökalut Testauksessa käytetään seuraavia työkaluja: PHPUnit - Yksikkötestausalusta testien automatisointiin PHP-ohjelmointikielelle. PH- PUnit on vastine JUnitille, joka on niinsanottu de facto -standardi yksikkötestaukseen Javalla. HTTPUnit - Toiminnallisen testauksen automatisointiin. Vaikka toiminnallinen testaus tehdään pääasiassa manuaalisesti, voi HTTPUnittia käyttää sen tukena. 3.3 Testitapausten hallinta ja dokumentointi Kaikki testitapaukset dokumentoidaan priorisoituihin testijaksoihin. Priorisointi tehdään asiakkaan vaatimusten priorisoinnin perusteella. Toiminnalliset testitapaukset liitetään vaatimusmäärittelyn käyttötapauksiin, ei-toiminnalliset testitapaukset vaatimuksiin. Testitapaukset suunnitellaan siten, että ne olisivat valmiita hiukan ennen testattavaa toiminnallisuutta. Tällöin testitapaukset pohjautuvat täysin samoihin määrityksiin kuin itse toiminnallisuus. 3.4 Vikojen hallinta ja dokumentointi Kaikki integraatio-, systeemi-, hyväksymis- ja regressiotestaustauksessa havaitut viat kirjataan Bugzilla -järjestelmään. Kaikki yksikkötestauksessa havaitut viat joita ei korjata heti, kirjataan Bugzilla -järjestelmään. Yksikään versionhallintajärjestelmässä oleva revisio ei saa sisältää dokumentoimattomia ja havaittuja vikoja. Havaituista vioista kirjataan seuraavat tiedot: Vian yksilöivä tunniste Vian kuvaus Niiden toimintojen kulun kuvaus, joilla vika saadaan aiheuttettua uudelleen Vakavuusaste Ympäristön kuvaus Vian aiheuttama tulos ja varsinainen odotettu tulos Viat luokitellaan kolmeen vakavuusluokkaan, jotka on pyritty määrittelemään mahdollisimman yksiselitteisesti vian aiheuttaman seuraamuksen perusteella: 7
Kriittinen vika - Vika, joka estää testattavan toiminnallisuuden käytön tai aiheuttaa kriittiseksi tai merkittäväksi luokiteltavia sivuvaikutuksia. Merkittävä vika - Vika, joka estää ajoittain testattavan toiminnallisuuden käytön, vaikettaa sitä tai aiheuttaa vähäisiä sivuvaikutuksia. Vähäinen vika - Vika ei estä toiminnallisuuden käyttöä eikä aiheuta sivuvaikutuksia. 3.5 Etenemisen seuranta ja mittarit Yksikkötestauksen etenemistä seurataan kun vastuullinen ohjelmoija luovuttaa toteuttamansa modulin integroimisvalmiina. Mikäli yksikkötestausta ei katsota tarpeeksi kattavaksi, moduli palautetaan toteuttajalleen testattavaksi. Yksikkötestausta seuratessa arvioidaan testien kattavuus priorisoinnin suhteen. Testien tulee kattaa syötteen tärkeimmät ekvivalenssiluokat ja raja-arvot siten, että jokaista positiivista testiä vastaa 3-5 negatiivista testiä. Integraatio- ja systeemitestauksessa löydetyistä vioista tuotetaan vikaraportteja. Näissä testausvaiheissa mittarina käytetään löydettyjen vikojen ja suoritettujen testien suhdetta. Vertailukohtana käytetään edellisten kierrosten aikana saatuja tuloksia. 3.6 Testidata ja aineistot Integraatio- ja järjestelmätestauksessa Hirviön tietokanta alustetaan määrätyllä testiaineistolla, jota täydennetään jokaisella iteraatiolla siten että se kattaa kierroksella toteutetut ja testattavat ominaisuudet. 3.7 Testien läpäisy- ja hylkäyskriteerit Testi on hylätty, jos se paljastaa vähintään yhden kriittisen vian. Testi on hylätty myös, mikäli se paljastaa vähintään yhden laillisella syötteellä aikaansaadun merkittävän vian. Muussa tapauksessa testi on läpäisty. 3.8 Testauksen keskeytys- ja uudelleenaloituskriteerit Testaus on keskeytettävä, mikäli testattavana on tietokantariippuvainen järjestelmän osa, ja testauksessa käytettävä tietokanta korruptoituu jonkin muun tekijän, kuin testin itsensä vuoksi. Testaus aloitetaan uudelleen, kun tietokanta on eheytetty. 3.9 Testauksen lopetuskriteerit Testausta ei voida lopettaa, jos testattavasta järjestelmästä paljastuu kriittisiä vikoja tai jos järjestelmästä paljastuu positiivisillä testeillä vähintään merkittäviä vikoja. Testaus voidaan lopettaa, jos testattavasta järjestelmästä ei löydetä vähintään merkittäviä vikoja yli kymmenellä testillä testattavaa ominaisuutta kohden. Ei-toivotussa tapauksessa testaus lopetetaan, kun sille asetetut resurssit ja aikarajat ylittyvät. 8
4 Resurssit 4.1 Vastuut ja henkilöstö Moduleiden yksikkötestauksesta ovat vastuussa niiden tekijät. Vastuut jokaisella iteraatiokierroksella on määritelty kyseisen iteraation iteraatiosuunnitelmassa. Matalan tason integroinnin ja integrointitestauksen tekevät integroitavista moduleista vastanneet henkilöt. Korkean tason integrointitestauksesta ovat vastuussa arkkitehtuurista vastaavat Liia Sarjakoski ja Anssi Kalliolahti. Laatuvastaavana toimii Anssi Kalliolahti, joka vastaa testauksen suunnittelusta, seurannasta ja raportoinnista projektipäällikölle. 4.2 Testausympäristö Kehitysympäristö toimii myös palvelinpään testiympäristönä. Implementaatiokierroksella 1 ei ole vielä tarvetta kiinnittää huomiota asiakaspään testiympäristöön. Implementaatiokierroksella 2 käyttöliittymän toimivuus testataan myöhemmin kierroksella asiakkaalta saatavien selainvaatimusten perusteella. 5 Tehtävät ja aikataulu 5.1 Testaustehtävät Taulukon sarake vastuut tarkoittaa vastuuta systeemitestauksesta, jos kyse ei ole dokumentista. Yksikkö- ja integraatiotestausvastuu määräytyy iteraatiosuunnitelman mukaan edellä mainitulla tavalla. 5.1.1 Implementaatiokierros 1 # Tehtävä Vastuut 1 Päivitetty vaatimusmäärittely (katselmointi) Anssi Kalliolahti, Liia Sarjakoski, Jani Heikkinen 2 Arkkitehtuurikuvaus (katselmointi) Timo Toivanen, Jukka Larja 3 Testaussuunnitelma (katselmointi) Samuli Sorvakko, Jukka Larja 4 Tietokanta-moduli Jukka Larja, Jani Heikkinen 5 Sisään- ja uloskirjautuminen Anssi Kalliolahti 6 Yksinkertaisen muistiinpanon kirjaus Samuli Sorvakko 7 Työryhmän muistiinpanojen katselu Timo Toivanen 5.1.2 Implementaatiokierros 2 # Tehtävä Vastuut 1 Päivitetty vaatimusmäärittely (katselmoint) Liia Sarjakoski, Samuli Sorvakko 2 Käyttöohjeen ensiversio (katselmointi) Anssi Kalliolahti, Timo Toivanen 3 Päivitetty arkkitehtuurikuvaus Jani Heikkinen, Kim Nylund 4 Opiskelijakohtaisten muistiinpanojen tallennus Kim Nylund 5 Hakujen tekeminen Anssi Kalliolahti 6 Opiskelijan tietojen tallentaminen Jani Heikkinen 7 Tiedostojen tallennus Timo Toivanen 8 Diplomitöiden seuraaminen Samuli Sorvakko 9 Raportit (F8) Jukka Larja 10 Päivitetty tietokantarakenne (Katselmointi) Timo Toivanen, Jani Heikkinen 9
5.2 Aikataulu Testausaikataulu on aina suhteellinen, riippuen projektin yleisestä aikataulusta sekä mahdollisista liukumista. Yksikkö- ja osa integrointitesteistä on automatisoitu, jolloin niitä voidaan ajaa määrätyin väliajoin jatkuvan regressiotestauksen muodossa. Integraatio- ja systeemitestaukseen liittyvät testitapaukset pyritään luomaan samanaikaisesti ominaisuuden implementoinnin kanssa, jolloin ne ovat heti itse ominaisuuden valmistuttua valmiina. Implementaatiokierrosten 1 ja 2 järjestelmätestauksen aikataulu on määritelty iteraatiosuunnitelmassa. 5.3 Tuotokset Testaussuunnitelma - Tätä testaussuunnitelmaa päivitetään jokaisella kierroksella vastaamaan suunniteltuja laadunvarmistustoimenpiteitä. Testitapaukset - Systeemitestauksen tueksi tuotetaan joukko testitapauksia, joiden pohjalta testaus suoritetaan. Testitapaukset ovat käyttötapauksiin pohjautuvia, kevyitä ohjeistuksia testattavan toiminnallisuuden testaamiseen. Testiloki - Jokaisella implementaatiokierroksella systeemitestauksen aikana suoritettujen testitapausten tulokset kirjataan testilokiin. Testausraportti - Jokaisen implementaatiokierroksen päätteeksi kirjoitetaan testausraportti, joka tiivistää kierroksella tehdyn testauksen ja sen tulokset. Tiivistelmä vikaraporteista - Projektin lopuksi tuotetaan tiivistelmä kaikista projektin aikana dokumentoiduista vioista. 10