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ötestausta siinä, että nyt testataan koko järjestelmää kokonaisuutena järjestelmällisesti.
Testauksen päätavoitteet ovat:
Testaus suoritetaan eri tasoilla, jotka muodostavat hierarkian pienimmistä yksiköistä koko järjestelmään. Nämä tasot vastaavat kehitysprosessin eri vaiheita.
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).
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:
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.
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:
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:
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 tasot (yksikkö-, integraatio- jne.) kuvaavat mitä testataan. Testauksen tyypit puolestaan kuvaavat mitä ominaisuuksia testataan.
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 keskittyy järjestelmän laatuominaisuuksiin:
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 on dokumentti, joka määrittelee testauksen laajuuden, lähestymistavan, resurssit ja aikataulun. Testaussuunnitelma sisältää tyypillisesti:
Testitapaukset dokumentoivat yksittäiset testit. Jokainen testitapaus sisältää:
Testausraportti dokumentoi testauksen tulokset. Se sisältää tiedot suoritetuista testeistä, löydetyistä virheistä, testikattavuudesta ja järjestelmän laadun arvioinnin.
Testiautomaatio tarkoittaa testien suorittamista automaattisesti ohjelmistotyökalujen avulla ilman manuaalista toimintaa. Testiautomaation hyödyt:
Yleisiä testiautomaatiotyökaluja:
Testauksen aikana löydetyt virheet dokumentoidaan ja seurataan. Tyypillinen virheen elinkaari:
Virheet luokitellaan vakavuuden mukaan (kriittinen, vakava, keskitaso, pieni) ja prioriteetin mukaan (kiireellinen, korkea, normaali, matala).