Bugien metsästys kannattaa
Nykyään tärkeä osa ohjelmistokehityksen elinkaarta on ohjelmistojen testaus. Kun ohjelmistot ja järjestelmät monimutkaistuvat ja niitä integroidaan muihin ohjelmistoihin ja järjestelmiin, ohjelmistotestauksen tärkeydestä tulee kriittinen osa menestyvää ohjelmistokehitysprosessia.
Ohjelmistot ovat merkittävä osa nykypäivän maailmaa. Lähes kaikessa ihmisen luomassa laitteistossa on sisäänrakennettu ohjelmisto. Jokaisella mekaanisella laitteella on ohjelmisto, vaikka muutama vuosikymmen sitten meillä ei ollut edes tietokoneita. Jopa yksinkertaisissa pienissä asioissa, kuten kellossa, voi olla ohjelmistoja, jotka ovat verrattavissa pöytätietokoneen ohjelmistoihin. Ohjelmistotuotteiden kasvava määrä tarkoittaa sitä, että ohjelmoijia on oltava enemmän, mikä tarkoittaa, että suurin osa ohjelmistoista ei ole kokeneiden ohjelmoijien tekemiä. Siksi koodauksessa esiintyvien virheiden todennäköisyys kasvaa ja johtaa kasvavaan määrän bugeja ohjelmistoissa. Elämme kapitalismin maailmassa, jossa ohjelmistoja tehdään nopeasti tai tilataan kiireellisesti kolmannen osapuolen ohjelmistoyrityksiltä ilman asianmukaista tarkistusta, mikä johtaa yhä useampaan huonolaatuiseen ohjelmistoon.
Itse testaamisella on vähän arvoa, mutta ohjelmistolle testaus on välttämätöntä. Hyvin suunniteltu ohjelmistotestaus voi tehdä keskinkertaisista ohjelmistoista erittäin hyviä, kun taas huonosti suoritettu testaus voi jopa vahingoittaa lopputuotteen laatua. Siksi on tärkeää, että ohjelmistoprojektille on hyvin suunniteltu testausprosessi. Koska ohjelmistoprojektit eroavat toisistaan, testausprosessi voi vaihdella projektikohtaisesti. Testaamisessa on useita tasoja, tyyppejä ja tekniikoita, jotka voidaan toteuttaa tietyn ohjelmistoprojektin testausprosessille. Tehokkaan ja toimivan testausprosessin luominen voi olla vaikea tehtävä.
TESTAUKSEN TAVOITTEET JA TARPEELLISUUS
Testauksen tavoitteet vaihtelevat ohjelmiston kontekstin ja ohjelmiston testaustarpeiden mukaan. Tavoitteet vaihtelevat myös ohjelmiston elinkaaren eri vaiheissa. Esimerkiksi kehitysvaiheen keskivaiheissa voi olla tärkeää löytää mahdollisimman monta vikaa, kun taas ennen julkaisupäivää on tärkeintä yhdistää tietoja ohjelmiston laadusta ja julkaisuun liittyvistä riskeistä.
Minkä tahansa ohjelmiston testauksen yleiset tavoitteet kertovat tuotteen laatutasosta projektin eri vaiheissa. Ne voivat sisältää mm. vaatimusten arviointia ja varmistamista, käyttäjätarinoiden arviointia sekä sen varmistamista, että ohjelmisto täyttää käyttäjien ja sidosryhmien odotukset. Testauksen tavoitteena on estää ja löytää viat ja toimintahäiriöt ja tarjota riittävästi tietoa projektin omistajalle tuotteen laadusta ja riskeistä, jotta päätöksiä tuotteen suhteen olisi helpompi tehdä.
Tuotteen tarkalla testauksella voidaan yleensä vähentää tuotteen toimintahäiriöiden riskiä tuotannossa. Viat löytyvät testauksen aikana ja toivottavasti korjataan. Tämä johtaa tuotteen korkeampaan laatutasoon. Lisäksi ohjelmistojen testaamista voidaan vaatia lakisääteisten vaatimusten tai erityisten standardien takia.
”Hyvin suunniteltu ohjelmistotestaus voi tehdä keskinkertaisista ohjelmistoista erittäin hyviä.”
Muutamia syitä virheiden esiintymiseen ohjelmistossa ovat mm. liian tiukka aikataulu, inhimillinen virhe, kokematon tiimi, kommunikaation puute, käytetyn tekniikan monimutkaisuus tai vieraiden tekniikoiden käyttö ja väärinkäsitykset.
HUOMIOITA TESTAUSPROSESSIN LUONNISSA
Ohjelmistotestauksella on arvoa vain, jos se tuottaa arvoa ohjelmistokehityksen elinkaaren eri osille. Siksi on tärkeää, että testaus sopii ohjelmistokehityksen elinkaareen ja tukee sitä. Ei ole väliä, minkälaista elinkaarta kehitysprosessi käyttää, testauksen on yritettävä tukea sitä. Tosiasiassa jokainen ohjelmistokehityksen elinkaaren malli vaikuttaa merkittävästi siihen, miten testaus tehdään.
On olemassa useita erilaisia ohjelmistokehityksen elinkaaria. Tunnetuimpia malleja ovat V-malli ja ketterä malli. Uudempia malleja ovat mm. spiraalimalli ja nopea sovelluskehitysmalli. Siksi testauksen on ainakin oltava tietoinen erityyppisistä ohjelmistokehityksen elinkaarista ja oltava valmiita mukautumaan erityyppisiin kehitysmalleihin.
Jotta testaus olisi onnistunutta missä tahansa projektissa, on testaajan ymmärrettävä, mitä tarvitaan, milloin sitä tarvitaan ja kenelle sitä tehdään. Myös projektiin osallistujilla ja sidosryhmillä voi olla omat odotuksensa testaukselle. Jotkut saattavat haluta tietää vain löydetyt kriittiset ongelmat, toiset haluavat tietää jokaisen löydetyn pienemmän ongelman ja toiset haluavat viikoittaisen raportin tuotteen laadusta. Koska kaikki nämä osat voivat muokata testausprosessin muotoa, on myös tärkeää ymmärtää, että ketterä projekti voi eri kokoluokan organisaatioissa olla erilainen ja vaatia testaukselta eri asioita.
PÄÄAJATUKSIA TESTAUSPROSESSIN TOTEUTUKSELLE
Tuotteen kehitysprosessilla on suuri vaikutus siihen, millainen testausprosessin pitäisi olla. Usein kehitysprosessi ja testausprosessi kulkevatkin käsi kädessä alusta alkaen.
”On tärkeää, että testaus sopii ohjelmistokehityksen elinkaareen ja tukee sitä.”
Kaksi samantyyppistä, mutta eri kokoluokan ohjelmistoprojektia eivät välttämättä tarvitse uutta testausprosessia vaan voivat parhaimmillaan käyttää samaa testausprosessia. Tarvittavat muutokset voidaan tehdä eri tasoilla, kuten testausstrategiassa.
Niin paljon kuin maailmassa on erilaisia ohjelmistoprojekteja, on olemassa erilaisia mahdollisia testausprosesseja, jotka mukautuvat ohjelmistoprojektin mukaan aina hieman omiksi prosesseikseen.
Loistava ja hyvin suunniteltu testausprosessi ei takaa hyvää tulosta. Testaajien taidot testauksessa ja viestinnässä ovat vähintään yhtä tärkeässä roolissa.
Diplomityö on saatavissa verkossa Aalto-yliopiston kokoelmista (https://bit.ly/dt-ratilainen).
Työ on palkittu parhaana ohjelmistotestaukseen liittyvänä opinnäytetyönä FISTB ry:n (Finnish Software Testing Board) puolesta. Palkinto annettiin 12.9.2019 järjestetyssä FiSTB Testing Assembly -testaustapahtumassa.
Teksti: Tomi Ratilainen
Kuva: Shutterstock