Testaus
Yleistä Testaus on suunnitelmallista virheiden etsimistä Tuotantoprosessissa ohjelmaan jää aina virheitä, käytettävistä menetelmistä huolimatta Hyvät menetelmät, kuten katselmoinnit pienentävät testauksen tarvetta Testaus pystyy todistamaan ainoastaan ohjelman virheellisyyden, ei virheettömyyttä Testi on onnistunut, kun tulos on oikea ja ohjelman (tai testattavan osan) sisäinen tila on muuttunut oikein
Kontrollipolkujen määrä 5 solmua 120 permutaatiota 10 solmua 3 628 800 permutaatiota 20 solmua 2,4 x 10 18 permutaatiota -> 1 mrd suoritusta sekunnissa = 77 vuotta
Testaukseen riittävästi resursseja! 1 2 3 4 5 6 7 Vaihe Vaatimukset Määrittely Suunnittelu Koodaus Moduulitestaus Integrointi Ylläpito Kustannusosuus 3 % 5 % 7 % 6 % 7 % 6 % 67 %
Testausprosessi Testidata Testitapaukset Testitulokset Testiraportit Suunnittelu Testidatan valmistelu Suoritetaan testi Verrataan tuloksia suunnitelmiin Virheen jäljitys Virheen jäljitys
Testauksen V-malli Päävaatimusten määrittely Järjestelmän spesifikaatio Päävaatimusten speksit Järjestelmän speksit Järjestelmän testaus Arkkitehtuurin speksit Hyväksymistestaus Arkkitehtuurisuunnittelu Integrointitestaus Komponenttisuunnittelu Moduulien speksit Komponenttien testaus Komponenttien koodaus / testaus
Yleisiä suosituksia Toimintojen testaus on komponenttitestausta tärkeämpää Muutoksen jälkeen on tärkeämpää testata vanhat kuin uudet toiminnot On tärkeämpää testata tavanomaiset tapaukset kuin ääritapaukset Testiohjelmatkin on suunniteltava huolellisesti Virheet pyrkivät kasautumaan Testauksen täytyy olla suunnitelmallista Testaaja eri henkilö kuin tekijä
Lähestymistapa integroinnissa Top-down Testataan ensin ylimmän tason moduulit niin, että korvataanalemman tason moduulit tynkämoduuleilla Bottom-up Testataan ensin alemman tason moduulit ja ylempi taso korvataan testiajureilla Käytännössä toteutetaan molempia??
Kaksi päätapaa testauksessa Sisäinen testaus (white-box testing) Algoritmien virheettömyys Otetaan huomioon komponentin rakenne ja tunnistetaan riskikohdat Testiaineisto suunnitellaan niin, että mahdollisimman suuri osa koodista tulee toteutetuksi Ulkoinen testaus (black-box testing) Keskitytään ulospäin näkyvään toimintaan toiminnallisuuksiin Verrataan testattavan kokonaisuuden vastaavuutta vaatimusmäärittelyyn Tutkitaan tulosarvoja (tiloja) suorituksen jälkeen Voidaan suunnitella määrittelyvaiheessa
Käsitteitä Validointitestaus Regressiotestaus muutoksen jälkeen Alfa-testaus Toimittajan luona Beta-testaus Asiakkan luona Julkistustestaus Uusi versio
Sisäinen testaus Kontrollipolkujen läpikäynti Suunnitellaan testitapaukset niin, että mahdollisimman moni tai ainakin yleisimmät polut tulee läpikäytyä Silmukat Ohitus kokonaan Yksi kierros N-1, N ja N+1 kierrosta (esim. taulukoiden rajat) Oliokielissä voi olla vaikeaa
Ulkoinen testaus Puuttuvat tai virheelliset toiminnot Liittymävirheet Virheet tietorakenteissa tai tietokantojen käytössä Alustus- ja lopetusvirheet Suorituskykyongelmat Lukitusongelmat (tieto) syöte tulos
Testisyötteiden valinta Jaetaan testisyötteet ekvivalenssiluokkiin: sallittua väliä pienempi sallitulla välillä sallittua väliä suurempi poikkeukset Esim. päivämäärän syöttö testataan päivät 0, 1, 28-31, 32 testataan kuukaudet 0, 1, 12, 13 erikseen karkausvuosi Tilanne, jolloin rajoitettu tietorakenne tulee täyteen N-1, N, N+1
Testisyötteiden valinta Binäärihaku harmaalaatikkotestaus 1 5 9 14 18 20 23 28 36 Valitaan kriittiset pisteet, jotka tiedetään, kun tunnetaan sisäinen toteutus Testataan myös eri kokoisella taulukolla 1 solu, parillinen määrä, pariton määrä
Virheenjäljitys on ongelmallista Virhe voi olla kaukana havaitsemispaikasta Virheen syy voi olla käyttäjässä Virheellistä toimintaa voi olla vaikea toistaa syy voi olla pitkän toimintosarjan yhteensattumissa Virhe voi johtua esim. kääntäjän tai laitteiston erityispiirteistä (reaalilukujen yhtäsuuruus)
Mietittävä ennen korjausta 1. Voiko samanlaisia virheitä olla muuallakin ohjelmassa? Kannattaa tutkia, jos on aihetta epäilyyn. 2. Voiko korjaus aiheuttaa uusia virheitä? Tarkistetaan riippuvuudet huolellisesti. 3. Olisiko virhe voitu välttää tuotantoprosessissa. Otetaan oppia tulevaisuuteen (virhekanta).
Riittävä testaus Tarvittavan testauksen määrää on vaikea arvioida etukäteen Voidaan jatkaa kunnes rahat loppuvat Varsinkin massatuotteissa tehdään kompromissi, jotta saadaan tuote ajoissa markkinoille Voidaan päättää testauksen lopettamisesta, kun virhekäyrä tasaantuu