Ohjelmistotuotanto
Testaus

Kun toteutusvaihe on edennyt riittävän pitkälle tai valmistunut, siirrytään testausvaiheeseen. Testausvaihe on kriittinen osa ohjelmistokehitysprosessia, jossa varmistetaan että järjestelmä täyttää sille asetetut vaatimukset ja toimii luotettavasti. Testausvaihe eroaa toteutuksen aikana tapahtuvasta yksikkötestaus­ta siinä, että nyt testataan koko järjestelmää kokonaisuutena järjestelmällisesti.

Testauksen päätavoitteet ovat:

  • Varmistaa että ohjelmisto täyttää vaatimusmäärittelyssä asetetut vaatimukset
  • Löytää mahdollisimmat virheet ja puutteet ennen käyttöönottoa
  • Varmistaa että järjestelmä toimii luotettavasti eri tilanteissa
  • Varmistaa että järjestelmä on turvallinen ja suorituskykyinen

Testauksen tasot

Testaus suoritetaan eri tasoilla, jotka muodostavat hierarkian pienimmistä yksiköistä koko järjestelmään. Nämä tasot vastaavat kehitysprosessin eri vaiheita.

1. Yksikkötestaus (Unit Testing)

Yksikkötestaus on pienimpien ohjelman osien (funktiot, metodit, luokat) testaamista erillään muusta järjestelmästä. Yksikkötestauksen suorittavat yleensä ohjelmoijat itse toteutusvaiheen aikana. Yksikkötestit automatisoivat usein käyttämällä testikehyksiä kuten JUnit (Java), pytest (Python) tai Jest (JavaScript).

2. Integraatiotestaus (Integration Testing)

Integraatiotestauksessa testataan miten eri moduulit tai komponentit toimivat yhdessä. Tässä vaiheessa varmistetaan että eri osien väliset rajapinnat toimivat oikein ja että tiedonsiirto komponenttien välillä on virhetöntä.

Integraatiotestaus voidaan suorittaa usealla tavalla:

  • Big Bang - Kaikki komponentit yhdistetään kerralla ja testataan
  • Top-Down - Testataan ylhäältä alas komponenttihierarkiassa
  • Bottom-Up - Testataan alhaalta ylös komponenttihierarkiassa
  • Sandwich - Yhdistelmä top-down ja bottom-up menetelmistä

3. Järjestelmätestaus (System Testing)

Järjestelmätestauksessa testataan koko järjestelmää kokonaisuutena. Tämä on ensimmäinen vaihe, jossa järjestelmää testataan todellisessa tai sitä vastaavassa ympäristössä. Järjestelmätestaus varmistaa että kaikki komponentit toimivat yhdessä ja että järjestelmä täyttää toiminnalliset ja ei-toiminnalliset vaatimukset.

4. Hyväksymistestaus (Acceptance Testing)

Hyväksymistestaus on viimeinen testausvaihe ennen järjestelmän käyttöönottoa. Tässä vaiheessa asiakas tai loppukäyttäjät testaavat järjestelmää varmistaakseen että se täyttää heidän tarpeensa ja vaatimuksensa. Hyväksymistestaus voidaan jakaa:

  • Alfa-testaus - Tehdään kehittäjien toimesta asiakkaan läsnä ollessa
  • Beta-testaus - Tehdään todellisten käyttäjien toimesta tuotantoympäristössä tai sitä vastaavassa

V-malli

V-malli on yleinen tapa kuvata testauksen suhdetta kehitysprosessin muihin vaiheisiin. V-mallin vasemmalla puolella ovat määrittely- ja suunnitteluvaiheet, ja oikealla puolella vastaavat testausvaiheet.

V-mallin mukaiset vastaavuudet:

  • Vaatimusmäärittely ↔ Hyväksymistestaus
  • Järjestelmäsuunnittelu ↔ Järjestelmätestaus
  • Arkkitehtisuunnittelu ↔ Integraatiotestaus
  • Moduulisuunnittelu ↔ Yksikkötestaus

V-malli korostaa että testit tulisi suunnitella jo määrittely- ja suunnitteluvaiheessa, ei vasta toteutuksen jälkeen. Esimerkiksi hyväksymistestit voidaan johtaa suoraan vaatimusmäärittelystä.

Testauksen tyypit

Testauksen tasot (yksikkö-, integraatio- jne.) kuvaavat mitä testataan. Testauksen tyypit puolestaan kuvaavat mitä ominaisuuksia testataan.

Toiminnallinen testaus (Functional Testing)

Toiminnallinen testaus varmistaa että järjestelmä toimii vaatimusmäärittelyn mukaisesti. Tässä testataan järjestelmän toimintoja syöttämällä erilaisia syötteitä ja vertaamalla tuloksia odotettuihin tuloksiin.

Ei-toiminnallinen testaus (Non-Functional Testing)

Ei-toiminnallinen testaus keskittyy järjestelmän laatuominaisuuksiin:

  • Suorituskykytestaus - Testataan järjestelmän suorituskykyä ja vasteaikoja
  • Kuormitustestaus - Testataan järjestelmän toimintaa rasituksen alaisena
  • Stressitestaus - Testataan järjestelmän rajoja ja palautumista ääriolosuhteissa
  • Tietoturvatestaus - Testataan järjestelmän tietoturvaa ja haavoittuvuuksia
  • Käytettävyystestaus - Testataan järjestelmän helppokäyttöisyyttä
  • Yhteensopivuustestaus - Testataan toimivuutta eri alustoilla ja selaimilla

Regressiotestaus

Regressiotestaus suoritetaan aina kun järjestelmään tehdään muutoksia. Sen tarkoituksena on varmistaa että muutokset eivät ole rikkoneet aiemmin toimineita ominaisuuksia. Regressiotestit automatisoidaan usein, jotta ne voidaan ajaa nopeasti ja usein.

Testaussuunnitelma ja testausdokumentaatio

Testaussuunnitelma on dokumentti, joka määrittelee testauksen laajuuden, lähestymistavan, resurssit ja aikataulun. Testaussuunnitelma sisältää tyypillisesti:

  • Testattavat ominaisuudet ja toiminnot
  • Testausmenetelmät ja -tasot
  • Testiympäristö ja tarvittavat resurssit
  • Testausaikataulu
  • Hyväksymiskriteerit
  • Riskien arviointi

Testitapaukset dokumentoivat yksittäiset testit. Jokainen testitapaus sisältää:

  • Testitapauksen tunniste ja nimi
  • Testitapauksen kuvaus
  • Esiehdot (preconditions)
  • Testausvaiheet
  • Testisyötteet
  • Odotetut tulokset

Testausraportti dokumentoi testauksen tulokset. Se sisältää tiedot suoritetuista testeistä, löydetyistä virheistä, testikattavuudesta ja järjestelmän laadun arvioinnin.

Testiautomaatio

Testiautomaatio tarkoittaa testien suorittamista automaattisesti ohjelmistotyökalujen avulla ilman manuaalista toimintaa. Testiautomaation hyödyt:

  • Testit voidaan suorittaa nopeasti ja usein
  • Toistuvat testit eivät sido resursseja
  • Vähentää inhimillisten virheiden riskiä
  • Mahdollistaa jatkuvan integraation ja jatkuvan toimituksen (CI/CD)

Yleisiä testiautomaatiotyökaluja:

  • Selenium - Web-sovellusten testaus
  • JUnit, pytest, Jest - Yksikkötestaus
  • Cucumber - Käyttäytymisvetoinen testaus (BDD)
  • JMeter - Suorituskykytestaus

Virheiden hallinta

Testauksen aikana löydetyt virheet dokumentoidaan ja seurataan. Tyypillinen virheen elinkaari:

  1. Uusi (New) - Virhe on juuri löydetty ja raportoitu
  2. Hyväksytty (Assigned) - Virhe on osoitettu kehittäjälle korjattavaksi
  3. Korjattu (Fixed) - Kehittäjä on korjannut virheen
  4. Uudelleentestattava (Retest) - Testaaja tarkistaa korjauksen
  5. Suljettu (Closed) - Virhe on korjattu ja vahvistettu
  6. Hylätty (Rejected) - Virhe ei ole todellinen tai ei korjata

Virheet luokitellaan vakavuuden mukaan (kriittinen, vakava, keskitaso, pieni) ja prioriteetin mukaan (kiireellinen, korkea, normaali, matala).



Toggle Menu