Ohjelmien testaustyökalut

Samankaltaiset tiedostot
Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Test-Driven Development

Testaussuunnitelma. Ohjelmistotuotantoprojekti Nero. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Test-Driven Development

Ohjelmistojen mallintaminen. Luento 11, 7.12.

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Testaussuunnitelma. Koskelo. Helsinki Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testaussuunnitelma. PUSU-ryhmä. Helsinki Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Convergence of messaging

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi

Ohjelmistotestaus -09

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant Versio: V0.3

T Tietojenkäsittelyopin ohjelmatyö. Testiraportti, vaihe T1. Tietokonegrafiikka-algoritmien visualisointi. Testiraportti, vaihe T1

Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Automaattinen yksikkötestaus

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

L models. Testisuunnitelma. Ryhmä Rajoitteiset

T Testiraportti - järjestelmätestaus

Ohjelmistotuotantoprojekti

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Ohjelmiston testaus ja laatu. Testaustasot

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

UCOT-Sovellusprojekti. Testausraportti

Testausraportti. Oppimistavoitteiden hallintajärjestelmä harri

T Testiraportti - integraatiotestaus

58160 Ohjelmoinnin harjoitustyö

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Testaussuunnitelma PULSU. Syksy 2008 Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Hirviö Laadunvarmistussuunnitelma

Ohjelmiston testaussuunnitelma

Testaaminen ohjelmiston kehitysprosessin aikana

Hirviö Laadunvarmistussuunnitelma

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 2: Vaiheet 3 & 4. Antti Jääskeläinen Matti Vuori

3. Testaus osana ohjelmistoprosessia

Käyttötapausanalyysi ja testaus tsoft

Testaussuunnitelma. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 2: Vaiheet 3 & 4. Antti Jääskeläinen Matti Vuori

Testaussuunnitelma. Asdf. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmistotuotanto s

Ohjelmoinnin peruskurssien laaja oppimäärä

Eclipse ja JUnit-ohjelmoijatestit

Kontrollipolkujen määrä

COTOOL dokumentaatio Testausdokumentit

Testaus käsite. Sekalaista testausasiaa. Testauksen käsitteestä. Kattavuusmitat. Jos ajatellaan, että testaus = V&V, voidaan erottaa:

Testaussuunnitelma. Opeapuri. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

T Tietojenkäsittelyopin ohjelmatyö. Testiraportti, vaihe LU. Tietokonegrafiikka-algoritmien visualisointi. Testiraportti, vaihe T3

Testaustyökalut. Luento 11 Antti-Pekka Tuovinen. Faculty of Science Department of Computer Science

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Testaussuunnitelma. Karstula. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Automaattinen regressiotestaus ilman testitapauksia. Pekka Aho, VTT Matias Suarez, F-Secure

T Testiraportti - integraatiotestaus

Laadunvarmistustekniikat

SEPA päiväkirja. BetaTeam. Kauko Huuskonen, 54396W, Hannu Kankaanpää, 58605L,

Testaussuunnitelma. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie

Versio Päiväys Tekijä Kuvaus Tikkanen varsinainen versio

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant

www-sovelluspalveluiden integraatiotestien automatisointi

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 1: Yleisinfo ja vaiheet 1 & 2. Antti Jääskeläinen Matti Vuori

Työkalut ohjelmistokehityksen tukena

Testaussuunnitelma Labra

Testaussuunnitelma. Oppimistavoitteiden hallintajärjestelmä harri

Mihin kaikkeen voit törmätä testauspäällikön saappaissa?

Tervetuloa kurssille

Tik Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu. LiKe Liiketoiminnan kehityksen tukiprojekti

Kuopio Testausraportti Kalenterimoduulin integraatio

Lohtu-projekti. Testaussuunnitelma

Menetelmäraportti - Konfiguraationhallinta

Testaussuunnitelma. HenTyLi. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testaustyökalut Sini Mäkelä

Testaus osana ohjelmistojen elinkaarta I

TIE Ohjelmistojen testaus 2016 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi. Test-Driven Development, TDD

Kyselyjälleenmyyjien, Poliisin ja Tullin testausinfo

Advanced Test Automation for Complex Software-Intensive Systems

Vakuutusyhtiöiden testausinfo

4. Luokan testaus ja käyttö olion kautta 4.1

dokumentin aihe Dokumentti: Testausraportti_I1.doc Päiväys: Projekti : AgileElephant

Testausyhteenveto. DHT Distributed Hash Table. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

Testaussuunnitelma. Ohjelmistotuotantoprojekti XPerf. Helsingin yliopisto. Tietojenkäsittelytieteen laitos

Tutkittua tietoa. Tutkittua tietoa 1

Helia Ohjelmointitaito Tuomas Kaipainen Mermit Business Applications Oy Mermit Business Applications

Testauksen tuki nopealle tuotekehitykselle. Antti Jääskeläinen Matti Vuori

Testi generaattori. Testien ajotyökalu. Kuva 1. Offline mallipohjainen testaus

Sopisiko testiautomaatio yritykseesi juuri nyt? Testiautomaation soveltuvuuden arviointiopas

MOBIILISOVELLUKSEN TESTAUS- MENETELMÄT

Onnistunut Vaatimuspohjainen Testaus

CT60A4150 OHJELMISTOTESTAUKSEN PERUSTEET. Jussi Kasurinen Kevät 2015

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 1: Yleisinfo ja vaiheet 1 & 2. Antti Jääskeläinen Matti Vuori

Tapahtuipa Testaajalle...

Testauslähtöinen ohjelmistokehitys

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

TESTIRAPORTTI - VYM JA KANTA Virtuaaliyhteisöjen muodostaminen Versio 1.0

Testausprosessimalli, yksikkötestaus ja testausympäristön automatisointi Java-ympäristössä

CoMa - Testausdokumentti

Transkriptio:

Ohjelmien testaustyökalut Antti Hämäläinen Helsinki 13.11.2000 Ohjelmistotuotantovälineet seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmien testaustyökalut Antti Hämäläinen Ohjelmistotuotantovälineet seminaari Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.11.2000, 7 sivua Seminaarityö käsittelee ohjelmien testausta automatisoivia työkaluja ja yksikkötestausta käytten JUnit testikehystä. Avainsanat: testaaminen, testauksen automatisointi, testaustyökalut 2

1 JOHDANTO... 4 2 TESTAAMINEN... 4 2.1 TESTIEN RAPORTOINTI JA HALLINNOINTI... 4 2.2 YKSIKKÖTESTAUS... 5 2.3 INTEGRAATIOTESTAUS... 5 2.4 JÄRJESTELMÄTESTAUS... 5 3 TESTAUSTYÖKALUT... 5 3.1 TESTDIRECTOR... 6 3.2 JUNIT... 6 4 JUNIT KÄYTÖSSÄ... 7 4.1 KEHYKSEN TOIMINTA JA RAKENNE... 7 4.1.1 Testi (TestCase)... 8 4.1.2 Testihuone (TestSuite)... 8 4.2 TESTIHIERARKIOIDEN RAKENTAMINEN... 8 4.3 KÄYTTÖLIITTYMÄ, TESTRUNNER... 8 4.4 KÄYTÄNNÖN KOKEMUKSIA... 9 5 YHTEENVETO... 10 3

1 Johdanto Ohjelmistojen toiminnallisuuden ja oikeellisuuden testaaminen on aikaa ja resursseja vaativaa työtä. Testaaminen jakautuu testien määrittelyyn ohjelman vaatimusmäärittelyn pohjalta ja määriteltyjen testien suorittamiseen. Suoritetuista testeistä luodun testiraportin ja testien määritelmien hallinnointiin on kehitetty työkaluja. Testaamisen suorittamisen helpottamiseksi on kehitetty testien suorittamisen automatisoivia ympäristöjä. Seminaari keskittyy yksikkötestaamiseen java ympäristössä käyttäen JUnit testikehystä. Kokemuksia ja käytännön esimerkkejä kevään ohjelmistotuotanto ryhmän beta projektista, jossa testaukseen käytettiin onnistuneesti JUnit testikehystä. 2 Testaaminen Testauksen tarkoitus on varmistaa ja parantaa kehitettävän ohjelmiston laatua. Tämä tapahtuu etsimällä ohjelmassa tai ohjelman toiminnallisessa määrittelyssä esiintyvät virheet. Käsitteenä virhe on hieman tulkinnanvarainen. Yleisesti ottaen virheeksi käsitetään mikä tahansa tila tai tapahtuma, jossa ohjelman käytös poikkeaa odotetusta. Toisaalta ohjelman käytöksen määrittely voi olla itsessään virheellinen, ja ohjelma toimiikin oikein. Tämä ristiriita tekee testaamisen automatisoinnin hankalaksi. Ohjelmallinen ohjelman testaaminen kykenee löytämään vain ne virheet, jotka testiohjelma on ohjelmoitu löytämään. 2.1 Testien raportointi ja hallinnointi Testien kirjaaminen, hallinnointi ja testiraporttien generointi ovat tärkeä osa testausprosessia. Tähän tarkoitukseen on kehitetty erinäisiä hallinnointityökaluja. Hyvän työkalun tulisi tukea testien ja testituloksen kirjaamista, sekä testiraportin generointia. Testiraportteja tehtäessä on tärkeää erottaa ohjelman versiot toisistaan ja kyetä 4

vertaamaan versioiden välisiä muutoksia. Yhtäläisen tärkeää on merkitä testit kullekin versiolle, jotta ohjelman toimintojen regressiotestaus oli mahdollista. 2.2 Yksikkötestaus Yksikkötestaus sisältää luokkien sisältämien metodien toiminnan testaavat testit. Tarkoituksena on varmistaa luokan sisäinen toiminta ja löytää mahdolliset loogiset virheet luokan sisältämissä algoritmeissa. [2] 2.3 Integraatiotestaus Integraatiotestaus sisältää luokkien ulkoisten rajapintojen toiminnan testaamisen. Integraatiotestauksen tavoitteena on löytää selvien virheiden lisäksi ristiriitoja luokkien implementaation ja määrittelyiden välillä. Jotta ristiriitojen löytäminen olisi mahdollista integraatiotestauksen testit tulee määritellä luokan toiminnallisen suunnitelman pohjalta.[2] 2.4 Järjestelmätestaus Järjestelmätestauksen tarkoituksena on selvittää suuremman ohjelmiston ulkoisten rajapintojen ja liityntöjen toiminta ja mahdolliset epäyhteensopivuudet implementaation ja rajapintakuvausten välillä. [2] 3 Testaustyökalut Tyypillisesti ohjelman testaus suoritetaan ohjelmaa varten kirjoitetuilla ajureilla ja testiohjelmilla, joiden tuottamasta tulosteesta luodaan testiraportti enemmän tai vähemmän manuaalisesti. Tämä tekee testaajan työn erittäin hitaaksi ja hankalaksi. Testaustyökaluilla pyritään helpottamaan testaajan työtä, automatisoimaan testejä ja testiraportin generointia. Koneellisesti kyetään testaamaan paremmin ohjelman sisäistä rakennetta ja etsimään mahdollisia loogisia virheitä algoritmeista. Yksikkötestausta 5

voidaan käyttää XP (extreme programming) tyylisesti ohjelmoijan työkaluna oman koodin toiminnallisuuden todentamisessa implementoinnin ohessa. [5] 3.1 TestDirector TestDirector on testien hallinnointi ja raportointi työkalu, jossa on www käyttöliittymä sekä windows pohjainen asiakasohjelmisto. TestDirector on Mecury interactiven tuote ja osa isompaa tuoteperhettä, johon kuuluu muita testaustyökaluja. Tuoteperheeseen kuuluvat testien automatisointiin soveltuvat WinRunner ja LoadRunner, sekä testien ryhmittelyyn soveltuva TestSuite. TestDirector mahdollistaa vaatimusmäärittelyyn pohjautuvan testien luomisen. Järjestelmä antaa jokaiselle testille oman tunnisteen, jonka avulla tunnistetaan testiin liittyvä materiaali ja luodaan automaattinen testiraportti. 3.2 JUnit JUnit on java pohjainen testikehys, jota voidaan käyttää testien ajamiseen ja hierarkisten testipuiden rakentamiseen. JUnit mahdollistaa testien automatisoinnin ja automaattisen testiraportin generoinnin testejä ajettaessa. [3] JUnit voidaan integroida osaksi Visual Age kehitysympäristöä. Pääasiallisesti JUnitia käytetään yksikkötestauksessa, mutta mikään ei estä rakentamasta myös integraatiotestausjärjestelmää JUnitin kehyksen päälle. Käytännössä JUnitin kehystä voidaan käyttää minkä tahansa hierarkian kuvaamiseen. JUnitin kehittäjät Kent Beck ja Erich Gamma halusivat helpottaa testaamista ja liittää testaamisen osaksi ohjelmointiprosessia.[1] 6

4 Junit käytössä Käytännön ongelmia ja ajatuksia JUnit testikehyksen käytöstä ohjelmistotuotanto projektissa keväällä 2000. [4] 4.1 Kehyksen toiminta ja rakenne Suoritetut testit jaetaan kolmeen luokkaan, onnistuneet (success), epäonnistuneet (failure) ja virheelliset (error). Epäonnistunut testi on päättynyt edeltä ennakoituun virhetilanteeseen, eli virhe on kyetty raportoimaan assert() metodikutsulla. Virheellinen testi on päättynyt ennakoimattomasti keskeytykseen, eikä tapahtunutta virhettä ole raportoitu assert() metodikutsulla. Yksittäinen testiluokka sisältää metodit testimetodien vaatiman testiympäristön pystyttämiseen ja sammuttamiseen. <<Interface>> Tes t counttestcases () : int run(result : Tes tresult) : void contains TestCase TestSuite addtest(test) : void counttestcases() : int run(testresult) : void run() setup() teardown() assert(string message, boolean condition) : void) getresult() : TestResult kuva 5.1.1.1 Junit kehyksen luokkarakenne 7

4.1.1 Testi (TestCase) Testit (testcase) periytetään junit.framework.testcase luokasta. Periytetyt testiluokat voivat sisältää useita testimetodeita, jokainen testimetodi tulee alkaa test literaalilla. Testiluokka voidaan ajaa yksinään, jos yksittäisen testimetodin nimeä ei ilmoiteta, kaikki luokan sisältämät testimetodit suoritetaan. 4.1.2 Testihuone (TestSuite) Testihuoneet (testsuite) periytetään junit.framework.testsuite luokasta. Testihuone luokkaan voidaan lisätä yksittäisiä testiluokkia ja uusia testihuone luokkia. Kun testihuoneen testit suoritetaan, kaikki huoneeseen lisätyt testit suoritetaan. Tämä mahdollistaa testi hierarkioiden rakentamisen. 4.2 Testihierarkioiden rakentaminen Junitin kehys mahdollistaa testien koostamisen hierarkisesti. Testeistä voidaan rakentaa puumalliseksi, jolloin suorittamalla juuren testi, suoritetaan samalla koko puun sisältämät testit. Hierarkinen testipuu mahdollistaa ohjelman yhden osa-alueen tai toiminnallisuuden testaamisen kerrallaan. 4.3 Käyttöliittymä, TestRunner JUnit testikehys tarjoaa tekstipohjaisen ja graafisen käyttöliittymän testien ajamiseen ja virheraportin generoimiseen. Perustoiminnallisuus on molemmissa sama, testien suorittamisen eteneminen, ajetut testit, epäonnistuneet testit ja virheet raportoidaan käyttäjälle. 8

kuva 5.3.1 junit.ui.testrunner, graafinen käyttöliittymä testien suorittamiseen 4.4 Käytännön kokemuksia JUnit ympäristö helpottaa ohjelman testaamista ja muutosten toiminnan oikeellisuuden tarkistamista. Junit soveltuu hyvin käytettäväksi ohjelman implementoinnin yhteydessä tapahtuvaan testaamiseen. Testien kirjoittaminen on luonnollinen jatke ohjelman yksittäisen komponentin tai luokan implementaatiota ja dokumentaatiota. Testien ajaminen implementaation ohessa helpotti huomattavasti virheiden metsästämisessä. Ohjelmistotuotanto projektissa huomattiin komponenttien tai luokkien muutosten seurauksien tutkiminen koko ohjelman laajuudelta olevan äärimmäisen helppoa kun 9

jokaisen luokan toiminnallisuuden testaavat testit tehtiin samalla kuin itse luokka. Useita kertoja Junitin käyttö pelasti ryhmämme mahdollisesti pulmallisesta tilanteesta, kun pieni muutos jonkin luokan sisäisessä toimintalogiikassa olisi rikkonut koko ohjelman ja aiheuttanut vaikeasti löydettävän loogisen virheen. 5 Yhteenveto Testaamisen tulisi olla luonnollinen osa ohjelman kehitysprosessia. Automaattinen laadunvalvonta ja laadulliset ohjelmistomittarit voidaan perustaa automaattisten testien päälle. Testaamisen automatisointi helpottaa ohjelman päivityksestä johtuvien muutosten vaikutusten havainnointia. Yksikkötestaaminen ohjelman kehitysvaiheessa käyttäen xunit tyyppistä ympäristöä parantaa huomattavasti ohjelman laatua ja vähentää virheiden määrää. [6] Testaustyökalujen käyttö vaatii opettelua ja asennoitumista, mutta työkalujen käytöllä saatava hyöty on suurempi kuin käytön hinta. Testien automatisointi vaatii ohjelmointitaitoa ja ymmärrystä testattavasta ohjelmasta. 10

Lähteet [1] Kent Beck, JUnit Test Infected: Programmers Love Writing Tests, <URL: http://www.junit.org/junit/doc/testinfected/testing.htm, 11.11.2000> [2] Roger S. Pressman, (1997). Software Engineering, a practitioner's approach. U.S.A., McGraw Hill. 630-657 [3] JUnit cookbook <URL: http://www.junit.org/junit/doc/cookbook/cookbook.htm, 11.11.2000> [4] Antti Hämäläinen, Marko Saaresto, Mika Huhtamäki ja Niklas Laine, JFilterTable Testing document, Ohjelmistotuotanto ryhmä BETA, kevät 2000 [5] Kent Beck, Extreme Programming Explained: Embrace Change, Addison-Wesley, 1999. [6] ExteremeProgramming-website. <URL: http://www.extremeprogramming.org/, 11.11.2000> 11