1 / 41

Testaus

Testaus. J ohdanto: Mitä testaus on (ja mitä se ei ole) Testauksen ongelmia Testaustasot, V-malli Testitapausten valinta Testauksen kattavuus Työkalut Suunnittelu, seuranta ja dokumentointi Oliokeskeisyys ja testaus Kansanviisauksia T. Testaus. ohjelma. ohjelmakoodi. syöteavaruus.

levana
Download Presentation

Testaus

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. Testaus • Johdanto: Mitä testaus on (ja mitä se ei ole) • Testauksen ongelmia • Testaustasot, V-malli • Testitapausten valinta • Testauksen kattavuus • Työkalut • Suunnittelu, seuranta ja dokumentointi • Oliokeskeisyys ja testaus • Kansanviisauksia T

  2. Testaus ohjelma ohjelmakoodi syöteavaruus tulosavaruus X Y sisäinen tila • Syöteavaruuden koko ja mahdollisten tilojen määrä on niin valtava, ettei edes pienen ohjelman kattava testaus ei ole käytännössä mahdollista. • Reaaliaikajärjestelmän tapauksessa tilanne on kertaluokkaa ongelmallisempi. • Testaamalla voi siis osoittaa, että ohjelmassa on virheitä, ei sen virheettömyyttä. Johtopäätös?

  3. Testaus • Testaus on systemaattista virheiden etsimistä -- ei sattumanvaraista ohjelman kokeilua. • Testauksen tarkoitus on osoittaa että ohjelmassa on virheitä. • Mitä enemmän virheitä löytyy, sitä onnistuneempi testi on. • Virhe on ristiriita spesifikaation ja toteutuksen välillä. • Virheiden jäljitys eli debuggaus ei ole testausta. • Tehtäviä... • Testaussuunnitelman laatiminen. • Ensimmäinen versio jo määrittelyvaiheessa. • Testauksen tavoitteet kussakin testissä. • Testikohtaisesti testitapausten suunnittelu. • Testausympäristöjen luonti. • Testauksen suoritus. • Tulosten tarkastelu.

  4. Error, fault, failure • Virhe (error, kansanomaisesti bugi): ihmisen tekemä möhläys, esimerkiksi ohjelmointivirhe tai virhe dokumentissa. • Kun virheellinen ohjelmankohta suoritetaan, se saattaa aiheuttaa vian (fault). Järjestelmä on nyt tilassa, joka ei ole sen määrittelyn mukainen. • Vika puolestaan voi aiheuttaa häiriön (failure), joka on vian ilmeneminen järjestelmän ulkoisessa käyttäytymisessä.

  5. Slide 14 of 39

  6. Testauksen ongelmia • Asenne: testauksella yritetään osoittaa ohjelman toimivuus, ei toimimattomuus. • Testauksen aliarvostus: "ne jotka eivät muuta osaa, testaavat". • Milloin testaus voidaan lopettaa: kun rahat/aika loppuu? • Onko kaikki testattu? • Mihin tehdyt korjaukset vaikuttavat? • Testien toistaminen korjausten jälkeen (regressiotestauksen työmäärä). • Testin toistettavuus (ajastukset ja muut hallitsemattomat ilmiöt), esimerkkejä: • osoittimien käyttö (yllättävän usein) • reaaliaikajärjestelmä, • hajautettu järjestelmä ja • graafinen käyttöliittymä.

  7. ...testauksen ongelmia • Moduulitestauksessa testausympäristö. • Testaustyökalujen vaikutus järjestelmän toimintaan. • Järjestelmä on maantieteellisesti laaja (hajautettu). • Poikkeamien havaitseminen on vaikeaa (esimerkiksi niiden pienuuden takia) • Ei tiedetä, mikä oikean tuloksen pitäisi olla. • Tilanteet, jota ei voida testitilanteessa järjestää (ohjelmistoissa on lähes aina tällaisia osia). • Tulosten toteaminen oikeaksi, kun järjestelmän toimintaa ei voida seurata ulkopuolelta.

  8. V-Malli

  9. Moduulitestaus • Moduulitestaus (module testing, unit testing) varmistaa, että yksittäiset moduulit toimivat määrittelynsä mukaisesti. • Moduulin toteuttamien palveluiden kutsumiseen ja tulosten tarkasteluun tarvitaan testiajureita (test driver) • joudutaan rakentamaan kutsuttavia funktioita varten tynkämoduuleita (test stubs). • Modulin toimivuuden testausta varten tarvitaan usein testipetejä (test bed, test driver) • Ohjelmoija tekee yleensä itse

  10. Integrointitestaus • Integrointitestaus testaa moduulien välisiä liittymiä. • Testaus etenee usein rinnan moduulitestauksen kanssa joko kokoavasti (bottom up) tai jäsentävästi (top down). • Reaaliaikajärjestelmän ohjelma koostuu tavallisesti useista tehtävistä (task, multitasking) => myös tynkäprosessien käyttö on usein hyvä idea.

  11. Järjestelmätestaus • Järjestelmätestauksessa varmistetaan, että järjestelmä toimii määrittelynsä mukaisesti (ja käyttöohjeensa). • Testauksen voi suorittaa ulkopuolinen ryhmä. • Virheiden korjaus kallista. • Luotettavuus-, toipumis-, turvallisuus- ja kuormitustestit (vasteajat, volyymit). • Yhteensopivuus muiden järjestelmien kanssa.

  12. Muita testauksen muotoja • kenttätestaus • hyväksymistestaus • alfatestaus • betatestaus • regressiotestaus • release testing • käytettävyystestaus • suorituskykytestaus • ...

  13. Testitapausten valinta • Lasilaatikkotestaus (glass/white box,structural testing) • Harmaalaatikkotestaus (gray box) • Käytetään hyväksi tietoa ohjelman toteutuksesta • Mustalaatikkotestaus (black box, functional testing) • Ekvivalenssiositus: jaetaan syötteet (ja tulosteet) ekvivalenssiluokkiin, mikä tahansa arvo luokassa edustaa koko luokkaa. Valitaan joka luokasta yksi arvo. • Raja-arvoanalyysi: Valitaan ekvivalenssiluokista rajatapaukset. • Voidaan soveltaa sekä syöteavaruuteen että tulosavaruuteen. • Virheenarvaus (tarkastuslista tavallisimmista virheistä).

  14. Testauksen riittävyys kattavuusmitoilla: lausekattavuus • Lausekattavuus: 100% => jokainen lause suoritetaan vähintään kerran. • Heikkoudet • Ei ota huomioon haarautumisia kontrollirakenteissa. Int palkka if ehto {..... Palkka=123....} return Palkka

  15. Testauksen riittävyys kattavuusmitoilla: päätöskattavuus • Päätöskattavuus (decision coverage): jokainen ehtolauseke saa vähintään kerran molemmat arvonsa (T/F), ts. ehdollisen rakenteen molemmat haarat suoritetaan. • Heikkous: • ehtojen kaikkia osia, saatikka sitten kombinaatioita ei testata If (palkka>1000) or (ylitoita and paivitaYlityot()>1000) {...} else {...} Testiaineistot: palkka=1234 (ehtolauseke tosi) ja palkka=0, ylitoita=epätosi (ehtolauseke epätosi) (orf = &&, andf = ||)

  16. Testauksen riittävyys kattavuusmitoilla: ehtokattavuus • Ehtokattavuus (condition coverage): jokainen ehtolausekkeen osa (or/and-yhdistämä) saa vähintään kerran molemmat arvonsa (T/F). • Ei impilikoi välttämättä päätöskattavuutta: • Ns. päätös/ehtokattavuus korjaa yo. ongelman. If (palkka>1000) and (ylitoita) {...} else {...} Testiaineistot: palkka=1234 ja ylitoita=epätosi (ehtolauseke epätosi) ja palkka=0, ylitoita=tosi (ehtolauseke epätosi) (huom: and on tässä “normaali” and-operaatio, ei c-tyylinen oikoevaluointi)

  17. Testauksen riittävyys kattavuusmitoilla: moniehtokattavuus • Moniehtokattavuus (multiple condition coverage): jokainen päätös evaluoidaan vähintään kerran kaikilla mahdollisilla ehtojen totuusarvojen yhdistelmillä. • Päätös/moniehtokattavuus vaatii lisäksi päätöskattavuuden. If (palkka>1000) orf (ylitoita andf paivitaYlityot()>1000) {...} else {...}

  18. Muita kattavuusmittoja • Polkukattavuus: kaikki suorituspolut (lukukumäärä, silmukoiden käsittely). Montako polkua? • Funktiokattavuus: onko rajapinnan kaikkia funktioita testattu. • Kutsukattavuus: onko kaikki funktiokutsut suoritettu. • Silmukkakattavuus: silmukat suoritettu 0, 1 ja monta kertaa. • Tilakattavuus: kaikki tilat&tilasiirtymät • Poikkeuskattavuus... i=0 while i<20 loop if ehto1 then if ehto2 then L1 else L2; else if ehto3 then L3 else L4; end while

  19. Kattavuusmittojen rajoituksia • “Kattavasti testattu” EI ole kattavasti testattu. • Puuttuvaa koodia ei voi testata. • Käytännössä kaikkia suorituspolkuja (polkukattavuus?) ei saa testattua, testataanpa päätöskattavasti: • Kattavuus ei ota huomioon olion tilaa. If status=1 then ... else if status = 2 then ... else... laskePalkka(...) int palkka ... if ylityötunnit >40 {... palkka=....} if ylityötunnit <40 {... palkka=...} return palkka

  20. Kattavuusmitat käytännössä • Kannattaa mitata: tarkoituksena on löytää puutteita testiaineistossa, ei niinkään todistaa testauksen perusteellisuutta. • Prosenttilukujen tulkinnassa kannattaa olla varovainen • suuri kattavuus ei välttämättä tarkoita hyvää testausta • mitat eivät välttämättä ole keskenään vertailukelpoisia • 100% kattavuus käytännössä usein mahdottomuus • Yleensä tavoitteena esimerkiksi 85% kattavuus (lause- tai päätöskattavuus)

  21. Muita tapoja • Mutkikkuusmitat: Voidaan arvioida mm. koodin laatua (esimerkiksi alihankinnat), ohjelman "rispaantumista" ylläpidossa ja testauksen vaativuutta. • Halsteadin mitta: lähinnä historiallista merkitystä • McCaben syklomaattinen numero • G on ohjelman kontrolliverkko ja c päätösten määrä • Ohjelman syklomaattinen numero v(G) = c+1 • Virheiden kylväminen • Ohjelmassa X virhettä (X tuntematon). • Kylvetään N virhettä. • Testauksessa löytyy X' oikeaa virhettä ja N' kylvettyä virhettä. • Oletetaan, että X'/X = N'/N. • Siis ohjelmassa on yhteensä X = X'N/N' virhettä, joista vielä X-X' kpl on löytämättä.

  22. Virheiden määrän mittaaminen

  23. Testaustyökalut Testikattavuusanalysaattorit • Purify, Bounds Checker: osoitinongelmat, muistivuodot • Profilointiohjelmat • Vertailuohjelmat • Testipetigeneraattorit, testiskriptit • Emulaattorit, simulaattorit • Nauhoitustyökalut, kuormageneraattorit • Testauksen automatisointi?

  24. Testausprosessi

  25. Testauksen suunnittelu • Projektisuunnitelma: mitä dokumentteja tuotetaan,kuka tuottaa ja milloin • Sopimus ja/tai sen liitteet: Hyväksymiskoesuunnitelma joka kuvaahyväksymiskriteerit, joita asiakas testaa hyväksymistestissä. • Testauksesta saattaa olla hyvä tuottaa erillinen yleissuunnitelma: kuka vastaa ja mistä (mm. testiympäristöjen pystyttäminen jne.). • Järjestelmätestaussuunnitelma: määrittelydokumentissa tai erillisenä dokumenttina. • Integrointitestaussuunnitelma: suunnitteludokumentissa tai erillisenä dokumenttina. • Moduulitestaus: • Kunkin moduulin määrittelyyn liittyy testiympäristön määrittely ja testitapausten määrittely. • Voi olla yleisohje, ei välttämättä erillistä suunnitelmaa

  26. Testaussuunnitelma

  27. Seuranta • Testeistä syntyy testiraportteja. • Asiakasreklamaatiot dokumentoitava. • Laatujärjestelmän kehittämiseksi virheet on analysoitava ja tilastoitava • virheiden löytymis- , syntymis- ja korjausajankohdat, • testauksen kattavuusmitat, • virheiden luokittelu (mild, moderate, annoying, disturbing, serious, very seriuos, extreme, intolerable, catastrophic, infectious) • Yksi keino on pitää testipäiväkirjaa.

  28. Oliokeskeisyyden vaikutus testaukseen • Ei eroja järjestelmätestaustasolla (?). • Alemmilla testaustasoilla lisäongelmia aiheuttavat periytyminen ja dynaaminen sitominen. • Kun jotain on peritty, onko se testattava uudelleen? • Vastaus näyttäisi (ikävä kyllä) olevan myönteinen. • Vain hyvin yksinkertaisten funktioiden tapauksessa voi olla varma, että kantaluokalle tehty testaus riittää. • Jos perityssä funktiossa käytetään dynaamista sitomista, ei voida olla varmoja funktion toimivuudesta uudessa ympäristössä. • Kattavuus? • Kaikki dynaamista sitomista sisältävät pitää testata “päätöskattavasti” (kutsukohtahan on tavallaan ehdollinen haarautuminen olion tyypin perusteella). • Oliomenetelmille tyypillinen iteratiivisuus monimutkaistaa testauksen hallintaa.

  29. Kansanviisauksia • Testauksen suorittaa joku muu kuin tekijä. • Teoksessa [Kit 1995] on esitetty otsakkeen ´The Six Essentials of Software Testing´alla seuraavat perusperiaatteet. • The quality of the test process determines the success of the test effort. • Prevent defect migration by using early life-cycle testing techniques. • The time for software testing tools is now. • A real person must take responsibility for improving the testing process. • Testing is a professional discipline requiring trained, skilled people. • Cultivate a positive team attitude of creative destruction.

  30. ... kansanviisauksia • Älä poista testauspiirteitä ohjelmasta. • Suorita "apinatestejä”, ota pistoke irti seinästä. • Tee/testaa muutokset ja lisäykset riittävän pieninä annoksina. • Virheet kasaantuvat: jos jostain on löytynyt useita virheitä, lähistöllä on niitä vielä lisää. • Dynaamisen muistin määrän kehityksestä kannattaa pitää kirjaa (roskaantuminen, satunnaiset kuormitushuiput). • Tarkasta vielä kerran laskennan virhetilanteet: nollalla jako, yli/alivuodot sekä liukulukujen pyöristys. • Tee myös testipetit kunnolla, suurin osa ajasta kuluu muuten virheiden hakuun testipeteistä. • Jos poikkeustilanteita käsittelevää koodia on vähän, kaikkia poikkeustilanteita ei ole vielä otettu huomioon.

  31. ... kansanviisauksia • A good test can never save a bad program. • The cost of a tool is more than the cost of a tool. • Tuotekehitysprojektissa järjestelmätestauksen loppuvaihe kestää pitempään, kuin osaat kuvitella edes pahimmissa painajaisunissasi. • Kokeile, mutta älä luule, että se on testausta, suunnitelmallisuus on valttia. • Test now or pay later; the later you find it, the more you pay.

  32. Reaaliaikajärjestelmien testauksen kansanviisaudet • Motto: sulautetun ohjelmiston testaus alkaa siitä, mihin tavallisen ohjelmiston testaus loppuu. • Testattavuus on otettava jo suunniteltaessa huomioon ja ohjelmoitava järjestelmään mukaan. Tuotantoversiossakin voi olla testauspiirteitä, jotka saa tarvittaessa kytkettyä toimintaan. • Ensin sarjallisesti mahdollisimman perusteellisesti. • Mahdollisimman pitkään kehityslaitteistossa ja sitten simulaattoreita ja emulaattoreita hyväksikäyttäen. • Kriittiset osat on katselmoitava huolellisesti ja mahdollisesti todistettava oikeiksi (tai edes perusteltava vakuuttavasti, miksi kuviteltu riski ei pääse toteutumaan). • Seuraa CPU:n käyttöastetta varsinkin muutosten jälkeen. Seurannan voi toteuttaa joko kellokeskeytyskäsittelijässä tai matalimman prioriteetin taustaprosessina. • Kerää tilastoa poikkeustapauksista: menetetyt kellokeskeytykset ja oheislaitteiden ohjauksessa sekä tiedon siirrossa tapahtuneet virheet. • Seinäkelloa voi tarpeen mukaan nopeuttaa tai hidastaa. Nopeuttamalla kelloa saadaan esimerkiksi koko vuosi nopeasti testattua.

  33. Tehtävä • Ohjelma lukee kolme konaislukua, jotka kuvaavat kolmion sivujen pituuksia. Ohjelma tutkii luvut ja ilmoittaa, onko kolmio tasasivuinen, tasakylkinen vai ovatko kaikki sivut eri mittaisia. • Yksinkertaisuuden vuoksi epäkelpoja syötteitä ei tarvitse ottaa huomioon. • Millä syötteillä testaisit ohjelmaa?

  34. Ohjelmakoodi with int_io, text_io; use int_io, text_io; procedure kolmio is sivu :array (1..3) of integer; procedure vaihda(i,j:integer) is h: integer; begin if sivu(i) > sivu(j) then h:=sivu(j); sivu(j):=sivu(i); sivu(i):= h; end if; end vaihda; begin loop for i in 1..3 loop put_line("anna sivu "&integer'image(i)); get(sivu(i)); end loop; vaihda(2,3);-- pienin menee ensimmaiseksi, mutta suurin ei viim. vaihda(1,2); -- vaihda(2,3); --- unohtunut pois 10,1,1 kelpaa kolmioksi if sivu(3) > (sivu(1) + sivu(2)) then put_line("ei kolmio"); elsif (sivu(1) + sivu(2) + sivu(3))/3 = sivu(3) then -- elsif sivu(1) = sivu(2) and sivu(2)= sivu(3) then put_line("tasasivuinen"); elsif (sivu(1) = sivu(2)) or (sivu(2) = sivu(3)) then put_line("tasakylkinen"); else put_line("sivut kaikki eri pituisia"); end if; end loop; end KOLMIO;

  35. Testitapaukset testitapaus mitä testataan oletettu tulos testin tulos ? ? ? ?

  36. Tutkimuksia • Myers: • "Highly experienced professional programmers score, on the average, only 7.8 out of a possible14". • Binderin testitapaukset Java-versiolle: 65 (periytyminen ja dynaaminen sitominen monimutkaistavat testaamista). • Viimeisiä tutkimuksia( Tichy, Hatton, Humphrey, Shepherd and Cartwright) • C++: 25% enemmän virheitä kuin C ja Pascal • Periytyminen aiheuttaa 6 kertaa enemmän virhietä • Java säikeet ja periytyminen: melkein mahdotonta kirjoittaa oikein. Ja vielä pahempaa testata

  37. Slide 13 of 39

  38. Slide 38 of 39

  39. Slide 16 of 39

  40. Slide 17 of 39

  41. Slide 18 of 39

More Related