Mitä on mallipohjainen testaus?
toukokuu 17, 2007 oopee
Joillakin on käsitys että mallipohjainen testaus on kun tehdään testi tapauksista graafinen malli ja generoidaan suorittava koodi nappia painamalla. Itse asiassa mallipohjaisen testauksen suurin tavoite on automatisoida itse testien suunnittelu. Eli jos testi suunnitellaan käsin ja piirretään mallina, niin ei puhuta varsinaisesti mallipohjaisesta testauksesta.
Yksinkertaisimmillaan mallipohjainen testaus tarkoittaa, että tehdään tilakone systeemin käyttäytymisestä ja ajetaan sitä systeemiä vastaan satunnaisesti pomppimalla tilasta toiseen. Käytännössä mallipohjainen testaus mahdollistaa hyvin monimuotoisten testien generoinnin, joista satunnaisgenerointi on vain yksi mahdollinen.
Testauksen vaiheet:
1. Testattavan systeemin mallintaminen. Mallipohjaisessa testauksessa testattava systeemi pitää ensin mallintaa jollainkin tavalla. Normaalisti tähän käytetään jotain graafista mallinnuskieltä kuten UML, FSM ja MATLAB/Simulink/Stateflow. Sen ei kuitenkaan ole pakko olla graafineen, vaan se voi olla myös tekstipohjainen kuten Spec# tai b-notation.
2. Testaustavan valitseminen. Ensin pitää valita tekeekö online vai offline testausta. Offline testaus tarkoittaa testisetin generoimista mallin perusteella ja sen ajamista sitten myöhemmin. Online testaus taasen tarkoittaa että työkalu on päällä kokoajan ja katsoo sitä mallia kuin turisti karttaa ja suunnistaa siinä eteenpäin. Online testauksella voi paremmin testata epädeterminististä eli ennakoimatonta käyttäytymistä. Online testauksessa valitaan yleensä etenemistapa (esim. random, Markov Chain). Offline testauksessa on yleensä tavoitteena jokin kattavuus esimerkiksi kaikkien tilojen läpi käyminen (state coverage) tai kaikkien tilasiirtymien läpikäyminen (transition coverage). Hienostuneimmat algoritmit testaa ehtojen rajoja ehtolauseissa, eri haarautumisvaihtoethoja ja bittioperaatioita.
3. Adaptaatiokerroksen luonti tarkoittaa kerrosta jonka kautta testaustyökalu voi kommunikoida testattavan järjestelmän kanssa. Tämä voi olla yksi tai moniosainen. Offline testauksessa yleensä generoidaan scripti joka sitten linkataan testattavaan järjestelmään.
4. Testien suorittaminen. Testit suoritetaan yleensä painamalla nappia. Jos on kyse offline testauksesta niin monesti testisetti tallennetaan johonkin tiedostoon ja se ladataan toiseen työkaluun joka ajaa testit. Näin työkalun valmistaja pääsee vähemmällä kun ei tarvi koodata itse testien ajoa.
5. Tulosten tarkastelu. Jotta voidaan todella puhua automaattisesta testauksesta täytyy myös tulosten arviointi automatisoida. Tämä on yleensä mallin lisäksi ainoa graafinen osuus työkalusta. Kun ajaa testejä niin sinne tulee kaiken maailman punaisia mörköjä kun testit ei onnistu. Sinänsä hieno juttu niin ei tarvi alkaa manuaalisesti kahlaamaan lokitiedostoja.