750 likes | 1.37k Views
Testaus ohjelmistokehityksen osana. Maaret Pyhäjärvi ja Erkki Pöyhönen Julkaisuversio 1.0 2005-01-06. tekijä mainittava http://creativecommons.org/licenses/by/1.0/fi/. Tiedoksi lukijalle. Tämä materiaali on edelleen työn alla
E N D
Testaus ohjelmistokehityksen osana Maaret Pyhäjärvi ja Erkki Pöyhönen Julkaisuversio 1.0 2005-01-06 tekijä mainittavahttp://creativecommons.org/licenses/by/1.0/fi/
Tiedoksi lukijalle • Tämä materiaali on edelleen työn alla • Varsinainen julkaisu tapahtuu testauskirjan julkaisun yhteydessä tai jälkeen • Materiaalin hyödyntäminen on vapaata • Erityisesti haluamme tukea yleishyödyllisen ohjelmistotestauksen opetuksen jäsentymistä tarjoamalla materiaalimme vapaasti muokattavaksi pohjamateriaaliksi • Uskomme että kirjallinen materiaali on noin 20 % vastaavasta koulutuksesta puhuttuna • Lisää materiaalia löytyy pään sisältä • Kysyttävää? • Ota yhteyttä maaret.pyhajarvi@iki.fi ja erkki.poyhonen@nokia.com
2 – Testaus ohjelmistokehityksen osana Tehokas ohjelmistotestaus Testaustekniikat Testaus ohjelmisto-kehityksen osana Testauksen suunnittelu ja hallinta Virheraportointi ja virheasian ajaminen Testausvälineet ja testauksen automatisointi Katselmoinnit testaustoimintana Testausprosessin muuttaminen Testitapaukset ja testien suorittaminen
Oppimistavoitteet • Tiedät mitä testausprosessi on suhteessa ohjelmistoprosessiin • Tunnet suunnitelmaohjatun ja ketterän ohjelmistokehityksen sekä testauksen ja ymmärrät tasapainottelun niiden välillä • Osaat välttää perinteisimmät sudenkuopat testausprosessin määrittelyssä ja toteuttamisessa • Tunnet ohjelmistokehityksen dokumenttihierarkian ja ymmärrät että testaus ei perustu vain dokumentteihin • Osaat tehdä vaatimusanalyysin testausprosessissa tuotettavalle testauksen dokumentaatiolle • Tiedät mikä on testaustaso ja testaustyyppi ja osaat käyttää niitä suunnittelussa • Tiedät mitä testattavuus on ja kuinka sitä arvioidaan ja kehitetään • Ymmärrät että riskit riippuvat monista tekijöistä ja muuttuvat sekä ohjelmiston että projektin elinkaaren aikana
Käsiteltävät asiat Testauksen V-malli Suunnittelua elinkaaressa Testaus-prosessi Testattavuus ja laatu 2 – Testaus ohjelmistokehityksen osana
Käsiteltävät asiat V-malli ja testaustyypit Suunnittelua elinkaaressa Testaus-prosessi Testattavuus ja laatu 2 – Testaus ohjelmistokehityksen osana
Testaustasot ja vaiheet • Testaustaso – Jatkuvaa testaustoimintaa tietyn tyyppisen testaustavoitteen ja testauskohteen ympärillä. • Testaustoiminnasta tekee oleellisesti jatkuvaa vaatimus uusintatestauksesta muutoksen osalta. • Taso ei ole välttämättä sama asia kuin vaihe. • Testausvaihe - Testaustason sisäinen tai useiden testaustasojen yhteinen tehtäväkokonaisuus, joka on tyypiltään kertaluonteinen eikä jatkuva.
V-malli – testauksen tasot Vaatimukset Hyväksymis-testaus Määrittely Järjestelmä-testaus Tekninen suunnittelu Integrointi-testaus Ohjelmointi Yksikkö-testaus
Tyypilliset testauksen tasot [Craig&Jaskiel 2002]
Testaustasojen tyypilliset merkitykset Tyypillinen organisointi kokonaisuus Hyväksymistestaus Asiakas/käyttäjä Testauksen kohteena olevan kokoonpanon laajuus Järjestelmätestaus Testaaja Integrointitestaus Toteuttajat yhdessä Yksikkötestaus Kukin toteuttaja osa Ympäristöjen edustavuus osa kaikki
Yksikkötestaus • Yksikkötestauksella tarkoitetaan koodin toteutukseen kohdistuvaa teknistä testausta • Keskittyy virheisiin, jotka tyypillisesti syntyvät koodia kirjoittaessa • Yksikkö voi olla: • Tehtävänanto: ”Koodaan ja testaan tämän ominaisuuden” • Komponentti, moduuli, luokka: ”toteutan kaikki toiminnallisuuden näihin kooditiedostoihin” • Laajuuden tulkinnassa paljon vaihtelua • Usein näkee suurissa hankkeissa jaettavan yksikkötestaustaso kahteen osaan, yksikkö- ja komponenttitestaukseen • Tällöin yksikkötestaus kohdistuu kooditiedostolaajuuteen ja komponenttitestaus vastaa kehittäjän omalle komponentilleen tekemää osajärjestelmätestausta ennen integrointia kokonaisjärjestelmään
Integrointitestaus • Integrointitestauksella tarkoitetaan kaiken tasoisten osajärjestelmien yhdistämiseen kohdistuvaa teknistä testausta • Integrointitestaus usein vaikea erottaa yksikkötestauksesta, koska integrointi voi sisältää ohjelmointitehtäviä • Usein toimiva perussääntö: enemmän kuin yksi toteuttaja integrointitestaustarve • Arkkitehtuuri apuna integrointitestaustarpeiden tunnistamisessa • Testaus kohdistuu integroitavaksi valittujen osajärjestelmien laajuuteen • Integrointitestauksessa osajärjestelmien liittymän näkökulma
Järjestelmätestaus • Järjestelmätestauksella tarkoitetaan kokonaisjärjestelmän laajuuteen kohdistuvaa testausta • Voi sisältää sekä teknisen että käyttäjän näkökulman • Testaus kohdistuu kulloinkin olemassa olevaan kokonaisjärjestelmän laajuuteen • Laajuus kasvaa uusien integrointien myötä • Järjestelmätestauksessa kokonaisjärjestelmän näkökulma
Hyväksymistestaus • Hyväksymistestauksella tarkoitetaan testausnäkökulmaa, jossa tarkastellaan järjestelmää sen todelliseen ympäristöönsä soveltuvuuden kannalta • Sopimuspohjainen hyväksymistestaus • Voi olla juuri ennen tuotantoon siirtoa tai keskellä järjestelmätestausta • Etenkin monitoimittajaympäristössä hyväksymistestaus liittyy laskunmaksuun eikä voida odottaa tuotantoon siirtoa • Voi toistua jokaisen uuden alijärjestelmän versioasennuksen jälkeen • Alpha- ja betatestaus, pilotointitestaus • Virhetilanteiden löytäminen, joita on vaikeaa tai kallista löytää laboratorio-olosuhteissa – todellisten ympäristöjen monimuotoisuuden toistaminen haaste
V-malli – testauksen tasot Vaatimukset Hyväksymis-testaus Määrittely Järjestelmä-testaus Tekninen suunnittelu Integrointi-testaus Ohjelmointi Yksikkö-testaus Testien ajaminen ja korjaustyö Testien suunnittelu
V-mallin ydin • Pienempien osien testaaminen ennen järjestelmään liittämistä on hyvä lähestymistapa. • Testaukselle on useita eri näkökulmia. • Testaus voi alkaa suunnittelulla heti kun korkeimman tason vaatimukset on tunnistettu.
Erityisesti huomioi (1/2) • Suunnittele testit perustuen jokaisen suunnitteluvaiheen tuotokseen, mutta suorita testit siinä järjestyksessä joka on kaikkein järkevin • Testauksen vaiheistus voi olla erilainen kuin tasot peräkkäisinä vaiheina • Pyri saamaan oikea näkökulma, jolla löydetään tärkeät virheet, mukaan suoritukseen mahdollisimman aikaisin • Uusintatestauksella entistä suurempi painoarvo kun lisätään uusia ominaisuuksia olemassa oleviin järjestelmiin • Selvitä minkä testaustason näkökulmasta uusintatestausriski on taloudellisinta hallita
Erityisesti huomioi (2/2) • Suunnitteluvaiheen tuotos ei välttämättä ole dokumentti • Dokumentti on vain yleinen viestinnän väline • V-mallia käytetään usein perusteluna sellaisten tehtävien tekemisen puuttumiselle, jotka ”olisi pitänyt jo tehdä”’ • Jos näet jonkun muun valmistelevan samoja testejä kuin sinun oletetaan tekevän, miksi tekisit? • Hyväksymistestauksen suunnittelun vaatiminen ennen muita aiheuttaa vaihtelevia reaktioita • ”He testaavat vain nämä, joten emme mekään muuta testaa” • ”He testaavat nämä joten meidän ei tarvitse tehdä sitä”
Riski: V-mallin aikatauluvaikutus Katselmoi, mieluummin kuin määrittele testitapauksia virheellisiin vaatimuksiin pohjaten. Vertaiskatselmointien virheenpoistoteho 60 % Perspektiivipohjaisesti suunnattujen teho 35 % enemmän. parhailla katselmoijilla 20 % virheistä menee läpi testaukseen saakka. Virheet eivät ole tasa-arvoisia. 80 % vältettävissä olevasta korjaustyöstä tulee 20 %:sta koodia.
Käsiteltävät asiat Testauksen V-malli Suunnitteluaelinkaaressa Testaus-prosessi Testattavuus ja laatu 2 – Testaus ohjelmistokehityksen osana
Testauksen suunnittelu • Organisaation odotukset testaustoiminnalle • Laatupainotukset sovellusalueella Testauksen missio ja korkean tason tavoitteet Testausstrategia • Järjestelmä / tuote / palvelukohtainen • Useita projekteja saman järjestelmän elinkaaressa Yleistestaussuunnitelma • Projektikohtainen • Projektin lähestymistapa, strategian räätälöinti Testaussuunnitelma • Tarkentavat suunnitelmat ryhmittäin Testitapaukset • Testauksen yksityiskohdat
Testauksen tilannemalli Muokattu [Kaner et al. 2002]
Annettujen määrittelyt • Missio - Täytettävät tavoitteet, jotta testaus olisi sidosryhmiensä näkökulmasta onnistunutta. • Vaatimukset - Onnistuneen järjestelmän kriteerit. • Toteutus ja integrointi - Järjestely, joka tuottaa testattavan järjestelmän. • Testausryhmä - Testaukseen käytössä olevat ihmiset. • Testausympäristöt ja -välineet - Testauksen järjestelmät, työkalut ja materiaalit.
Annetut tarkemmin • Testausympäristöt ja välineet • Testausympäristöt • Testikirjasto • Testiaineistot • Testausvälineet • Havaintojen seurantajärjestelmä • Toimistotilat • Missio • Testauksen sidosryhmät • Odotukset • Tavoitteet • Vaatimukset • Laatu-aika-ominaisuuspainotukset • Järjestelmän riskit • Laatuominaisuuksien painotukset • Järjestelmän tavoitteet (ratkaistava ongelma) • Järjestelmänsidosryhmät • Vaatimusdokumentaatio • Epäsuorien vaatimusten viestintä • Kehitys ja integrointi • Sovellusarkkitehtuuri ja -rakenteet • Projektin elinkaarimalli ja rytmitys • Projektinhallinta • Kokoonpanonhallinta • Julkaisunhallinta • Virheiden estäminen • Kehitysryhmä • Testausryhmä • Resurssointi • Osaaminen • Johtaminen • Työn jakaminen • Motivaatio
Valinnat • Lähestymistapa - Kokoelma ajatuksia, jotka ohjaavat testien ja testauksen suunnittelua. • Käytännöt - Kokoelma ajatuksia, jotka ohjaavat voimavarojen kohdistamista lähestymistapaa toteutettaessa.
Testaustyyppi • Testaustyyppi – Ryhmä testausaktiviteettejä, joilla on yhteisiä ominaisuuksia joiden perusteella ne voidaan tunnistaa omana luokkanaan, ja jotka on ryhmitelty arvioimaan yhtä tai useampaa toisiinsa liittyvää laatuominaisuutta. • Voi sijoittua yhdelle tai useammalle testaustasolle ja testausvaiheeseen. • Kaikki eivät aina tarpeellisia - käytännössä testaustyypit muodostavat tarkastuslistan mahdollisesti katettavista asioista • Testaustyypit jakaantuvat toiminnallisiin ja ei-toiminnallisiin
Toiminnallisuustestaus (functionality testing, feature testing) Yhtäaikaisuustestaus (concurrency testing) Asennustestaus (installation testing) Alustatestaus (platform testing) Aloitustestaus (build verification testing, smoke testing) Konfiguraatiotestaus (configuration testing) Yhteensopivuustestaus (compatibility testing) Rinnakkaistestaus (end-to-end testing) Rajapintatestaus (interface testing) Poikkeustilannetestaus (recovery testing) Lokalisointitestaus (localization testing) Dokumentaation testaus (documentation testing) Aineiston laadun testaus (data quality testing) Alfatestaus (alpha testing) Betatestaus (beta testing) Muuntotestaus (conversion testing) Tuotantotestaus (production testing, operational testing) Standardien testaus (standards testing) Toiminnallisen testauksen testaustyyppejä
Luotettavuustestaus (reliability testing) Suorituskykytestaus (performance testing) Kuormitustestaus (load testing) Rasitustestaus (stress testing) Paljoustestaus (volume testing) Kestävyystestaus (endurance testing) Tietoturvatestaus (security testing) Käyttöturvallisuuden testaus (safety testing) Käytettävyystestaus (usability testing) Esteettömyystestaus (accessibility testing) Palautettavuustestaus (recoverability testing) Tuettavuustestaus (supportability testing) Ylläpidettävyystestaus (maintainability testing) Siirrettävyystestaus (portability testing) Koodin laadun testaus (code quality testing) Ei-toiminnallisen testauksen testaustyyppejä
Tasot, vaiheet ja tyypit Hyväksymistestaus Järjestelmätestaus Integrointitestaus uusinta Yksikkötestaus uusinta
Testausaktiviteettien rytmitys (1/2) • Testien suoritus tarvitsee version ohjelmistosta • Testausryhmä saa ohjelmiston testaukselle tehtyjen julkaisujen kautta (koonnit ja julkaisut) • Ohjelmistoversion sisältö ohjaa ja rajaa tehtävää testausta • Riskien toteutumisen arviointi vaatii pääsyn sopivaan toiminnallisuuteen • Tärkeimmät löydettävissä olevat virheet riippuvat toteutuksen vaiheesta ja kypsyydestä • Testauksen syvyyden pitäisi peilata riskejä, joiden selviämisajankohtaa ei voi määrittää projektin alussa
Testausaktiviteettien rytmitys (2/2) • Joissain asioissa ajoissa valmistelu ja suunnittelu voi olla liian ajoissa • Muutos mitätöi suunnitelman • Muutoksen aiheuttama lisätyö luo haluttomuutta muuttaa testauksen suuntaa • Tavoitteena oikea-aikainen suunnittelu: Tee testauksen suunnittelu juuri ajoissa ilman, että hukkaat aikaisen työn avainhyödyt.
In-synch vs. off-synch testaus • Tarvittavien valmistelujen kesto asettaa aktiviteettien rytmin • In-synch testaus koostuu testaustehtävistä jotka voidaan tehdä samassa rytmissä kuin jossa kehitys etenee, jatkuvaan tyyliin. • Off-synch testaus tarkoittaa tyypillistä näkymää suunniteltuun ja valmisteltuun testaukseen, jonka valmistelu ja suorittaminen vie liikaa aikaa ollakseen luonnollisesti integroitu kehityksen päivittäiseen/viikottaiseen rytmiin. • Rytmin huomioiminen • Tuo rakennetta lyhyen aikavälin suunnitteluun muistuttaen eri aikaväleistä joilla asioita tehdään testauksessa • Tuo joustoa pitkän aikavälin suunnitteluun ottaen kantaa tehtäviin joita ei kannata suunnitella erillisinä.
Palautteen ajoitus Järjestelmä 1 Järjestelmä 2 Testaus on mekanismi, jolla huomataan jos osa ei toimi. Kuinka saavuttaa nopea palaute?
Käsiteltävät asiat Testauksen V-malli Suunnittelua elinkaaressa Testaus-prosessi Testattavuus ja laatu 2 – Testaus ohjelmistokehityksen osana
Ohjelmistokehitystoiminnan jäsentäminen Järjestelmän elinkaari Järjestelmäkehityksen elinkaari Hanke Projekti Uuskehitys Jatkokehitys Ylläpito Hankinta
Kehitys- vs. hankkijaorganisaatio • Kehitysorganisaatio • järjestelmän luominen – toteutus ja testaus • Hankkijaorganisaatio • järjestelmän ostamisen, integroinnin ja/tai käyttöönoton miettiminen • Eroja liiketoimintamallissa: • Tuoteliiketoiminta: myytävä kokonaisuus on tuote • Projektiliiketoiminta: myytävä kokonaisuus on asiakastilausprojekti • Erona: onko hankkijaorganisaatio asiakas (projektiliiketoiminta) vai käyttäjä (tuoteliiketoiminta)
Ohjelmistokehityksen elinkaarimallit • Ohjelmistokehityksen elinkaarimallit (käytetään myös nimeä ohjelmistoprosessimalli) kuvaavat hankkeen/projektin kehityksen organisointia • Aktiviteetteja ja vaiheita • Oleellisesti kolme hyvin erilaista perusrakennetta: • Vesiputousmalli – ”tarvittava kokonaisuus kerralla vaiheistetussa toteutuksessa” • Iteratiivinen ja inkrementaalinen – ”tarvittava kokonaisuus toteutuserissä” • Ketterä – ”inkrementaalinen muutos- ja ihmiskeskeisin arvoin”
Testausprosessi Muokattu: Pol & Van Veenendaal. TMap. Testitapaukset Valmistelu Määrittely Suoritus Lopetus Suunnittelu ja hallinta (projektinäkökulma) Strateginen suunnittelu ja hallinta (elinkaarinäkökulma) Yleistestaussuunnitelma Testausstrategia
Strateginen suunnittelu ja hallinta • Missio ja strategia • Organisaation yhteinen toimintatapa • Projektin ulkopuolinen testaustoiminta • Alustan versioiden hyväksymistestaus • Automaatioarkkitehtuurin ylläpito • Välinetuki ja hyötyjen arviointi • Koulutus • Testausprojektin vertailu
Suunnittelu ja hallinta • Testaussuunnittelu • Tavoitteet ja laaturiskit • Aikatauluraamit • Lähestymistapa • Resurssointi • Hallinta • Seuranta • Korjaustoimenpiteet • Eskalointi ja ongelmanratkaisu • Testauksen laadun arviointi • Viestintä sidosryhmille
Valmistelu • Vaatimuskatselmointi • Testattavuuskatselmointi • Testausvaatimusten tunnistaminen • Ympäristöjen valmistelu • Aineistojen valmistelu • Tiedon kerääminen
Määrittely • Riskien tunnistaminen • Testitapausten määrittely • Testitapausten priorisointi • Testiaineiston määrittely • Ympäristöjen pystyttäminen • Testien automatisointi
Suoritus • Julkaisut testaukseen • Aloitustestit • Testiaineistojen alustaminen • Testien suoritus • Uusintatestaus • Uudelleentestaus • Testitapausten ja automaation ylläpito • Testauksen tulosten kirjaaminen • Havaintojen käsittely
Lopetus • Testattavuusyhteenveto • Testauksen tulosten yhteenveto • Testauksen kokemusten yhteenveto • Testauksen materiaalien päivitys ja paketointi • Testausryhmän purkaminen
Suunnitelmaohjattu vs. tutkiva testaus • Suunnitelmaohjatussa testauksessa testitapaukset suunnitellaan ennen testien suoritusta • Skriptaus tuottaa yksityiskohtaisen suunnitelman • Askel-askeleelta prosessi – testausprosessi koostuu vaiheista • ”Mitä testejä pitäisi ajaa?” • Tutkivassa testauksessa testitapauksia suunnitellaan testejä suoritettaessa • Etukäteen ei voida ennustaa testien yksityiskohtia, jotka riippuvat ohjelmiston tilasta • Usein pohjaa korkeamman tason jäsennykseen • Eteen-taakse prosessi – testausprosessi ei vaiheita, vaan toistettavia tehtäviä • ”Mikä on paras testi, jonka voin suorittaa juuri nyt?”
Testauslähestymistapojen vastakkainasettelu • Skriptatussa testauksessa testitapaukset suunnitellaan ja dokumentoidaan ensin. Myöhemmissä vaiheissa ne voidaan suorittaa saman tai eri henkilön toimesta. vs. • Tutkivassa testauksessa testit suunnitellaan ja suoritetaan yhtäaikaisesti ja niitä ei yleensä dokumentoida yksityiskohtaisesti. Testit Testit Ohjelmisto
Tutkiva vs. valmistelematon testaus • Valmistelematon testaus (ad hoc testing): Testaustoimintaa, jossa virheiden etsiminen on valmistelematonta. Testausta ei suunnitella, tavoite testaamiselle ei ole selvillä, tuloksille ei ole odotuksia ja tekemistä ohjaa satunnaisuus. • Joskus jaetaan suunnattuun ja suuntaamattomaan valmistelemattomaan testaukseen, jossa suunnattu valmistelematon testaus on tutkivaa testausta eikä itse asiassa valmistelematonta.
Tutkiva testaus prosessina Tutkiva Täydentäjä - Suunnitel-tujen testien laajentajana Sessio - rajatulla ajalla Ryhmä - rajatulla ryhmällä Projekti - Koko toiminnan prosessina Suunnitelmaohjattu