(Laajojen) Oliojärjestelmien testaus

Samankaltaiset tiedostot
Ohjelmistojen mallintaminen. Luento 11, 7.12.

Käyttötapausanalyysi ja testaus tsoft

Olio-ohjelmien testaamisesta

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

Test-Driven Development

Test-Driven Development

Verifioinnin ja validoinnin ero. 7. Verifiointi ja validointi. Verifiointi- ja validointitekniikat. Verifiointi- ja validointitekniikat II

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

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

TDD Käytännössä Todellinen työkalu vai lehmipoikien laukkaa? Harri Kulmala Solita Oy

Ohjelmistotuotantoprojekti

Ohjelmistotekniikan menetelmät, kesä 2008

Ohjelmistotuotanto vs. muut insinööritieteet. (Usein näennäinen) luotettavuus ja edullisuus

Ohjelmiston testaus ja laatu. Testaustasot

Automaattinen yksikkötestaus

Ohjelmiston testaus ja laatu. Testausmenetelmiä

Ohjelmistojen suunnittelu

Ohjelmistotekniikan menetelmät, kevät 2008

Uudelleenkäytön jako kahteen

Testaaminen ohjelmiston kehitysprosessin aikana

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

812336A C++ -kielen perusteet,

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

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

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

Ohjelmistojen mallintaminen, kesä 2009

Tietojärjestelmän osat

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

1. Olio-ohjelmointi 1.1

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

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

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

Tarjolla tänää: Ohjelmiston toteutuksesta. Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit. Testilähtöinen kehittäminen JOT2007. Uudelleenrakentaminen

Testaussuunnitelma Labra

Dynaaminen analyysi I

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

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

Testaus-tietoisku: Tärkeimpiä asioita testauksesta projektityökurssilaisille

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

Testauksen hallintaa teekkareille (ja muille kiinnostuneille) Arto Stenberg

Rajapinta (interface)

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

SYSTEEMITYÖ. Tärkeitä sanoja

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k

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

TOIMINNALLINEN MÄÄRITTELY MS

Yhteenveto. Menettelytavat

2. Ohjelmistotuotantoprosessi

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Ohjelmistotuotanto s

Ohjelmistoarkkitehtuurit. Kevät

Laadunvarmistustekniikat

Convergence of messaging

Ohjelmistotekniikan menetelmät, suunnittelumalleja

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Sisältö. Integrointitestaus. Yleinen teoreettinen pohja. Integrointitestaus prosessina. Skooppi, focus ja locus

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

Dynaaminen analyysi II

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Helia Ohjelmointitaito Tuomas Kaipainen Mermit Business Applications Oy Mermit Business Applications

Dynaaminen analyysi II Luento 4 Antti-Pekka Tuovinen

Luku 8 Rakennusvaihe. Detailed Design. Programming. Moduulisuunnittelu. Ohjelmointi

UCOT-Sovellusprojekti. Testausraportti

JUnit ja EasyMock (TilaustenKäsittely)

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

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

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

Onnistunut SAP-projekti laadunvarmistuksen keinoin

Luokkatestauksen piirteitä: metodit. 4. Luokkatestaus (B, 10) Luokkatestauksen piirteitä: yliluokat. Luokan valmistelu. Alfa-Omega syklin vaiheet

Software product lines

Tietorakenteet ja algoritmit

Kertaus: yleistys-erikoistus ja perintä

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

Ohjelmistoarkkitehtuurit. Syksy 2010

13/20: Kierrätys kannattaa koodaamisessakin

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

Prosessimalli. 2. Ohjelmistotuotantoprosessi. Prosessimallin vaihejako. Prosessimallien perustehtävät. Ohjelmiston suunnittelu. Vaatimusmäärittely

Dynaaminen analyysi III Luento 5 Antti-Pekka Tuovinen

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

T Testiraportti - järjestelmätestaus

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

UML- mallinnus: Tilakaavio

12. Kehysarkkitehtuurit

UML:n yleiskatsaus. UML:n osat:

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

COTOOL dokumentaatio SEPA: Refaktorointi

Kontrollipolkujen määrä

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

T Testiraportti - integraatiotestaus

Dynaaminen analyysi IV

812341A Olio-ohjelmointi, I Johdanto

Javan perusteita. Janne Käki

Dynaaminen analyysi III

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Integrointi. Ohjelmistotekniikka kevät 2003

CT60A4150 OHJELMISTOTESTAUKSEN PERUSTEET. Jussi Kasurinen Kevät 2016

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

Transkriptio:

(Laajojen) Oliojärjestelmien testaus Erkki Pöyhönen, Arto Stenberg erkki.poyhonen@nokia.com, arto.stenberg@nokia.com Nokia Research Center, SW Technology Laboratory 1 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt Sisältö Oliot: ongelma ja valtava etu testaukselle Tieto on valtaa riskien hallinnassa Miten oliot testataan ideaalimaailmassa? Ensimmäiset testit ovat tärkeimmät Olio-ohjelmisto luokkaa ylemmällä tasolla Oliot vaikuttavat enemmän alhaalla TDD: test first -lähestymistapa XP:n paras lahja ohjelmistotuotannolle on "Test-Driven Development" 2 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt

Ohjelmointinäkymä "bowl of spaghetti" vs. oliot Prehistoric: Spaghetti Code Middle Ages: Structured Programming Modern Times: Object Orientation Always like this! This never happens! Legend Code Data 3 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt Oliot: ongelma ja valtava etu testaukselle Nyt tehdään isompaa ja monimutkaisempaa, mutta laatu ei välttämättä ole parantunut (Les Hatton) 4 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt

Oliot ovat ongelma testaukselle Olioiden testaaminen on erilaista verrattuna lausekielisen ohjelman testaamiseen, koska olioissa on enemmän voimaa: Oliomenetelmissä ja -kielissä saman asian voi tehdä hyvin monella eri tavalla If there are two or more ways to do something, and one of those ways can result in a catastrophic results, then someone will do it. Edward A. Murphy, Jr. Olioihin liittyviä riskejä: Dynaaminen sidonta ja perintä antavat suunnittelijalle ilmaisuvoimaa, mutta virheiden tekeminen on myös helpompaa, kun rakenteet monimutkaistuvat Kokonaisuudet ovat pienempiä Rajapintoja on huomattavasti enemmän Kutsurajapinnan virheitä tulee paljon enemmän Olion tila on piilotettu rajapinnan sisään tilan seuranta testauksessa tulee hankalaksi Paljon uutta opeteltavaa alkuvaiheen virheitä 5 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt Oliot ovat etu testaukselle Luokat metodit ovat useimmiten pieniä kontrollirakenteiden virheet ovat vähemmän todennäköisiä Suunnittelijan tekemä yksikkötestaus on huomattavasti helpompi toteuttaa kuin perinteisissä lausekielissä Selkeä ja usein hyvin valvottu rajapinta Metodeissa pienet koodimäärät Oliomenetelmät ohjaavat laatimaan itsenäisiä kokonaisuuksia Koodin ja datan läheisyys selkeyttää riippuvuuksia Selkeämpi erotus rakenteisen ja toiminnallisen testauksen välillä Yksittäiset oliot ja olioklusterit kuuluvat suunnittelijalle Komponentit, sovellukset ja osajärjestelmät kuuluvat testaajalle 6 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt

Miten oliot testataan ideaalimaailmassa? Mihin kannattaa satsata? Domain-analyysi, mallit ja use caset: Kattava ja yhtenäinen (staattinen vs. dynaaminen mallinnus) ymmärrys sovellusalueesta Tärkein validoitava alue satsaa eniten! Arkkitehtuuri: Arkkitehtuurin tuki järjestelmän kriittisille ei-toiminnallisille piirteille Yhtenäinen alusta sovelluksille yhtenäisyys sovellusten välillä Design-mallit: UML-mallien oikeellisuus ja eheys arkkitehtuuri ja domain-mallit Koodikatselmukset: Yleisten ohjelmointivirheiden haravointi; vähän kerrallaan Luokkatason testaus (suunnittelija): Luotettavuuden perusta, tärkein testausvaihe Luokkaklusteri-/osajärjestelmätestaus (useita luokkia): Toiminnalliset testit interaktioille (rajapinnoille) Järjestelmätestaus: Testaus käyttäjän näkökulmasta Laatuattribuutit: toiminnalliset ja ei-toiminnalliset (suorituskyky, skaalautuvuus, siirrettävyys, ylläpidettävyys, ) 7 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt Tunnista oliosi 8 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt Monessa tapauksessa olio edellyttää varsin formaalia käsittelyä Testauksen kohde tilasiirtymät, protokolla Kattavuus perustuu tiloihin Toiminnallinen määrittely voi olla tilapohjainen: Tietyssä tilassa voi vastaanottaa vain tietynlaisia sanomia ja siirtyä vain tiettyihin tiloihin Yleinen käyttökohde ylätason sovelluslogiikassa Paljon riippuvuuksia sanomien järjestyksen suhteen "järkevä viestintä" on vai murto-osa kaikesta rajapinnan sallimasta viestinnästä Suunnittelussa keskeistä tilamallinnus

Tunnista oliosi Toisia oliota ei sitten saa millään hengiltä Olio koettaa löytää merkitystä kaikesta rajapinnan sallimasta kommunikaatiosta Uudelleenkäytettävät komponentit, luokkakirjastot, Usein yksinkertaisempi sisäisen tilan määritelmä yksinkertaisempi semantiikka Hyvä virheenhallinta Paljon testattavaa virhekäsittelyssä Poikkeukset Hyvä suunnittelu näkyy luotettavuutena 9 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt "Luokkatestien generaattori" Luo olio Vähintään yksi testi joka konstruktorille Alusta olio perustilaan (tai johonkin muuhun soveliaaseen tilaan) Käy läpi kaikki tilasiirtymät Tee sama jokaisella olion attribuutille Kutsu testattavaa metodia Käytetään testaustekniikoita (kuten ekvivalenssiluokkia ja rajaarvoanalyysiä) Tarkistetaan kutsutun olion attribuuttien tila ja sivuvaikutukset jokaisesta kutsusta Tehdään sama jokaisille parametrille Tehdään sama kaikille (testattaville) metodeille Tuhoa olio Testaa destruktori ja tarkista, että kaikki olion varaamat resurssit on vapautettu Tarkista kattavuus ja lisää uusi testejä tarvittaessa 10 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt

Luokkatestien skaalaaminen erilaisille riskitasoille LUOKKAAN LIITTYVÄ RISKI Suuri Keskikokoinen Pieni 100% metodikattavuus - EP-tekniikka (VP + IP) - BVA-tekniikka (VB + IB) 'Kaikki' perintäsuhteet testataan Poikkeukset testataan Myöhäinen sidonta testataan - kaikki kombinaatiot Muistinhallinta testataan - konstruktorit - destruktorit Järjestelmälliset koodikatselmukset Koodin staattinen analyysi Oliomallit katselmoidaan 100% metodikattavuus - EP-tekniikka (VP + IP) - BVA-tekniikka (VB) 'Tärkeät' perintäsuhteet testataan Poikkeukset testataan Myöhäinen sidonta testataan - yksittäisiä testejä Muistinhallinta testataan - konstruktorit - destruktorit Koodikatselmukset valikoiden Koodin staattinen analyysi Oliomallit katselmoidaan 100% metodikattavuus - EP-tekniikka (VP) - BVA-tekniikka (VB) 'Keskeiset' perintäsuhteet testataan Poikkeuksia ei testata Myöhäinen sidonta testataan perinnän ohessa Muistinhallinta testataan - pääkonstruktori - destruktorit Koodikatselmukset valikoiden Koodin staattinen analyysi Oliomallit katselmoidaan epäformaalisti EP = Equivalence partition BVA = Boundary value analysis 11 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt Muita testauksen perusteellisuuden säätökeinoja Koodikattavuus Perinteiset kattavuusmitat eivät ole olioperustaisia ne eivät kerro koko totuutta oliotestauksen perusteellisuudesta: perintä ja myöhäinen sidonta (inheritance & polymorphism) Yleiset kattavuusmitat kertovat testauksen perusteellisuuden metoditason testaamisesta Koodikattavuuden lisäksi voi seurata myös Metodien kutsuminen Määriteltyjen poikkeusten tuottaminen Olioiden luonti eri tavoilla (dynaamisesti, viite, staattinen) Kompleksisuus ja koko (complexity & volume) Mitattavissa suoraan sekä koodista että oliomalleista Tuettuja mittoja löytyy sekä olioperustaisia ja olioista riippumattomia Perinteiset kompleksisuusmitat kertovat metodin kompleksisuuden Oliomitat ottavat kantaa kutsu- ja perintärakenteisiin sekä olion rajapinnan ominaisuuksiin Mittareista voidaan arvioida ohjelmointiriskiä 12 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt

Olio-ohjelmisto luokkaa ylemmällä tasolla: Luokka ja osajärjestelmä/järjestelmä Testaustoimet kehitysryhmässä jaetaan karkeasti kahteen luokkaan Luokka- ja luokkaryhmien rakenteinen testaus: toiminnallisuus ja logiikka Osajärjestelmätestaus käyttötapausten (use case) mukaan: interaktiot, toiminnallisuus ja rajapintojen käyttö Priorisointi Riskitaso asetetaan jokaiselle osajärjestelmälle Suunnittelijat ja projekti/tuotepäällikkö mukaan Luokkatestaus: riskitason mukaan Osajärjestelmätasolla: käyttötapauksen tiheyden ja riskin mukaan Osajärjestelmän testaus Fokus: komponentti-interaktio, toiminnallisuus ja rajapintojen käyttö Käyttötapauksen toteutus olioiden viestinvälityksenä Katetaan kaikki käyttötapaukset ja niiden yhdistelmät Käyttökelpoinen malli (pattern): "Extended use case" Testataan komponenttien yhteistyö Normaali- ja poikkeustilanteet 13 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt TDD: test first -esimerkki 14 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt

TDD: test first -esimerkki TDD = Test Driven Development, yksi extreme Programming käytännöistä. Kirjoita ensin lista kaikista mahdollisista testitapauksista, jotka tulevat mieleesi: Kaikki metodit yms. Koodaa testitapaus, käännä ja aja. Testi ei mene läpi, koska toiminnallisuutta ei ole toteutettu. Testi speksaa toiminnallisuutta ja rajapintaa. Testi menee läpi, kun olet koodannut tarpeellisen määrän toiminnallisuutta. Puhdista koodi ja aja testi uudestaan läpi. Syklin pitäisi olla nopea: alle 10 minuuttia. Pidempikestoinen sykli kertoo liian isoista palasista. 15 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt TDD: test first -esimerkki Plussat: Testit ovat speksejä ja ajettavissa erikseen. Testaus tulee tehdyksi, eikä siitä lipsuta aikataulupaineiden takia. Perustoiminnallisuus on testattu, seuraavat testausvaiheet nopeutuvat. Voidaan siirtää voimavaroja virheiden etsimisestä niiden ennaltaehkäisyyn (arkkitehtuuri + analyysi + suunnittelu) Riippuvuuksien määrä pysyy mahdollisimman pienenä: luokat pyritään testaamaan erikseen Testikattavuus on ainakin lähellä 100% lausekattavuutta. Antaa itseluottamusta, vähentää stressiä ja pelkoa. Idea ei ole XP-sidonnainen. Miinukset: Testien laatu on riippuvainen suunnittelijan henkilökohtaisesta osaamisesta ja motivaatiosta. Testit kattavat yleensä vain perustoiminnallisuuden. Monimutkainen ympäristö voi aiheuttaa ongelmia (tietokanta, CORBA, sovelluskehykset). Testauskoodin määrä ylittää tuotteeseen menevän koodin määrän. 16 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt

TDD: test first -esimerkki Testikoodi testit.cpp TEST(Lasku, kokonaissumma) CHECK (0=Luekokosumma()); Tuotekoodi Lasku.h #include Lasku.h int Luekokosumma() return -1; #include Lasku.h int Luekokosumma() return 0; TEST(Lasku, osta_yksi) CHECK (200=Luekokosumma()); #include Lasku.h int Luekokosumma() return kokonaisumma; 17 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt 18 NOKIA Laajojen oliojärjestelmien testaus / 2002-12-16 / Epö & ASt Lisää tietoa löytyy Kokonaiskuva ja hyviä testauspatterneja löytyy Robert Binderin kirjasta "Testing Object-Oriented Systems: Models, Patterns, and Tools" (Addison-Wesley 2000, ISBN 0-201-80938-9) Esimerkkejä: http://www.rbsc.com/pages/testdesignpatterns.html Ymmärrettävä, mutta ohueksi jäävä johdanto oliotestaukseen: David A. Sykes, John D. McGregor: "Practical Guide to Testing Object-Oriented Software" (Addison-Wesley 2001, ISBN 0-201-32564-0) "Test-Driven Development" on varsin selkeästi esillä mm. Dave Thomas, Andy Hunt: "Learning to Love Unit Testing" (Software Testing & Quality Engineering, 2002 Jan/Feb) http://www.stqemagazine.com/featured.asp?id=20 ja http://www.stqemagazine.com/webinfo_detail.asp?id=270 Peter Coad: "the coad letter", http://www.thecoadletter.com/ Bill Wake: "XPlorations", http://xp123.com/xplor/ Ja tietenkin http://www.xprogramming.org/ ja http://www.extremeprogramming.org/ Avaintyökalut löytyvät osoitteesta http://www.junit.org ja laajemmin http://www.xprogramming.com/software.htm