Testitapausten priorisointi käyttäen ohjelmiston koonnin historiaa ja testietäisyyttä: Menetelmä regressiotestauksen parantamiseen jatkuvan integroinnin ohjelmistokehitysympäristössä autoteollisuudessa
Väitöstilaisuuden tiedot
Väitöstilaisuuden päivämäärä ja aika
Väitöstilaisuuden paikka
Linnanmaa, IT115
Väitöksen aihe
Testitapausten priorisointi käyttäen ohjelmiston koonnin historiaa ja testietäisyyttä: Menetelmä regressiotestauksen parantamiseen jatkuvan integroinnin ohjelmistokehitysympäristössä autoteollisuudessa
Väittelijä
Filosofian maisteri Alireza Haghighatkhah
Tiedekunta ja yksikkö
Oulun yliopiston tutkijakoulu, Tieto- ja sähkötekniikan tiedekunta, Empiirinen ohjelmistotuotanto ohjelmistoissa, järjestelmissä ja palveluissa (M3S)
Oppiaine
Tietojenkäsittelytiede
Vastaväittäjä
Professori Per Runeson, Lund University
Kustos
Professori Markku Oivo, Oulun yliopisto
Testitapausten priorisointi käyttäen ohjelmiston koonnin historiaa ja testietäisyyttä: Menetelmä regressiotestauksen parantamiseen jatkuvan integroinnin ohjelmistokehitysympäristössä autoteollisuudessa
Ketterä ohjelmistokehitys tarjoaa kilpailuetua monelle teollisen tuotannon alalle mukaan lukien autoteollisuus. Jatkuva integrointi on ketterän ohjelmistokehityksen käytäntö, jossa muutoksia integroidaan mahdollisimman varhain ja tiheään. Jatkuvan integroinnin ja regressiotestauksen yhdistäminen on hyväksi havaittu käytäntö, koska näin voidaan varmistaa, että viimeisimmät muutokset eivät vaikuta ohjelmiston toiminnallisuuteen haitallisesti. Suuren testisarjan suorittaminen jokaisen integraation (eli koonnin) jälkeen ei ole realistista. Jotta virheitä havaittaisiin aiemmin, testisarjan testitapaukset voidaan permutoida. Tätä kutsutaan testitapausten priorisoinniksi.
Tämä väitöstutkimus pyrkii lyhentämään jatkuvan integroinnin koontisykliä nopeamman virheiden löytämisen avulla, jotta muutokset voidaan integroida ja varmistaa entistä tiheämmin ja jatkuvasti. Tutkimus tehtiin kolmessa vaiheessa. Ensimmäisessä vaiheessa kartoitettiin olemassa oleva tutkimus ja tunnistettiin tarve uudelle tutkimukselle systemaattisella kirjallisuuskatsauksella. Toisessa vaiheessa historia- ja etäisyysperustaista testitapausten priorisointitekniikkaa kehitettiin useamman parannus- ja evaluointi-iteraation kautta. Kolmannessa vaiheessa syntetisoitiin kahden edellisen vaiheen tulokset ja hahmoteltiin johtopäätökset. Tulokset osoittavat, että ei kannata ”laittaa kaikkia munia samaan koriin”. Testaamisen alkuvaiheessa, kun tietoa on vain vähän, tulisi testauksen rajallinen budjetti jakaa mahdollisimman erilaisten testitapausten kesken siten, että testaus kohdistuu järjestelmän eri osa-alueisiin (ts. maksimoidaan testauksen monimuotoisuus mahdollisimman aikaisin). Myöhemmissä vaiheissa, kun koontihistoriaa on saatavilla, tulisi priorisoida niitä testitapauksia, joilla on suurempi arvo historiassa (eli ne testitapaukset, joilla löydettiin eniten virheitä viimeisimmässä versiossa) ja jotka ovat mahdollisimman etäisiä verrattuna niihin testitapauksiin, joita priorisoitiin viimeksi (ts. kattaa ohjelmiston eri osa-alueita).
Tämän väitöksen yksi keskeisimmistä kontribuutioista on testitapauspriorisointitekniikan suunnittelu, toteutus ja kokeellinen evaluointi käyttäen kahdentoista avoimen lähdekoodin Java-ohjelman viallisia koonteja. Kokeellisen tutkimuksen tulokset tukevat kahta aiemmin ehdotettua testitapauspriorisointiheuristiikkaa – virheiden toistuminen ja testien monimuotoisuus – sekä näiden yhdistämistä jatkuvan integroinnin ohjelmistokehityksessä. Lisäksi, systemaattisen kirjallisuuskatsauksen tulos tarjoaa ajantasaisen tietämyksen esitys strukturoidusti ja perustan tulevalle tutkimukselle. Tulimme siihen johtopäätökseen, että testitapausten priorisointi voidaan tehdä pienillä investoinneilla jatkuvan integroinnin ympäristössä hyödyntäen testihistoriaa ja testietäisyyttä.
Tämä väitöstutkimus pyrkii lyhentämään jatkuvan integroinnin koontisykliä nopeamman virheiden löytämisen avulla, jotta muutokset voidaan integroida ja varmistaa entistä tiheämmin ja jatkuvasti. Tutkimus tehtiin kolmessa vaiheessa. Ensimmäisessä vaiheessa kartoitettiin olemassa oleva tutkimus ja tunnistettiin tarve uudelle tutkimukselle systemaattisella kirjallisuuskatsauksella. Toisessa vaiheessa historia- ja etäisyysperustaista testitapausten priorisointitekniikkaa kehitettiin useamman parannus- ja evaluointi-iteraation kautta. Kolmannessa vaiheessa syntetisoitiin kahden edellisen vaiheen tulokset ja hahmoteltiin johtopäätökset. Tulokset osoittavat, että ei kannata ”laittaa kaikkia munia samaan koriin”. Testaamisen alkuvaiheessa, kun tietoa on vain vähän, tulisi testauksen rajallinen budjetti jakaa mahdollisimman erilaisten testitapausten kesken siten, että testaus kohdistuu järjestelmän eri osa-alueisiin (ts. maksimoidaan testauksen monimuotoisuus mahdollisimman aikaisin). Myöhemmissä vaiheissa, kun koontihistoriaa on saatavilla, tulisi priorisoida niitä testitapauksia, joilla on suurempi arvo historiassa (eli ne testitapaukset, joilla löydettiin eniten virheitä viimeisimmässä versiossa) ja jotka ovat mahdollisimman etäisiä verrattuna niihin testitapauksiin, joita priorisoitiin viimeksi (ts. kattaa ohjelmiston eri osa-alueita).
Tämän väitöksen yksi keskeisimmistä kontribuutioista on testitapauspriorisointitekniikan suunnittelu, toteutus ja kokeellinen evaluointi käyttäen kahdentoista avoimen lähdekoodin Java-ohjelman viallisia koonteja. Kokeellisen tutkimuksen tulokset tukevat kahta aiemmin ehdotettua testitapauspriorisointiheuristiikkaa – virheiden toistuminen ja testien monimuotoisuus – sekä näiden yhdistämistä jatkuvan integroinnin ohjelmistokehityksessä. Lisäksi, systemaattisen kirjallisuuskatsauksen tulos tarjoaa ajantasaisen tietämyksen esitys strukturoidusti ja perustan tulevalle tutkimukselle. Tulimme siihen johtopäätökseen, että testitapausten priorisointi voidaan tehdä pienillä investoinneilla jatkuvan integroinnin ympäristössä hyödyntäen testihistoriaa ja testietäisyyttä.
Viimeksi päivitetty: 23.1.2024