Ohjelmistotestaus Testaustyökalut- ja automaatio Testaustyökalut ja -automaatio Testaustyökaluilla tuetaan testaustyötä sen eri vaiheissa Oikea työkalu oikeaan tarkoitukseen Testausautomaatio perustuu työkalujen käyttöön Pyritään automatisoimaan rutiininomaisia tai hankalia testausvaiheita Kaikki testaukseen liittyvät työkalut eivät kuitenkaan pyri automatisoimaan testausta 1
Testaustyön vaiheet Testaustyön yleiset vaiheet 1. Kohdenna ja rajaa testit 2. Suunnittele testitapaukset 3. Toteuta testitapaukset 4. Suorita testit 5. Analysoi tulokset Pätevät sekä manuaalisiin että automaattisiin testeihin Mitä tahansa vaihetta voidaan automatisoida Mitä kannattaa automatisoida? Rajaus Suunnittelu Testien laatu - älyllistä toimintaa Toteutus Suoritus Analysointi Toistettavuus - rutiinia 2
Testausautomaation anatomia - testien suorittamisen automatisointi Testiskripti: Testiskripti: -Syöte -testikuvaukset -Vertailusäännöt SUT Testaustyökalu Testilogi Testien syötteet Testien tulokset Odotetut tulokset vertailu Miksi automatisoida testausta? 1. Testien ajaminen ohjelman uusissa versioissa Regressiotestaus, yleisin ja ilmeisin automatisoinnin syy 2. Säännöllinen, jatkuva testaus Edellytys keteträlle kehittämiselle 3. Oikeassa elämässä mahdottomien testien ajaminen 200 käyttäjän simulointi Näkymättömän toiminnallisuuden testaus 4. Resurssien tehokkaampi käyttö Ihmistyö voidaan kohdentaa vaativiin tehtäviin Koneet jaksavat testata myös öisin ja viikonloppuisin 5. Testien yhdenmukaisuus ja luotettavuus 6. Testien uudelleenkäyttö 7. Tuotantoaikojen lyhentäminen Automaattisten testien kirjoittaminen vie aikaa, mutta suoritus on nopeaa 3
Mitä ongelmia on automatisoinnissa? Automatisointi ei korvaa manuaalista testausta. Automatisointi ei ehkä kannata kun... Testaus suoritetaan harvoin Ohjelmisto muuttuu jatkuvasti ja paljon Testituloksen tulkinta on vaikea automatisoida mutta helppo ihmiselle havaita Testit jotka vaativat fyysistä vuorovaikutusta Manuaaliset testit löytävät enemmän virheitä Bach: Automaattiset 15%, manuaaliset 85% Testi löytää virheen todennäköisemmin ensimmäisellä kerralla kun se ajetaan --> regressiotestausta Testitapausten laatu korostuu Automaattisessa testauksessa ei ole laatukontrollia, testeissä itsessään olevat virheet jäävät huomaamatta Ihminen pystyy kompensoimaan testitapausten heikkouksia Mitä ongelmia on automatisoinnissa? Automatisointi voi parantaa ainoastaan testauksen tehokkuutta, ei vaikuttavuutta Tosin malliperustainen testaus, MBT, parantaa myös vaikuttavuutta Testien automatisointi voi rajoittaa kehitystyötä Automatisoidut testit eivät kestä ohjelmiston muutoksia vaan menevät rikki Jäykistää kehitystä, tuo muutokselle ylimääräisen kustannuksen Työkaluilla ei ole mielikuvitusta Automatisoitu testaus voi käyttää hyväksi vain sitä tietoa ohjelmistosta ja sen tavoitteista mitä on suunniteltu ja formalisoitavissa. Ihmisellä on käytössä luovuus ja mielikuvitus joilla testausta voidaan mukauttaa sen aikana. 4
Eri työvaiheiden suhteelliset työmäärät Testitapauksen hyvyys automaatisoitu vs. manuaalinen 5
Testaustyökalut kehityksen eri vaiheissa Testisuunnittelun työkalut: testitapaustai datageneraattorit Testien suoritus ja vertailu työkalut Suorituskyky Simulaatio Dynaaminen analyysi Debuggerit Staattinen analyysi Testauksen hallinnan työkalut Ohjelmointi Vaatimusmäärittely Arkkitehtuurisuunnittelu Moduulisuunnittelu Hyväksyntätestaus Järjestelmätestaus Integrointitestaus Yksikkötestaus Kattavuusanalyysi Lähde: Fewster & Graham: Software Test Automation. 1999. Testisuunnittelutyökalut Loogiset testisuunnittelutyökalut Generoivat testisyötteitä automaattisesti Kutsutaan myös testitapausgeneraattoreiksi Koodiperustaiset, käyttöliittymäperustaiset tai spesifikaatioperustaiset testitapausgeneraattorit Malliperustainen testaus, MBT Fyysiset testisuunnittelutyökalut Generoivat testidataa tai muokkaavat olemassaolevaa dataa 6
Staattiset analysointityökalut Analysoivat koodia suorittamatta sitä Laskevat erilaisia mittareita Liittyvät yleensä itse lähdekoodin laatuun Esim. tyyliohjeiden noudattaminen, LOC, syklomaattinen kompleksisuus, luokkakoheesio Kattavuusanalyysityökalut Arvioivat testauksen kattavuutta perustuen ajonaikaiseen dataan Kertovat mikäli testaus on ollut riittämätöntä Eivät kerro, milloin on testattu tarpeeksi! Kattavuusmittarit käydään läpi testauksen metriikoiden yhteydessä 7
Dynaamiset analyysityökalut Etsivät ajonaikaisia ongelmia kuten muistivuotoja Debuggerit voidaan laskea tähän kategoriaan Eivät ole varsinaisia testaustyökaluja Voidaan käyttää virheen eristämiseen testauksessa Suorituskykyanalyysi- ja simulaatiotyökalut Kuormittavat järjestelmää ja simuloivat todellisessa elämässä harvinaisia syötteitä Esim. webbisovellusten testaamisessa yleisiä 8
Testien suoritus- ja vertailutyökalut Suorittavat etukäteen määriteltyjä testitapauksia ja syötteitä ja vertaavat tuloksia odotettuihin tuloksiin Testausautomaatio vaatii kummatkin osat: automaattisen suorituksen ja automaattisen tulosten analysoinnin Yleisin testaustyökalutyyppi Mistä työkaluja löytää? Kaupalliset toimijat IBM, Microsoft, CA,... Conformiq, Codenomicom (Suomalaisia) Open source Mukana myös em. kaupallisia toimijoita Kattava valikoima työkaluja Huokea tapa tutustua työkalujen valikoimaan http://www.opensourcetesting.org/ 9
Case: Testien suoritus ja vertailu JUnit JUnit on ohjelmistokehys, joka on suunniteltu auttamaan moduulitason automaattisten regressiotestien kirjoittamisessa JUnit on keskeinen teknologia testilähtöisessä kehittämisessä Testit ohjaavat kehitystyötä Testit kirjoitetaan ennen ohjelmakoodia http://www.junit.org/ Case: Testien suoritus ja vertailu JUnit - Esimerkki http://junit.sourceforge.net/doc/cookbook/cookbook.htm Erilaiset assert-metodit ovat testauksen selkäranka Testiluokkaan voi koota useita testejä Testaavat yleensä samaa luokkaa / toiminnallisuutta SetUp() metodi suoritetaan jokaisen testimetodin aluksi Yhteenkuuluvat testit voidaan koota suiteen @Test public void simpleadd() { Money m12chf= new Money(12, "CHF"); Money m14chf= new Money(14, "CHF"); Money expected= new Money(26, "CHF"); Money result= m12chf.add(m14chf); asserttrue(expected.equals(result)); } 10
Case: Testien suoritus ja vertailu FitNesse http://fitnesse.org/ Hyväksyntätestaustyökalu ketterään ohjelmistokehitykseen Korkeamman tason JUnit Asiakas kirjoittaa testien avulla, mitä järjestelmän pitäisi tehdä Ohjelmoijat saavat suuntaviivat työlleen Etenemisen seuranta on suoraviivaista xunit: Building the code right / FitNesse: Building the right code 11
12
Case: Testien suoritus ja vertailu JUnit ja FitNesse FitNesse JUnit Ohjelmointi Vaatimusmäärittely Arkkitehtuurisuunnittelu Moduulisuunnittelu Hyväksyntätestaus Järjestelmätestaus Integrointitestaus Yksikkötestaus 13
Case: Testien suoritus ja vertailu Dogtail http://people.redhat.com/zcerza/dogtail/ Python-pohjainen työkalu käyttöliittymätestauksen automatisointiin Suunniteltu GNOME-ikkunointijärjestelmän testaukseen, mutta pitäisi toimia myös muilla alustoilla Case: Testien suoritus ja vertailu Dogtail - Esimerkki Esimerkkisivu Sisältää testien lähdekoodit sekä flashillä toteutetut käyttöanimaatiot http://people.redhat.com/zcerza/dogtail/media.html Skriptaus Tulosten vertailu 14
Case: Staattinen analyysi Checkstyle http://checkstyle.sourceforge.net/ Analysoi, noudattaako Java-lähdekoodi tyylisääntöjä Tyylisääntöjen noudattaminen lisää koodin ylläpidettävyyttä ja luettavuutta, sekä vähentää välillisesti virheitä Voidaan lisätä omia sääntöjä Sisältää Sunin tyylikonventiot: http://java.sun.com/docs/codeconv/ Komentoriviversion lisäksi monia muita Ant-task Eclipse-plugineja, esim. http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm Case: Staattinen analyysi Checkstyle - Esimerkki 15
Case: Staattinen analyysi Checkstyle - Esimerkki Case: Staattinen analyysi Checkstyle - Esimerkki 16
Case: Testauksen hallinta Flyspray http://www.flyspray.org/ Helppokäyttöinen tracker-ohjelmisto Webbipohjainen, monenkäyttäjän ympäristö Tarkoituksena helpottaa bugien dokumentointia Voidaan käyttää myös muiden asioiden, kuten vaatimusten dokumentointiin Tarkat historiatiedot ja tietojen seuranta Hyväksi havaitut kevyen ohjelmistokehityksen perustyökalut Wiki, tracker ja versionhallinta Demosivusto Case: Testauksen hallinta Flyspray - Esimerkki http://demo.flyspray.org/ Tunnus: super / Salasana: super Uuden bugin lisäys Bugien väliset riippuvuudet Raportin tilan muuttaminen Historia ja kommentit 17