Ohjelmiston testaus ja laatu Testaustasot
Testauksen vaihejako Tarpeet / sopimus Järjestelmätestaus Hyväksymiskoe Määrittely testauksen suunnittelu ja tulosten verifiointi Arkkitehtuurisuunnittelu Moduulisuunnittelu Moduulitestaus Integrointitestaus Ohjelmointi -Moduulitestauksen paljastamat virheet ovat ohjelmointivirheitä -Integrointitestauksessa esiin tulevat virheet johtuvat suunnitteluvirheistä -Järjestelmätestaus vaiheessa paljastuvat virheet, voivat pahimmassa tapauksessa johtaa koko prosessin alkuun eli virheellisesti suoritettuun määrittelyvaiheeseen
Moduulitestaus moduulitestaus = komponentti testaus = yksikkötesti Ohjelmistokomponentti on 100-1000 koodirivistä koostuva ohjelman erillinen osa, esim. matemaattinen funktio. Testaajalla on oltava käytössään ohjelman lähdekoodi ja kyseisen komponentin määrittelyt Testauksen tarkoitus on verrata komponentin toimintaa komponentin toiminnallisiin määrittelyihin ja komponentin rajapintojen spesifikaatioihin Ohjelmakoodin läpikäynti ja testaus tapahtuu pääsääntöisesti white box menetelmällä (white-box ei ole muissa tasoissa järkevä ) Useimmissa tapauksissa testattavan yksikön oikea ympäristö ohjelmistossa ei vielä ole valmis. Komponenttiin liittyvät muut komponentit eivät vielä ole valmiita liitettäväksi testattavaan komponenttiin tai niiden toiminta on vielä testaamatta. Tällöin joudutaan luomaan komponenttitestausta varten komponentille sen varsinaista ympäristöä simuloiva testiympäristö eli testipeti Testiympäristö koostuu ohjelmakomponentin ympäristöä jäljittelevistä testiajureista, jotka kutsuvat komponentin funktioita tai metodeja ja mahdollistavat saatavien tulosteiden tarkastelun. Testipetiin on usein lisättävä myös tarvittavat testityngät, jotka korvaavat testauksen aikana komponenttiin liitettävät muut komponentit, syöttölaitteet ja testattavan komponentin kanssa yhdessä toimivat komponentit.
Integraatiotestaus - 1 Integrointitestaus on harvoin helposti erotettavissa komponenttitestauksesta black-box orientoitunut testi Pääpainopisteenä integrointitestausvaiheessa on yksittäisen komponentin ja siihen liittyvien komponenttien väliset rajapinnat. Komponentin sisäinen toiminta tulisi varmentaa jo yksikkötestausvaiheessa Testiajurit korvaavat komponenttihierarkiassa komponenttien yläpuolelle sijoittuvat eli komponenttia kutsuvat tai käyttävät ohjelmistokomponentit. Testityngät ovat komponentteja, jotka korvaavat testattavien komponenttien kutsumia komponentteja. Ohjelmistokomponenttien integrointi voidaan toteuttaa kokoavalla- (bottom up), jäsentävällä- (top down), big bang lähestymistavalla, horisontaalisella integroinnilla, sandwich integroinnilla tai toimialakomponenttien integroinnilla.
Integraatiotestaus - 2 Kokoava lähestymistapa komponentteja A, B, C, D, E, F 1. komponentit, jotka eivät ole riippuvaisia muista eli E, C ja F. Testaus tarvitsee testiajureita testiajuri-b, testiajuri-a ja testiajuri-d 2. komponentit, jotka käyttävät edellä testattuja eli B ja D. A:ta ei voi testata, sillä ensin tulee testata B ja D. Testiajureina testiajuri-a 3. komponentti A tarvittiin testiajureita 5 kpl A B C D E F
Integraatiotestaus - 3 Jäsentävä lähestymistapa 1. testataan ylin tai toiminnoltaan keskeisin eli A. Tarvitaan testityngät B, C ja D 2. testataan jokin tilanteesta riippuen B, C tai D. Esimerkissä testataan D eli silloin luodaan testitynkä F 3. testataan B ja luodaan testitynkä E 4. testataan E ja F eli korvataan testityngät aidoilla komponenteilla 5. testataan C (muutetaan testitynkä aidoksi) mahdollistaa projektin etenemisen mukaisen testaamisen ilman että kaikki komponentit ovat vielä valmiita A B C D E F
Integraatiotestaus - 4 Big-bang kaikki komponentit ja osajärjestelmät kasataan yhteen kerralla menetelmä on harvoin käyttökelpoinen vaatii huomattavasti enemmän töitä yksikkötestaus vaiheessa Kaikille komponenteille, joita pidetään eristyksissä ennen niiden integrointia, täytyy toteuttaa oma testausympäristö (luodaan tarvittavat testityngät ja testiajurit, varmistamaan kunkin komponentin täydellinen toimivuus erillään osajärjestelmästä) Esimerkeissä kaikille komponenteille omat testiympäristöt, yhteensä viisi testiajuria ja viisi testitynkää, ennen kuin ohjelman osien integrointi voidaan suorittaa. A B C D E F
Integraatiotestaus - 5 sandwich-integrointi kokoavan ja jäsentävän tavan yhdistelmä lähdetään integroimaan yhtä aikaa molemmista päistä horisontaalinen integrointi käytetään, kun liitetään kokonaisia ohjelmia yhteen tai ohjelmat liittyvät toisiinsa tietokannan avulla (liitetään jokainen sovellus toimimaan kannan kanssa sitä mukaa kuin ne ovat testattavissa, lopussa kaikki sovellukset käyttävät kantaa sille ominaisella tavalla)
Integraatiotestaus - 6 Toimialakohtainen integrointi olio-ohjelmoinnissa suositellaan kokoavaa lähestymistapaa toimialakohtainen periaatteeltaan sama kuin kokoava integrointijärjestystä määriteltäessä kiinnitetään huomiota komponenttien väliseen liikenteeseen, niiden toisilleen välittämien kutsujen määrään. menetelmällä pyritään löytämään virhetilanteet ja ristiriitaisuudet komponenttien rajapinnoissa mahdollisimman aikaisessa vaiheessa, kompleksisuus mahdollisimman pieni 1. valitaan joukko komponentteja, joilla on suurin määrä kutsuja keskenään eli komponenteista muodostuvan alijoukon sisällä, mutta pienin määrä kutsuja ulos omasta alijoukostaan. 2. jäljelle jäävistä eli keskenään integroitujen komponenttien muodostaman alijoukon ulkopuolelle jäävistä komponenteista valitaan seuraavaksi aiemmin integroidun alijoukon kanssa integroitavaksi komponentti tai joukko komponentteja. valintaperusteena seuraavaksi integroitavalla komponentilla on, että sillä tulee olla kaikkein suurin määrä kutsuja jo aiemmin integroidun joukon kanssa. Vaihetta 2 toistetaan niin kauan kuin kaikki järjestelmään kuuluvat komponentit ovat tulleet integroiduiksi ja toiminta testatuksi A B C D E F
Järjestelmätestaus - 1 Järjestelmätestauksessa (systeemitestaus) altistetaan valmistunut järjestelmä testattavaksi kokonaisuudessaan ennen kuin se toimitetaan asiakkaalle. Järjestelmätestauksen päätavoite on tutkia täyttääkö valmis systeemi sille määrittelyssä asetetut vaatimukset. Toisena tavoitteena voidaan taas pitää, että kyetään löytämään ja korjaamaan mahdollisimman paljon ristiriitoja valmistuneen systeemin ja sen määrittelyn väliltä. Systeemitestauksessa testataan koko ohjelmaa ja sen koko ympäristöä systeemitestaus toteutetaan täsmälleen samankaltaisessa tai samassa ympäristössä, jossa valmista ohjelmaa tullaan todellisuudessa käyttämään.
Järjestelmätestaus - 2 Järjestelmätestauksen kysymyksiä Tekeekö ohjelmisto sen mitä sen pitää tehdä? (ohjelman toiminnallisuus) Onko ohjelma helppokäyttöinen ja vikasietoinen? (käyttöliittymä) Vastaavatko opasteet ja Help -tiedostot ohjelmaa? (opasteet) Vastaavatko laaditut manuaalit ohjelmaa? (dokumentaatio) Toimiiko järjestelmä kuormitettuna? (kuormitus) Täyttääkö ohjelmiston toiminta sille asetetut suorituskyky-vaatimukset? (suorituskyky) Onnistuuko lopettaminen virhetilanteissa? (lopetus virhetilanteissa) Toimiiko järjestelmä suurilla syötteillä, jne? (suuret määrät dataa) Toimiiko käyttäjän tunnistus ja tietoturvallisuus? (turvallisuus) Toimiiko ohjelmisto oikeassa ympäristössään? (liitettävyys) Pysyykö ohjelma pystyssä vaadittuja aikoja? (luotettavuus) Sietääkö ohjelma virhetilanteita eli varmistustoimintojen toimivuus? (toipumiskyky) Onnistuuko asennus asennusohjeiden mukaan? (asennettavuus)
Hyväksymiskoe kyseessä ei ole testi virheitä ei saisi olla enää tässä vaiheessa hyväksymiskokeen tekee asiakas hyväksymiskokeen jälkeen asiakas saa sovelluksen käyttöönsä ja toimittajalle jää takuuajan mukainen korjausvelvoite
Testaustyökaluja käsitestaus (vähän) automatisoitu testaus (mahd. paljon) staattinen virheenjäljitys ilman ohjelman ajoa kääntäjä (varoitukset, virheet) dynaaminen virheenjäljitys ohjelman ajon avulla debuggeri, keskeytyskohdat, muuttujien seurannat, koodissa eteneminen automatisoitu testaus testauksen suoritus- ja vertailutyökalut periaatteeltaan testityökalut ovat yksinkertaisesti ohjelmia, jotka suorittavat testin käyttämällä testattavaa sovellusta - simuloivat tavallista testaajaa ja testaajan testattavalle sovellukselle manuaalisesti suorittamia toimintoja työkaluna esim. WinRunner (http://www.mercury.com/) käyttöohjeita mm. osoitteesta http://www.cs.uku.fi/research/teho/graduvirkanen.pdf sivut 52-76