1 / 8

Tilapohjainen mustalaatikkotestaus (1/8)

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.

abel
Download Presentation

Tilapohjainen mustalaatikkotestaus (1/8)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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.

  2. 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 nayte1 = ...; Simppeli olio = new L; olio.aseta (nayte1); int tulos = olio.lue (); Tämän jälkeen pitää tietysti olla tulos == nayte1 . 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.

  3. Tilapohjainen mustalaatikkotestaus (3/8) Mahdollinen neljäs testitapaus, samoin toisen jatkona: final int nayte2 = ...; olio.aseta (nayte2); tulos = olio.lue (); • Tarkistetaan, että aseta vaikuttaa muulloinkin kuin ensimmäisellä kerralla. • Viidentenä tapauksena voitaisiin testata tätä ilman ensimmäistä lue-metodin 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).

  4. 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.

  5. 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: Tilapohjainen mustalaatikkotestaus (5/8) pop / EmptyStackException Empty pop [n==1] / return top(x) push(x) push(x) [n<max-1] pop [n>1] / return top(x) Loaded push(x) [n==max-1] pop / return top(x) push(x) / FullStackException Full

  6. 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. • 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. pop [n==0] / EmptyStackException pop [n>0] / return top(x) push(x) [n<max] push(x) [n>=max] / FullStackException

  7. 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).

  8. 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.

More Related