Mallipohjainen testaus Esitys kuvaa ohjelmistojen mallipohjaisen testauksen perusasiat pyrkien valaisemaan niitä eiteknisellä tavalla. Tavoitteena on luoda kuulijoille realistinen käsitys mallipohjaisesta testauksesta, joka mahdollistaa sen soveltuvuuden tarkemman selvittämisen aloittamisen organisaatiossa. 25.3.2011 1(39)
Sisällysluettelo 1/2 Mitä on mallipohjainen testaus 4 Aihepiirin osaamisen tilanne 5 Tärkeää ymmärtää testauksen kontekstissa 6 Erilaisia tapoja 7 Miten se tapahtuu teknisesti 8 Monimutkaisempi kuva testaustehtävistä 10 Mallipohjaista testausta voi tehdä myös manuaalisesti 11 Tutkiva testaus 12 Testausympäristö 13 Soveltaminen 14 Testattavia asioita 15 Mitä ei testata yleensä mallipohjaisella testauksella 16 Edut 17 Rajoitukset ja ongelmat 20
Sisällysluettelo 2/2 Käyttöönotto organisaatiossa 23 Mallien laadinta projektissa 25 Haasteita organisaatioissa 27 Eritasoiset mallit 28 Erilaisia mallinnustapoja 29 Testaustyökalujen kehittäjien haasteita 30 Testausohjelmia 31 Uutta tulossa 33 Esityksen lähtötietoja 34 Tietolähteitä 35 LIITE: Mentaalisen mallin luomisen lähtökohtia 36 LIITE: Hyvän mallin piirteet 39
Mitä on mallipohjainen testaus Automatisoitua testausta, joka perustuu testattavan ohjelmiston formaaliin malliin Tilakaavio yms. (kielioppi, Markovin ketju ) Testataan mallia, mutta ei itse ohjelmistoa! Voidaan verifioida testauksen kohde tai tuottaa sille tapahtumia, siis simuloida ympäristöä Perustuu pääasiassa simulointiin Suoritetaan mallia kaikilla mahdollisilla variaatioilla ja katsotaan, mitä tapahtuu. Esim. tilamallin kaikki mahdolliset tilasiirtymät Ei siis välttämättä perustu suunniteltuihin testitapauksiin 4(39)
Aihepiirin osaamisen tilanne Löytyy monia yhden asian ja yhden tyylin osaajia Kokonaisymmärrys puuttuu Teknologiaosaamisen ja testausosaamisen yhdistyminen puuttuu 5(39)
Tärkeää ymmärtää testauksen kontekstissa Hyvä testaus Testauksen lähestymistavat Testauksen kokonaisuus Mallipohjainen testaus Erityyppinen mallipohjainen testaus Potentiaali ja realismi 6(39)
Erilaisia tapoja Mallipohjainen kehittäminen suunnittelumallin testaus Testausstrategia Simulointi Priorisoitu systemaattinen testaus Tutkiva testaus Tekijät Kehittäjät Testaajat Mallintajat Ympäristösimul aatio Integrointi ohjelmistokehitykseen Mallipohjainen testaus Erityisten testausmallien testaus Testaussuunnittelu mallien avulla Ohjelmat Kehitystyökalut Testausohjelmat Manuaalisesti Testaustasot Yksikkötestaus luokkien tilamallit Protokollat UI Järjestelmätestaus 7(39)
Miten se tapahtuu teknisesti 1/2 Laaditaan testausmallit Esim. UML-tilakaavio, jossa on kuvattu kaikki tilat, muuttujat ja niiden variaatiot, viestit ja tilasiirtymien ajoitus ja sen variaatiot Tilamalli on usein liitetty luokkaan tms. Mallinnustapa voi olla muukin formaali esitys, esim. SysML, SDL. LOTOS, IF jne Käytössä erikoistunut ohjelmisto, esim. Conformiq Test Generator Laaditaan adapteri, joka yhdistää testijärjestelmän ja testattavan ohjelmiston Yleensä hyvin työläs tehdä Esimerkiksi TCP/IP-rajapinnalla kiinni testaustyökalussa 8(39)
Miten se tapahtuu teknisesti 2/2 Aletaan suorittaa mallia! Tulkaten tai generoiden ohjelmakoodia (esim. TTCN-3, joka voidaan kääntää esim. C:ksi ja sitten konekieliseksi) Yötä päivää, malli ei siitä kulu Korjataan havaitut virheet malliin ja ohjelmiston spekseihin Toistetaan testausta Mallipohjaista testausta ei tarvitse tehdä kohdelaitteessa mallit voidaan verifioida vaikka Windows-työasemassa, vaikka kohdejärjestelmän ympäristö olisi mikä tahansa 9(39)
Monimutkaisempi kuva testaustehtävistä (Enjoying the Perks of Model-Based Testing. Ibrahim K. El-Far, Florida Institute of Technology) 10(39)
Mallipohjaista testausta voi tehdä myös manuaalisesti Mallipohjaista testausta on myös se, että testit suunnitellaan formaalien mallien perusteella "kynällä ja paperilla". Esim. tilamallin toiminnan analysointi ja testitapausten suunnittelu sen perusteella. Jo tämä tuottaa merkittäviä etuja tuomalla testitapausten suunnitteluun systematiikkaa. 11(39)
Tutkiva testaus Mallintaminen on tärkeä työkalu tutkivassa testauksessa Jos kehittäminen ei perustu malleihin, mallit tuovat ohjelmistoon uuden näkökulman ja se auttaa aina tunnistamaan sen ominaisuuksia, sudenkuoppia ja virheitä 12(39)
Testausympäristö Testattavan komponentin malli miten toimii? Muun komponentin malli tuottaa herätteitä, syötteitä Testausohjelma suorittaa malleja ja viestii adapterin kautta Adapteri Testattava järjestelmä oikeaa koodia, oikeassa koneessa 13(39)
Soveltaminen Ohjelmiston verifiointi ennen toteutusta verifioimalla sen malli Järjestelmän tai komponentin simulointi Tapahtumien tuottaminen. Muiden komponenttien simuloinnin toteuttaminen tuottavat herätteitä ja syötteitä testattavalle ohjelmalle paremmin kuin aito ohjelma Ei korvaa muuta testausta, vaan täydentää sitä Yleensä tehdään erilliset testausmallit, jotka tekee siihen erikoistunut testaaja 14(39)
Testattavia asioita Toiminnallisuus Pitkäaikaisluotettavuus Regressiotestaus jos mallia muutetaan, mitä se vaikuttaa Rankat kuormitustilanteet Tietokantatransaktiot muuten vaikea testata kattavasti Datan kulku läpi järjestelmän Synkronointi Kaikki, mihin liittyy paljon variaatioita ja on siksi vaikea testata muuten Raportoitujen vikojen simulointi Järjestelmää kuormittavien tilanteiden toistaminen 15(39)
Mitä ei testata yleensä mallipohjaisella testauksella Asiat, joiden tulkintaan tarvitaan ihminen esim. audiovisuaaliset asiat Turvallisuuteen liittyvät asiat edellyttävät ensisijaisesti muunlaista testausta mallipohjainen testaus ei näiden osalta saa ainakaan olla luonteeltaan positiivista simulointia 16(39)
Edut 1/3 Testataan määrittelyä, joka on kuvattu formaalisti Testaus saadaan hyvin nopeasti liikkeelle, jo määrittelyvaiheessa Malleja voidaan tehdä nopeasti Lyhentää tuotekehitysaikaa Jo testausmallien rakentaminen paljastaa monia vikoja spekseissä Mallien laatiminen parantaa muutenkin ymmärrystä järjestelmästä ja sen arkkitehtuurista Hyvä malli on hyvä viestintäväline 17(39)
Edut 2/3 Mallipohjaisen testauksen käyttöönotto pakottaa tuotteen testattavuuden suunnitteluun Dataan ja rajapintoihin pitää päästä käsiksi Mahdollistaa sellaisen testaamisen, mikä ei onnistu muilla tekniikoilla Paljastaa siis vaikeasti löydettäviä virheitä, jotka voivat olla kriittisiä Voidaan saavuttaa suuri testikattavuus Automaattisuus 18(39)
Edut 3/3 Parantaa manuaalisen testauksen tehokkuutta Tietoa testaussuunnitteluun Manuaalinen testaus voi keskittyä paremmin, kun rinnalla on mallipohjainen automaattinen testaus Kone Oyj:llä mallipohjainen testaus mahdollisti kiihdytetyn kehittämissyklin kuukausittaisista julkaisuista jopa päivittäisiin Löydettyjen bugien määrä Kone Oyj:llä 8 % Olisivat olleet vaikeita löytää manuaalisin testein Hyvä panos-hyötysuhde Tehosti myös manuaalista testausta, jolloin löydettyjen vikojen kokonaismäärä kasvoi selvästi 19(39)
Rajoitukset ja ongelmat 1/3 Systeemejä ei useinkaan ole kuvattu formaalisti tai se voi olla vaikeaa Testausmallien rakentamisessa on käytännössä sama työmäärä kuin ohjelmiston toteutuksessa ohjelmisto tehdään kahteen kertaan Tarvitaan aikaa 20(39)
Rajoitukset ja ongelmat 2/3 Tarvitaan valintoja testitapausten suorittamisessa. Jo suhteellisen yksinkertaisen tilamallin testitapausten määrä voi olla hyvin suuri. Kuitenkin mallipohjaisen testauksen etu on juuri se, että voidaan päästä korkeaan kattavuuteen. Sopivan tasapainon löytäminen oleellista. Automaattisiin testigeneraattoreihin tulee älyä, jossa perinteisillä testisuunnittelutekniikoilla voidaan vähentää testitapausten määrää. Esim. ekvivalenssiositus-menetelmällä. Käyttämällä erilaisia heuristisia sääntöjä (esimerkiksi mitä testataan, jos tapahtumassa liikkuu valuuttatietoja). Abstrahoimalla monimutkainen systeemi yksinkertaisemmaksi. Luokittelupuu-menetelmä auttaa tässä. Sillä jäsennetään testattavan ohjelmiston "näkökulmia" hallittavampaan muotoon, muutamiin luokkiin, joissa edelleen jäsennetään arvoalueita ekvivalenssiosituksella. 21(39)
Rajoitukset ja ongelmat 3/3 Koska mallipohjainen testaus täydentää muuta testausta, se ei vähennä perinteisen testauksen työmäärää Tarvitaan lisää testausresursseja Mallin suoritus ei testaa todellista ohjelmistokoodia Kaikki normaali testaus on tarpeen yksikkötesteistä järjestelmätesteihin Ei testaa kääntäjien bugeja Suorituskyvyn tai aikakriittisten sovellusten testaaminen ei onnistu, koska suoritettava malli tai siitä generoitu koodi ei vastaa todellista. Työkaluista riippuen mallien suoritus voi olla yksinkertaisesti liian hidasta. 22(39)
Käyttöönotto organisaatiossa 1/2 Menestymisen edellytykset hankittava siihen on syynsä, että mallipohjaista testausta käytetään vielä vähän Tarvitaan testausohjelmistot Evaluoitava huolellisesti Kannattaa selvittää vastaavan sovelluskohteen kokemuksia koska asia on uusi, siitä jaetaan tietoa konferensseissa ja seminaareissa (mutta vain menestystarinoita...) ja jo Googlella löytyy paljon tietoa 23(39)
Käyttöönotto organisaatiossa 2/2 Normaali testaajan kompetenssi ei riitä. Tarvitaan ohjelmistokehittäjän osaamista Testaajat kuitenkin oppivat lukemaan laadittuja malleja (esim. Ericssonin tutkimus) Mallipohjainen testaus ei ole testausorganisaation asia, vaan sitä tehdään hyvin tiukassa yhteistyössä ohjelmistokehityksen kanssa. Kaikkien osapuolten on sitouduttava siihen. Tiedostettava, miksi tätä tehdään, millä tavoitteilla Suunniteltava testauksen kokonaisjärjestelmä Ymmärrettävä mallipohjaisen testauksen rajoitukset Kannattaa panostaa yleiskäyttöisten adapterien ja hyvien mallinnustapojen luomiseen 24(39)
Mallien laadinta projektissa 1/2 Usein on käytössä malli, jossa mallintajat toimivat tiiviissä yhteistyössä ohjelmistokehittäjien kanssa Mallinnus käyntiin välittömästi speksausvaiheessa tai ohjelmoinnin rinnalla Malleja rakennetaan vaiheittain Aloittaen kaikkein kriittisimmistä komponenteista Mihin rajapintoihin päästään käsiksi Nopea käyntiinpääsy on oleellista, että saadaan systeemit kuntoon Kaikkea ei ole pakko mallintaa! Yksinkertaiset mallit syntyvät nopeasti. 25(39)
Mallien laadinta projektissa 2/2 Adapterien tekeminen on hitaampaa ja niiden ylläpito on työlästä. Panostettava viestintään, että mallit ovat ajantasalla Mallien luonnissa vikaraportointi Oleellista, koska/jos testausmallit tekee joku muu kuin ohjelmistokehittäjät Viestiminen määrittelyjen virheistä Mallien ylläpito järjestettävä. Kaikki speksien muutokset on vietävä malleihin (regressio, testikattavuus, uudet toiminnot). Kone Oyj:llä 1 htpv/kk ylläpitoa; softaa kehittää 1-5 henkilöä täysipäiväisesti 26(39)
Haasteita organisaatioissa Lisää kompleksisuutta projekteihin, lisää henkilöitä, lisää sopimuksia ja asioita Tarvitaan asian omistaja korkealla tasolla ja syvällä tekniikan tasolla Mallien yleiskäyttöisyys Mallien uudelleenkäyttö Mallien käyttö eri tuotteen konfiguraation muuttuessa Mallien käyttö eri testitasoilla ja tavoitteilla Savutesti, pitkäaikaistestaus, vaatimusten testaus 27(39)
Eritasoiset mallit Mallien kerrokset helpottavat niiden hallintaa normaalin kerrosmallin mukaisesti, esim. Korkean tason mallit toimintaprosessit Matalan tason mallit käyttöliittymä Tms., sovellusalueesta riippuen 28(39)
Erilaisia mallinnustapoja Lähtökohtana ei tarvitse olla ohjelmiston tilamalli Mikä tahansa formaali malli voi olla testien generoinnin lähtökohtana Esimerkiksi protokollan kuvauksesta voidaan generoida testauskoodia Käyttöliittymän määrittelystä voidaan kehittää sen käyttöä varioivaa koodia 29(39)
Testaustyökalujen kehittäjien haasteita Nykyisin mallipohjainen testaus on liian vaikeaa Heikot työkalut Kaikissa ei ole mallien debuggereita (Conformiqin Test Generatorissa on), ei mallikirjastoja Mallipohjaisuutta luotava tavallisiin kehittämis- ja testaustyökaluihin Mallipohjainen testaus helppoon mallipohjaiseen kehittämiseen 30(39)
Testausohjelmia 1/2 Aihepiiri on uusi ja ohjelmistojen tilanne muuttuu nopeasti. Tässä muutamia poimintoja. Suomessa tunnetuin on Conformiq:n Test Generator. http://www.conformiq.com/ctg.php Sen tärkeimmiksi ominaisuuksiksi mainitaan sivulla: UML statechart editing and intelligent execution Automatic test data combinations Visual model debugging Full support for data, time and concurrency Reporting in XML and HTML with custom backends Optional integration with TestDirector Possibility to run without GUI (batch mode) Vähemmän mainostettua on se, että TestGenerator tuottaa TTCN-3-testijoukkoja. 31(39)
Testausohjelmia 2/2 Telelogic TAU Mm. UML- ja TTCN-3-pohjainen kokonaissysteemi http://www.telelogic.com/products/tau/index.cfm Telelogic Rhapsody http://www.telelogic.com/products/. Mallipohjainen kehitys- ja testausympäristö mm. C, C++, Java ja Ada -kielille. UML ja SysML. Reactis Test and validate Simulink and Stateflow models automatically. Obtain machine-generated test data from models for system testing. http://www.reactive-systems.com/ T-VEC Technologies - Automatically verify and test Simulink and Stateflow models against their implementations. The T- VEC Tester for Simulink and Stateflow analyzes the target models and generates test vectors for every logic path. http://www.t-vec.com/ Leirios Test Generator http://www.leirios.com/ 32(39)
Uutta tulossa Maailmalla tutkitaan TTCN-3-pohjaisten testien automaattista generointia mm. TT-Medalhankkeessa (Suomesta mukana mm. VTT ja Conformiq.) http://www.tt-medal.org/results/deliverable.html Tampereen teknillisen yliopiston TEKESin tukemassa TEMA-hankkeessa kehitetään menetelmiä ja ohjelmistoja käyttöliittymätason mallipohjaiseen testaukseen mobiililaitteille http://practise.cs.tut.fi/project.php?project=tema. 33(39)
Esityksen lähtötietoja Mm. IBM (Rational):n, Ericssonin (3G-verkko), Kone Oyj:n (hissien kompleksi valvontajärjestelmä) ja Luottokunnan (laskujen käsittely) seminaariesitykset Tutkimusprojektit, mm. Tampereen teknisen yliopiston koordinoima Tema-hanke Selvitykset, kuten Ericssonin diplomityönä julkaisema 34(39)
Tietolähteitä Tästä kannattaa aloittaa: Weppisivu Model-Based Testing Home Page http://www.geocities.com/model_based_testing/ Sisältää paljon linkkejä artikkeleihin ja sivustoihin. 35(39)
LIITE: Mentaalisen mallin luomisen lähtökohtia 1/3 (Enjoying the Perks of Model-Based Testing. Ibrahim K. El-Far, Florida Institute of Technology.) Määritä testauksen tavoitteisiin perustuen komponentit / ominaisuudet, jotka pitää testata Ja mitä pitää mallintaa Ala tutkia systeemin kohdealueita Opettele sen toiminnallisuutta, testaa sitä manuaalisesti Kerää relevanttia, hyödyllistä dokumentaatiota Luo kommunikaatioyhteydet vaatimus-, suunnittelu- ja kehitystiimeihin Keskustele! Kenties löytyy jo malleja 36(39)
LIITE: Mentaalisen mallin luomisen lähtökohtia 2/3 Tunnista systeemin käyttäjät Entiteetit, jotka toimittavat tai käyttävät dataa tai vaikuttavat siihen Käyttöliittymät, käyttöjärjestelmä, tietokannat Listaa kaikkien käyttäjien syötteet ja tulosteet Tutki jokaisen inputin arvoaluetta Jotta löydetään mielekkäitä syötteitä ja oikeat raja-arvot Dokumentoi tietoa syötteiden sovellettavuudesta Esim. ymmärrys siitä, että syöte ikkunaan voi olla mahdollinen vain, jos ikkuna on auki 37(39)
LIITE: Mentaalisen mallin luomisen lähtökohtia 3/3 Dokumentoi tilanteet, joissa tapahtuu vasteita Tutki syötteiden ketjuja, jotka pitää mallintaa Ymmärrä ulkoisten tietovarastojen rakenne ja semantiikka Miltä data näyttää ja mitä se merkitsee Ymmärrä sisäiset datan vuorovaikutukset ja laskenta Ylläpidä yhtä elävää dokumenttia: mallia 38(39)
LIITE: Hyvän mallin piirteet (Enjoying the Perks of Model-Based Testing. Ibrahim K. El-Far, Florida Institute of Technology.) Malli on niin suppea kuin mahdollista ilman, että informaatio kärsii Mallissa ei pitäisi olla sellaista tietoa, joka ei tue tavoitteita Mallista pitää poistaa informaatio, joka on toistoa tai turhaa Mallin pitää olla mahdollisimman luettava, jopa tiiviyden kustannuksella Malli pitää jättää avoimeksi muutoksia tai lisäyksiä varten Mallia laatiessa pitää ottaa huomioon kaikki testin toteutuksen detaljit, vaikka niitä ei olisikaan mallissa 39(39)