Tilapohjainen mustalaatikkotestaus 18 Usein aliohjelman kutsun tulos ei

  • Slides: 8
Download presentation
Tilapohjainen mustalaatikkotestaus (1/8) Usein aliohjelman kutsun tulos ei riipu pelkästään eksplisiittisistä syötteistä vaan myös

Tilapohjainen mustalaatikkotestaus (1/8) Usein aliohjelman kutsun tulos ei riipu pelkästään eksplisiittisistä syötteistä vaan myös moduulin tai olion tilasta (state). ● Tila määräytyy yleensä moduulin tms. aiemmasta historiasta. ● Testitapaukseksi tarvitaan peräkkäisten kutsujen sarja. Äärimmäisen yksinkertainen esimerkki: interface Simppeli { void aseta (int arvo); int lue (); } ● Metodin lue pitää palauttaa se luku, joka on ollut viimeksi metodin aseta kutsun parametrinä. ● Metodin lue pitää aiheuttaa poikkeus, jos metodia aseta ei ole vielä kutsuttu. ● Miten testataan luokkaa L, joka toteuttaa tämän liittymän? ● Voidaan olettaa, että käyttäytyminen on kaikille kokonaisluvuille samanlainen.

Tilapohjainen mustalaatikkotestaus (2/8) Ensimmäinen testitapaus: Simppeli olio = new L; int tulos = olio.

Tilapohjainen mustalaatikkotestaus (2/8) Ensimmäinen testitapaus: Simppeli olio = new L; int tulos = olio. lue (); Tämän pitää aiheuttaa poikkeus. Toinen testitapaus: final int nayte 1 =. . . ; Simppeli olio = new L; olio. aseta (nayte 1); int tulos = olio. lue (); Tämän jälkeen pitää tietysti olla tulos == nayte 1. Mahdollinen kolmas testitapaus toisen jatkona: tulos = olio. lue (); Pitää saada sama tulos. ● Metodi lue ei saa muuttaa olion tilaa. ● Esim. yhden elementin pino ei kelpaa.

Tilapohjainen mustalaatikkotestaus (3/8) Mahdollinen neljäs testitapaus, samoin toisen jatkona: final int nayte 2 =.

Tilapohjainen mustalaatikkotestaus (3/8) Mahdollinen neljäs testitapaus, samoin toisen jatkona: final int nayte 2 =. . . ; olio. aseta (nayte 2); tulos = olio. lue (); ● Tarkistetaan, että aseta vaikuttaa muulloinkin kuin ensimmäisellä kerralla. ● Viidentenä tapauksena voitaisiin testata tätä ilman ensimmäistä luemetodin kutsua. ''Tilalla'' on erilaisia merkityksiä. ● Moduulin tms. kaikkien muuttujien arvojen yhdelmä. ● Jokin abstraktio tästä – ekvivalenssiluokka. ● Määritellään usein tilainvariantin avulla. ●Muuttujista muodostettu looginen lauseke (predikaatti). ● Kiinnostava on sellainen erottelu, että moduulin käyttäytyminen on eri tiloissa erilaista. ●Esim. kiinteänkokoisen pinon tilat: tyhjä (alkioita == 0), vajaa (alkioita > 0 && alkioita < max), täysi (alkioita == max).

Tilapohjainen mustalaatikkotestaus (4/8) Tilapohjaista käyttäytymistä kuvataan yleensä tilakaavioilla. ● Useita muunnelmia. ● Voidaan esittää

Tilapohjainen mustalaatikkotestaus (4/8) Tilapohjaista käyttäytymistä kuvataan yleensä tilakaavioilla. ● Useita muunnelmia. ● Voidaan esittää myös taulukkomuodossa. Moduulin tai olion tilakaaviossa on ainakin neljänlaisia elementtejä: ● Tila ● Tapahtuma (event): ulkoinen syöte tai heräte, esim. metodin kutsu ● Siirtymä (transition): tapahtuman aiheuttama siirtyminen tilasta toiseen (tai samaan tilaan) ● Toiminto (action): siirtymään liittyvä muu toiminto (esim. toiselle oliolle lähetetty tapahtuma). Kaavio kertoo, mitkä tapahtumat ovat sallittuja missäkin tilassa sekä minkä siirtymän ja toiminnon kukin niistä aiheuttaa. ● Siirtymän täytyy määräytyä yksikäsitteisesti (deterministisesti). ● Esim. UML: n tilakaavioissa kuhunkin siirtymään voidaan lisäksi liittää ehto. ● Tällöin voi olla vaihtoehtoisia siirtymiä, jos ehdot ovat toisensa poissulkevia.

Tilapohjainen mustalaatikkotestaus (5/8) Tietyssä tilassa kelpaamattoman tapahtuman käsittelyn mahdollisuuksia: ● Jätetään kokonaan huomiotta. ●

Tilapohjainen mustalaatikkotestaus (5/8) Tietyssä tilassa kelpaamattoman tapahtuman käsittelyn mahdollisuuksia: ● Jätetään kokonaan huomiotta. ● Aiheuttaa poikkeuksen tai muun erikoistoiminnon. ● Pannaan jonoon ja käsitellään myöhemmin, jos olio tulee sellaiseen tilaan, jossa tapahtuma on sallittu. ● UML jättää valinnan avoimeksi. Pinoesimerkki: pop / Empty. Stack. Exception Empty pop [n==1] / return top(x) push(x) [n<max-1] Loaded push(x) [n==max-1] push(x) / Full. Stack. Exception pop / return top(x) Full pop [n>1] / return top(x)

Tilapohjainen mustalaatikkotestaus (6/8) Kaavion ehdot perustuvat pelkästään pinon atribuutteihin. ● Käyttäytymiseen vaikuttava olion tila

Tilapohjainen mustalaatikkotestaus (6/8) Kaavion ehdot perustuvat pelkästään pinon atribuutteihin. ● Käyttäytymiseen vaikuttava olion tila on siis esitetty osittain kaavion tiloina, osittain siirtymien ehtoina. ● Tiloja voisi olla max+1, jolloin ehtoja ei tarvittaisi. ● Toinen ääripää: vain yksi kaavion tila ja enemmän ehtoja. ● pop [n==0] / Empty. Stack. Exception push(x) [n<max] pop [n>0] / return top(x) push(x) [n>=max] / Full. Stack. Exception Ei kovin hyödyllinen. ● Testitapaukset? ● Toinen ääripää: yritetään ottaa alkio tyhjästä pinosta. ● Toinen ääripää: täytetään pino (max panoa) ja yritetään panna siihen vielä yksi alkio. ● Pano- ja ottosarjoja, joiden ei pitäisi aiheuttaa poikkeusta. ● Kaikissa tapauksissa ei ehkä tutkita, onko saatu alkio oikea.

Tilapohjainen mustalaatikkotestaus (7/8) Tilakaavioihin liittyviä yksinkertaisia testauksen kattavuuskriteerejä: ● Paloittainen kattavuus: kaikki tilat, kaikki

Tilapohjainen mustalaatikkotestaus (7/8) Tilakaavioihin liittyviä yksinkertaisia testauksen kattavuuskriteerejä: ● Paloittainen kattavuus: kaikki tilat, kaikki tapahtumat, kaikki toiminnot. ● Liian heikkoja (Binder). ● Kaikki eksplisiittiset siirtymät (ts. kussakin tilassa sallitut tapahtumat). ● Paloittainen kattavuus seuraa tästä automaattisesti. ● Kaikki siirtymät (ts. kaikki tapahtumat kaikissa tiloissa). ● Suositellaan vähimmäisvaatimukseksi (Binder). Polkukattavuuskriteerejä: ● Kaikki N-siirtymäiset: jokainen mahdollinen N siirtymän sekvenssi käydään läpi ainakin kerran. ● Kaikki silmukat: jokainen mahdollinen silmukka (jostakin tilasta takaisin samaan tilaan toistamatta mitään siirtymää) käydään läpi ainakin kerran. ● Nämä ovat vahvempia vaatimuksia kuin kaikki siirtymät, mikäli kaavio on vahvasti yhtenäinen (jokaisesta tilasta on polku jokaiseen).

Tilapohjainen mustalaatikkotestaus (8/8) Raja-arvotestaus ● Jos tilat on määritelty tilainvarianttien avulla, niihin voi soveltaa

Tilapohjainen mustalaatikkotestaus (8/8) Raja-arvotestaus ● Jos tilat on määritelty tilainvarianttien avulla, niihin voi soveltaa samoja periaatteita kuin syötteen ekvivalenssiluokkiin. ● Puhtaassa mustalaatikkotestauksessa voi olla vaikeaa tai mahdotonta saada aikaan tilainvarianttien raja-arvoja. Sellaisia luokkia, joiden käyttäytyminen riippuu tilasta (historiasta), sanotaan modaalisiksi, muita luokkia ei-modaalisiksi. ● Testattavuuden kannalta olisi hyvä, että ohjelmistossa olisi mahdollisimman vähän modaalisia luokkia. ● Varmuuden vuoksi ei-modaalistakin luokkaa voidaan testata myös samanlaisilla metodinkutsusarjoilla kuin modaalista. ● Voi olla perusteita epäillä tietynlaisia toimintoketjuja virhealttiiksi.