Ohjelmistotestaus Testaustyökalut ja

Ohjelmistotestaus
Testaustyökalut- ja automaatio
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
1
Testaustyön vaiheet
•
Testaustyön yleiset vaiheet
1.
2.
3.
4.
5.
•
•
Kohdenna ja rajaa testit
Suunnittele testitapaukset
Toteuta testitapaukset
Suorita testit
Analysoi tulokset
Pätevät sekä manuaalisiin että automaattisiin
testeihin
Mitä tahansa vaihetta voidaan automatisoida
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
Mitä kannattaa automatisoida?
Rajaus
Suunnittelu
Testien laatu älyllistä toimintaa
Toteutus
Suoritus
Analysointi
Ohjelmistotestaus -09
Toistettavuus rutiinia
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
2
Testausautomaation anatomia
- testien suorittamisen automatisointi
Testiskripti:
Testiskripti:
-Syöte
-testikuvaukset
-Vertailusäännöt
SUT
Testilogi
Testaustyökalu
Testien
syötteet
Testien
tulokset
Odotetut
tulokset
Ohjelmistotestaus -09
vertailu
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
3
Mitä ongelmia on
automatisoinnissa?
•
Automatisointi ei korvaa manuaalista testausta.
Automatisointi ei ehkä kannata kun...
•
•
•
•
•
Manuaaliset testit löytävät enemmän virheitä
•
•
•
Testaus suoritetaan harvoin
Ohjelmisto muuttuu jatkuvasti ja paljon
Testituloksen tulkinta on vaikea automatisoida mutta helppo
ihmiselle havaita
Testit jotka vaativat fyysistä vuorovaikutusta
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
Mitä ongelmia on
automatisoinnissa?
•
Automatisointi voi parantaa ainoastaan testauksen
tehokkuutta, ei vaikuttavuutta
–
•
Testien automatisointi voi rajoittaa kehitystyötä
•
•
•
Tosin malliperustainen testaus, MBT, parantaa myös
vaikuttavuutta
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.
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
4
Eri työvaiheiden suhteelliset
työmäärät
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
Testitapauksen ”hyvyys”
automaatisoitu vs. manuaalinen
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
5
Testaustyökalut kehityksen eri vaiheissa
Vaatimusmäärittely
Testisuunnittelun
työkalut: testitapaustai datageneraattorit
Testien Suorituskyky Hyväksyntätestaus
suoritus Simulaatio
ja vertailu
työkalut
Järjestelmätestaus
Arkkitehtuurisuunnittelu
Moduulisuunnittelu
Dynaaminen
analyysi
Integrointitestaus
Debuggerit
Staattinen
analyysi
Ohjelmointi
Yksikkötestaus
Kattavuusanalyysi
Testauksen hallinnan työkalut
Lähde: Fewster & Graham: Software Test Automation. 1999.
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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ä
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
Suorituskykyanalyysi- ja
simulaatiotyökalut
• Kuormittavat järjestelmää ja simuloivat
todellisessa elämässä harvinaisia syötteitä
• Esim. webbisovellusten testaamisessa yleisiä
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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/
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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/
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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));
}
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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”
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
11
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
12
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
Case: Testien suoritus ja vertailu
JUnit ja FitNesse
Vaatimusmäärittely
Hyväksyntätestaus
FitNesse
Arkkitehtuurisuunnittelu
Järjestelmätestaus
Moduulisuunnittelu
Ohjelmointi
Ohjelmistotestaus -09
JUnit
Integrointitestaus
Yksikkötestaus
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
Case: Staattinen analyysi
Checkstyle - Esimerkki
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
15
Case: Staattinen analyysi
Checkstyle - Esimerkki
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
Case: Staattinen analyysi
Checkstyle - Esimerkki
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
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
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
Case: Testauksen hallinta
Flyspray - Esimerkki
• Demosivusto
– http://demo.flyspray.org/
– Tunnus: super / Salasana: super
•
•
•
•
Uuden bugin lisäys
Bugien väliset riippuvuudet
Raportin tilan muuttaminen
Historia ja kommentit
Ohjelmistotestaus -09
© Antero Järvi, Tuomas Mäkilä
It-laitos / TY
17