(Yksikkö)testaus

Osaamistavoitteet

Kierroksen aikana opit ymmärtämään ohjelmiston toteuttajan vastuun ohjelmiston testauksessa. Testauksesta käsittelemme alkuun testaamisen perusteita ja tutustumme terminologiaan. Tämän jälkeen keskitymme toteuttajan näkökulmaan ja vastuuseen testauksessa eli yksikkötestaukseen. Lisäksi opit selittämään testauksen haasteellisuutta ja osaat luetella vallitsevia testauskäytäntöjä. Opit liittämään jatkuvan kehityksen -putki osaksi testausta.

Testaus on tiedon tuottamista ohjelmistosta ja sen laadusta päätöksentekoa varten. Testaamattoman koodin oletetaan siis olevan jollain tavoin rikkinäistä. Testaaminen ei pysty todistamaan, että ohjelmisto toimii aina oikein. Kaikkea ei myöskään mitenkään voida testata, vaan tarvitaan testaustekniikoita tuottamaan riittävä varmuus ohjelmiston laadusta.

Testaaminen ei rajoitu pelkästään ohjelmistolle määritellyn toiminnallisuuden testaamiseen. Testattavia asioita ovat:

  • toiminnalliset vaatimukset (engl. functional requirements): Vastaavat kysymykseen mitä järjestelmän tulee tehdä? Määrittelevät kehitettävän ohjelmiston toiminnallisuutta.

  • laatuvaatimukset (engl. non-functional requirements): Vastaavat kysymykseen, millainen järjestelmän tulee olla? Esim. onko se turvallinen käyttää, käytettävä, sujuva testattava, helppo ylläpidettävä

Testaamalla voidaan osoittaa, että ohjelma tekee jotain, mitä sen ei pitäisi tai vastaavasti, ettei se tee jotain, mitä sen pitäisi. Testaamalla voidaan myös havaita, että ohjelma toimii määrittelyn vastaisella tavalla. Tällöin tulee eteen myös kysymys, kumpi on väärässä, toteutus vain määrittely. Testaamisen piiriin kuuluu myös havaita, jos ohjelmisto on hankala ymmärtää, vaikeakäyttöinen, hidas tai toimii käyttäjän mielestä väärin.

Testaus ei ole ensisijaisesti sen varmistamista, että ohjelma toimii niin kuin sen pitäisi. Toimivuuden varmistaminen ei itse asiassa ole ollenkaan hyvä lähtökohta testitapausten suunnittelulle, sillä ihminen näkee helposti vain sen mitä haluaa nähdä. Tämä pätee etenkin koodiaan testaavaan ohjelmoijaan: hänhän tietää, miten ohjelman kuuluisi toimia. Testauksen tavoite onkin paljastaa virheitä koodissa. Lähtöolettamanahan oli, että ohjelmakoodi on jollain tavoin virheellistä. Testauksen päämäärä onkin löytyy ohjelmakoodissa lymyävät virheet. Onnistunut testiajo onkin siis sellainen, joka aiheuttaa häiriön ohjelman toiminnassa.

Testaus itsessään ei vielä paranna ohjelmiston laatua. Vasta virheen poistaminen koodista tekee sen. Tuottamansa tiedon avulla testaus tarjoaa mahdollisuuden myös selvittää, mistä virheet johtuvat. Kun virheiden juurisyyt on saatu selvitettyä, on saatu luotua ohjelmistokehitykseen toimintatapoja, jotka ehkäisevät osaltaan uusien virheiden syntymistä. Lisäksi voidaan paljastaa ja hallita ns. teknistä velkaa.

Testaus on siis ohjelmiston laadun mittaamista ohjelmiston kehityksen tilannekuvan seuraamiseksi ja päätöksenteon tueksi. Valitettavasti testaus ei voi osoittaa ohjelmiston virheettömyyttä eikä se myöskään sinällään paranna ohjelmiston laatua. Silti se on keskeinen osa toiminnallisuuden toteuttamista ja ohjelmistotyössä tavoitteena on saavuttaa jatkuva varmuus siitä, että mahdolliset toteutukseen päätyneet virheet myös löytyvät. Testaaminen ja ohjelmistojen laadunvarmistus on hyvin laaja aihe, jolle on oma kurssinsakin (COMP.SE.200 Ohjelmistojen testaus). Tässä keskitymme siihen osaan, joka on jokaisen ohjelmistokehittäjän työhön kuuluvaa.