Apinatestaus ja testiapinan aivot

18.5.2016 / by Mika Katara

Apinatestaus nousee aina silloin tällöin esiin puhuttaessa testiautomaatiosta. Mutta kuinka isot aivot testiapina tarvitsee?

Testiautomaatiossahan ideana on käyttää satunnaisia testisyötteitä löytämään vikoja, jotka jäävät helposti perinteisessä testauksessa huomaamatta. Yleensä apina yritetään pitää melko yksinkertaisena, mutta robustina, jotta se ei vaatisi alituista paimentamista vaan voisi toimia taustalla käyttäen muulta testiautomaatiolta käyttämättä jääneitä resursseja. 

Periaatteessa apina voi kirjoittaa lokia tai lähettää vaikkapa sähköpostin jos ja kun on mielestään löytänyt ongelman. Esimerkkinä mainittakoon Android-laitteista löytyvä Googlen Monkey-työkalu. Sitä voi kokeilla vaikka omalla puhelimellaan tai sitten Android-emulaattorilla, jolloin ei ole vaaraa siitä, että apina lähettäisi outoja viestejä pomolle tai muuta ikävää.

Mitä tapahtuu kun apinalle koodaa aivot?

Mitä tyhmempi apina, sen helpommin se käyttää aikaansa aivan epäolennaisten toimintojen kokeilemiseen. Sen toimintaa voisi siis tehostaa lisäämällä siihen hieman älyä, joka auttaa sitä kokeilemaan vain olennaisia toimintoja ja niitäkin vain halutulla tavalla. Esimerkiksi Googlen Monkeyn toimintaa pystyy ohjaamaan monen eri parametrin avulla juuri tähän suuntaan.

Toinen kysymys liittyy odotettujen tulosten tarkastamiseen. Jotta testaajan kaikki aika ei kuluisi väärien hälytysten läpikäyntiin, apinan pitäisi olla sen verran älykäs, ettei se turhista huomauttele. Android-ympäristössä se voisi vaikkapa tarkoittaa sovellusten kaatumisten huomaamista ja niiden raportointia, mutta ei välttämättä muuta.

Entäpä tilatieto, tarvitseeko apina tiedon testattavan järjestelmän tiloista? Se riippuu tilanteesta ja siitä, mitä muuta testausta järjestelmälle tehdään. Tilatiedon koodaaminen tekee apinasta huomattavasti älykkäämmän, se ei enää esimerkiksi yritä kirjoittaa kenttään, jota kyseisessä näytössä ei ole.  Toisaalta älykkäässä apinassa korostuvat perinteiset testiautomaation ongelmat kuten ylläpito ja automaatiokoodin laadun varmistaminen.

Eräs mielenkiintoinen näkökohta on testattavan rajapinnan nopeus. Esimerkiksi käyttöliittymätestauksessa vasteen saaminen testisyötteeseen saattaa joskus kestää kauan verrattuna API-testaukseen. Mikäli apinalla on suuret aivot ja paljon tietoa järjestelmän tiloista, voidaan tätä odotteluaikaa hyödyntää esimerkiksi polun optimointiin valittaessa seuraavaa testiaskelta (tätä kutsutaan mallipohjaisen testauksen piirissä online-testaukseksi).

Kuinka päättää miten suuret aivot apina tarvitsee? Oman kokemukseni perusteella lähtisin liikkeelle hyvin tyhmästä apinasta. Se voisi työskennellä esimerkiksi öisin, kunhan varmistetaan, ettei se tee mitään odottamatonta. Kun kokemukset karttuvat, apinaan voisi koodata ominaisuuden, jolla voidaan keskittyä olennaisiin ja muuten vähälle testaukselle jääviin osiin ja testien toistettavuuteen. Koska ruokahalu tunnetusti kasvaa syödessä, tilatiedon mukaan ottaminen on seuraava askel. Jossain vaiheessa kuitenkin saavutetaan kohta, jossa lisäominaisuuksien lisääminen on entistä hankalampaa eivätkä saavutetut tulokset enää puolla jatkokehitystä. Se missä kohtaa tämä ”sweet spot” saavutetaan, riippuu projektista.

Aiheet: Testiautomaatio, Qentinel työpaikkana