INTEGROINTI- JA JÄRJESTELMÄTESTAUS

Huom! Myös yksikkötestaus on käsitelty tällä sivulla.

Yleistä

Kunnollinen testaaminen maksaa itsensä takaisin vähentyneenä ylläpidon tarpeena, vähentyneenä tarpeena käydä asiakkaan luona tekemässä jälkiasennuksia ja parempana asiakastyytyväisyytenä.

Testaamaton ohjelma ei toimi. Testaamisen jälkeen todennäköisyys, että ohjelma toimii kaikissa tilanteissa, on vain hieman parantunut.

Jos testaus paljastaa runsaasti virheitä, kannattaa moduuli tehdä kokonaan uudelleen, koska lisätestauksella ei kuitenkaan pystytä löytämään kuin vain hyvin pieni osa jäljellä olevista virheistä.

Testaamiseen katsotaan kuuluvan myös muita menetelmiä kuin varsinaisten testiajojen suorittamista: ohjelmakoodin katselmukset ja määritysten sekä muiden dokumenttien tarkastukset. Tässä kohdassa keskitytään kuitenkin testiajoihin.

Testaaminen voi kohdistua myös muihin seikkoihin kuin ohjelmiston tulosteiden oikeellisuuteen: suorituskykyyn, toimintaan epänormaaleissa tilanteissa jne.

Terminologiaa

Virheiden luokittelu

Virheitä voidaan luokitella eri perusteilla sen mukaan mihin luokittelua halutaan käyttää. Seuraavassa on eräitä luokitteluja.

Testien lajeja

Yksikkötesti: yksittäisten moduulien testaaminen heti kun ne ovat suorituskelpoisia; katettava mahdollisimman tarkkaan ohjelmakoodin eri osat.

Integrointitesti: (osa)järjestelmän testaaminen kokonaisuutena sen varmistamiseksi, että osat toimivat yhdessä täydellisenä kokonaisuutena.

Järjestelmätesti: järjestelmän testaaminen ennen sen toimittamista asiakkaalle sen varmistamiseksi, että järjestelmä on vaatimusmäärittelyn ja sopimuksen mukainen.

Hyväksymistesti: asiakkaan suorittama testi, jossa järjestelmää verrataan vaatimusmäärittelyyn. Lisätietoa vaatimusmäärittely-sivulta.

Taantumatesti (regression test): kiinteän testiaineiston läpiajaminen määräajoin sekä aina ennen integrointitestausta sen varmistamiseksi, että jo olemassaolevat piirteet eivät ole "pilaantuneet" uusien piirteiden ohjelmoimisen yhteydessä.

Asennustesti: tarkoituksena varmistua siitä, että asiakkaalle asennettu versio sisältää oikean toimitusversion oikein parametrein ja että tämä versio todella toimii.

"Beettatesti": ohjelmisto (jolla ei yleensä ole erityistä tilaajaa ja jolle ei sen takia yleensä tehdä hyväksymistestiä) annetaan joillekin käyttäjille ennakkokäyttöön:

Päälähestymistavat

Lasilaatikko (white box): testaajlla on käytettävissään ojelmakoodi (käytetään yleensä yksikkötestissä).

Musta laatikko (black box): testaaja ei tiedä mitään ohjelman rakenteesta eikä sisäisestä toiminnasta.

Musta laatikko -testaus edellyttää kunnollista (ulkoista) määrittelyä. Sitä ei saada yleensä kovin kattavaksi, joten jokaisen paljastuneen virheen kohdalla tulee tarkastaa huolellisesti sekä virheellisen kohdan ympäristö että muut samantyyppiset kohdat koko ohjelmasta.

Yksikkötesti

Yksikkötesti tehdään yleensä lasilaatikkoperiaatteella, jolloin testaaja voi myös tarkastaa ohjelmakoodin.

Ohjelmoijan itsensä pitää tehdä ohjelmakoodin läpikäynti näin:

Testitapausten suunnittelu

Lasilaatikkoperiaatetta käytettäessä täytyy huomioida eräitä testitapausten suunnittelu- eli kattavuusperiaatteita:

Mustan laatikon periaatetta käytettäessä on huomioitava seuraavat testitapausten kattavuusperiaatteet:

Testatessasi muista:

Lisäksi määritysmuutosten jälkeen on aina (suoritettava taantumatesti ja) testattava muuttuneet kohdat (esim. kun kenttä on aiemmin ollut pakollinen vaan ei ole enää jne.)

Testitapausten tallettaminen

Testimateriaalin suunnittelussa ja muodostamisessa on niin paljon työtä, että materiaalin poisheittämisessä ei ole mitään järkeä. Testimateriaali kannatta yleensä jakaa 3-6 tasoon. Esimerkiksi:

  1. alitesti: yksittäinen testiaineisto
  2. testi: kokoelma alitestejä, jotka tulee aina suorittaa yhdessä (koska esim. ensimmäisen tulos on toisen syöte)
  3. testiryhmä: kokoelma testejä, jotka testaavat samaa asiakokonaisuutta

Testimateriaali tulee tallettaa versiohallinnan alaisuuteen, koska se muuttuu versioiden muuttuessa.

Testimateriaalin tulee sisältyä syötemateriaali, odotetut tulokset, kuvaus siitä mitä moduuleita testi koskee ja missä tilanteessa se voidaan suorittaa:

Virheiden raportoiminen

Testaajan on annettava ohjelmoijalle yksityiskohtainen kuvaus virheestä ja sen havaitsemisen aikana vallinneesta tilanteesta:

Virheiden syyn etsiminen

Ohjelmakoodin analysointiohjelmat (esim. lint) paljastavat muuttujat, joille ei anneta arvoa ennen ensimmäistä käyttöä, muuttujat, joita ei käytetä, koodin osat, joihin ei koskaan jouduta jne. Näitä apuvälineitä voidaan käyttää jo ennenkuin virhe esiintyy!

Virheen voi yrittää etsiä päättelemällä, jolloin lähtökohtana on mm. mitä oireita on löydetty, mistä ne on löydetty, missä olosuhteissa ne esiintyvät ja kuinka laajasti ne vaikuttavat. Tältä pohjalta kehitetään teoria virheen alkuperälle ja suunnitelma teorian paikkansapitävyyden selvittämiselle. Sen jälkeen suunnitelma toteutetaan.

Jos päättely ei auta, niin nuku yön yli. Jos et vieläkään pääse eteenpäin, niin kuvaa ongelma jollekin toiselle henkilölle. Jos et vieläkään löydä virhettä, niin käytä suoritusaikaista jäljitysohjelmaa.

Jos et vieläkään löydä virhettä, niin tee kokeiluja, esim. tulostuslauseiden sijoittaminen koodin sekaan.

Voit kokeilla myös virheiden nappaamista ja apupinon tulostamista; tärkeimmät funktiot laittavat tiedon itsestään apupinoon toimintansa alussa ja poistavat sen lopussa.

Virheiden korjaaminen

Päivitä ensin dokumentit tarvittavilta osin (mikä voi johtaa määritysdokumenttien uudelleenkäsittelyyn). Tee seuraavaksi korjaus (ja korjaa virhe äläkä vain sen oiretta).

Testaa korjauksen ympäristö huolellisesti, koska korjaus synnyttää helposti uuden virheen. Mieti tarvitaanko uusia testitapauksia. Suorita taantumatesti asianmukaiselta osaltaan.

Testaamisen lopettaminen

Testaamisen voi lopettaa, kun testitapaukset täyttävät valitun menetelmän vaatimukset eivätkä paljasta enää virheitä tai kun löydettyjen virheiden tiheys (testitapauksia kohti) laskee alle ennalta kiinnitetyn rajan.

Tätä varten voi käyttää "virheiden kylvämistä" (error seeding): ohjelmaan laitetaan joukko tahallisia virheitä, joiden löytymisprosentti antaa karkean arvion kaikkien virheiden löytymisprosentista.

Laatutietokanta

Laatutietokantaan tulee kerätä tiedot havaituista virheistä ja niiden syistä (jotka osittain selviävät vasta korjaamisen yhteydessä) sekä tiedot tehdyistä testeistä. Laatutietokannan avulla voidaan seurata testauksen etenemistä ja poimia esiin ongelmalliset moduulit, jotka kaipaavat erikoistarkastelun ja mahdollisen uudelleenohjelmoinnin.

Ongelmamoduulien tunnusmerkkejä:

Taantumatesteistä tulee kerätä tietoa yksittäisten testitapausten paljastamien viheiden lukumäärästä ("testitapauksen saanti"), jonka pohjalta taantumatestiä voidaan kehittää edelleen.

Integrointitesti

Järjestelmän osat liitetään toisiinsa yksi kerrallaan ja joka kerta uuden osan liittymät vanhoihin osiin testataan. Yleensä käytetään mustan laatikon ja lasilaatikon yhdistelmää.

Ensimmäiseksi valmistuneet komponentit eivät välttämättä muodosta kokonaisuutta, joka toimisi sellaisenaan, vaan voidaan joutua laatimaan erityinen testiympäristö, jossa komponenttien yhteistoimintaa voidaan testata.

Integrointi voidaan tehdä ylhäältä alas tai alhaalta ylös. Integrointi voidaan myös tehdä kertarysäyksellä (big bang); menetelmä toimii kuitenkin vain silloin, kun komponenttien väliset yhteydet ovat vähäisiä ja niistä huolehtii vain muutama (hyvin testattu) funktio.

Järjestelmätesti

Tämän testin kohteena on koko järjestelmä sekä dokumentaatio ja muut ei-ohjelmistokomponentit. Kohteina ovat (vaatimusmäärittelyssä ja sopimuksessa erikseen mainittujen kohteiden lisäksi)

Järjestelmätestin on katettava kaikki edellä luetellut osa-alueet, vaikka niitä ei olisi erityisesti mainittu järjestelmän määrityksissä. Muuten näiden virheiden löytyminen tapahtuu järjestelmän varsinaisen käytön aikana, jolloin niiden korjaaminen tulee vielä kalliimmaksi.

Asennustesti

Suoritetaan jokaisen (asiakkalle tehdyn) asennuksen jälkeen. Asennustestissä on varmistuttava kahdesta asiasta:

  1. asennettu versio on oikea
  2. normaalit käyttäjät voivat käyttää järjestelmää

Testaukseen tulee kuulua

Järjestelmän on jäätävä asennustestin jälkeen siihen tilaan, että sen käyttöönotto on välittömästi mahdollista (ilman tietokannan puhdistamista tms.).

Siltä varalta, että (uutta versiota asennettaessa) asennustesti ei mene läpi, on vanhasta ohjelmistosta otettava varmuuskopio ennen asentamisen aloittamista.

Apuvälineitä

Joidenkin tutkimusten mukaan testauksen apuvälineet ovat selvästi kannattavampi sijoituskohde kuin mikään muu ohjelmistotyön apuväline. Parhaat apuvälineet ovat yritysten oman kehittelytyön tuloksia ja nämä yritykset katsovat saavansa niin suuren etumatkan muihin nähden, että ko. apuvälineet eivät ole kaupan. Valtaosa todella käytettävistä apuvälineistä on nimenomaan itse tehtyjä.

Apuvälineiden luokkia

Testaamisen suunnittelusta

Yksikkötesteille ei aina laadita testaussuunnitelmia, mutta tällöinkin on oltava käytössä yksikkötestin suoritusohje. Katso myös eräs toimiva ratkaisu.

Integrointitestille ja järjestelmätestille on laadittava testaussuunnitelma, josta on käytävä ilmi mm:

Testaussuunnitelma on tarkastettava kiinnittäen huomiota seuraaviin seikkoihin:

Integrointitestauksesta ja järjestelmätestauksesta on laadittava testausraportti, josta käy ilmi kaikki havaitut ongelmat.


Vain jäsenille: