testaus n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Testaus PowerPoint Presentation
Download Presentation
Testaus

Loading in 2 Seconds...

play fullscreen
1 / 41

Testaus - PowerPoint PPT Presentation


  • 160 Views
  • Uploaded on

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Testaus' - levana


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
testaus
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

testaus1
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?

testaus2
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.
error fault failure
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ä.
testauksen ongelmia
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ä.
testauksen ongelmia1
...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.
moduulitestaus
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
integrointitestaus
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.
j rjestelm testaus
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.
muita testauksen muotoja
Muita testauksen muotoja
  • kenttätestaus
  • hyväksymistestaus
  • alfatestaus
  • betatestaus
  • regressiotestaus
  • release testing
  • käytettävyystestaus
  • suorituskykytestaus
  • ...
testitapausten valinta
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ä).
testauksen riitt vyys kattavuusmitoilla lausekattavuus
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

testauksen riitt vyys kattavuusmitoilla p t skattavuus
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 = ||)

testauksen riitt vyys kattavuusmitoilla ehto kattavuus
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)

testauksen riitt vyys kattavuusmitoilla moni ehtokattavuus
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 {...}

muita kattavuusmittoja
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

kattavuusmittojen rajoituksia
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

kattavuusmitat k yt nn ss
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)
muita tapoja
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ä.
testausty kalut
Testaustyökalut

Testikattavuusanalysaattorit

  • Purify, Bounds Checker: osoitinongelmat, muistivuodot
  • Profilointiohjelmat
  • Vertailuohjelmat
  • Testipetigeneraattorit, testiskriptit
  • Emulaattorit, simulaattorit
  • Nauhoitustyökalut, kuormageneraattorit
  • Testauksen automatisointi?
testauksen suunnittelu
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
seuranta
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.
oliokeskeisyyden vaikutus testaukseen
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.
kansanviisauksia
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.
kansanviisauksia1
... 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.
kansanviisauksia2
... 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.
reaaliaikaj rjestelmien testauksen kansanviisaudet
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.
teht v
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?
ohjelmakoodi
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;

testitapaukset
Testitapaukset

testitapaus

mitä testataan

oletettu tulos

testin tulos

?

?

?

?

tutkimuksia
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