Ohjelmistotestauksen perusteet

Mitä on ohjelmistotestaus?

Ohjelmistotestauksella tarkoitetaan sovelluksen ja sen osien toimivuuden sekä tulosten tarkastelua, arviointia ja tallentamista. Sitä käytetään työkaluna estämään ja poistamaan virheitä sovelluksissa ennen niiden käyttöönottoa. Testauksella on tällöin paitsi suora vaikutus käyttäjien tyytyväisyyteen, on se merkittävä prosessi myös taloudellisesta näkökulmasta. Alussa havaitut virheet on usein helppo ja edullista korjata, kun taas jo markkinoille julkaistun sovelluksen bugien korjaaminen voi viedä paljon aikaa sekä aiheuttaa huomattavia kustannuksia. Tämän vuoksi testaamista kannattaa toteuttaa jo sovellusta kehittäessä, eikä aloittaa vasta kun toteutus on valmis.

Lähtökohtaisesti onnistuneen testaamisen takaamiseksi tavoitteeksi tulisi asettaa sen osoittaminen, että ohjelma ei toimi määrittelyjen mukaisesti tai toimii jotenkin niin kuin sen ei pitäisi. Toisaalta tämä ei saa johtaa siihen, että yksittäisiä ohjelmoijia aletaan syyllistämään löytyneistä bugeista, vaan pidetään ilmapiiri rentona ja avoimena sekä puhutaan sovelluksen virheistä yksittäisten kehittäjien virheiden sijaan.

Sovellustestauksen voi suorittaa testauksen tyypistä riippuen eri henkilöt. Esimerkiksi lähdekoodia tutkittaessa sovelluksen kehittäjä pystyy helpoiten ymmärtämään sen logiikan ja tehokkaasti etsimään bugeja. Tiettyjä erikoistumista vaativia testejä, kuten tietoturva-aukkojen etsimistä, varten puolestaan kannattaa usein hyödyntää erillisiä QA-ammattilaisia. Tai mikäli kyseessä on yksinkertaisia käyttöliittymään tai toiminnallisuuksiin liittyvien bugien etsimistä, voi sen suorittaa perustasolla lähes kuka vain projektin jäsen.

Sovellustestauksen kaksi yleisintä lähestymistapaa ovat kehittäjän ja käyttäjän näkökulmasta lasilaatikkotestaus (White box testing), jossa lähdekoodia tutkimalla pyritään löytämään bugeja, sekä mustalaatikkotestaus (Black box testing), jossa lähdekoodiin ei ole pääsyä, vaan testaus suoritetaan sovelluksen käyttöliittymän pohjalta.

Bugeja voidaan luokitella esimerkiksi seuraavanlaisesti:

  • Toiminnallisuus (jokin toiminto ei vastaa sen määrittelyä)
  • Turvallisuus (sovellus sisältää tietoturva-aukkoja)
  • Regressio (päivitykset koodiin hajottivat jonkin jo olemassa olleen toiminnallisuuden)
  • Suorituskyky (sovellus on hidas tai koodi suorittaa turhia funktiokutsuja)
  • UI (käyttöliittymä ei vastaa suunnitelmaa)
  • Integraatio (kaksi tai useampi erillinen komponentti eivät toimi yhdessä)

Testauksen tasot

1. Yksikkötestaus. Kehittäjien toteuttamia, nopeasti toteutettavia koodipohjaisia testejä, joilla voidaan testata koodin yksittäisten osien (mm. komponenttien, moduulien ja funktioiden) toimivuutta. Käytännössä testi voisi tarkoittaa, että tutkitaan, palauttaako jokin koodin funktio oikean tuloksen tietyillä lähtöarvoilla. Tällöin voidaan tehokkaasti tutkia koodin toimivuus silloin, kun tehdään muutoksia ja päivityksiä sovellukseen.

2. Integraatiotestaus. Varmistetaan, että erilliset komponentit tai moduulit koodissa toimivat keskenään. Esimerkiksi voitaisiin tutkia, toimiiko verkkokaupassa maksutoiminnallisuus oikein kolmannen osapuolen palvelun kanssa.

3. Järjestelmätestaus. Toisin kuin yksikkö- ja integraatiotestauksessa, järjestelmätestauksessa testataan koko järjestelmän toiminta yksittäisten osien sijaan. Testaus toteutetaan käyttäjän näkökulmasta ilman automatisointia, minkä vuoksi se vie yleensä paljon aikaa. Esimerkiksi verkkokauppaa testattaessa tutkittaisiin kaikki toiminnallisuudet rekisteröitymisestä tilauksen tekemiseen. Huomioitavaa on, että järjestelmätestausvaiheessa löytyvät bugit viittaavat siihen, että yksikkö- tai integraatiotestauksessa on puutteita.

4. Hyväksyttämistestaus. Sovellustestauksen taso, jossa tutkitaan, toteuttaako sovellus määritellyt vaatimukset ja onko se valmis toimitettavaksi asiakkaalle.

Testausmenetelmiä

Erilaisia testejä on lukuisia, ja yleiskuvan antamiseksi alla on listattu niistä muutama yleinen.

Funktionaalinen testaaminen. Sovellusta käyttämällä tutkitaan, toimiiko se odotetulla tavalla. Testaamisessa tulee hyödyntää määrittelyjä siitä, miten eri toiminnallisuuksien tulisi toimia.

Turvallisuustestaus. Testataan, ettei sovelluksessa ole tietoturva-aukkoja, joiden avulla mm. voitaisiin päästä käsiksi käyttäjätietoihin tai suorittaa toimintoja, joita käyttäjien ei pitäisi pystyä suorittamaan. Ammattilaisten tulisi useimmiten olla vastuussa tästä testauksessa, sillä erityisesti monimutkaisilla sovelluksilla se vaatii paljon ammattitaitoa, ja haitat voivat olla huomattavia.

Tehokkuustestaus. Testataan, että sovellus avautuu ja toimii nopeasti sekä toimii hyvin suurten kuormituksen alla.

Käytettävyystestaus. Tutkitaan, että sovelluksen käyttöliittymä (UI) on intuitiivinen ja helppo käyttää. Tätä ei voida automatisoida, vaan testauksen suorittaa aina ihminen, jonka toimintaa usein valvoo ammattitaitoinen UI-suunnittelija.

Regressiotestaus. Tavoitteena on selvittää, ovatko uudet päivitykset sovelluksessa hajottaneet aiempian toiminnallisuuksia, tai onko sovellukseen ilmaantunut jo aiemmin korjattuja bugeja.

Staattinen analyysi. Analysoidaan koodia virheiden varalta suorittamatta koodia.

Savutestaus. Varmistetaan, että järjestelmä on tarpeeksi vakaa, ajamalla se minimitoiminnoilla, niin että mm. käyttäjät voivat suorittaa toimintoja, kuten kirjautua sisään ja tarkastella sivuja. Tarkoituksena on havaita perustason bugit, jotka estävät koko järjestelmän toiminnan.

Loppusanat

Tämä artikkeli sisälsi karkealla tasolla perustason tiedot ohjelmistotestauksesta. Esitellyt käsitteet, periaatteet ja testityypit luovat hyvän pohjan ohjelmistotestauksen ymmärtämiseen. Tärkeää on huomioida testaamisen merkitys niin taloudellisesta kuin asiakastyytyväisyyden näkökulmasta, ja virheiden korjaaminen alkuvaiheessa on kummankin kannalta kannattavaa. Erilaisten testauksen tasojen ja testityyppien ymmärtäminen on hyödyllistä kaikille alalla toimiville ja ohjelmistoprojekteissa mukana oleville, olipa sovelluskehittäjä tai ei. Toisaalta ohjelmistotestaus on sovelluskehityksen tavoin jatkuvassa kehityksessä, minkä vuoksi siinä voi tapahtua suhteellisen nopeasti suuriakin muutoksia. Esimerkiksi isona trendinä pidetään koneoppimisen hyödyntämistä parempien testaustuloksien kehittämiseen kustannustehokkaaksi.



Kaipaatko apua sovelluksen kehittämiseen, tai tarvitseeko valmis sovelluksesi testausta? Ota yhteyttä sivun alaosassa mainittuun numeroon, niin voimme keskustella siitä, miten Vertics voisi auttaa menestyksen takaamisessa.

Vertics on ohjelmistoratkaisuihin erikoistunut yritys, joka on tukenut lukuisia yrityksiä mm. sovelluskehityksen, käyttöliittymäsuunnittelun ja sovellusten ylläpitoon liittyvissä projekteissa.