Testauksen suunnittelu www.cs.helsinki.fi 30 April 2018 21
Testauksen suunnittelu Testaus on (usein tärkein tai jopa ainoa) osa laadunvarmistusta (quality assurance) Testauksella saadaan analyyttistä, konkreettista dataa ohjelmiston laadusta ja laadun kehittymisestä projektin aikana Testaussuunnitelma on osa laatusuunnitelmaa (QA plan) www.cs.helsinki.fi 30 April 2018 22
Testauksen suunnittelu Suunnitteluun sisältyy seuraavia toimia Testaussuunnitelman tekeminen Testien priorisointi Testin aloitus- ja lopetusehtojen määrittely Miljoonan taalan kysymys: milloin on testattu tarpeeksi? www.cs.helsinki.fi 30 April 2018 23
Testaussuunnitelma IEEE 829-1998 standardi antaa mallin testisuunnitelman sisällölle Kurssikirjassa liite A Standardi ISO/IEC/IEEE 29119 korvaa tämän Testauksen yleissuunnittelu Testausstandardeja on kritisoitu paljon kaavamaisuudesta ja yleisestä raskaudesta Ne ovat toisaalta suosituksia, eivät pakollisia käyttää www.cs.helsinki.fi 30 April 2018 24
Testien priorisointi Kävi projektin aikataulun ja rahoituksen kanssa miten kävi, testit on priorisoitava niin, että tärkeimmät testit tulevat aina suoritetuksi Priorisointiperusteita Toimintojen odotettu käyttötiheys ja virheiden todennäköisyys käytön aikana Vikariski = vian vakavuus x todennäköisyys Vikojen näkyvyys käyttäjälle www.cs.helsinki.fi 30 April 2018 25
Testien priorisointi Priorisointiperusteita (jatkuu) Laatuvaatimusten painotukset ja tärkeys asiakkaalle Toiminnon/ominaisuuden arvo käyttäjälle ja/tai liiketoiminnalle Implementaation kannalta kriittiset komponentit ja toiminnot Ohjelman osien kompleksisuus Ohjelman osat, joihin liittyy suuri projektiriski Epäselvät vaatimukset, alihankkijan kyky toimittaa, kehitysorganisaation kyvyt, uusien teknologioiden käyttö, käytettävien ulkoisten ohjelmistokomponenttien ja ohjelmistokehysten laatu jne. jne. www.cs.helsinki.fi 30 April 2018 26
Testien priorisointi Priorisointia on oltava valmis muuttamaan projektin kuluessa Vioilla on tapana kasaantua Paljon vikoja sisältäneiden testikohteiden testitapausten prioriteettia on syytä nostaa www.cs.helsinki.fi 30 April 2018 27
Testien aloitus- ja lopetusehdot Tiettyjen edellytysten on yleensä oltava voimassa, ennen kuin testausta voidaan aloittaa Testausympäristö on olemassa ja valmiina käyttöön Testaustyökalut ovat käyttövalmiina testausympäristössä Testin kohde on asennettu ja valmiina Testin tarvitsema data on saatavilla Ehdot pitää kirjata testisuunnitelmaan www.cs.helsinki.fi 30 April 2018 28
Testien aloitus- ja lopetusehdot Testauksen lopetusehtojen eksplisiittinen määrittely auttaa torjumaan seuraavia riskejä Ilman selkeitä kriteereitä testauksen lopettamisesta päätetään epäjohdonmukaisin ja satunnaisin perustein Vältetään liika testaaminen, joka johtuu siitä, ettei tiedetä, mitä testauksella tavoitellaan www.cs.helsinki.fi 30 April 2018 29
Yleisiä lopetuskriteereitä Testikattavuus Kuinka monta testitapausta on suoritettu onnistuneesti, kuinka monta vaatimusta on testattu, mikä koodikattavuus on saavutettu Tuotteen laatu Löydettyjen vikojen määrä, vikojen kriittisyys, vikojen löytymistahti, luotettavuus jne. Jäännösriski Suorittamattomien testien määrä, korjaamattomat viat, epätäydellinen kattavuus Taloudelliset rajoitteet Kulut, projektiriski, toimitusaikataulu, markkinatilanteen muutokset www.cs.helsinki.fi 30 April 2018 30
Kustannukset, Testausstrategia, Testausaktivteetit www.cs.helsinki.fi 30 April 2018 31
Testauksen kustannukset Testaus voi viedä suuren osan ohjelmistoprojektin budjetista (jopa ~50%) Jotta testauksen käytetyt resurssit ja aika osataan asettaa oikealle tasolle, on ymmärrettävä mitä kustannuksia testauksessa löytymättä jääneet viat voivat aiheuttaa www.cs.helsinki.fi 30 April 2018 32
Vikojen aiheuttamat kustannukset Suorat kustannukset Asiakkaan liiketoimintaprosessille välittömästi aiheutuvat kulut ja tappiot virhetoiminnoista (taloudelliset tappiot ja suoranaiset vahingot laitteille ja henkilöstölle); menetetty liikevaihto Uusien, korjattujen ohjelmistoversioiden asennuksesta, käyttöönotosta ja uudelleenkoulutuksesta aiheutuvat menot www.cs.helsinki.fi 30 April 2018 33
Vikojen aiheuttamat kustannukset Epäsuorat kustannukset (asiakkaan näkökulmasta) Ohjelmiston toimittajalle aiheutuvat suorat kulut (sopimussakot, hinnan alennukset, käyttäjätuen kysynnän kasvu) Vahingot liiketoiminnalle; asiakkaiden ja maineen menetys, oikeudelliset kulut ja seuraamukset Vikojen korjaamisen kustannukset Toimittajan tekemän lisätyön hinta (vikojen jäljitys ja korjaus, testaus, uusien versioiden jakelu ja asennus) Resurssien (usein parhaiden) sitoutuminen korjaustyöhön uuden kehittämisen sijaan www.cs.helsinki.fi 30 April 2018 34
Testauksen kulut Moni tekijä vaikuttaa testauksen hintaan Kehitysprosessin kypsyys (organisaation vakaus, tekemisen ennustettavuus) Ohjelmiston laatu ja testattavuus Testausinfrastruktuuri Henkilöstön osaaminen Laatuvaatimukset Testausstrategia Testauspäällikkö ei juuri voi vaikuttaa kuin testausstrategiaan ja jossain määrin infrastruktuuriin ja henkilövalintoihin www.cs.helsinki.fi 30 April 2018 35
Testauksen työmäärän ja kustannusten arviointi Kustannuksia voi yleisesti arvioida kahdella tavalla Jakamalla koko testaustyö erillisiin tehtäviin ja pyytämällä tehtävien vastuuhenkilöitä ja/tai asiantuntijoita arvioimaan työmäärää ja muita kustannuksia Käyttämällä aiemmista projekteista kertynyttä dataa työmääristä ja kuluista arvioinnin pohjana Jälkimmäinen tapa tuottaa yleensä parempia arvioita, koska testauksen vaatima työmäärä yleensä aliarvioidaan! www.cs.helsinki.fi 30 April 2018 36
Testausstrategia ja kustannukset Testausstrategian tavoitteena on Optimoida testauksen kustannukset suhteessa löytymättömien virheiden aiheuttamiin kustannuksiin Minimoida riskit Käytännössä laskelmien tekeminen voi olla vaikeaa puuttuvan kokemusperäisen datan takia Strategiapäätökset tehdään usein pikemminkin intuition kuin rationaalisen tiedon varassa www.cs.helsinki.fi 30 April 2018 37
Testausstrategia Ennaltaehkäisevä vs. reaktiivinen Ennaltaehkäisevässä lähestymistavassa testaajat ovat mukana projektin alusta alkaen, jolloin testauksen suunnittelussa voidaan antaa riittävästi painoa aikaisessa vaiheissa tehtäville katselmoinneille ja analyyseille Reaktiivisessa toimintatavassa testauksen suunnittelu tulee mukaan vasta ohjelman toteutuksen ollessa jo pitkällä; tässä tapauksessa tutkiva testaus voi olla paras ja ainoa toimiva strategia Ennaltaehkäisevä toiminta on kuitenkin kustannustehokkainta koko ohjelmiston elinkaarta ajatellen www.cs.helsinki.fi 30 April 2018 38
Testausstrategia Analyyttinen vs. heuristinen menetelmä Analyyttinen testauksen suunnittelu yrittää kvantifoida kustannukset ja kulut sekä niiden väliset riippuvuudet ja tuottaa optimoidun strategian laskelmien avulla Heuristinen suunnittelu nojaa asiantuntijoiden kokemukseen ja peukalosääntöihin Käytännössä ollaan jossain näiden ääripäiden välillä ja mukana on muitakin elementtejä Malliperustainen testaus, tilastolliset mallit, riskianalyysit, standardit, uudelleenkäyttö, tarkistuslistat, asiantuntijoiden takapuolituntuma www.cs.helsinki.fi 30 April 2018 39
Testausaktiviteetit, Vikaraporttien käsittely Kurssikirja luvut 6.5 6.8. Kuuluu koealueeseen www.cs.helsinki.fi 30 April 2018 40
Testauspäällikön rooli ketterässä kehityksessä www.cs.helsinki.fi 30 April 2018 41
Ketterä kehitys ja testaus Ei kurssikirjassa Video: Agile Test Management by Fran O Hara http://www.youtube.com/watch?v=4wngza3efau www.cs.helsinki.fi 30 April 2018 42
Ketterä kehitys ja testaus Siirtymä ketterään reaktiivisessa moodissa ole proaktiivinen Kaksi roolia Linjaesimies rekrytointi, sopivuus ketteriin kehitystiimeihin, valmennus Testauksen johtaminen projekteissa Testaus tapahtuu projekteissa, ei erillisessä siilossa Testausstrategian muodostamisessa pitäisi pyrkiä ennaltaehkäisevään strategiaan Automatisointistrategia, automaation rooli (mitkä tasot) www.cs.helsinki.fi 30 April 2018 43
Ketterä kehitys ja testaus Älä ole liian määräävä testausprosessin määrittelyssä projektille; tarjoa neuvoja ja tukea ja ohjeita ja katso että tehdään järkeviä valintoja Definition of done määrittely avainasemassa riskit, testaus Testaajat ovat mukana projekteissa alusta alkaen, mikä korostaa testauksen merkitystä ja testaajien roolia Laatuvaatimusten testauksen haasteet miten saadaan mukaan näitten testaus heti alusta alkaen eikä vasta projektin lopussa Profilointi ym. www.cs.helsinki.fi 30 April 2018 44
Ketterä kehitys ja testaus Esteiden poistaminen testauksen tieltä Testaajat voivat opettaa kehittäjiä laatimaan parempia testejä www.cs.helsinki.fi 30 April 2018 45
Testaustyökalut www.cs.helsinki.fi 30 April 2018 46
Työkalut ja testaus Työkalujen käytön tavoitteet Käsin tehtävän, samanlaisena mekaanisesti toistuvan ja/tai aikaa vievän työn automatisointi (ihmiset ovat huonoja automaatteja) Sellaisten testien tekeminen, joita on vaikeaa tai mahdotonta tehdä manuaalisesti (rasitus- ja suorituskykytestit) Inhimillisten virheiden riskin vähentäminen esimerkiksi suurten testi- ja tulosdatamäärien käsittelyssä www.cs.helsinki.fi 30 April 2018 47
Työkalutyyppejä Testien suorituksen automatisointi, testidatan generointi, testitapausten generointi, testausprosessin hallinta, testin kohteen monitorointi, monikäyttötyökalut, jne. Yleiskäyttöisiä ja hyvin erikoistuneita Kaupallisia ja avoimia Esimerkiksi OSS työkaluja löytyy osoitteesta http://www.opensourcetesting.org/ Muita http://www.imbus.de/english/test-tool-list/ www.cs.helsinki.fi 30 April 2018 48
Testauksen hallintatyökalut Testitapausten määrittely, luokittelu, priorisointi ja muu hallinta Testien suorituksen tilan seuranta Mahdollisesti linkitys vaatimushallintaan Vikaraporttien luonti- ja seurantatyökalut ovat välttämättömiä (incident management, bug tracking) Hallintatyökalujen integrointi muihin Testiraporttien ja dokumenttien generointi www.cs.helsinki.fi 30 April 2018 49
Testauksen hallintatyökalut Testia Tarantula demo https://www.youtube.com/watch?v=oivth2- R7w4 www.cs.helsinki.fi 30 April 2018 50
Testien määrittelytyökalut Testitapauksen määrittelyyn kuuluvat esi- ja jälkiehdot, syöte ja odotettu tulos Testitapausten ja datan generointityökalut helpottavat testien laatijan työtä tuottamalla testisyötteitä tai kokonaisia testitapauksia automaattisesti www.cs.helsinki.fi 30 April 2018 51
Testitapausten generoinnin peruste Tietokantarakenteen määrittely (data base schema) Tuotetaan skeeman mukainen testitietokanta Testikohteen koodi (white box) Testioraakkeli tarvitaan Pelkkä koodi (toteutus) on huono lähtökohta testaukselle www.cs.helsinki.fi 30 April 2018 52
Testitapausten generoinnin peruste Testikohteen rajapinta (black box) Automaattinen ekvivalenssiluokkiin jako ja raja-arvo analyysi rajapinnan määrittelyn perusteella (API, GUI) Negatiivisten testitapausten automaattinen generointi (myös heuristiset säännöt) Testioraakkeli tarvitaan Testikohteen (formaali) spesifikaatio Model based testing Testisyötteiden ja tulosten generointi UML mallin avulla Malli toimii oraakkelina www.cs.helsinki.fi 30 April 2018 53
Esimerkki AgitarOne: Junit yksikkötestien automaattinen generointi Yhdistää black-box ja white-box menetelmiä Kaupallinen työkalu http://www.agitar.com/solutions/products/agitarone.html Menetelmän yksityiskohdat ja analyysialgoritmit liikesalaisuuksia, mutta tutkimustietoa aihepiiristä löytyy www.cs.helsinki.fi 30 April 2018 54
Staattisen testauksen työkalut Katselmoinnit Spesifikaatioiden ja mallien staattinen analyysi Model checking UML-mallin täydellisyys ja ristiriidattomuus Koodin staattinen analyysi Datavuoanomaliat, turvallisuusongelmat ja kymmeniä muita, katso. esimerkiksi http://findbugs.sourceforge.net/bugdescriptions.html www.cs.helsinki.fi 30 April 2018 55
Dynaamisen testauksen työkalut Testien suorittamisen automatisointi Testitapaukset syötteineen ja odotettuine tuloksineen koodataan testiskripteiksi tai ohjelmiksi (JUnit - testitapausluokat) Työkalu ajaa testit automaattisesti ja kirjaa tulokset (JUnit laajennokset NetBeans ja Eclipse - ympäristöissä) Debuggerit Kehittäjän työkaluja pääasiassa, mutta voivat olla tarpeellisia tiettyjen virhetilanteiden luomiseksi www.cs.helsinki.fi 30 April 2018 56
Dynaamisen testauksen työkalut Testikehikot ja ajurit (test framework, test harness) Testiympäristön automaattinen generoiminen testikohteen analysoinnin perusteella Tuki ajurien kirjoittamista varten Riippuvuuksien analysointi ja tynkien (stubs) tai jäljittelijöiden (mock object) automaattinen (osittainen) generointi http://en.wikipedia.org/wiki/mock_object Google Test C++ testing framework http://code.google.com/p/googletest/wiki/primer www.cs.helsinki.fi 30 April 2018 57
Dynaamisen testauksen työkalut Simulaattorit, emulaattorit Testausrobotit (capture and replay) Käyttöliittymätapahtumien nauhoitus ja toisto testitapausten määrittelyn avuksi Selenium on suosittu työkalu selaimessa toimivien sovellusten testitapausten muodostamiseen ja suorittamiseen http://www.youtube.com/watch?v=oeyey6gadvg www.cs.helsinki.fi 30 April 2018 58
Dynaamisen testauksen työkalut Datalähtöinen testaus (data driven testing) Periaatteessa sama testitapaus suoritetaan monta kertaa peräkkäin vain syötteiden vaihtuessa Syötedata ja odotettu tulos talletetaan tiedostoon, tietokantaan tai taulukkon, josta testiskripti lukee datarivit ja ajaa testitapauksen Komento- tai avainsanatestaus (command/keyword driven testing) Testitapaukset ja -skenaariot koostuvat abstrakteista toiminnoista ( enter login credentials ) ja niiden syötteistä Testiä suoritettaessa abstrakti toiminto korvataan konkreettisella testikohteen toiminteella/dialogilla www.cs.helsinki.fi 30 April 2018 59
Dynaamisen testauksen työkalut Vertailijat (comparator) Suurien tietomassojen vertailuun (testin tuottama tulosdata vs. oraakkelin tuottama data) Dynaamiset analysaattorit testikohteen suorituksen aikana Muistin käyttö jne. Kattavuusanalyysi testitapausten suorituksesta Lause- ja haarautumakattavuus jne. Työkaluissa paljon eroja Esimerkiksi EclEmma coverage plugin for Eclipse www.cs.helsinki.fi 30 April 2018 60
Suorituskyvyn testaus ja monitorointi Kuormitustestaus, vasteajat Datan ja tapahtumien generointi Määrä, frekvenssi Monitorointi Testin aikaisen käyttäytymisen mittaaminen ja mittausdatan kerääminen Profilointi Vaatii erikoistuneita ja joskus kalliita välineitä Turvauhkien testaus http://www.metasploit.com www.cs.helsinki.fi 30 April 2018 61