Automaattinen regressiotestaus ilman testitapauksia Pekka Aho, VTT Matias Suarez, F-Secure
2 Mitä on regressiotestaus ja miksi sitä tehdään? Kun ohjelmistoon tehdään muutoksia kehityksen tai ylläpidon aikana, regressiotestaus pyrkii varmistamaan, että muutokset eivät vahingossa rikkoneet mitään toimivaa -> pyritään havaitsemaan muutokset ohjelmiston käyttäytymisessä Yleensä samojen testitapausten toistoa -> yleensä helppoa ja kannattavaa automatisoida Kun muutoksia tulee, muutettujen osien (automatisoituja) testitapauksia pitää yleensä päivittää -> manuaalista työtä, jota automatisoinnilla pyritään vähentämään
3 Graafisten käyttöliittymien (GUI) automaattinen regressiotestaus historiaa Testien suorittamisen automatisointi Record & replay (Squish, Sikuli, etc) Testitapausten luomisen automatisointi mallipohjainen GUI testaus Mallinnetaan haluttu oikea käyttäytyminen manuaalisesti Generoidaan testitapaukset ja suoritetaan automaattisesti Verrataan havaittua käyttäytymistä mallinnettuun käyttäytymiseen Automaattinen GUI mallinnus ja testaus GUITAR työkalu: Yritetään automaattisesti aukaista kaikki ikkunat Generoidaan malli havaitun perusteella ja testitapauksia mallista Ajetaan testitapaukset automaattisesti ja verrataan käyttäytymistä malliin Havaitaan testitapausten perusteella eroja kahden version välillä
4 Graafisten käyttöliittymien (GUI) automaattinen regressiotestaus nykyaikaa Automaattinen GUI mallinnus ja mallien vertailu Murphy työkalu: https://github.com/f-secure/murphy Yritetään automaattisesti kokeilla kaikkea toiminnallisuutta Käyttäjä määrittelee manuaalisesti ohjeet (2-200 riviä Pythonia) Generoidaan malli havaitun käyttäytymisen perusteella Automaattisesti verrataan edelliseen versioon ja raportoidaan ja visualisoidaan muutokset Käyttäjä päättää onko muutokset haluttuja vai bugeja Ei testitapauksia Yritetään havaita kaikki muutokset Ei päivitettäviä testitapauksia, vain väärien hälytysten läpikäyminen
5 Murphy työkalu prosessi 1. Kirjoitetaan ohjeet Murphylle (Python) Ei OK: Korjataan ohjeita tai speksiä 3. Tarkkaillaan mallintamista tai tarkistetaan visuaalisesti generoitu malli OK 2. Murphy työkalu simuloi kokeilevaa käyttäjää ja mallintaa samalla automaattisesti GUI:n käyttäytymistä 4. Käytetään mallia automaattiseen (regressio) testaukseen Manuaalista työtä Automatisoitu
6 Murphy ohjeet Ohjeet sisältävät: Vähintään komennon mallinnettavan GUI:n käynnistämiseen GUI kohtaisia syötteitä, sääntöjä ja rajoja, joiden mukaan Murphy simuloi käyttäjää Yleensä 2-200 riviä Python koodia Yksinkertainen esimerkki:
7 Murphy käyttäjän simulointi Murphy simuloi käyttäjää ja kokeillee kaikkia GUI:n toimintoja, tarkoituksena: Mallintaa GUI:n toiminnallisuus ja käyttäytyminen mahdollisimman kattavasti, jotta malli olisi mahdollisimman tarkka Virtuaalikoneiden käyttö ulkoisten häiriöiden vähentämiseksi Rajata mallintamiseen tarvittavaa aikaa, jotta mallinnus voidaan tehdä automaattisesti monta kertaa päivässä Ei pyritä kattamaan kaikkia sekvenssejä vaan kaikki GUI:n tilat Olla käytettävä ja käytännöllinen työkalu Työkalussa oma Web GUI Mahdollisimman alustariippumaton
8 Murphy mallin visuaalinen tarkistaminen Jotta mallinnettu toiminnallisuus olisi helppo tarkastaa: Generoitu malli on visualisoitu graafiseksi tilamalliksi Tiloja edustavat kuvankaappaukset oikeasta GUI:sta Malli muistuttaa GUI suunnitelmaa
9 Murphy automaattista GUI:n regressiotestausta ilman testitapauksia 1. Generoidaan malli GUI:n uusimmasta versiosta käyttäen samoja ohjeita (esim. automaattisesti 3 kertaa päivässä) 2. Verrataan automaattisesti mallia edellisen version malliin 3. Lähetetään automaattisesti varoitus (esim. email) havaituista muutoksista 4. Käyttäjä tarkastaa havaitut muutokset Web GUI:n avulla Murphy näyttää muuttuneiden tilojen kuvankaappaukset vanhasta ja uudesta versiosta ja auttaa havaitsemaan muutokset Käyttäjä päättää onko haluttu muutos vai bugi
10 Kokemuksia mallinnuksesta (F-Secure) Murphy työkalua on käytetty useiden GUI ohjelmistojen mallinnukseen (ja testaukseen) tuotekehityksen aikana. Mallintaa monimutkaisenkin GUI:n riittävän tarkasti Ohjeet olivat 2-200 riviä Python koodia Generoiduissa malleissa oli 80-180 GUI:n tilaa Isompia malleja jaettiin pienempiin osiin useammilla ohjeilla, joissa rajoitettiin mallinnuksen alueet Mallinnetut GUI ohjelmistot olivat vuopohjaisia (flow based) Enimmäkseen rajattu määrä mahdollisia syötteitä
11 Kokemuksia testauksesta (F-Secure) Murphy testaa GUI:ta jo mallinnuksen aikana ja ongelmia (bugi/speksi) löytyi mallin visuaalisen tarkastamisen aikana Murphyn avulla: Manuaalisesti ylläpidettävän testikoodin määrä vähentyi Uusien GUI tuotteiden regressiotestauksen aloittaminen nopeampaa ja vaatii vähemmän työtä Uusien ominaisuuksien testaaminen nopeampaa Regressiotestauksen kattavuus parani Vähennettiin myös manuaalisten GUI testien vaatimaa aikaa Käynnistetään Murphyn avulla GUI virtuaalikoneessa tiettyyn tilaan
12 Kiitos! Kysymyksiä? https://github.com/f-secure/murphy