Ohjelmistotestaus Johdanto ohjelmistotestaukseen "Beware of bugs in the above code; I have only proved it correct, not tried it." 1
Sisältö Mitä testaus on? Mitä arvoa testaus tuottaa? Testauksen prosessi. Testauksen kokonaiskuva. Testauksen käsitteitä. Näkökulmia testaukseen. Mitä testaus on (poimittu alan kirjallisuudesta) Testing is the process of demonstrating that defects are not present in the application that was developed. Testing is the activity or process which shows or demonstrates that a program or system performs all intended functions correctly. Testing is the activity of establishing the necessary confidence that a program or system does what it is supposed to do, based on the set of requirements that the user has specified. 2
Mitä testaus oikeasti on? Meyers: Testaus on prosessi jossa ohjelmaa suoritetaan tarkoituksena löytää siitä virheitä. Kaner: Testaus on tutkimus jolla saadaan laatuun liittyvää tietoa testauksen kohteesta. Hetzel: Testaus on ohjelman laadun mittaamista. Mitä testaus on? Testaus on systemaattista virheiden etsimistä - ei satunnaista kokeilua Tämä ei tarkoita että testaus on aina rutiininomainen prosessi Testauksen tarkoitus on osoittaa että ohjelmassa on virhe Testaus ei voi koskaan osoittaa virheettömyyttä "Program testing can be used to show the presence of bugs, but never to show their absence!" - Edsger Dijkstra - Mitä enemmän ja mitä vakavampia virheitä löytyy, sitä onnistuneempi testaus on! 3
Testauksen systemaattisuudesta? (Hutcheson, Software Testing Fundamentals) Kaksi esimerkkiä testauksen systemaattisuuden vaikutuksesta päätöksentekoon testauksen perusteella. Esimerkki 1 Business manager: So you tested it, is it ready to go to production? Tester: Yes, I tested it. It s ready to go. Business manager: Well, what did you test? Tester: I tested it. Testauksen systemaattisuudesta? (Hutcheson, Software Testing Fundamentals) Esimerkki 2 We have tested 67% of the test inventory. The test we ran represent the most important test as determined by our risk analysis. The bug find rates and the severity composition of the found bugs were within the expected range. There are currently no open severity 1 issues and the last found was three weeks ago. Fixes for the last severity 2 issues have been regression tested. Overall the system seems to be stable. The load testing has been concluded. The system failed at 90% load. System engineers say that they understand the problem and will fix it in three months. The projected peak load should only be at 75% by then which is safe. Our recommendation is to ship the system as planned. 4
Testauksen Perusajatus 1) 2) 4) 5) 3) 6) Selitys edelliselle kuvalle 1) Vaatimukset ovat lähtökohta sekä järjestelmän toteutukselle että testaukselle 2) Vaatimuksista johdetaan spesifikaatioita joiden perusteella laaditaan testitapaukset 3) System Under Test (SUT) eli testattavan ohjelmiston osan rajaus tärkeä osa testauksen suunnittelua 4) Testitapauksien onnistunut valinta on ratkaisevaa, tavoite kattaa järjestelmän käyttäytyminen riski- ja kustannusperusteisesti 5) Ajurit ovat joskus yksinkertaisia, joskus suurin osa koko testauksen työmäärästä 6) Bugien havaitseminen perustuu aina vertailuun halutun ja todellisen käyttäytymisen välillä. 5
Sisältö Mitä testaus on? Mitä arvoa testaus tuottaa? Testauksen prosessi. Testauksen kokonaiskuva. Testauksen käsitteitä. Näkökulmia testaukseen. Testauksen tuottaman arvon ydin Testaus tuottaa tuotteen laatuun liittyvää informaatiota projektin/yrityksen sidosryhmille: tuotteen todellinen tila. Jotta tuotettu informaatio olisi hintansa väärttiä pitää ymmärtää kuka sitä käyttää ja mihin tarkoitukseen kyetä tuottamaan se oikein, oikea-aikaisesti ja kustannustehokkaasti 6
Testauksella on monta isäntää Kehittäjä Helppo kehitteävyys, nopea palaute työn laadusta. Projektipäälikkö Riippuvainen testauksen tuottamasta tiedosta tuotteen todellisesta valmiusasteesta ja tuotteen eri osien stabiliudesta Tuotepäälikkö Tuotealustojen ja komponenttien laatu, tuotestrategia Tekninen tuki ja markkinointi Valmistautuminen tuotteen heikkouksiin, niiden huomioiminen markkinoinnissa ja brandinhallinnassa Liikkeenjohto Yrityksen brandi, tuotejulkaisut, hinnoitteluvoima, tuotestrategia Asiakas Laadukas helppokäyttöinen sovellus Tesauksen tuottamaa arvoa Löydetään tuotteesta ongelmia Kyetään arvioimaan tuotteen virheiden tai luotettavuuden määrää Kyetään estämään vihreiden syntyminen Kyetään pitämään tuote kehityksen aikana laadukkaana ja helposti kehitettävänä Kyetään poistamaan tuotteesta liiketoimintatason riskejä Kyetään tuottamaan informaatiota toiminnna kehittämiseksi. 7
Mitä ongelmia testauksella etsitään? Ohjelmisto ei tee jotain mitä tuotespesifikaation mukaan pitäisi Ohjelmisto tekee jotain mitä tuotespesifikaation mukaan ei pitäisi Ohjelmisto tekee jotain mitä tuotespesifikaatio ei mainitse Ohjelmisto ei tee jotain mitä tuotespesifikaatio ei mainitse vaikka sen pitäisi Ohjelmistoa on vaikea käyttää tai ymmärtää, se on hidas, tai testaajan mielestä siinä on vain jotain pielessä. Sisältö Mitä testaus on? Mitä arvoa testaus tuottaa? Testauksen prosessi. Testauksen kokonaiskuva. Testauksen käsitteitä. Näkökulmia testaukseen. 8
Oy Ohjelmistokehitys Ab Liikkeenjohto Tuotelinjat Projektit Vaatimusmäärittely Analyysi Suunnittelu Käyttöönotto Integrointi Testaus Ylläpito Markkinointi Myynti After Sales Perinteinen virhekustannusmalli Vesiputousmainen kehitys 9
Oy Ohjelmistokehitys Ab Testauksen kytkeytyminen Liikkeenjohto Tuotelinjat Projektit Kehitysprosessi Testausprosessi Laadun varmistus Toimitus Myynti Markkinointi After Sales Nykyaikainen ohjelmistokehitys? Rational Unified Process, Lähde: ibm.com 10
Virhekustannus Virheen kustannuksen aikariippuvuus Ketterä ohjelmistokehitys Vastine perinteisen ohjelmistokehityksen kankeuteen Agile Manifesto: http://www.agilemanifesto.org/ Keskeistä testauksen kannatlta Kaikkea ei suunnitella ennakkoon, varaudutaan muutoksiin Kehitettävä tuote pidetään (on pidettävä!) koko ajan laadukkaana, muuten kehitys pysähtyy Testauksen kaikki tasot mukana koko ajan Extreme Programming, SCRUM Vähän työtuotteita, vähän mahdollisuuksia virheisiin? 11
Ketterä kustannusmalli Ei yhtä oikeaa tapaa Testausprosessi, tapa organisoida testaus ja sen tavoitteet ovat erilaiset eri yrityksissä ja hankkeissa. Erityisesti suunnitelmaohjatun ja ketterän kehittämisen testausprosessit ovat lähtökohdiltaan jo erilaiset. Kehitys ja testausprosessi ovat vahvassa vuorovaikutuksessa keskenään. 12
Sisältö Mitä testaus on? Mitä arvoa testaus tuottaa? Testauksen prosessi. Testauksen kokonaiskuva. Testauksen käsitteitä. Näkökulmia testaukseen. Testauksen kokonaiskuva Ohjelmistotestaus käsittää suuren kirjon erilaisia tekniikoita, menetelmiä, työkaluja, ja toimintatapoja. Testaus tyypillisesti nivoutuu lähes kaikkeen muuhun toimintaan ohjelmistokehityksessä. Testauksen perimmäinen tavoite vaihtelee suuresti ja on hankkeesta, tuottesta ja yrityksestä riippuvainen. Yleispätevää reseptiä hyvään ohjelmistotestaukseen ei ole olemassa. Testaukseen pitää suhtautua tilanneriippuvasti Menetelmät jotka toimivat hyvin yhdessä tilanteessa ovat tehottomia toisessa Mitä (tekniikat, työkalut, strategiat...) riippuen kuka, missä, milloin, miksi, entä jos... 13
Testauksen koulukuntia (by Bret Pettichord) Testauksen vaikeaselkoista kenttää selittää osin se että testausta on kehitetty ja sovellettu monista eri näkökulmasta B. Pettichord on löytänyt neljä eri koulukuntaa Analyyttinen Tuotantolaitos Laatuajattelu Kontekstiohjattu Testauksen opit eri koulukunnista ovat usein ristiriitaisia, mutta osin myös toisiaan komplementoivia Koulukuntiin jako auttaa ymmärtämään eri menetelmiä ja etenkin mihin tavoitteeseen niillä on alunperin pyritty Menetelmien sovellettavuuden rajat Analyyttinen koulukunta Testaus nähdään tieteellisenä/matemaattisena haasteena Ongelmat teknisiä, esimerkiksi Miten syöte-tulos avaruutta partitiodaan ekvivalenssiluokkiin testausmielessä? Miten testauksen kattavuutta arvioidaan? Avainkysymys: Mitä tekniikoita käytetään? Seurauksia Vaaditaan tarkat ja yksityiskohtaiset spesifikaatiot Testauksessa verifioidaan että ohjelmisto täyttää mitä spesifikaatioissa määritellään. Mikään muu ei ole testausta. Akateeminen näkemys, turvallisuuskriittiset sovellukset 14
Tuotantolaitos -koulukunta Testaus nähdään yhtenä vaiheena ohjelmistojen tuotantokoneistossa Testauksen tehtävä on mitata tuotteen valmistumista Tunnuspiirteitä: testauksen V-malli, vaatimusten jäljitettävys Tärkeät kysymykset Miten tuotanto ja testaus sen osana järjestetään ja miten sitä hallitaan? Testauksen kustannustehokkuus. Miten työn valmistumista ja tuotteen laatua kyetään mittaamaan? Seuraukset Testaus erillinen toiminto kehityksestä, best practice ajattelu Projektisuunnittelu korostunutta, muutokset jäykkiä Teollisuudessa suurissa hankkeissa Laatuajattelun koulukunta Ajattelun lähtökohta: ohjelmiston laatu syntyy kurinalaisella prosessilla Testaus testaa prosessin toimivuutta tuotteen laadun kautta Testaajat toimivat laatupoliiseina ja valvovat että kehittäjät toimivat prosessin mukaan Tarvittaessa laatua parannetaan prosessia kehittämällä Avainkysymys: onko prosessi hyvä ja käytetäänkö sitä kurinalaisesti? Seuraukset Testauksen fokus prosesseissa, ei tuotteen laadussa. Testauksen ja muun kehittämisen yhteispeli vaikeaa Suuret yritykset, laatustandardien pakottamaa 15
Kontekstiohjautunut koulukunta Ohjelmistoja tekevät ihmiset ja tämä luo kontekstin testaukselle Testaus tuottaa tietoa projektin käyttöön Testauksella löydetään bugeja, ja bugi on mitä tahansa mikä häiritsee jotain osapuolta (stakeholder) Testaus on monipuolista osaamista vaativa älyllinen toiminto Avainkysymys: Mikä testaus tuottaa juuri nyt eniten lisarvoa projektissa? Taidot tärkeämpiä kuin best practicet Markkinavetoiset ohjelmistot. Ketterä testaus - asiakaslähtöinen variantti tästä, vai oma koulukunta? Mitä työvaiheita testaukseen kuuluu? 1/2 Testaussuunnitelman laatiminen Testausstrategian, -lähestymistapojen ja ympäristön suunnittelu ja dokumentointi Suunnitelma toimii pohjana testauksen organisoinnille ja johtamiselle Testitapausten laadinta Testitapaukset laaditaan testaussuunnitelman ja ohjelmiston määrittelyiden pohjalta Pyrkimyksenä testien riittävä kattavuus ja testauksen keskittyminen oikeisiin asioihin Testausympäristöjen luonti Tarvittavien laitteiden ja ohjelmistojen asentaminen Saattaa viedä paljonkin resursseja, testilabrat 16
Mitä työvaiheita testaukseen kuuluu? 2/2 Testauksen suorittaminen Eri testaustekniikoiden soveltaminen Sisältää luovan elementin huolimatta ennakkomäärittelystä Testausautomaatio Tulosten tarkastelu ja raportointi Tulokset tulee saada oikea-aikaisesti, oikeille kehittäjille Bugien seuranta vähentää turhaa työtä Raportointi- ja seurantatyökalut Testaajan missiot Yksi tapa katsoa ohjelmistotestauksen kokonaisuutta on testaajan ammattiprofiilin sisältö Testaajalla voi hankkeessa olla mm. seuraavia missioita: Löytää tärkeimmät bugit nopeasti Yleinen tuotteen laatuarviointi Tuotteen sertifiointi jonkun laatustandardin suhteen Varmistaa että testausprosessi täyttää laatustandardin vaatimukset Auttaa kehittäjiä ohjelmiston suunnittelussa mm. testattavuuden suhteen Auttaa vaatimusmärittelyssä testattavuuden ja paremman tuotelaadun suhteen Kehittää tuotetta ylläpidon kustannusten näkökulmasta... Lisäksi testauksen tukitehtäviä kuten testausympäristöjen rakentamista ja ylläpitoa 17
Sisältö Mitä testaus on? Mitä arvoa testaus tuottaa? Testauksen prosessi. Testauksen kokonaiskuva. Testauksen käsitteitä. Näkökulmia testaukseen. Laadun käsite Laatu on subjektiivinen käsite, joka tulee määritellä tapauskohtaisesti Laadukas ohjelmisto voi tarkoittaa käyttäjälle toimintavarmuutta, helppokäyttöisyyttä, monipuolista toiminnallisuutta,... Kehittäjälle laadukas ohjelmisto saattaa merkitä jotain aivan muuta Laadun mittaaminen tulee kuitenkin olla mahdollisimman objektiivista Ns. laatujärjestelmät kuvaavat prosessin, jolla pyritään vakioimaan laatu määritellylle tasolle 18
Ohjelmistojen laatu Ohjelmistojen laadulla voi tarkoittaa Sopivuutta käyttötarkoitukseen Spesifikaatioiden mukaista toimintaa Erinomaisuuden astetta Oikea-aikaista toimitusta Laatumallit auttavat määrittelemään mittareita laadun toteamiseen Kiinteät laatumallit McCallin ja Boehmin laatumallit ISO 9126 standardi Itsemääritelty laatumalli auttaa ottamaan omat kehitystarpeet tarpeet huomioon McCallin laatumalli Use Factor Criteria Usability Product Operation Product Revision Product Transition Integrity Efficiency Correctness Reliability Maintainability Testability Flexibility Reusability Portability Interoperability... Consistency...... Self-descriptiveness Metrics 19
Quality Assurance l. laadunvarmistus: testausta vai prosessia? QA on testausta? Testaus nähdään kehittämisestä erillisenä toimintona, ulkoisena laatukontrollina Suurin osa QA pestillä olevista työntekijöistä käytännössä testaavat QA on prosessia? CMMI, IEEE näkemys QA:sta Laatua aikaansaadaan prosessilla joka pakottaa kurinalaiseen kehittämiseen ja testaamiseen Johtaa usein vesiputousmaiseen korkean tason elinkaarimalliin Kolmas vaihtoehto: QA osa kehittämistä QA koko kehitystiimin vastuulla Laatua ei ole delegoitu yhdelle ryhmälle tai henkilölle Kaikki vastuussa jatkuvasta laadun tekemisestä ja laatuasioiden esiin nostamisesta Testaus integroitu kaikilla tasoilla kehittämistyöhön Laatutason määrittää lopulta asiakas, ei prosessistandardit Ketterässä kehittämisessä (agile) yleinen tapa suhtautua QA:han 20
Bugi, mikä se sitten on? Bugien terminologia on vakiintumatonta; tällä kurssilla käytetään seuraavaa (suositeltavaa) tulkintaa Bugi (bug) syntyy kun ihminen tekee virheen jossain kehityksen toiminnossa ja virhe (error) päätyy johonkin välituotteeseen Niin kauan kuin virhe pysyy tuotteessa, se voi aiheuttaa uusia bugeja Virhe voi aiheuttaa vian (fault) toiminnassa joka pysyy huomaamattomana kunnes se aiheuttaa häiriön (failure), joko testauksessa tai käytössä Sisältö Mitä testaus on? Mitä arvoa testaus tuottaa? Testauksen prosessi. Testauksen kokonaiskuva. Testauksen käsitteitä. Näkökulmia testaukseen. 21
Työnjako Toteuttaja vs. testaaja Mitä toteuttajat testaavat itse, mitä ulkopuoliset testaajat? Miten työnjako käytännössä tehdään, miten työt nivotaan yhteen? Kehitysprosessi vs. testausprosessi Testaaja vs. asiakas Mitä kumpikin testaa? Miten testaaja suhtautuu ominaisuuksiin joita tietää asiakkaan testaavan? Miten määritellään sopimuksessa riittävä laatu / valmiusaste? Verifiointi ja validointi Verifioinnilla varmistetaan että jokin välituote, yleensä ohjelma, on spesifikaationsa mukainen Are we doing the job right? Oleellinen kehittämisen tukena Validointi varmistaa että tuote vastaa käyttäjän vaatimuksia Are we doing the right job? Oleellinen vaatimusmäärittelyn tukena Testauksella tehdään kumpaakin, ero termien välillä on merkittävä 22
Testaustyyppejä staattinen vs. dynaaminen Staattinen testaus Analysoidaan mitä tahansa välituotetta tarkoituksena löytää siitä virheitä Erilaisia katselmointi ym. tekniikoita Aikainen virheiden löytyminen mahdollista Dynaaminen testaus Suoritetaan ohjelmaa tarkoituksena löytää virheitä Löytää virheitä vasta toteutuksesta, siis myöhäisessä vaiheessa Täydentävät toisiaan, löytävät eri virheitä Staattinen testaus yleensä liian pienellä painolla käytössä Testaustyyppejä white-box vs. black-box Black-box testaus Testausta tehdään puhtaasti ohjelman halutun käyttäytymisen perusteella Testitapaukset valitaan spesifikaatioiden perusteella, itse testattavasta järjestelmästä ei tiedetä mitään White-box testaus Testauksen suunnittelussa käytetään hyväksi testattavan järjestelmän rakennetta Mitä testataan, mitä ei testata, miten arvioidaan testauksen riittävyyttä Molemmat tarpeellisia, löytävät erilaisia virheitä 23
Testaustyyppejä Toiminnallinen vs. ei-toiminnallinen Toiminnallinen testaus Testataan yksittäisiä toimintoja tai suurempia piirteitä Monentasoista: yksikkötestauksesta hyväksyntätestaukseen Usein selkeää todeta toiminnallisuuden virheellisyys Ei-toiminnallinen testaus Testataan ohjelmiston laadullisia ominaisuuksia, esim. käytettävyys, luotettavuus, suorituskyky Järjestelmätestausta pääosin Vaikea testata ja vaikea selkeästi todeta testin tulos Usein erittäin tärkeää hankkeessa Vaikuttavuus ja tehokkuus Vaikuttavuus Tehdään oikeita asioita: testataan soveltuvilla tekniikoilla, kohdennetaan testaus oikeisiin tuoteen osiin, tuotetaan tarvittavaa informaatiota Riskiperustainen lähtökohta Tehokkuus Testauksen kustannustehokuus Hyvät työkalut, oikea automatisointi, järkevä työn organisointi Hyvä suunnittelu ja toteutus lähtökohtana 24
Mistä tiedät onko testaus vaikuttavaa? Korkea Matala Löytyy paljon virheitä Testauksen vaikuttavuus Löytyy vähän virheitä Tuotteen laatu Korkea Löytyy virheitä Ei löydy virheitä Matala Suunnittelu ja tekeminen Suunnittelu Testauksen tavoitteet liiketoiminnassa Testausstrategia Projektin testaussuunnitelma Yksityiskohtaiset testaussuunnitelmat Testitapaukset Tekeminen Testiympäristöt ja -työkalut Testiaineistot Testien suoritus Tulosten raportointi Automatisointi 25
Testaustyyppejä Uudet ominaisuudet vs. uudelleentestaus Uudet ominaisuudet Paino vaikuttavuudessa Nopea laatupalaute Virheiden nopea poisto järjestelmästä Luovaa mielenkiintoista työtä Uudelleentestaus Paino kustannustehokkuudessa Automatisointi Muutoskitkan minimointi Nopean kehitysrytmin mahdollistaminen Toteutus rutiinia 26