Ammattilaiselta ammattilaiselle - Tarinoita yli 200 kouluttajakumppanin verkostolta

Projektipäivät

Miten tekoälyä hyödynnetään ohjelmistotestauksessa?

Tekoäly tulee jatkossa yhä suurempaan rooliin ohjelmistokehityksen kaikilla osa-alueilla – myös testauksessa. Tämän blogisarjan myötä pureudumme tekoälyn mahdollisuuksiin testauksen saralla, aloittaen perusteista ja mahdollisten käyttötapausten hahmottamisesta.

Tekoäly alkaa olla kaikkialla – riippumatta siitä, halusitko sitä tai et. Digitaalisten palveluiden käyttäjänä olen jo vuosia hyödyntänyt tekoälyä, usein täysin tietämättämäni. Suuresti markkinoitujen palveluiden, kuten ChatGPTn ja Copilotin, myötä tekoäly on räjähtänyt omaani ja myös yleiseen tietoisuuteen, enkä näe ilmiölle loppua.

Tekoälyllä on kasvava roolinsa ammattikäytössä. Ohjelmistotestauksessakin tekoäly on jo todellisuutta. Tekoälyominaisuuksia lisätään testaustyökaluihin. Testaajana voin hyödyntää ChatGPT:n kaltaisia yleisiä palveluita oman työni tehostamiseen.

Tässä tekoälyä käsittelevän artikkelisarjan ensimmäisessä osassa käydään lyhyesti läpi tekoälyn pääperiaatteita ja sitä, miten tekoälyä voisi hyödyntää nimenomaan ohjelmistotestauksessa – jo tänään.

Generatiivinen tekoäly ja koneoppiminen

Testauksessa hyödyllinen tekoäly voidaan jakaa karkeasti kahteen tyyppiin: generatiiviseen tekoälyyn ja perinteiseen koneoppimiseen.

Generatiivisen tekoälyn sovellukset, kuten ChatGPT, tuottavat tekstiä, kuvia tai muuta digitaalista aineistoa käyttäjän pyyntöjen perusteella. Generatiivisen tekoälyn pohjalla on LLM, large language model, eli valtava tietomassa, jolla tekoälyä on opetettu.

Koneoppiminen sen sijaan pyrkii tunnistamaan sille syötetystä datajoukosta säännönmukaisuuksia ja hyödyntämään tätä tietoa päästäkseen etukäteen määriteltyyn ja rajattuun lopputulokseen. Ennustavat tekoälyt ja konenäkö kuuluvat tähän tyyppiin. Sellainen on esimerkiksi puhelimen lukituksen avaa tekoäly, joka on opetettu tekemään mahdollisimman paikkansapitäviä kasvontunnistuksia – mutta vain niitä.

Miten tekoälyt toimivat?

Yksinkertaistaen, koneoppiva järjestelmä paranee, kun sitä opetetaan. ”Tuo meni oikein, tuo meni väärin – uudestaan! Uudestaan!”, Teletappien tapaan.

Laajempi tekoäly sen sijaan oppii löytämällä merkityksiä valtavan laajasta tietomassasta, ja sen opettaminen vaatii tuon valtavan määrän tietoa. Itseopiskelua kutsutaan termillä syväoppiminen (deep learning).

Tekoälyn hyödyntämisessä näiden tekoälytyyppien ero liittyy siihen, kuinka paljon niiden käytössä tarvitaan laskentatehoja. Koska rajoitettu koneoppimismalli oppii vähitellen yhä tehokkaammaksi, se ei lopulta tarvitse valtavaa määrää prosessointitehoja.

LLM-pohjainen tekoäly puolestaan kasvaa sitä paksummaksi koneteho-suursyömäriksi mitä enemmän se ahmii mutta samalla se oppii yhä paremmin ymmärtämään ihmisten kommunikaatiota.

Miten tekoälyä voidaan hyödyntää testauksessa?

Mitä virkaa ohjelmistotestauksessa on tekoälylle kaikkien mahdollisuuksien, sovellusten ja palveluiden tulvassa? Mitä minun pitää tehdä, jotta saan testauksestani tekoälykästä?

Tekoälyominaisuuksia hiipii jatkuvasti testauksessa käytettäviin työkaluihin. Uutuuksia ei kuitenkaan tarvitse odottaa – ihan ChatGPT:lläkin saattaa saada jo paljon aikaan.

Työkaluja tärkeämpää onkin itse miettiä, mitä hyötyjä omaan työhön tekoäly voi tuoda. Miten se voi tehdä työstä laadukkaampaa, tehokkaampaa, nopeampaa ja vaivattomampaa?

Tässä muutamia ajatuksia siitä, mihin käyttötapauksiin tekoäly voi testauksessa taipua.

Testidatan generointi

Testien automaatiossa on jo pitkään käytetty kirjastoja, jotka luovat ”Maija Meikäläinen” -tyyppistä keksittyä sisältöä luonnollisempia ja monipuolisempia arvoja. Esimerkiksi faker-kirjasto on monelle tuttu. Usein riittää, että käyttää vastaavia apuvälineitä rajoitetussa testidatassa. Mutta ongelmaksi voi tulla, jos datan muoto onkin muu kuin teksti tai
jos data tarjoaa mahdollisuuden moniin variaatioihin, esimerkiksi valinnaisiin elementteihin tai kenttiin. Mahdollisesti yksittäisen tiedoston sijaan pitääkin generoida kokonainen datasetti tai tietokanta. Tekoälyn avulla näihin tilanteisiin voi löytyä vaivattomampi ratkaisu.

Testien generointi

Testauksen oleellisimpia vaiheita on tunnistaa, mitä pitää testata. Tärkeintä on testata merkittävällä tavalla, eli kriittisiä osia ja sellaisia osia, joissa voi olettaa löytyvän virheitä niiden monimutkaisuuden tai kehityshistorian takia. Tekoäly pystyy toimimaan apurina, joka osaa ehdottaa testattavia alueita. Se voi myös luoda testitapauksia, tai ainakin pohjia niille, jos sille kerrotaan käyttötapaus. Ei pidä myöskään unohtaa yksikkötestausta: jos tekoälylle annetaan katsottavaksi lähdekoodi se voi luoda lähes valmiita yksikkötestejä. Koodaustyövälineihin on saatavilla tekoälylisäosia, kuten Copilot, joka nopeuttaa testien kirjoittamista luomalla lähes valmiit yksikkötestit yksittäiselle funktiolle.

Testien ylläpito

Sekä manuaalisten että automaatiotestien heikkous on, että ne eivät aina pysy muutosten perässä. Syynä voivat olla muutokset määrittelyihin, jotka on unohdettu viedä testitapauksiin tai dokumentaatioon asti. Tai sitten on tehty tekninen muutos käyttöliittymässä tai rajapinnassa, joka on muistettu muuttaa yksikkötesteihin mutta ei systeemitesteihin. Testaaja törmää tähän testin epäonnistuessa. Kun syyksi selviää muutos, tulee eteen tarve päivittää ne testitapaukset, joita muutos koskee. Päivitettävien testitapausten määrä voi olla suuri. Pahimmillaan päivitysvaiva voi johtaa siihen, että suurin osa testaajan ajasta tärväytyy testien päivittämiseen. Tekoälyn avulla päivittäminen on nopeampaa.

Lokien analyysi

Testaajan mielipuuhaa on löytää virheitä. Jotta testaaja voi tehdä hyvän bugiraportin, pitää hänen usein myös löytää virhetilanteeseen liittyvän kohdan lokitiedostossa, jotta virhe voidaan paikantaa koodissa. Niinpä käytetään vaikkapa Splunk- tai Cloudwatch-hakuja, joilla yritetään löytää oleellinen lokitus. Tekoäly, varsinkin LLM-tyypin tekoäly, voi tarjota tähän paremman työkalun, jossa ei tarvitse arvailla haun kirjoitusasua.

Toinen testauksessa merkittävä alue on poikkeavien tilanteiden tunnistaminen. Tekoälyn voi opettaa tunnistamaan odottamattomia tilanteita lokitiedostoista. Näin voidaan havaita tuotanto-ongelmia ja parantaa testien kattavuutta.

Tiivistelmän tuottaminen

Testaajan täytyy perehtyä mitä moninaisimpaan dokumentaatioon. Kuuluu työhön. Mutta joskus dokumentaatiota on paljon. Eikä vain järjestelmän omaa dokumentaatiota vaan myös toimintaan liittyviä määräyksiä ja määritelmiä. Tekoäly voi tehdä tiivistelmän dokumentista. Tiivistelmästä taas voi päätellä, onko dokumentissa testaukselle oleellista tietoa.

Mutta tämä ei ole ainoa käyttökohde tiivistelmälle. Testaaminen itsessäänkin tuottaa dokumentteja, kuten testitapaukset, tulokset ja virheraportit. Kun raportoidaan testauksen edistymisestä, pyritään tiivistämään tilanne sanoin ja graafein. Oleellinen ammattitaitoa vaativa osa testiraportoinnissa on arvioida tilannetta lukujen takana. Tämä osa kuitenkin voi olla pari lausetta raportissa, jonka muun sisällön tuottaminen vie joko aikaa tai jää vaikkapa JIRAn ”tikettien tila” -graafien varaan. Tekoälyä voidaan hyödyntää raportoinnissa luomaan tuo ”muu sisältö” tiivistelmänä testien tuottamasta dokumentaatiosta.

Muista nämä vaarat!

Tekoälyn käyttöön liittyy myös ongelmia ja vaaroja. Näitä ovat vaikkapa opetusdatan mukana tulleet vinoumat. Jos lähtödatassa on sisäänrakennettu vääristymä niin tekoäly tulee eittämättä sen toistamaan.

Tekoälyä voidaan myös opettaa joko tahallisesti tai tahattomasti väärin. Tahattomasti väärin, kun opetukseen käytetty aineisto onkin virheellistä. Ei ole kovin epätavallista, että verkosta löydetty kirjoitus sisältää virheellisen tai vanhentuneen tiedon, jonka tekoäly opetettuna toistaa. Ei ole poissuljettua, että tekoälymalleja on opetettu tarkoituksella ’valehtelemaan’.

Tekoälyn käyttöön liittyy myös ongelmia yksityisyyden osalta. Voiko asiakasdataa käyttää tekoälyn opettamiseen, onko se käyttö GDPR:n mukaista? Entä voivatko yrityssalaisuudet paljastua, jos kysyt asioita ChatGPT:ssä?

Näihin kysymyksiin palataan sarjan tulevissa osissa. Kiitoksia mielenkiinnosta – tests be careful out there!

Juhani Peltonen

Juhani Peltonen
Juhani työskentelee Testimatella vanhempana testauskonsulttina monipuolisten testausprojektien parissa.

Blogi on julkaistu Testimaten sivuilla.

Testimate on Projektipäivien tapahtumakumppani. Ilmoittaudu mukaan Projektipäivät -tapahtumaan Helsingin Messukeskukseen 17.–18.9.2024!