Ohjelmistotestien generointi koneoppimisen avulla
Jokela, Sebastian (2021)
Jokela, Sebastian
2021
Tietojenkäsittelytieteiden kandidaattiohjelma - Bachelor's Programme in Computer Sciences
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2021-07-07
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202106296135
https://urn.fi/URN:NBN:fi:tuni-202106296135
Tiivistelmä
Ohjelmistotestaus on ohjelmistokehityksen tärkeä osa, jolla varmistetaan kehitetyn sovelluksen virheetön toiminta. Ohjelmistotestien luominen käsin on kuitenkin työläs prosessi, joten sitä on pyritty helpottamaan erilaisilla testejä automaattisesti generoivilla sovelluksilla. Tämän tutkimuksen tarkoitus on selvittää, millaisia koneoppimisalgoritmeja testien generointiin on sovellettu, mitä vahvuuksia ja heikkouksia koneoppimisavusteisella testien generoinnilla on ja miten se toimii käytännössä. Käytännön implementaatioita tarkastellaan EvoSuite-ohjelmiston kautta, sen edistyneisyyden ja siitä saatavilla olevan laajan tutkimuksen vuoksi.
Testien generointiin on sovellettu monenlaisia koneoppimisalgoritmeja, joista laajimmassa käytössä ovat erilaiset evolutiiviset algoritmit. Niiden etuna on se, että niiden käyttäminen ei juurikaan vaadi työtä käyttäjältä, sillä niihin ei tarvitse manuaalisesti sisällyttää tietoa testattavasta sovelluksesta.
Koneoppiminen saavuttaa testien generoinnissa huomattavasti parempia tuloksia kuin perinteiset satunnaishakuun perustuvat mallit. Sen avulla generoitujen testien kattavuus on suurempi, vaikka testiohjelmat ovat pienempiä ja ne generoidaan yhtä nopeasti, tai jopa nopeammin.
Vaikka koneoppimisen avulla luodut testit nopeuttavat testaamista huomattavasti ja mahdollistavat virheiden löytämisen, niiden käyttöä rajoittaa kuitenkin muutama tekijä. Testejä on vaikea ymmärtää, joissain tilanteissa ne epäonnistuvat vaikka ohjelma toimisi virheettömästi, ja ohjelmoijat eivät osaa käyttää testejä generoivia ohjelmistoja optimaalisesti.
Tällä hetkellä testien generointi automaattisesti soveltuu lähinnä ohjelmistotestaamiseen, joka suoritetaan samanaikaisesti ohjelmiston luomisen kanssa. Hyviä tuloksia on saavutettu myös mikroprosessorien testaamisessa, joskin silloin käyttäjältä vaaditaan enemmän vaivannäköä kuin Java-kielisten ohjelmistojen automaattisessa testaamisessa. Korjaamalla erilaisten koneoppimista käyttävien testiengenerointityökalujen vikoja, niillä voitaisiin säästää huomattavasti aikaa ja vaivaa ohjelmistoa testatessa.
Testien generointiin on sovellettu monenlaisia koneoppimisalgoritmeja, joista laajimmassa käytössä ovat erilaiset evolutiiviset algoritmit. Niiden etuna on se, että niiden käyttäminen ei juurikaan vaadi työtä käyttäjältä, sillä niihin ei tarvitse manuaalisesti sisällyttää tietoa testattavasta sovelluksesta.
Koneoppiminen saavuttaa testien generoinnissa huomattavasti parempia tuloksia kuin perinteiset satunnaishakuun perustuvat mallit. Sen avulla generoitujen testien kattavuus on suurempi, vaikka testiohjelmat ovat pienempiä ja ne generoidaan yhtä nopeasti, tai jopa nopeammin.
Vaikka koneoppimisen avulla luodut testit nopeuttavat testaamista huomattavasti ja mahdollistavat virheiden löytämisen, niiden käyttöä rajoittaa kuitenkin muutama tekijä. Testejä on vaikea ymmärtää, joissain tilanteissa ne epäonnistuvat vaikka ohjelma toimisi virheettömästi, ja ohjelmoijat eivät osaa käyttää testejä generoivia ohjelmistoja optimaalisesti.
Tällä hetkellä testien generointi automaattisesti soveltuu lähinnä ohjelmistotestaamiseen, joka suoritetaan samanaikaisesti ohjelmiston luomisen kanssa. Hyviä tuloksia on saavutettu myös mikroprosessorien testaamisessa, joskin silloin käyttäjältä vaaditaan enemmän vaivannäköä kuin Java-kielisten ohjelmistojen automaattisessa testaamisessa. Korjaamalla erilaisten koneoppimista käyttävien testiengenerointityökalujen vikoja, niillä voitaisiin säästää huomattavasti aikaa ja vaivaa ohjelmistoa testatessa.
Kokoelmat
- Kandidaatintutkielmat [9896]