Historiljennus mllipohjisess testuksess Timo Kellomäki This text ppered s Kellomäki, T. Historiljennus mllipohjisess testuksess. Tietojenkäsittelytieteen päivät 2005, University of Oulu, Deprtment of Informtion Processing Science, Working Ppers Series B 67, pp. 131-135. (Proceedings of n event in Oulu, Finlnd, June 12-13.) In Finnish. 1
Historiljennus mllipohjisess testuksess Timo Kellomäki Tmpereen teknillinen yliopisto Ohjelmistotekniikn litos timo.kellomki@tut.fi 1 Johdnto Testuksen tvoite on kerätä luottmust siihen, että testttv järjestelmä toimii oikein. Mitään todellist järjestelmää ei void testt läpikotisin, joten on olennist suunnitell testus niin, että järjestelmästä tutkitn toislt mhdollisimmn pljon j toislt mhdollisimmn olennisi osi. Rinnkkisiss järjestelmissä testus on tvllisikin järjestelmiä hnklmp, kosk rinnkkisuus iheutt epädeterminismiä, eli järjestelmä ei välttämättä käyttäydy smoill syötteillä in smll tvll. Näin voi syntyä virhetilnteit, jotk ilmenevät vin hyvin hrvoin. Mllipohjisess testuksess järjestelmän toimint mllinnetn formlill, esimerkiksi tilkonemuotoisell, spesifiktioll. Spesifiktion pohjlt voidn luod utomttisesti järjestelmän toiminnn kttv joukko testitpuksi. [2] Jos järjestelmän spesifiktio on korkell strktiotsoll, stt täyden kttvuuden (mitttun suhteess spesifiktioon) tuottv testijoukko oll hyvinkin pieni. Tällöin olisi trpeen ljent spesifiktiot niin, että sen määrittelemä käyttäytyminen ei muutu, mutt sen perusteell luotvt testitpukset kttvt toteutuksen mhdollisimmn monipuolisesti. Tätä tilnnett vrten on kehitetty historiljennus, jok on utomttinen tp ljent spesifiktiot siten, että mllipohjisen testuksen menetelmät luovt ljennetun spesifiktion pohjlt testitpusten joukon, jok syventää testikttvuutt hyvin luonnollisell tvll. 2 Tilkoneet Ohjelmien toimint voidn kuvt formlisti tilkoneill, jotk ovt olennisesti suunnttuj grfej. Solmut eli tilt vstvt ohjelmn tiloj j kret eli tilsiirtymät erilisi tphtumi, jotk muuttvt til. Kullkin tilsiirtymällä on myös nimi, jok kertoo, mitä tphtum kri esittää. Tilsiirtymien nimet voivt oll hyvin konkreettisi järjestelmän tphtumi ti strktimpi tphtumkokonisuuksi. Näin sm järjestelmä voidn kuvt monell eri strktiotsoll. Tilkoneen kkosto sisältää kikki siinä esiintyvien tilsiirtymien nimet, j mhdollisesti muitkin tilsiirtymien nimiä (tällä on merkitystä synkronisess rinnnkytkennässä, ktso ll). Tilkoneen koko trkoitt sen tilojen määrää. Tilkoneen suoritus lk jostkin lkutilst j etenee kulkemll pitkin jotkin tämänhetkisestä tilst lähtevää krt, eli suorittmll vireessä olev tilsiirtymä. Näin suoritus voi jtku teoriss loputtomiin. Erillisiä lopputiloj ei tilkoneiss ole.
Kellomäki 22 Historiljennus Uset erilisilt näyttävät smn strktiotson tilkoneet voivt esittää sm käyttäytymistä, hyvin pljon smn tpn kuin sm lgoritmi voidn kuvt monell ivn erilisell C-kielisellä ohjelmll. On olemss tunnettu lohkomislgoritmi, joll voidn minimoid nnetun tilkoneen koko muuttmtt sen käyttäytymistä. Tilkoneet soveltuvt erityisen hyvin rinnkkisten järjestelmien kuvmiseen, sillä monimutkisen järjestelmän eri ost voidn mllint pieninä j yksinkertisin tilkonein, jotk voidn sitten sett vuorovikuttmn toistens knss esimerkiksi jetun muistin ti snomjonojen välityksellä. Tässä esityksessä käytetään yleistä j strkti vuorovikutusmenetelmää, synkronist rinnnkytkentää. Sen vull voidn mllint muun muss edellä minitut kommuniktiomenetelmät. Synkronisess rinnnkytkennässä os tphtumist on näkyviä. Kikki ne rinnnkytkentään osllistuvt tilkoneet, joiden kkostoon jokin näkyvä tphtum kuuluu, toimivt tämän tphtumn suhteen synkronisesti. Tällinen tphtum voidn suoritt vin jos se on vireessä kikiss näissä tilkoneiss, j tällöin sen täytyy tphtu kikiss niissä yhtäikisesti. Näin yksikin sellinen rinnnkytkentään osllistuv tilkone, joss tphtum ei ole vireessä, mutt jonk kkostoon tphtum kuuluu, estää kikki muit suorittmst sitä. Loput tilsiirtymät ovt näkymättömiä, jolloin tilkoneet voivt suoritt niitä täysin riippumtt toisistn. Tällisen rinnnkytkennän lopputulos on yhä tilkone, jonk tilt vstvt siihen osllistuneiden tilkoneiden yhteistiloj. Tulos siis kuv rinnnkytkettyjen tilkoneiden yhteistä käyttäytymistä. Eräs yleistjuinen ktsus tilkoneisiin on [4]. 3 Mllipohjinen testus Testuksen yhteydessä käytetään usein tilsiirtymien jko syötteisiin (input) j tulosteisiin (output). Jokinen tilkoneen näkyvä tilsiirtymä on tällöin joko syöte ti tuloste. Sm tilsiirtymä voi oll toisen tilkoneen syöte j toisen tuloste. Nyt khden tilkoneen rinnnkytkennässä synkronisesti suoritettvt tilsiirtymät ovt epäsymmetrisiä syöte/tulosteprej: kun toinen tilkone nt jotkin ulospäin, toinen ott sen vstn omn syötteenään. Testuksen näkökulmst järjestelmää testtn ntmll sinne syötteitä, jotk ovt siis spesifiktion näkökulmst tulosteit. Tkisin sdn tulosteit, jotk ovt spesifiktion syötteitä. On mhdollist, että järjestelmä ei s vstt johonkin syötteeseen linkn. Tällöin ktsotn järjestelmän ntneen erityisen syötteen, hiljisuuden, jot merkitään δ. Eräs tilkoneiden teorin testuksen näkökulmst johdttelev rtikkeli on [3]. Mllipohjisess testuksess ohjelmn oike toimint formlisoidn tilkonemuotoisell spesifiktioll. Tällöin testitpuksi voidn luod tämän spesifiktion pohjlt koneellisesti. Testitpukset voidn luod niin, että ne täyttävät jonkin kttvuusvtimuksen. Esimerkiksi voidn tt, että jmll luodut testitpukset tulevt kikki spesifiktion tilsiirtymät käydyksi läpi. Näin testuksest voidn tehdä täysin utomttist, kunhn ihminen on ensin tehnyt spesifiktiotilkoneen. Spesifiktiot voivt oll monimutkisellekin järjestelmälle melko pieniä, etenkin jos ne ovt kovin korkell strktiotsoll. Tällöin edellä kuvttu utomttinen testusmenetelmä ei välttämättä tuot trpeeksi erilisi testitpuksi. Epädeterminismin nsiost
Kellomäki 23 Historiljennus rinnkkisess järjestelmässä voidn toki toist smoj testejä yhä uudestn j toivo hvittvn uudenlist käyttäytymistä, mutt tämä ei ole kovinkn tehokst. 4 Historiljennus Resurssej on mhdollist käyttää tehokkmmin tekniikll, jot kutsumme historiljennukseksi. Sen kntv jtus on siinä, että virheet pljstuvt tehokkmmin, kun testtn mhdollisimmn mont erilist histori, eli tiln johtvien peräkkäisten tphtumien erilist yhdistelmää. Käytännössä näitä yhdistelmiä päästään utomttisesti testmn ljentmll spesifiktiot sopivll tvll. Vlitn jokin pieni kokonisluku, k, jok on muistettvn historin mksimipituus. Jokinen spesifiktion til korvtn joukoll tiloj, joist kukin vst yhtä (enintään) k:n mittist korvttuun tiln johtv histori. Spesifiktion ljennus voidn utomtisoid. Alkuperäinen spesifiktio kytketään rinnn k-historiljentimen knss j tuloksen sdn täsmälleen hluttu ljennettu spesifiktio. k-historiljennin on tilkone. Sen jokisest tilst lähtevät kikki spesifiktion näkyvät tilsiirtymät. Ljentimess on til jokist enintään k:n mittist tilsiirtymien nimien jono eli histori kohden. Nämä sdn siis meknisesti rkentmll kikki k:n mittiset j lyhyemmät yhdistelmät tilsiirtymien nimistä. Tilt, joiden tilsiirtymien jono on k:t lyhyempi, liittyvät tilkoneen jon lkuun, jolloin tilkone ei ole vielä ottnut k:t skelt, joten vstv k:n mittist histori ei ole myöskään olemss. Jokisest tilst lähtevät tilsiirtymät johtvt in selliseen tiln, johon liittyvä tilsiirtymien nimien jono sdn lisäämällä lähtötiln jonoon suoritettvn tilsiirtymän nimi j trvittess unohtmll lkupäästä yksi siirtymä, jott histori ei ksv pidemmäksi kuin k. Toisin snoen, jos til vstv tilsiirtymien nimien jono on muoto 1 2 k, niin siitä lähtevä tilsiirtymä vie tiln, jonk jono on muoto 2 k. Kuv 1 esittää historiljentimen tpuksess, joss tilsiirtymien joukko on j k 2. Kuvss ε trkoitt tyhjää merkkijono eli ino mhdollist histori tilkoneen käynnistyessä. Historiljennin ei rjoit rinnnkytkettäessä spesifiktion toimint, kosk sen jokisest tilst lähtevät kikki mhdolliset tilsiirtymät. Niinpä kikki järjestelmän lillinen toimint on rinnnkytkennän tuloksess mukn. Useimpiin spesifiktion tiloihin ei voi päätyä kikill mhdollisill historioill, joten tiloille ei ljennettess tyypillisesti synny kuin murto-os teoreettisest mksimimäärästä kopioit. Esimerkiksi tilkoneess, jok koostuu pelkästään peräkkäisten tphtumien j yhdessä muodostmst silmukst tkisin lkutiln, voi lkutiln päästä äärettömän monell tphtumjonoll, nimittäin ε j niin edelleen. Jos k 2, lkutil korvutuu ljennettess khdell tilll, joist toinen vst tyhjää tphtumien jono ε j toinen khden mittist histori. Erilisi historioit olisi tässä tpuksess ollut olemss kuvn 1 tiloj vstvt 7 kpplett. Käytettäessä historiljennust utomttisesti voisi järjestelmä esimerkiksi ljent spesifiktiot ksvvill k:n rvoill jen kullekin rvolle kikki ljennetun spesifiktion kret kttvt testitpukset. Näin jtketn, kunnes resurssit loppuvt. Vikk historiljennus on yllä esitetty lähinnä tvllisten tilkoneiden näkökulmst, se toimii lähes sellisenn myös syöte/tuloste-jon knss. Historiljentimess se-
Kellomäki 24 Historiljennus ε Kuv 1: Historiljennin tphtumille j, k 2. tetn kukin spesifiktion syöte tulosteeksi j tuloste syötteeksi, jott rinnnkytkentä voi synkronoid syöte/tuloste-prej. Erikoistphtum δ on vin yksi ylimääräinen näkyvä tphtum muiden joukoss. Historiljennin erillisenä tilkoneen on esitetty lähinnä ymmärrettävyyssyistä. Kun historiljennust toteutetn käytännössä, voidn ljennus toteutt utomttisesti myös suorn spesifiktiot muokten. Näin vältytään käsittelemästä eksplisiittist historiljennintilkonett, jok olisi turhn väliviheen mhdollisesti pljonkin lopullist ljennettu spesifiktiot suurempi. 5 Koejärjestelyt Intuitiivisesti tuntuu luonnolliselt, että mhdollisimmn monen erilisen historin tutkiminen pljst virheitä tehokksti. Erilisten testusmenetelmien vertilu on hnkl, mutt jossin määrin tehokkuutt on mhdollist tutki myös puolueettomill kokeill. Suunnitelluss koejärjestelyssä tutkitn jotkin järjestelmää, johon on istutettu virhe. Järjestelmästä rkennetn myös tilkone, jok spesifioi sen oiken toiminnn. Järjestelmää testtn toislt lkuperäisellä spesifiktioll j toislt erilisill k:n rvoill ljennetuill spesifiktioill j verrtn tuloksi. Tällisell testijärjestelyllä voidn myös tutki esimerkiksi sitä, knnttisiko spesifiktiot minimoid ennen kuin historiljennust sovelletn niihin. Historiljennus ksvtt spesifiktiot hllitusti, jolloin lkuperäisessä spesifiktioss olev redundnssi on turh. Tälliset kokeet voitisiin suoritt käyttäen kyseisen ohjelmn oike toteutust, mutt jos järjestelmä on riittävän pieni, myös toteutus voidn mllint (spesifiktiot yksityiskohtisempn) tilkoneen. Toteutukseen voidn silloin kätkeä virheitä, jolloin on mhdollist lske suorn tilkoneiden rinnnkytkennästä virheiden löytämisen todennäköisyys j testijon hint joko rtkisemll (vltv) yhtälöryhmä ti käyttäen tätä trkoitust vrten kehitettyä lgoritmi [1]. Tällinen koejärjestely on tätä kirjoitettess vielä
Kellomäki 25 Historiljennus työn ll. Kiitokset Työ tehtiin Tmpereen teknillisen yliopiston ohjelmistotekniikn litoksell TEKESin, Conformiq Softwre Oy Ltd:n j Nokin tutkimuskeskuksen rhoittmss SASOKEprojektiss. Viitteet [1] Kellomäki, T., Vlmri, A.: A Method for Anlysing the Performnce of Testing Techniques for Concurrent Systems. Technicl report, Institute of Softwre Systems, Tmpere University of Technology, 2004. [2] Tretmns, J.: A Forml Approch to Conformnce Testing. PhD thesis, University of Twente, Decemer 1992. [3] Tretmns, J.: Test Genertion with Inputs, Outputs nd Repetitive Quiescence. Softwre Concepts nd Tools, Vol 17(3), Springer-Verlg 1996, pp. 103 120. [4] Vlmri, A.: Esimerkki modernist sovellushkuisest teorist: vuorovikuttvt tilkoneet. Proc. Tietojenkäsittelytieteen päivät 2004. Joensuun yliopistopino, Joensuu, 2004.