Dynaaminen analyysi III Luento 5 Antti-Pekka Tuovinen www.cs.helsinki.fi 16 April 2018 1
Tavoitteet White box testitapausten suunnittelutekniikat Lausekattavuus Haarautumakattavuus Ehto- ja polkukattavuus Huomioita white box -tekniikoista www.cs.helsinki.fi 16 April 2018 2
White box -tekniikat Lause- ja haarautumakattavuus Ehtokattavuus Polkukattavuus www.cs.helsinki.fi 16 April 2018 3
Black box vs. White box Kurssikirjan kuva 5-2 s. 109 www.cs.helsinki.fi 16 April 2018 4
White box A.k.a koodiin perustuva testaus (code based testing), rakenteellinen testaus (structural testing) Yleisenä tavoitteena testin kohteen implementaation kattava testaus Jokainen kohta koodista suoritetaan ainakin kerran Testioraakkelina ei ole kuitenkaan koodi vaan spesifikaatio (esim. API-kuvaus) Implementaation verifiointi www.cs.helsinki.fi 16 April 2018 5
White box tekniikoita testitapausten määrittelyyn Perustekniikat (ISTQB Foundation -taso) Lausekattavuus (C0) Valintakattavuus (C1) Edistyneemmät (ei käydä yksityiskohtaisesti läpi kurssilla) Ehtokattavuus Polkukattavuus www.cs.helsinki.fi 16 April 2018 6
Lausekattavuus Tavoitteena on suorittaa tietty vähimmäismäärä (tai kaikki) testikohteen sisältämistä ohjelmointikielen lauseista Sijoituslause, valintalause (if, case), toisto (for, while), funktio-/metodikutsu (f( )), koottu lause ({...; ; ; }) Testin suunnittelua varten testikohde (ohjelmakoodi) muutetaan kontrollivuoverkoksi (control flow graph) Tarkoituksena on erityisesti tunnistaa kontrollin haarautumakohdat, jotka johtavat eri lauseryhmien suorittamiseen ajon aikana www.cs.helsinki.fi 16 April 2018 7
Kontrollivuoesimerkki Kurssikirja kuva 5-9, s.?? Peräkkäin suoritettavat lauseet kootaan samaan solmuun Lausekattavuus saavutetaan, kun kaikissa verkon solmuissa on käyty Suorituksen kulkua haaroittavasta lauseesta tulee oma solmunsa, samoin kuin kohdista, joissa haarautuneet suorituspolut yhtyvät www.cs.helsinki.fi 16 April 2018 8
Testitapaukset Testitapausten syötteet ja olosuhteet määritellään siten, että tapausten suorituksen aikana käydään läpi vähintään tavoiteltu määrä lauseita eli verkon solmuja Kuinka monta testitapausta tarvitaan tarvitaan, että saavutetaan 100% lausekattavuus esimerkin verkossa? www.cs.helsinki.fi 16 April 2018 9
Testitapaukset Esimerkkiverkolla saavutetaan täysi lausekattavuus yhdellä testitapauksella, joka käy läpi verkon kaaret järjestyksessä: a, b, f, g, h, d, e Muillakin suorituspoluilla ja/tai niiden yhdistelmillä saavutetaan lausekattavuus Pyritään kuitenkin minimoimaan testitapausten määrä Voi olla, että jo black box testitapauksilla saavutetaan lausekattavuus, mutta asia on varmistettava www.cs.helsinki.fi 16 April 2018 10
Testitapaukset Yleisesti ottaen kaikkien testitapausten suorituksen pitäisi johtaa kaikkien lauseiden suoritukseen vähintään kerran Vain suoritetuista lauseista voidaan löytää vikoja! Kaikkea koodia (esimerkiksi harvinaisten poikkeusten käsittely) ei välttämättä saada testattua ilman erityistyökaluja Ei-kriittistä koodia ei välttämättä tarvitse testata lausekattavasti www.cs.helsinki.fi 16 April 2018 11
Testitapaukset Testitapauksiin määritellään normaaliin tapaan syötteet, odotettu tulos ja mahdolliset esi- ja jälkiehdot Odotettu tulos määritetään vaatimusten/spesifikaation perusteella Testitapausten onnistunut suoritus (pass) on tärkeää - virheiden takia jotkin lauseet voivat jäädä suorittamatta Testitapausten suorituksesta on silti saatava tieto siitä, mitkä lauseet todella suoritettiin www.cs.helsinki.fi 16 April 2018 12
Testauksen lopetusehto Lausekattavuus = (suoritettujen lauseiden määrä / kaikkien lauseiden määrä) * 100% Lausekattavuus tunnetaan C0 -kattavuutena (C0-coverage) Suhteellisen heikko ehto! 100% kattavuuden saavuttaminen voi silti olla vaikeaa, esimerkiksi poikkeustilanteiden aiheuttaminen voi vaatia erikoistyökaluja www.cs.helsinki.fi 16 April 2018 13
Tekniikan arviointia Voi auttaa löytämään testikohteesta kuollutta koodia Tavoiteltua suurempi osuus koodista jää suorittamatta testissä Tyhjät kontrollivuoverkon haarat jäävät suorittamatta (ei testitapauksia niille) Esim If lauseen else haara on tyhjä ei ole tarpeen muodostaa testitapausta, joka käy tämän haaran läpi Mutta pitäisikö else haarassakin olla jotain koodia? Onko tässä vika? www.cs.helsinki.fi 16 April 2018 14
Haarautumakattavuus Valinta- eli haarautumakattavuus (decision / branch coverage) on lausekattavuutta vahvempi tekniikka, joka takaa kaikkien kontrollivuoverkon kaarien läpikäynnin Lauseiden sijasta keskitytäänkin haarautumasolmujen valintaehtojen arvojen evaluointiin www.cs.helsinki.fi 16 April 2018 15
Haarautumakattavuus Tavoitteena on määritellä testitapauksia, jotka johtavat jokaisen valintaehdon kaikkien vaihtoehtojen toteutumiseen vähintään kerran Esimerkiksi Jokaisen If valintalauseen sekä then että else -haara tulee valituksi vähintään kerran testitapausten suorituksen aikana while -toistolauseen rungon ohitus suorittamatta sitä kertaakaan ja toisaalta rungon suoritus vähintään kerran www.cs.helsinki.fi 16 April 2018 16
Esimerkki Aiemmin esitetyssä kontrollivuoverkossa 100%:n lausekattavuuteen riitti kaarien (a, b, f, g, h, d, e) muodostaman suorituspolun läpikäynti Kaaret c, i ja k jäävät käymättä läpi Kuinka monta testitapausta tarvitaan täyden haarautumakattavuuden saavuttamiseksi? www.cs.helsinki.fi 16 April 2018 17
Esimerkki Testitapauksia tarvitaan kolme 1. a, b, c, d,e 2. a, b, f, g, i, g, h, d, e 3. a, k, e Näitä suorituspolkuja vastaavien testitapausten suorittaminen tuottaa 100% haarautumakattavuuden Ja samalla lausekattavuuden, jolloin aikaisemmin määritelty testitapaus voidaan jättää suorittamatta Jotkin kaaret tulevat käydyksi läpi useampaan kertaan, mitä ei kuitenkaan voida välttää www.cs.helsinki.fi 16 April 2018 18
Testitapaukset Määritellään kuten tavallisesti Testioraakkelina edelleenkin vaatimukset (jos ovat olemassa), ei implementaatio On myös syytä pitää kirjaa siitä, mitkä haarat tulevat suoritetuiksi testin aikana Helpottaa vikojen löytämistä joissain tapauksissa esim. puuttuva koodi jostain (tyhjästä) haarasta www.cs.helsinki.fi 16 April 2018 19
Testauksen lopetusehto Haarautumakattavuus = (suoritettujen kaarien määrä / kaikkien kaarien määrä) * 100% Haarautumakattavuus tunnetaan C1 - kattavuutena (C1-coverage) Sisältää C0 kattavuuden, eli on sitä vahvempi ehto www.cs.helsinki.fi 16 April 2018 20
Testauksen lopetusehto Esimerkkimme tapauksessa kolmannen lisätestitapauksen suorittamatta jättäminen tuottaa vain 90% haarautumakattavuuden, vaikka 100% lausekattavuus saavutettiin jo yhdellä testitapauksella Kattavuustavoite voidaan perustaa arvioituun riskiin ja testikohteen kriittisyyteen Miten prosenttiluvut sitten valitaan, onkin Advanced tason asiaa www.cs.helsinki.fi 16 April 2018 21
Tekniikan arviointia Vaatii yleensä enemmän testitapauksia kuin lausekattavuus 100% haarautumakattavuus 100% lausekattavuus Mutta ei päinvastoin! Puuttuvan implementaation havaitseminen tyhjistä haaroista on mahdollista Hyöty voi olla rajallinen olio-ohjelmissa, jossa metodit ovat yleensä lyhyitä ja kompleksisuus piilee olioiden vuorovaikutuksessa www.cs.helsinki.fi 16 April 2018 22
Ehtokattavuus Haarautumakattavuus ei ota lainkaan huomioon valintaehtojen evaluoinnin monimutkaisuutta Ollaan kiinnostuneita vain koko ehdon evaluoinnin tuloksesta (true tai false) Valintaehdot ovat kuitenkin välillä mutkikkaita loogisia lausekkeita, joiden evaluoinnin tulos riippuu monen eri muuttujan tai parametrin arvosta www.cs.helsinki.fi 16 April 2018 23
Ehtokattavuus Perusideana on jakaa ehtolauseke atomisiin osiinsa Lausekkeen atominen osa ei sisällä loogisia operaattoreita AND, OR tai NOT, mutta se voi sisältää vertailuoperaattoreita ( >, == ) x > 3 AND x <= 10 x < 3 OR x >= 10 x < 3 AND (x > 0 OR x ==0) www.cs.helsinki.fi 16 April 2018 24
Ehtokattavuus Ehtokattavuustestauksesta on useita variaatiota riippuen siitä, minkälaisia atomisten ehtojen totuusarvojen kombinaatioita testataan Yksinkertainen ehtokattavuus Moniehtokattavuus Moniehtotuloskattavuus www.cs.helsinki.fi 16 April 2018 25
Yksinkertainen ehtokattavuus (condition testing and coverage) Määritelmä Ehtolausekkeiden jokaisen atomisen osan pitää saada (vähintään) kerran arvo TRUE ja arvo FALSE testien aikana Ei vaadi, että koko ehto evaluoituu sekä TRUE että FALSE arvoihin On siis teoriassa heikompi kattavuudeltaan kuin lause- tai haarautumakattavuus ( x < 3 OR x >= 10 ) www.cs.helsinki.fi 16 April 2018 26
e 1 e 2 e 1 V e 2 X : Yksinkertainen ehtokattavuus (condition testing and coverage) E : ( x < 3 OR x >= 10 ) e 1 e 2 X : www.cs.helsinki.fi 16 April 2018 27
Moniehtokattavuus (multiple condition coverage) Määritelmä Ehtolausekkeiden atomisten osien kaikki TRUE - FALSE kombinaatiot pitää testata Takaa, että koko ehto evaluoituu sekä TRUE että FALSE arvoihin On siis teholtaan lause- ja haarautumakattavuuteen vertautuva Voi olla kuitenkin hyvin työlästä (jopa mahdotonta) saada kaikki kombinaatiot aikaiseksi testin syötteillä Lisäksi ehtolausekkeen kaikkia osia ei välttämättä edes evaluoida suoritusaikana (jos niillä ei ole enää vaikutusta koko lausekkeen arvoon - tämä riippuu ohjelmointikielestä) www.cs.helsinki.fi 16 April 2018 28
Moniehtokattavuus (multiple condition coverage) E : ( x < 3 OR x >= 10 ) e 1 e 2 e 1 e 2 e 1 V e 2 X : X : X : X : www.cs.helsinki.fi 16 April 2018 29
Moniehtotuloskattavuus (condition determination testing) Lievempi ehto atomisten ehtojen kombinaatioille ainoastaan sellaiset kombinaatiot on testattava, jotka vaikuttavat koko ehtolauseen evaluoinnin tulokseen www.cs.helsinki.fi 16 April 2018 30
Tekniikoiden arviointia Monimutkaiset ehdot, jotka ovat loogisten lausekkeiden yhdistelmiä, ovat erityisen alttiita vioille Monimutkaiset ehdot ovat vaikeita ymmärtää ja vaikeita koodata oikein Erityisesti raja-arvojen käsittelyssä tulee helposti tehdyksi virheitä www.cs.helsinki.fi 16 April 2018 31
Tekniikoiden arviointia Niiden testaukseen kannattaa siis panostaa, mutta moniehtokattavuudet voivat osoittautua hyvin kalliiksi menetelmiksi (työmäärältään) Ehtoja voi yrittää yksinkertaistaa ja hajoittaa valintalauseet osiin ja turvautua haarautumakattavuuteen Ehtojen testauksen sijaan ne voi katselmoida www.cs.helsinki.fi 16 April 2018 32
Polkukattavuus Kaikki eri polut testattavan koodin läpi on suoritettava Jos polulla on silmukka, erilaisia (eri mittaisia ja eri haaroja/kaaria) sisältäviä polkuja voi olla rajattomasti Kuten ensimmäisellä luennolla nähtiin (Luento 1, s. 36-39), silmukan toistokertojen ollessa rajoitettu, kombinatorinen räjähdys voi tehdä kattavan testauksen mahdottomaksi www.cs.helsinki.fi 16 April 2018 33
Polkukattavuus Toisin kuin haarautumakattavuus, polkukattavuus ottaa huomioon kontrollivuoverkon haarojen keskinäisen suoritusjärjestyksen Testitapauksilla on siis suuremmat mahdollisuudet löytää vikoja, joitten esiintyminen riippuu testattavan koodin eri osien välisistä riippuvuuksista ja silmukoiden toistojen määristä Esimerkiksi muistivuodot, ajoitus- ja lukitusongelmat rinnakkaisessa suorituksessa jne. Polkukattavuuden testitapausten määrittely (tai sen yrittäminen) voi paljastaa vikoja valinta- ja toistolauseiden ehdoista www.cs.helsinki.fi 16 April 2018 34
Huomioita white box -tekniikoista Testattavan koodin kompleksisuus vaikuttaa testitekniikoiden ja intensiteetin valintaan Riittääkö lausekattavuus vai onko syytä käyttää myös haarautuma- tai polkukattavuutta? Soveltuvat parhaiten yksikkötestaukseen, miksei myös integrointitestaukseen kriittisten komponenttien osata Integrointitestauksessa voidaan vaatia tiettyä kattavuutta yksittäisten luokkien tai komponenttien osalta www.cs.helsinki.fi 16 April 2018 35
Työkalut Kattavuustestien käyttö vaatii työkalutukea testien suorituksen aikana Testin suorituksen jälkeen on aina todettava, mitkä lauseet ja valintaehdot ovat todella tulleet testissä suoritetuksi Testitapausten syötteet on toki suunniteltu tietyn kattavuuden saavuttamiseksi, mutta testin suunnittelijahan on voinut erehtyä Testattava koodi on yleensä instrumentoitava laskureilla, jotka pitävät kirjaa koodifragmenttien suorituksesta www.cs.helsinki.fi 16 April 2018 36
Työkalut Työkalut laskevat automaattisesti kattavuudet pienentäen inhimillisten virheiden riskiä ja vähentäen manuaalisen työn määrää www.cs.helsinki.fi 16 April 2018 37
Tavoitteet White box testitapausten suunnittelutekniikat Lausekattavuus Haarautumakattavuus Ehto- ja polkukattavuus Huomioita white box -tekniikoista www.cs.helsinki.fi 16 April 2018 38