Ohjelmistotestauksen perusteita Luento 1 Antti-Pekka Tuovinen 12 March 2018 1
Luennon oppimistavoitteet Mitä ohjelmistojen testaaminen on? Mikä on testauksen suhde ohjelmiston laatuun? Mitä tarkoittavat häiriö, vika ja erehdys? Ja muuta terminologiaa Onko täydellinen testaaminen mahdollista? Mikä on testausstrategia? Testauksen yleiset periaatteet 12 March 2018 2
Ohjelmistojen testaaminen 12 March 2018 3
Ohjelmiston testaaminen on sen kokeilemista, että toimiiko se Kenen näkökulmasta? Missä tilanteessa? Milloin? Mistä tiedät, toimiiko se vai ei? Onko väliä, jos se hidastelee vaikka tuottaakin halutun tuloksen? Onko väliä, jos se toimii vain osan aikaa? Onko väliä, jos siinä on vähemmän ominaisuuksia kuin kilpailevassa tuotteessa tai se ei ole yhtä miellyttävä käyttää? Onko väliä, jos siinä on ominaisuuksia, joita kukaan ei tarvitse? 12 March 2018 4
Testaaminen on bugien etsimistä. Mikä on bugi? Pitääkö ohjelman kokonaan kaatua? Tuottaa virheellisiä tuloksia? Ei olla aina saatavilla? Toimia eri tavalla kuin vastaavat muut tuotteet? Haluatko todella löytää bugeja, vai toivotko (salaa), ettei niitä löydy? Kuinka kovasti yrität löytää bugeja? Kokeiletko vain toimintojen perustapauksia? Entä poikkeustilanteet ja käyttöohjeiden vastainen käyttö? Käytätkö vain odotettuja syötteitä vai yritätkö todella rikkoa softan epätodennäköisillä, epäloogisilla tai suorastaan myrkyllisillä syötteillä? Käytäkö ohjelmaa vain kehitysympäristössä vai myös realistisissa käyttökonteksteissa? 12 March 2018 5
Testi testi jnk. kunnon, kelvollisuuden, soveltuvuuden tms. selville saamiseksi suoritettu koe; testata tutkia, koetella testejä käyttäen. Nykysuomen sanakirja, WSOY, 1990 Verifiointi, validointi, toistettavuus: Mitä testattiin, missä olosuhteissa, mitä havaittiin, mikä toimenpiteiden sarja johti havaittuun ongelmaan ja miksi se on ongelma? 12 March 2018 6
Ohjelmistojen luonteesta Ohjelmakoodia voidaan katselmoida ja analysoida työkaluilla, mutta näillä (staattisilla) menetelmillä emme saa kaikkea meitä kiinnostavaa tietoa ohjelmasta On sekä teoreettisia että käytännöllisiä rajoituksia Ohjelma on myös suoritettava, jotta sen dynaamisia ominaisuuksia ja todellista ajonaikaista käyttäytymistä voidaan tutkia Valtaosa testauksesta on tällaista toimintaa Molempia lähestymistapoja tarvitaan! 12 March 2018 7
Ohjelmiston testaaminen q Mitä teet, kun testaat ohjelmaa tai sen osaa? q Miksi testaat? Mitä haluat tietää ohjelmasta? Milloin testaat ja miten? 12 March 2018 8
Testaaminen aktiviteettina - mitä testaaja tekee testatessaan Testing [1] : An activity in which a system or component is executed under specified conditions, the results are observed or recorded, and an evaluation is made of some aspect of the system or component. [1] IEEE Standard for Software and System Test Documentation. IEEE Std 829-2008, http://ieeexplore.ieee.org/servlet/opac?punumber=4578271 12 March 2018 9
Testaaminen osana kehitysprosessia - miksi testataan, miten ja milloin Testing [2] : The process consisting of all life cycle activities, both static and dynamic, concerned with planning, preparation and evaluation of software products and related work products to determine that they satisfy specified requirements, to demonstrate that they are fit for purpose and to detect defects. [2] ISTQB Glossary http://glossary.istqb.org/search/testing 12 March 2018 10
Ohjelmistojen testaamisella voi olla monia erityisiä tavoitteita Ohjelman suorittaminen vikojen löytämiseksi Ohjelman suorittaminen laadun arvoimiseksi Ohjelman suorittaminen luottamuksen lisäämiseksi Onko ohjelmistotuote valmis julkaistavaksi (tuotantoon)? Kannattaako tätä ohjelmistokehystä tai pakettia käyttää osana omaa tuotettamme? Olemme harkitsemassa yrityskauppaa. Onko heidän tuotteidensa laatu kuraa vai OK? Onko tuotteemme yhteensopiva muiden järjestelmien kanssa? Ohjelman tai sen dokumentaation ym. analysointi vikojen ennaltaehkäisemiseksi Testausmenetelmät valittava tavoitteiden mukaan! 12 March 2018 11
The Big Picture 12 March 2018 12
Laatu ja testaus 12 March 2018 13
Laatu ja testaus Testing is an empirical technical investigation conducted to provide stakeholders with information about the quality of the product or service under test [3] [3] Cem Kaner & James Bach, Black Box Software Testing Foundations, www.testingeducation.org/bbst, 2010. 12 March 2018 14
Testaaminen ja laadunvarmistus Ohjelmiston testaaminen on käytännössä kaikkein tärkein yksittäinen laadun varmistuksen keino ohjelmistoprojekteissa ja usein ainoa. 12 March 2018 15
Ohjelmistojen laatu ja testaus Ohjelmiston laatu on monisyinen asia Tuotetta sisältä ja ulkoa tarkasteltaessa havaittava laatu (tuotteesta itsestään mitattava) Tuotteen käyttötilanteissa käyttäjälle ilmenevä laatu (tuotteen ja käyttäjän vuorovaikutuksessa mitattava) Myös datan laatua tarkastellaan omana alueenaan Laatumalli määrittelee joukon laatupiirteitä (characteristics, quality attributes) joiden suhteen laatua mitataan ISO/IEC 25010 SQuaRE laatumalli kts. Ohjelmistoprosessit ja ohjelmistojen laatu kurssin 1. luento tai SFS edu portaalin esitys standardista Järjestelmän ja ohjelmiston laadun mittaaminen http://www.sfsedu.fi/materiaalit 12 March 2018 16
Ohjelmistojen laatu ja testaus Tietyn ohjelmiston (vaadittu) laatu määritellään Valitsemalla joukko ohjelman tarkoituksen ja käytön kannalta aiheellisia laatupiirteitä Määrittämällä mittarit ja tavoitetasot laatupiirteille Määrittelemällä miten laatupiirteiden arvojen mittaus (tai muu arviointi) tehdään 12 March 2018 17
Ohjelmistojen laatu ja testaus Vikojen määrällä on suora yhteys ohjelmiston laatuun Käyttäjän kokema laatu on huono, jos ohjelma Toimii väärin Ei tee kaikkea mitä sen pitäisi Toimii liian hitaasti On liian vaikea käyttää Vikojen löytämiseksi tehtävä testaus onkin oleellinen osa ohjelmiston kokonaistavaltaista laadunvarmistusta (Quality Assurance) 12 March 2018 18
Ohjelmistojen laatu ja testaus Ohjelmiston laatutavoitteiden edellä kuvattu määritteleminen mahdollistaa myös laadun suoran testaamisen Jos testissä saavutetaan testattavalle piirteelle annettu tavoitearvo, tulos on pass muuten fail Vakioidut testiaineistot (test data), testiolosuhteet (test conditions) ja testin suoritustapa (test execution) tekevät mittaustuloksista ajallisesti vertailukelpoisia Esimerkki Smartphone UI performance testing (case Nokia) 12 March 2018 19
Terminologiaa 12 March 2018 20
Testaussanastoa Termejä ja käsitteitä löytyy tälläkin alueella ihan riittävästi Noudatamme ISTQB:n terminologiaa, jota kurssikirjakin käyttää ISTQB Glossary (englanniksi) http://www.istqb.org/downloads/glossary.html Suomennokset FISTB:n sivuilta (kts. Liitteet): http://www.fistb.fi/fi/tiedostot Ohjelmistojen testaamisesta on kansainvälinen standardisarja ISO/IEC/IEEE 29119, jonka sanasto-osuus (ISO/IEC/IEEE 29119-1) löytyy IEEE:n digikirjastosta http://ieeexplore.ieee.org/document/6588537/ 12 March 2018 21
Peruskäsitteitä Testitapaus (test case) Määrittelee lähtötilanteen eli alkuehdot testitapauksen suoritukselle (test conditions) Määrittelee syötteet ja odotetut tulokset / testiobjektin odotetun käyttäytymisen Hyvällä testitapauksella on suuri todennäköisyys paljastaa aiemmin tuntemattomia vikoja Testin peruste (test basis) Kaikki tietämys, jota käytetään testianalyysin ja testin suunnittelun lähtökohtana 12 March 2018 22
Peruskäsitteitä Testiobjekti, testin kohde (test object, test item) Ohjelma tai ohjelman osa, jota varten testi suunnitellaan Testi (test) Yhden tai useamman testitapauksen muodostama kokonaisuus Testiajo (test run, test suite) Yhden tai useamman testitapauksen suoritus koottuna yhteen ajoon Testiskenaario (test scenario) Ketjuttaa yhteen useita testitapauksia siten, että edellisen tapauksen tuottamat tulokset toimivat seuraavan tapauksen lähtötilanteena 12 March 2018 23
Peruskäsitteitä Testioraakkeli (test oracle) Testitapauksen odotetun/oikean tuloksen kertova ( ennustava ) lähde Esimerkiksi ohjelman toimintaa kuvaava käyttötapaus (use-case) tai sen vaatimusmäärittelyssä annettu laskentakaava Testitapauksen suunnittelija tarvitsee oraakkelia johtaakseen testitapauksen odotetun tuloksen, johon testiobjektin testin suorituksen aikana tuottamaa tulosta verrataan Entäs kun oraakkelia ei ole? Tätä pohditaan 1. viikon tehtävissä 12 March 2018 24
Häiriö, vika, virhe 12 March 2018 25
Ohjelmistojen tuotanto Ohjelmiston valmistus (engl. manufacturing, mass production) on mallikappaleen digitaalista kopiointia, jossa virheiden mahdollisuus on käytännössä hyvin pieni Valmistusprosessien ja materiaalien virheistä johtuvat viat jäävät pois Tahalliset viat ovat kuitenkin uhka (haittaohjelmat, piratismi), minkä vuoksi esim. sovellusten ja datan alkuperän ja integriteetin varmistaminen on merkittävä ongelma, johon on kehitetty monia teknisiä ratkaisuja ja hallinnollis-oikeudellisia menettelytapoja 12 March 2018 26
Ohjelmistojen tuotanto Kaikki ohjelmiston viat syntyvät tuotekehityksen aikana Määrittely, suunnittelu, koodaus, testaus, jne. tosin myös ohjelmiston käyttöympäristössä tapahtuvat muutokset voivat aiheuttaa ohjelmiston vikaantumisen sen käyttöaikana (toiminnallisten riippuvuuksien tai infrastruktuuriongelmien takia) 12 March 2018 27
Mistä viat tulevat? 12 March 2018 28
Viat ja häiriöt Vian ja häiriön välisen syy-seuraussuhteen kardinaliteetti voi olla 1 1 1 n 1 0 n 1 n m Häiriö ja sen perimmäinen syy (viat) voivat olla fyysisesti ja ajallisesti erillään toisistaan 12 March 2018 29
Entä vikojen korjaaminen eli debuggaus? Testaus ei ole sama asia kuin debuggaus Debuggaus tarkoittaa vikojen jäljitystä ja korjaamista ohjelmakoodissa Testaajan tehtävä on löytää ongelmia ohjelman toiminnassa ja raportoida häiriöt sekä testiolosuhteet niin selkeästi, että varsinaisia vikoja voidaan alkaa etsiä ja korjata raportin perusteella (häiriön toistettavuus) Usein kehittäjä itse sekä testaa että korjaa 12 March 2018 30
Testaajan rooli 12 March 2018 31
Täydellinen testaaminen? 12 March 2018 32
Voiko ohjelman testata täydellisesti? Jos testauksen tarkoitus on löytää vikoja testin kohteesta, niin täysin testatussa ohjelmistossa ei voi olla enää yhtään piileviä vikoja. valitettavasti tähän ei teoreettisesti eikä käytännössä voida päästä. 12 March 2018 33
Laskennallisten menetelmien rajat Ohjelman toiminnan automaattinen oikeaksi todistaminen spesifikaatiota vasten (verifiointi) on mahdotonta Kts. halting problem (pysähtymisongelma, tuttu Laskennan mallit -kurssilta) Voidaan tehdä joidenkin ominaisuuksien suhteen Vaatii yleensä ohjelman formaalin spesifikaation erikoiskielellä Soveltuu työläytensä vuoksi vain erikoistapauksiin Lopullinen implementaatio pitää joka tapauksessa testata suorittamalla Tosin kevyemmin kuin ilman formaalia verifiointia Niin, ja pitää olla se täydellinen spesifikaatiokin 12 March 2018 34
Testitapausten suorittamisen rajat Entä sitten ohjelman testaaminen testitapauksia suorittamalla voidaanko siinä päästä täydelliseen kattavuuteen? Halutaan testata ohjelman/ohjelman osan toiminta kaikilla teknisesti mahdollisilla (myös odottamattomilla) syötteillä (black-box testing) Halutaan testata kaikki mahdolliset eri suorituspolut ohjelmarakenteen läpi (white-box testing) jne. Kaikki viat voitaisiin siis teoriassa havaita! 12 March 2018 35
Black-box esimerkki Tutkitaan vain ohjelman ulkoisesti havaittavaa käytöstä ilman tietoa sen toteutuksesta Testattava metodi: public class BMICalculator { } public static double computebmi( Integer body_weight_in_kg, Integer height_in_cm) { // formula: // 1.3 * body_weight / pow( height, 2.5 )... } 12 March 2018 36
Black-box -esimerkki Silmukka kaikkien mahdollisten syötearvoparien läpikäymiseksi: for (int w=integer.min_value;w<integer.max_value;w++) { for (int h=integer.min_value;h<integer.max_value;h++) { BMICalculator.computeBMI(w,h); } } (Huom: tämä ei ole oikea testi miksi?) 12 March 2018 37
Black-box -esimerkki Silmukan suoritusaika tehokkaalla PC:llä (v. 2013) ~ 122 000 vuotta Käytännössä eri testitapauksiakin voi olla ääretön määrä (esim. käyttäjän antamat erilaiset syötteet interaktiivisessa sovelluksessa) 12 March 2018 38
White-box esimerkki käytetään hyväksi tietoa ohjelman toteutuksesta <stmt A> Do{ if (<cond 1>) { if (<cond 2>) { if (<cond 3>){ <stmt B> }else{ <stmt C> } }else{ if (<cond 4>) { <stmt D> }else{ <stmt E> } } }else{ <stmt F> } } While (<cond 5>) <stmt G> A 1 2 3 4 B C D E F 5 G 12 March 2018 39
White-box -esimerkki Olkoon niin, että Do-While -silmukka suoritetaan vähintään kerran mutta enintään 20 kertaa Silmukan suoritukset ovat toisistaan riippumattomia Silmukan edellinen suoritus ei vaikuta siihen, mikä kontrollivuoverkon haara käydään läpi seuraavalla kerralla 12 March 2018 40
White-box -esimerkki Halutaan käydä läpi jokainen erillinen silmukan suorituksen sisältävä suorituspolku (= polku on erillinen, jos se on eri pituinen tai se sisältää eri suoritushaarat tai samat haarat eri järjestyksessä kuin jokin toinen polku) Erillisten polkujen läpikäymiseksi tarvittavien suorituskertojen yhteenlaskettu lukumäärä on: 5 + 5 2 + + 5 19 + 5 20 ~ 10 14 Jos testaus voidaan automatisoida niin, että yhden polun suoritukseen ja tuloksen tarkistukseen kuluva aika on 5 µs, koko testin suoritukseen kuluu n. 19 vuotta 12 March 2018 41
Testattavuuden rajat Täydellinen (exhaustive) eli kaikki mahdolliset (järkevät ja järjettömät) syötearvot ja suorituspolut kattava testaaminen ei ole siis yleensä mahdollista Käytännössä voidaan testata vain murto-osa kaikista mahdollisuuksista Hyvin valituilla testitapauksilla voidaan kuitenkin paljastaa merkittävä määrä vikoja ja saavuttaa tyydyttävä testauksen kattavuus 12 March 2018 42
Testausstrategia 12 March 2018 43
Testauksen suunnittelu ja ohjaus Testaus on työmäärältään ja tarkoitukseltaan niin merkittävä osa ohjelmistoprojektia, että se vaatii oman suunnitelmansa Suunnitelmaa on myös varauduttava muuttamaan projektin edetessä On mietittävä 1. Testauksen tavoitteet 2. Tarvittavat resurssit henkilöstö, aika, laitteet jne. 3. Koulutustarpeet 4. Testauksen organisointi ja hallinto 12 March 2018 44
Yleiskuva testauksesta prosessina [4] Andreas Spillner, Tilo Linz, Hans Schaefer: Software testing foundations - a study guide for the certified tester exam : foundation level, ISTQB compliant, 4th Edition. Santa Barbara, CA : Rocky Nook, Inc., 2014. 12 March 2018 45
Testausstrategia Ohjemistoprojektissa testauksen suunnittelun päätehtävä on testausstrategian laatiminen Yritystasolla voi olla myös määritelty yleinen testausstrategia, joka ohjaa projektien strategioita Kuten aikaisemmin nähtiin, täydellinen (exhaustive) testaus ei ole mahdollista Testauskohteet ja testit on siis priorisoitava riskianalyysin perusteella Kriittisiksi luokitellut ohjelmiston osat on testattava perusteellisimmin Tavoitteena on testauksen optimaalinen kohdentaminen oikeisiin paikkoihin Esimerkki VSR järjestelmän testausstrategia (kurssikirja luku 2.2.1) 12 March 2018 46
Testauksen suunnittelu ja ohjaus Testauksen suunnittelun kuuluu myös sen päättäminen, milloin testaus voidaan lopettaa (exit criteria) Lopetuskriteerien tarkka muoto riippuu käytetyistä testausmenetelmistä - esimerkiksi Tietyn lausekattavuuden (90%) saavuttaminen Tietty osuus (70%) kaikista järjestelmän transaktioista testattu vähintään kerran Lopetuskriteerien määrääminen kuvaa samalla testauksen intensiteetin (test intensity) jakautumisen eri osa-alueille (alijärjestelmät/toiminnot) Käytännössä yleinen lopetusehto on ajan loppuminen! Tällöin pitää pystyä arvioimaan jäännösriski eli vielä löytymättömien vikojen aiheuttama riski projektille 12 March 2018 47
Testauksen suunnittelu Jokaisen ohjelmiston testauksen kattavuus ja intensiteetti täytyy päättää erikseen Päätöksenteon perusteet Riskianalyysi Testaukseen käytettävissä olevat resurssit (henkilöstö, työkalut, osaaminen) Testaukseen käytettävissä oleva aika Tavoitteena hyvä hyötysuhde Testaamisen kustannukset vs. saavutettu hyöty Testaukseen 20 50% kokonaisbudjetista 12 March 2018 48
Testauksen seitsemän periaatetta 12 March 2018 49
Testauksen seitsemän periaatetta 1. Testauksella voi vain osoittaa, että häiriöitä (vikoja) on, mutta sillä ei voi osoittaa, että niitä ei ole Vaikka testit menevät läpi, se ei todista, että vikoja ei ohjelmistossa enää ole. Riittävän kattava testaaminen kuitenkin pienentää todennäköisyyttä, että ohjelmistoon jää sen arvoa vähentäviä vikoja. 2. Täydellinen (exhaustive) testaaminen ei ole mahdollista 3. Testausaktiviteetit tulisi aloittaa mahdollisimman aikaisin projektissa Testauksen tavoitteet on selvitettävä; Viat on helpointa korjata, kun ne havaitaan nopeasti 4. Viat kerääntyvät usein yhteen 20 80 (Pareto -periaate): 20% komponenteista sisältää 80% tunnetuista vioista 12 March 2018 50
Testauksen seitsemän periaatetta 5. Samanlaisina toistetut testit menettävät tehoaan ajan mittaan Pesticide paradox : testitapaus, joka aiemmin löysi tietyn vian, ei useinkaan pysty paljastamaan muita (uusia tai piiloutuneita) vikoja (vielä testaamattomat ohjelmiston osat, kokeilemattomat syötekombinaatiot) 6. Testaus on kontekstiriippuvaa Testausstrategian lähtökohtana tulee olla juuri tämän ohjelmiston käyttöön ja ympäristöön liittyvät riskit 7. Vikojen pieni määrä ei välttämättä tarkoita sitä, että testattu järjestelmä on käyttäjilleen hyödyllinen Toteutimme ehkä ohjelmiston oikein, mutta onko ohjelmisto käyttäjilleen se oikea? 12 March 2018 51
Luennon oppimistavoitteet Mitä ohjelmistojen testaaminen on? Mikä on testauksen suhde ohjelmiston laatuun? Mitä tarkoittavat häiriö, vika ja erehdys? Onko täydellinen testaaminen mahdollista? Mikä on testausstrategia? Testauksen yleiset periaatteet 12 March 2018 52