Ohjelmistotekniikka - Luento 10 Jouni Lappalainen

Samankaltaiset tiedostot
Ohjelmistotekniikka - Luento 3

Ohjelmistotekniikka - Luento 10

Ohjelmistotekniikka - Luento 9 Jouni Lappalainen

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

Laadunvarmistustekniikat

Ohjelmistotuotanto s

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

Kontrollipolkujen määrä

Testaaminen ohjelmiston kehitysprosessin aikana

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

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

Ohjelmistotuotantoprojekti

Ohjelmiston testaus ja laatu. Testausmenetelmiä

Testausraportti. Oppimistavoitteiden hallintajärjestelmä harri

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

7. Verifiointi ja validointi

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmiston testaus ja laatu. Testaustasot

Ohjelmistotekniikka - Luento 2 Jouni Lappalainen

Ohjelmistotekniikka - Luento 2

Laadunvarmistustekniikoita. Ohjelmistotuotanto. Testaus termejä. Testaus periaatteita. Testaus havaintoja. Testaus havaintoja

58160 Ohjelmoinnin harjoitustyö

Convergence of messaging

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

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

Ohjelmistotuotanto, verifiointi ja validointi Syksy Verifioinnin ja validoinnin ero. 7. Verifiointi ja validointi

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

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

Testaussuunnitelma Labra

Harjoitustyön testaus. Juha Taina

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

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

Onnistunut Vaatimuspohjainen Testaus

Testaussuunnitelmat. Luennon tavoitteista. Motivointia. Haikala ja Märijärvi, Ohjelmistotuotanto. Pressman, Software Engineering

Ohjelmiston testaussuunnitelma

Dynaaminen analyysi III

UCOT-Sovellusprojekti. Testausraportti

CT60A4150 OHJELMISTOTESTAUKSEN PERUSTEET. Jussi Kasurinen Kevät 2015

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

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

Dynaaminen analyysi III Luento 5 Antti-Pekka Tuovinen

Järjestelmätestauksen vaatimukset. 6. Järjestelmätestaus (B, 14) Järjestelmätestauksen korkean tason testausstrategia

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

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

Dynaaminen analyysi I

Ohjelmistotestaus -09

Testaussuunnitelma. Oppimistavoitteiden hallintajärjestelmä harri

Testaussuunnitelma. Pizzeria - Pitseria HAAGA-HELIA ammattikorkeakoulu Tietojenkäsittelyn koulutusohjelma. WebPizza

Tapahtuipa Testaajalle...

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

WCLIQUE. Ohjelmistoprojekti. Testaussuunnitelma

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

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

Ohjelmistotestauksen perusteita II

ITK130 Ohjelmistojen luonne

Lohtu-projekti. Testaussuunnitelma

JUnit ja EasyMock (TilaustenKäsittely)

CT60A4150 OHJELMISTOTESTAUKSEN PERUSTEET. Jussi Kasurinen Kevät 2016

Dynaaminen analyysi IV

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

CT60A4150 OHJELMISTOTESTAUKSEN PERUSTEET. Jussi Kasurinen Kevät 2015

Dynaaminen analyysi IV Luento 6 Antti-Pekka Tuovinen

Test-Driven Development

@Tampereen Testauspäivät ( )

T Testiraportti - järjestelmätestaus

Käyttötapausanalyysi ja testaus tsoft

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

Testauksen hallinta Testaustyökalut Luento 7 Antti-Pekka Tuovinen

Standardin IEC testaustekniikoista. V-malli vai ketterämpi prosessi?

Yhteenveto. Menettelytavat

Tutkittua tietoa. Tutkittua tietoa 1

Test-Driven Development

Ohjelmistotekniikka - Luento 4

SYSTEEMITYÖ. Tärkeitä sanoja

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

Testaus elinkaaressa

Automaattinen yksikkötestaus

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

Dynaaminen analyysi II

Testauksen hallintaa teekkareille (ja muille kiinnostuneille) Arto Stenberg

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

Ohjelmistojen testaus

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

812336A C++ -kielen perusteet,

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

10. Tarkastukset. Tarkastusten rakenne

Tarkastusten rakenne. 10. Tarkastukset. Tuotoksen tekijän rooli. Tarkastustiimi. Tarkastusprosessin vaiheet. Tarkastusprosessi

ITKP102 Ohjelmointi 1 (6 op)

Simulaattoriavusteinen ohjelmistotestaus työkoneympäristössä. Simo Tauriainen

Testaussuunnitelma. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

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

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

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

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Ohjelmistotekniikka - Luento 10 Jouni Lappalainen

2. Ohjelmistotuotantoprosessi

Lakki. Lisää ot sik k o osoit t am alla. Nöyrästi vain lakki kourassa... Jussi Vänskä Espotel Oy. vierailuluentosarja OTM kurssi 2010

Transkriptio:

Ohjelmistotekniikka - Luento 10 Jouni Lappalainen Luku 17: Testausstrategiat V-malli ja vaiheet yksikkö- ja integrointitestaus validointitestaus järjestelmätestaus debuggaus Luku 18: Perinteisten sovellusten testaus testattavuus valkealaatikko- ja mustalaatikkotestaus mallipohjainen testaus (testivetoisen ohjelmistokehityksen ominaisuudet)

Soveltuvat lait ja pohdiskelun aiheita 1. Testauksella voidaan esittää virheiden olemassaolo, mutta ei todistaa virheettömyyttä / no 22, Dijkstra 1970 2. Noin 80 % virheistä tulee 20 % moduuleista / no 24, Pareto 1897, Fenton 2000 Mitkä ominaisuudet tekevät ohjelmistosta helpommin testattavan? Mitä etuja mustalaatikkotestauksella on valkealaatikkotestaukseen nähden? Mitkä seikat rajoittavat valkealaatikkotestauksen käyttöä? + muita

Ohjelmiston testaus Testing is the process of exercising a program with the specific intent of finding errors prior to delivery to the end user. Testauksessa pyritään etsimään ohjelmasta (ohjelmaa suorittamalla) virheitä ennen sen toimittamista asiakkaalle. 3

Testauksella saadaan esille virheet vaatimusten noudattaminen suorituskyky tuntuma laatuun 4

Millä tekniikoilla ohjelmiston laatua parannetaan? Käyttäjän tarpeet Ohjelmisto käytössä Vaatimusmäärittely Toiminnallinen suunnittelu - käyttöliittymän suunnittelu - käyttötapausanalyysi Testisuunnitelmat Yksikkötestaus Käytettävyystestaus Toiminnallinen testaus Puhdastila (Cleanroom) Koodaus Ohjelmistosuunnittelu Integrointitestaus Järjestelmätestaus Hyväksymistestaus

Verification vs. validation Verification (todentaminen) V-mallin vasen puoli (tarkastus) are we building the product right Validation (osoittaminen kelvolliseksi) V-mallin oikea puoli (testaus) are we building the right product

Kuka testaa? kehittäjä Understands the system but, will test "gently" and, is driven by "delivery" riippumaton testaaja Must learn about the system, but, will attempt to break it and, is driven by quality 7

Testausstrategiat yksikkötesti validointitesti järjestelmätesti integrointitesti 8

Testausstrategia Aloita testing-in-the-small ja siirry kohti testingin-the-large Perinteiselle ohjelmistolle aluksi kohteena moduulit sitten integrointi Olio-ohjelmistolle aluksi kohteena luokka, joka kapseloi attribuutit ja operaatiot sitten siirrytään luokkien väliseen kommunikointiin ja yhteistyöhön 9

Strategiset tehtävät Aseta selvät tavoitteet. Ymmärrä, keitä ovat ohjelmiston käyttäjät ja kehitä jokaiselle käytäjäluokalle oma profiili. Kehitä testisuunnitelma, joka korostaa rapid cycle testing. Rakenna kestävä ohjelmisto, joka testaa itse itseään. Käytä tehokasta katselmointia (formal technical reviews) jo ennen tastausvaiheita. Kohdista katselmointia myös testausstrategiaan ja testitapauksiin. Paranna testausprosessia jatkuvasti. 10

Yksikkötestaus testattava moduuli tulokset ohjelmisto suunnittelija testitapaukset 11

testattava moduuli rajapinnat paikalliset tietorakenteet raja-arvot riippumattomat polut virheiden käsittelypolut testitapaukset 12

Yksikkötestauksen ympäristö ajuri Moduuli rajapinnat paikalliset tietorakenteet raja-arvot riippumattomat polut virheiden käsittelypolut tynkä tynkä testitapaukset Tulokset 13

Top Down Integrointi A moduulia testataan tynkien kanssa B F G C tyngät korvataan yksi kerrallaan (depth first) D E kun uusia moduuleita integroidaan osa testeistä ajetaan uudelleen 14

Bottom-Up Integrointi A B F G C Ajurimoduulit korvataan yksi kerrallaan depth first D ryväs E moduulit on ryhmitelty buildeiksi ja integroitu 15

Sandwich Testaus B A F Moduulit testataan tynkien kanssa G C D E moduulit on ryhmitelty buildeiksi ja integroitu ryväs 16

Regressiotestaus Integrointitestauksen tärkeä osa. Kun tehdään suurempia muutoksia tai lisätään uusi moduuli, varmistetaan ettei muutos/lisäys aiheuta ongelmia aikaisemmin virheettömissä osissa (sivuvaikutusten poistaminen). Regressiotestit koostuvat kolmenlaisista testeistä edustava otos testeistä, jotka testaavat kaikkia toimintoja lisätestejä, jotka kohdistuvat toimintoihin, joihin muutos todennäköisimmin vaikuttaa testejä, jotka kohdistuvat muutettuihin ohjelmistokomponentteihin 17

Savutestaus (Smoke Testing) Integrointitestaukseen kuuluva testi. Käytetään ohjelmistotuotteen päivittäisten lisäysten testaamiseen - perustuu testattavien koosteiden ( buildien ) luontiin Savutestauksen vaiheet: Ohjelmistokomponentit, jotka on käännetty koodiksi, integroidaan testattavaksi koosteeksi (buildiksi) Tämä osa sisältää kaikki tarvittavat datatiedostot, kirjastot, uudelleenkäytettävät moduulit ja rakennetut komponentit, joita tarvitaan yhden tai useamman tuotteen toiminnon toteutukseen Suunnitellaan joukko testejä, joilla löydetään vakavat virheet, jotka estävät testattavaa osaa toimimasta määrittelyjen mukaisesti Tarkoituksena on paljastaa show stopper virheet, eli virheet jotka todennäköisesti viivästyttäisivät projektia. Osa integroidaan muiden osien kanssa ja koko tuote (sen hetkisessä muodossa) testataan päivittäin Integrointi voi tapahtua top down tai bottom up. 18

OOT Strategia luokkatestaus vastaa yksikkötestausta luokan operaatiot testataan luokan tilakäyttäytyminen testataan integrointitestauksessa kolme strategiaa säieperustainen testaus - integroidaan luokat, joita tarvitaan käsittelemään jonkin syöte tai tapahtuma käyttöpohjainen testaus - integroidaan luokat, joita tarvitaan jokin käyttötapauksen mukaiseen toimintaan ryväspohjainen testaus - integroidaan luokat, joita tarvitaan toteuttamaan haluttu yhteistyö 19

Olioperustainen testaus aloitetaan arvioimalla OOA ja OOD mallien oikeellisuutta ja yhdenmukaisuutta muutokset testausstrategiassa yksikkö-käsite laajenee kapseloinnin tuloksena integrointi kohdistuu luokkiin ja niiden suoritukseen säikeessä tai käyttöskenaarion rajaamana ryvästestausta (cluster) käytetään testaamaan yhteistyössä toimivien luokkien toimintaa 20

Olioperustaisen koodin tarkastus ja testaus Koodin ymmärtämisen ja siten myös tarkastuksen ja testauksen ongelmana on toiminnallisuuden hajautuminen pienen palan ymmärtäminen vaatii monien muiden metodien ja luokkahierarkioiden läpikäyntiä Dunsmore et al. IEEE Software July/August 2003 private void purge( ) { GregorianCalendar today = new GregorianCalendar ( ); today.roll (Calendar.DATE, false); for (int i=0; i < reservations.size ( ); i++) { if (today.after (((Reservation) reservations.elementat (i)).getdate())) reservations.removeelementat (i); date = 0; } }

Toiminnallisuuden hajautuminen (delocalization) Luokat Java luokkakirjastossa Calendar Muut systeemiluokat Reservation GregorianCalendar Video purge ( ) Vector purge operaation dokumentointi

Validointitestaus Validointitestaus / hyväksymistestaus testataan, että vaatimuksissa asetetut tavoitteet toteutuvat testisuunnitelma voidaan tehdä jo vaatimusten määrittelyvaiheessa Alpha/Beta testaus järjestelmään testataan asiakkaan toimesta alpha testaus suoritetaan kehittäjän tiloissa kontrolloidussa testitilanteessa ja myös kehittäjä osallistuu testitilaisuuteen beta testaus suoritetaan valittujen asiakkaiden omissa tiloissa, asiakkaat kirjaavat ongelmat ja raportoivat kehittäjälle 23

Järjestelmätestaus Järjestelmätestaus on joukko testejä, joiden tarkoituksena on testata, että järjestelmän integrointi on onnistunut ja että järjestelmä toteuttaa sille määritellyt toiminnot Elpymistestaus (Recovery testing) aiheutetaan järjestelmän kaatuminen ja testataan, että elpyminen (esim. tietokanta) toimii Turvallisuustestaus (Security testing) varmistetaan, että rakennetut turvatoimet suojaavat järjestelmää luvattomalta käytöltä, väärinkäytöltä ja hyökkäyksiltä Kuormitustestaus (Stress testing) testataan järjestelmän sietoa epätavallisen suurella käyttäjämäärällä, syöttötiedolla ja toimintaa muistin ylärajoilla Suorituskykytestaus (Performance testing) testataan integroidun järjestelmän suorituskykyä (pysyy asetetuissa rajoissa) Toimituksen testaus (Deployment testing) ohjelmiston täytyy toimia useilla alustoilla (platform), eli tarkoittaa samaa kuin konfiguraatiotestaus (tärkeä erityisesti Web-sovelluksissa) 24

Aikaisemmin esitelty esimerkki: VirtualShowRoom Autonvalmistaja haluaa web-pohjaisen autojen myyntijärjestelmän (VirtualShowRoom, VSR). Tätä ohjelmistoa tarjotaan käyttöön kaikille asiakkaille maailmanlaajuisesti. Auton ostosta kiinnostunut asiakas voi sen avulla määritellä haluamansa auton ominaisuudet (malli, tyyppi, väri, lisävarusteet, jne.). Kun asiakas on tehnyt ostopäätöksen, hän voi vahvistaa tilauksen, valita sopivan maksutavan ja maksaa tilauksen. Ilkka Tervonen 25

Vaatimuksista johdetut testitapaukset (hinnan laskenta VSR järjestelmässä) R 100: Käyttäjä voi valita automallin mallilistasta R 101: Valittuun automalliin saatavat lisävarusteet esitellään. Käyttäjä voi valita halutut lisävarusteet listasta. R 102: Kokonaishinta valitulle konfiguraatiolle lasketaan jokaisen valinnan jälkeen ja näytetään välittömästi käyttäjälle. Testitapaukset, joita voi käyttää järjestelmätestauksessa ja hyväksymistestauksessa. T 102.1: Automalli on valittu, esitteen mukainen auton perushinta näytetään käyttäjälle T 102.2: Lisävaruste on valittu, auton hintaan on lisätty lisävarusteen hinta ja se näytetään käyttäjälle T 102.3: Lisävaruste on poistettu, auton hinnasta on vähennetty lisävarusteen hinta ja se näytetään käyttäjälle T 102.4: Kolme lisävarustetta on valittu, tällöin tulee mukaan alennusprosentti, joka on määritelty dokumentissa XX. Testataan, että alennusprosenttia käytetään määrittelyn mukaisesti.

Debuggaus: diagnosointi 27

testitapaukset Debuggausprosessi regressio testit korjaukset uudet testitapaukset epäillyt syyt tunnistetut syyt Debuggaus tulokset 28

Mihin aika kuluu debuggauksessa? korjataan virheet ja suoritetaan regressiotestaus diagnosoidaan oireet ja syyt 29

Oireet & syyt oire ja sen syy voivat olla sijaita eri paikoissa oire voi hävitä, kun korjataan jotain toista ongelma syynä voi olla virheettömien osien yhdistelmä syynä voi olla järjestelmä- tai kääntäjävirhe oire syy/ aiheuttaja syynä voi olla oletukset, joihin kaikki uskovat oireet voivat olla ajoittaisia 30

Virheiden vaikutukset damage infectious mild annoying catastrophic extreme serious disturbing Bug Type Bug Categories: function-related bugs, system-related bugs, data bugs, coding bugs, design bugs, documentation bugs, standards violations, etc. 31

Häiriö (failure) = järjestelmä ei käyttäydy käyttäjän tai asiakkaan toivomalla tavalla Jos puutteellisuutta ei löydetä kehitysvaiheessa, ohjelmaan jää vika (fault), joka aiheuttaa joko säännöllisiä tai satunnaisia häiriöitä Ohjelmistosuunnittelija tai ohjelmoija tekee virheen (mistake), joka aiheuttaa puutteellisuuden (defect, bug) ohjelmistosuunnitelmaan tai koodiin

Luku 18: Perinteisten sovellusten testaus - testattavuus - valkealaatikko- ja mustalaatikkotestaus - mallipohjainen testaus - (testivetoisen ohjelmistokehityksen ominaisuudet) - (seitsemän periaatetta ohjelmistojen testaukseen)

Testaustaktiikat: Testattavuus/Bach 2003 Testattavuus = kuinka helposti ohjelma voidaan testata Ohjattavuus (Controllability) The better we can control it, the more the testing can be automated and optimized Havainnollisuus (Observability) What you see is what can be tested Saatavuus (Availability) To test it, we have to get at it Yksinkertaisuus (Simplicity) The simpler it is, the less there is to test Vakaus (Stability) The fewer the changes, the fewer the disruptions to testing Informaatio (Information) The more information we have, the smarter we will test 34

Testitapauksen suunnittelu "Bugs lurk in corners and congregate at boundaries..." Boris Beizer OBJECTIVE CRITERIA CONSTRAINT paljastaa virheet täydellisesti minimityöpanoksella ja ajalla 35

Perusteellinen testaus loop < 20 X Jos on esim. 100 rivin ohjelma, jossa on kaksi sisäkkäistä silmukkaa, jotka suoritetaan 1-20 kertaa. Jos vielä sisemmässä silmukassa on neljä if-then-else rakennetta, niin ohjelmassa on arviolta 10 14 mahdollista testattavaa polkua. Jos yhden testitapauksen suoritukseen menee millisekunti, perusteellinen testaus vie 3170 vuotta!! 36

Valikoiva testaus Selected path Testikattavuutta voidaan arvioida - lausekattavuudella - päätöskattavuudella - ehtokattavuudella - polkukattavuudella 37

Ohjelmiston testaustekniikat white-box methods black-box methods Methods Strategies 38

Käyttäjän tarpeet Ohjelmisto käytössä Vaatimusmäärittely Yksikkötestaus Käytettävyystestaus Toiminnallinen suunnittelu - käyttöliittymän suunnittelu - käyttötapaus-analyysi Testisuunnitelmat Toiminnallinen testaus Ohjelmistosuunnittelu Integrointitestaus Järjestelmätestaus Musta laatikko Puhdastila (Cleanroom) Koodaus Hyväksymistestaus Valkea laatikko

Valkea laatikko testaus... varmistetaan, että jokainen lause ja ehto on suoritettu ainakin kerran 40

Polkutestaus Syklomaattinen kompleksisuus yksinkertaisten päätösten määrä + 1 tai rajattujen alueiden määrä + 1 Tässä V(G) = 4 41

Syklomaattinen kompleksisuus Tutkimusten mukaan voidaan päätellä, että mitä korkeampi moduulin V(G) arvo, sitä suurempi todennäköisyys virheille nämä moduulit ovat virheherkimpiä V(G) 1-10 yksinkertainen, pieni riski 11-20 mutkikkaampi, keskinkertainen riski 21-50 mutkikas, korkea riski > 50 ei testattava, erittäin korkea riski 42

Polkutestaus 1 Koska V(G) = 4, on neljä riippumatonta polkua 2 4 3 5 6 Path 1: 1,2,3,6,7,8 Path 2: 1,2,3,5,7,8 Path 3: 1,2,4,7,8 Path 4: 1,2,4,7,2,4,...7,8 7 8 Sitten täytyy kehittää testitapaukset, joilla polut testataan 43

Mustalaatikkotestaus vaatimukset tulosteet syötteet tapahtumat 44

Mustalaatikkotestaus Mustalaatikkotesteissä keskitytään esim. näihin kysymyksiin Miten toiminnallinen oikeellisuus testataan? Miten järjestelmän käyttäytymistä ja suorituskykyä testataan? Mistä syöttötiedoista (luokista) saadaan hyviä testitapauksia? Onko järjestelmä erityisen herkkä tietyille syötteille? Millaisia tietomääriä järjestelmä kestää? 45

Ekvivalenssiositus & raja-arvoanalyysi Ekvivalenssiositus päätellään ensin ekvivalenssiluokat ja sitten määritellään luokkia edustava testiaineisto syötteiden perusteella saadaan käypien arvojen arvoalue, käypien arvojen lukumäärä, käypien arvojen joukko käypien (sopivien) arvojen alueelta määritellään yksi testiarvo ja eikäypien (sopimattomien) alueelta kaksi testiarvoa Raja-arvoanalyysi keskitytään testaamaan ekvivalenssiosituksen raja-arvokohtia

Esimerkki ekvivalenssiosituksesta ja rajaarvoanalyysistä Ohjelmassa tutkitaan 1930 ja 1960 välillä syntyneitä henkilöitä testataan henkilöillä, jotka ovat syntyneet 1930-1960 välillä ja ennen 1930 sekä jälkeen 1960 testataan henkilöillä, jotka ovat syntyneet 1920, 1950, 1970, (1929), (1930), (1931), (1959), (1960), (1961) 1930 1960 sopimaton alue sopiva arvoalue sopimaton alue

VSR järjestelmä: calculate_price funktion testaus Funktio määritellään seuraavasti Auton perusmallin hinta on perushinta (baseprice), josta on vähennetty alennus (discount). Auton myyjä määrittelee alennuksen. Ostaja voi ostaa myös erikoismallin ja erikseen lisävarusteita. Lisävarusteiden alennusprosentti (addon_discount) on 10%, jos lisävarusteita (extras) on enemmän kuin 3 ja 15%, jos lisävarusteita on enemmän kuin 5. Auton hinta muodostuu siten perushinnasta, mahdollisesta erikoismallin hinnasta (specialprice) ja mahdollisten lisävarusteiden hinnasta (extraprice). Jos myyjän antama alennusprosentti on suurempi kuin lisävarusteiden, käytetään myyjän antamaa alennusprosenttia.

VSR järjestelmä: calculate_price funktion testaus double calculate_price (double baseprice, double specialprice, double extraprice, int extras, double discount) { double addon_discount; double result; if (extras >= 3) addon_discount = 10; else if (extras >= 5) addon_discount = 15; else addon_discount = 0; } if (discount > addon_discount) addon_discount = discount; result = baseprice/100.0*(100-discount) + specialprice + extraprice/100.0*(100-addon_discount); return result;

Parametri Ekvivalenssiluokka Testiaineisto baseprice vec 11 : [0,..., MAX_DOUBLE] 20000.00 iec 11 : [MIN_DOUBLE,..., 0 [ iec 12 : ei numero -1.00 abc specialprice vec 21 : [0,..., MAX_DOUBLE] 3450.00 iec 21 : [MIN_DOUBLE,..., 0 [ iec 22 : ei numero -1.00 abc extraprice vec 31 : [0,..., MAX_DOUBLE] 6000.00 iec 31 : [MIN_DOUBLE,..., 0 [ iec 32 : ei numero extras vec 41 : [0,...,2] vec 41 : [3, 4] vec 41 : [5,...,MAX_INT] iec 41 : [MIN_INT,..., 0 [ iec 42 : ei numero -1.00 abc 1 3 20-1.00 abc discount vec 51 : [0,..., 100] 10.00 iec 51 : [MIN_DOUBLE,..., 0 [ iec 52 : iec 53 : ei numero -1.00 101.00 abc

testitapaus baseprice specialprice extraprice extras discount result 1 20000.00 3450.00 6000.00 1 10.00 26850.00 2 20000.00 3450.00 6000.00 3 10.00 26850.00 3 20000.00 3450.00 6000.00 20 10.00 26550.00 4-1.00 3450.00 6000.00 1 10.00 NOT_VALID 5 abc 3450.00 6000.00 1 10.00 NOT_VALID 6 20000.00-1.00 6000.00 1 10.00 NOT_VALID 7 20000.00 abc 6000.00 1 10.00 NOT_VALID 8 20000.00 3450.00-1.00 1 10.00 NOT_VALID 9 20000.00 3450.00 abc 1 10.00 NOT_VALID 10 20000.00 3450.00 6000.00-1.00 10.00 NOT_VALID 11 20000.00 3450.00 6000.00 abc 10.00 NOT_VALID 12 20000.00 3450.00 6000.00 1-1.00 NOT_VALID 13 20000.00 3450.00 6000.00 1 101.00 NOT_VALID 14 20000.00 3450.00 6000.00 1 abc NOT_VALID Testitapauksia tarvitaan 3 käypää (1*1*1*3*1) ja 11 ei-käypää (2+2+2+2+3)

VSR järjestelmä: calculate_price funktion testaus testiajuri bool test_calculate_price() { double price; bool test_ok = TRUE; //testitapaus 1 price = calculate_price (20000.00,3450.00, 6000.00,1,10); test_ok = test_ok && (abs (price-26850.00) < 0.01); //testitapaus 2 price = calculate_price (20000.00,3450.00, 6000.00,3,10); test_ok = test_ok && (abs (price-26850.00) < 0.01); return test_ok; }

Testivetoisen ohjelmistokehityksen ominaisuudet testit kirjoitetaan ennen ohjelmakoodia sama henkilö kirjoittaa testitapauksen ja koodin koodi ei mene tuotantoon ilman testitapausta testi ohjaa koodin toimintaa testi määrittelee koodin toiminnan testit ovat eristettyjä ja automatisoituja testit voidaan toistaa joka kerta samalla tavalla» Astels 2003

Testivetoisen ohjelmistokehityksen vaiheet Lisää testi Onnistui Testien mennessä onnistuneesti läpi voidaan ohjelmakoodi refaktoroida Kirjoita koodi Aja testit Tee korjaus koodiin Epäonnistui Epäonnistui Aja testit Kehitys jatkuu Kehitys loppui Ambler 2003

Soveltuvat lait ja pohdiskelun aiheita 1. Testauksella voidaan esittää virheiden olemassaolo, mutta ei todistaa virheettömyyttä / no 22, Dijkstra 1970 perusteellinen testaus ei ole mahdollista 2. Noin 80 % virheistä tulee 20 % moduuleista / no 24, Pareto 1897, Fenton 2000 myös muita 20 % virheitä aiheuttaa 80 % korjaustyöstä 20 % moduuleista sisälsi 60 % virheistä 10 % virheistä aiheutti 90 % järjestelmän katkoista

Soveltuvat lait ja pohdiskelun aiheita Mitkä ominaisuudet tekevät ohjelmistosta helpommin testattavan? Mitä etuja mustalaatikkotestauksella on valkealaatikkotestaukseen nähden? Mitkä seikat rajoittavat valkealaatikkotestauksen käyttöä? Mitä ohjelmistorajapintoja testaajan täytyy tunnistaa ja simuloida (Whittakerin mukaan)? Mitkä ominaisuudet tekevät (Martinin mukaan) TDD menetelmästä ammattilaisen työkalun? Mieti miten testivetoinen ohjelmistokehitys (TDD) soveltuu V- mallin mukaiseen kehitysprosessiin.

Whittaker J.A., What Is Software Testing? And Why It Is So Hard?, IEEE Software, vol 17, no 1, 2000, pp. 70-79 Jeffries R., Melnik G., TDD: The Art of Fearless Programming, IEEE Software, vol 24, no 3, 2007, pp. 24-30 Martin R., Professionalism and Test-Driven Development, IEEE Software, vol 24, no 3, 2007, pp. 32-36 57