Regressiotestaus

**Regressiotestaus** tarkoittaa funktionaalisten ja ei-funktionaalisten testien uudelleen ajamista, sen varmistamiseksi, että aiemmin kirjoitettu ja testattu koodi toimii ohjelmistoon tehtyjen muutosten jälkeenkin oletetulla tavalla. **Regressioksi** kutsutaan ilmiötä, missä jo aiemmin kirjoitettu ja testattu koodi ei enää uusien muutosten jälkeen toimikaan oletetulla tavalla. 

Tyypillisesti regressiota ilmenee, kun ohjelmistoon lisätään uusia osia, jotka ovat konfliktissa vanhojen kanssa tai esimerkiksi kun ohjelmiston laatua kohennetaan erinäisin keinoin.

## Regressiotestauksen tapoja
Yleisimpiä regressiotestaukseen käytettyihin tapoihin kuuluu:

#### Kaikkien testien uudelleen ajaminen
Nimensä mukaan tämän regressiotestauksen tavan tarkoituksena on ajaa ohjelmiston kaikki testitapaukset läpi, varmistaakseen että koko ohjelmiston laajuudella regressiota ei ole tapahtunut. Tämä on yleisistä tavoista luonnollisesti kallein, mutta myös varmin tapa estää regressiota.

#### Valittujen testien ajaminen
Kaikkien testien ajamisen sijaan tässä tavassa ajetaan vain valittu osa ohjelmiston testeistä, joissa regressiota todennäköisimmin voitaisiin tavata. Yleensä tämä tapa testata regressiota valiutuu kaikkien testien ajon hintavuuden ansiosta.

#### Testien priorisointi
Priorisoidessa testejä, otetaan selvää mitkä ohjelmiston osista ovat alttiimpia regressiolle, ja niiden testausta priorisoidaan muihin nähden. Tässä tavassa korkeammalla prioriteetilla olevat testit ajetaan ennen alempana olevia ja täten pyritään löytämään syntyvät viat nopeammin.

**Testien priorisoinnin tapoja**

* Yleinen priorisointi - Asettaa ohjelmiston myöhempiä versioita hyödyntävät testitapaukset etusijalle.
* Versiokohtainen priorisointi - Asettaa tietyn valitun ohjelmistoversion testitapaukset etusijalle.

## Hyödyt ja haitat
Ohjelmistolle on tarpeen suorittaa **regressiotestausta**, kun sen jo olemassa olevaan toimintoon on tehty muutoksia, tai bugeja on korjattu. Regressiotestauksen suorittamiseen on olemassa erilaisia lähestymistapoja. Jos se toteutetaan *ajamalla kaikki testit uudelleen*, saadaan varmuus siitä, etteivät uudet lisäykset ole vaikuttaneet koodin muokkaamattomien osien toimintaan.

Ketterän ohjelmistokehityksen tapauksessa kokonaisvaltaisesta regressiotestauksesta saattaa olla enemmän hyötyä kuin haittaa. Kun ohjelmistokehityssyklit ovat usein lyhyitä, resurssit ovat tiukassa ja ohjelmistoon tehdään usein muutoksia, regressiotestaus saattaa aiheuttaa tarpeettomia, ylimääräisiä kuluja.

Kolmannen osapuolen komponentteja hyödyntävissä ohjelmistoissa regressiotestaus saattaa koitua haastavaksi. Näihin komponentteihin tapahtuvat muutokset, voivat sotkea niiden toiminnan lopun ohjelmiston kanssa, eikä tuntemattoman komponentin testaus ole mahdollista, muuta kuin mustalaatikkotestauksena.

## Käyttökohteet
Regressiotestausta voidaan käyttää ohjelmiston virheettömyyden testaamisen lisäksi myös sen laadun valvonnassa. Regressiotestauksella voidaan esimerkiksi seurata koodin määrää ja ohjelmiston nopeutta.

Regressiotestit voidaan laajemmin kategorisoida funktionaalisiin testeihin, ja yksikkötesteihin. Funktionaaliset testit käsittelevät valmista ohjelmaa erilaisilla syötteillä. Yksikkötestit käsittelee yksittäisiä ominaisuuksia tai metodeja. Kummatkin testityypit ovat yleensä kolmannen osapuolen testityökalun automatisoimia.

Esimerkkinä funktionaalinen testi saattaa olla ennalta kirjoitettu sarja syötteitä, ja mahdollisesti jopa hiiren liikkeitä ja klikkauksia automatisoiva mekanismi. Yksikkötesti puolestaan voi olla esimerkiksi sarja erilaisia toimintoja itse koodin sisällä, tai kirjasto, joka voidaan liittää koodiin muokkaamatta sitä.

## Tekoälyn rooli regressiotestauksessa
Aikojen saatossa tekoälyn (Artificial Intelligence, AI) merkitys osana regressiotestausta on kasvanut. Se tarjoaa useita hyötyjä testausprosessin tehostamiseksi ja suoraviivaistamiseksi.