60 likes | 153 Views
Tietovuohon perustuva yksikkötestaus (1/6). Lasilaatikkotestauksen toinen lähestymistapa. Siinäkin käytetään vuoverkkoa. Tarkastelun kohteena ovat moduulin muuttujat (myös sen käyttämät globaalit muuttujat). Erityisen kiinnostavaa olio-ohjelmille.
E N D
Tietovuohon perustuva yksikkötestaus (1/6) Lasilaatikkotestauksen toinen lähestymistapa. • Siinäkin käytetään vuoverkkoa. • Tarkastelun kohteena ovat moduulin muuttujat (myös sen käyttämät globaalit muuttujat). • Erityisen kiinnostavaa olio-ohjelmille. • Olion atribuuttien välittämä tietovuo metodinkutsujen välillä. Jokainen muuttujan käsittelytapaus luokitellaan seuraavasti: • määrittely (definition, D): muuttujalle annetaan arvo (alustuksella, sijoituksella tai syöttöoperaatiolla) • käyttö eli lukeminen(use, U): muuttujan arvoa käytetään mutta ei muuteta • predikaattikäyttö (predicate use, P-use): käytetään haarautumisehdossa (tai silmukan ohjausmuuttujana) • laskentakäyttö (computational use, C-use): käytetään muihin tarkoituksiin (laskentaan, tulostukseen) • tuhoaminen (kill, K): muuttuja tuhotaan tai sen arvo tehdään määrittelemättömäksi.
Tietovuohon perustuva yksikkötestaus (2/6) Mahdolliset peräkkäisten tapauslajien järjestykset: • DD – lievästi epäilyttävä (edellistä arvoa ei käytetä mihinkään) • DK – samoin epäilyttävä • DU – perustapaus (jota varten muuttujat ovat olemassa) • UD, UU, UK – normaalia • KD – normaalia • KK – kummallinen (ei mahdollinenkaan kaikissa kielissä) • KU – virheellinen! Lisäksi muuttujaan kohdistuvan ensimmäisen tapauksen pitää olla D; viimeinen tapaus on luonnollisimmin K. • Joissakin kielissä kaikki paikalliset muuttujat alustetaan automaattisesti. • Globaalit muuttujat erikoistapauksia. Vuokaavion solmut (segmentit): • Luetteloidaan jokaisen muuttujan käsittelyt kussakin segmentissä. • Tapausjärjestys segmentin sisällä on täysin staattinen. • Segmenttien välillä kiinnostaa polulla aiemman segmentin viimeinen ja myöhemmän ensimmäinen tapaus (muuttujittain). • Kaikki staattisessa analyysissä todettavat polut eivät kuitenkaan ole välttämättä mahdollisia.
Tietovuohon perustuva yksikkötestaus (3/6) DU-polku (DU path) (jonkin muuttujan suhteen): • Ensimmäisessä segmentissä on D-tapaus (määrittely). • Viimeisessä segmentissä on U-tapaus (käyttö). • P-käyttö tulkitaan yleensä niin, että se ei tapahdu itse predikaattisolmussa vaan siitä lähtevissä kaarissa. • Välillä ei ole yhtään D- eikä K-tapausta. • Siis ei välttämättä koko aliohjelman alusta loppuun. • DU-polku voi olla toisen DU-polun osapolku. • Kattavuuden kannalta vain maksimaaliset polut ovat kiinnostavia. • Silmukoita ei kuitenkaan käydä DU-polulla läpi moneen kertaan. Tietovuopohjaisessa testauksessa pyritään kattamaan DU-polkuja. • Koko polulla aliohjelman alusta loppuun voidaan joutua käymään silmukka läpi kahdesti. Yleisiä kattavuustavoitteita: • Vahvin: kaikki DU-polut (ADUP). • Ei kuitenkaan vaadi niin paljon testitapauksia kuin voisi luulla, koska sama testi kattaa yleensä useita muuttujia, määrittelyjä ja käyttöjä. • Kaikki käytöt (AU): ainakin yksi DU-polku jokaisesta määrittelystä sen jokaiseen käyttöön.
Tietovuohon perustuva yksikkötestaus (4/6) • Kaikki P-käytöt (APU): ainakin yksi DU-polku jokaisesta määrittelystä sen jokaiseen predikaattikäyttöön. • Em. tulkinnalla takaa haarakattavuuden. • Kaikki C-käytöt (ACU): vastaavasti laskentakäytöille. • Ei takaa haarakattavuutta. • Kaikki P-käytöt ja jotkin C-käytöt (APU+C): kuten APU, mutta lisäksi ainakin yksi DU-polku C-käyttöön jokaisesta sellaisesta määrittelystä, jolla ei ole yhtään P-käyttöä. • Kaikki C-käytöt ja jotkin P-käytöt (ACU+P): vastaavasti kuin APU+C. • Kaikki määritelmät (AD): ainakin yksi DU-polku jokaisesta määrittelystä. Luokanlaajuisessa vuoverkossa kiinnostavia ovat sellaiset DU-polut, jotka ylittävät metodinrajat. Polun herkistäminen tapahtuu tietysti samoin kuin ohjausvuohon perustuvassa testauksessa. • DU-polut ovat kuitenkin melko helppoja, varsinkin silmukkojen käsittely.
Tietovuohon perustuva yksikkötestaus (5/6) Muutamien testausstrategioiden (kattavuusmittojen) vahvuussuhteita • Nuoli A:sta B:hen: A on (aidosti) vahvempi kuin B. • Jos A:n ja B:n välillä ei ole polkua, ne ovat "vertailukelvottomia".
Tietovuohon perustuva yksikkötestaus (6/6) Tietovuotestauksen ongelmia Taulukoista ei yleensä tiedetä staattisesti, mitä alkiota missäkin käsitellään. • Voidaan valita turhia polkuja (luultavasti vain pieni lisärasite). • Mahdollinenkin tietovuo voi jäädä toteutumatta. Osoitin- ja viitemuuttujat aiheuttavat paljon suurempia ongelmia. • Mm. useimmissa oliokielissä kaikki muuttujat (perustyyppejä lukuunottamatta) ovat viitteitä. • On otettava huomioon sekä itse muuttujat että niiden kulloinkin osoittamat oliot (laajassa merkityksessä). • Samannimisyys (aliasing): useat muuttujat viittaavat samaan olioon. • Nollaosoitin on hankala erikoistapaus. • Ei yleensä käsitellä testauskirjoissa! Varsinaisten olioiden käsittely on suureksi osaksi metodien kutsumista, ei yksinkertaista kirjoittamista ja lukemista. Työkalutuki on melko huono. • Uudempi lähestymistapa kuin ohjausvuotestaus.