Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Testaus Johdanto: Mitä testaus on (ja mitä se ei ole)

Samankaltaiset esitykset


Esitys aiheesta: "Testaus Johdanto: Mitä testaus on (ja mitä se ei ole)"— Esityksen transkriptio:

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= } 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 kuvaa hyvä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; 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


Lataa ppt "Testaus Johdanto: Mitä testaus on (ja mitä se ei ole)"

Samankaltaiset esitykset


Iklan oleh Google