Usein aliohjelman kutsun tulos ei riipu pelkästään eksplisiittisistä syötteistä vaan myös moduulin tai olion tilasta (state). ● Tila määräytyy yleensä.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
Testaus ja testausympäristöt
Osaamisen ja sivistyksen parhaaksi Tilatiedot ja niiden muutokset
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
@ Leena Lahtinen Helia TIETO JA TIETOKONEOHJELMA  TIETOKONEOHJELMA KÄSITTELEE TIETOJA  TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
Suunnitelma ohjelmiston testaukseen
Ohjelman perusrakenteet
Tietorakenteet ja algoritmit
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
Taulukoiden määrittely, käsittely ja kopiointi Vaihtoehdot taulukoille
Tilasiirtymäkaavio ja eri mallien yhteensovittaminen
13. Pakkaukset.
Perintä. Yleistä Olio-ohjelmoinnin menetelmä muodostaa uusia luokkia aiemmin määriteltyjen luokkien avulla Luokka saa automaattisesti käyttöönsä kaikki.
Sovellusohjelman suunnittelu & toteutus
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Testaus Tiptopissa draft Mats Lindstedt, Mika Rintala.
Poikkeuskäsittely- lohkot tMyn1 Poikkeuskäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw ja.
(Joskus puhutaan myös komponenttitestauksesta.) Pienin kokonaisuus, joka on järkevä testata erikseen. ● Perinteisesti yksittäinen aliohjelma. ● Olio-ohjelmien.
Funktionaalisen aliohjelman mustalaatikkotestaus (1/12)
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
SE-02 Olioperustainen ohjelmistokehitys Tampereen yliopisto, syksy 2000 Roope Raisamo perustuu Kai Koskimiehen Oliokirjaan ja kurssin aiempiin materiaaleihin.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Komponenttipohjainen ohjelmistotekniikka (TJTSS56) Osa 12 Kevätlukukausi 2010 Jyväskylän yliopisto Tietojenkäsittelytieteiden laitos Markku Sakkinen.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Osaamisen ja sivistyksen parhaaksi Oppijan verkkopalveluiden hyväksymistestitapausten kuvausohje.
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
Miksi tämä on vaikeaa? Ilman minkäänlaisia rajoitteita ongelmat ei ole vaikeita ratkaista. Siihen löytyy jopa valmis ”kaava”. Valitettavasti jokaisessa.
Systeemityö 2 Tilakaavio – State machine diagram
UMF I Luento 7. Viime kerralta Lue II.5 ja II.6. Lause II.5.1 tapauksessa f(x,y) = (x, sin(y)) ja g(x, y) = (cos(x), y). Voit lähettää epäselvistä kohdista.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
Systeemityö 2 Toimintokaavio – Activity diagram
22. Taulukot.
Poikkeukset Yleistä Virheeseen varautuminen tarkoittaa sitä, että ohjelmoija huomioi koodia kirjoittaessaan ajonaikaisen virheen mahdollisuuden.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Komponenttipohjainen ohjelmistotekniikka (TJTSS56) Osa 4 Kevätlukukausi 2010 Jyväskylän yliopisto Tietojenkäsittelytieteiden laitos Markku Sakkinen.
”Pieni haaste” (Myers 1979, mukailtu) Olkoon testattavana aliohjelma (tai metodi), joka on määritelty seuraavasti: ● Parametreinä annetaan kolme kokonaislukua,
RAKENNUSPALIKOITA SEINÄJOEN KANSALAISOPISTO Jussi Rasku Aki Sirviö.
Lasilaatikkotestauksen toinen lähestymistapa. ● Siinäkin käytetään vuoverkkoa. ● Tarkastelun kohteena ovat moduulin muuttujat (myös sen käyttämät globaalit.
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
Antti-Jussi Lakanen Nuorten peliohjelmointi 2009 / Jyväskylän yliopisto.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Funktio.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
8. Periytyminen Sisällys Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö.
15. Ohjelmoinnin tekniikkaa
Lajittelun sovelluksia Yksilöllisyyden testaaminen Kopioiden poistaminen Mediaani/n:ksi suurimman valinta frekvenssien laskenta/yleisin alkio, l.moodi.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
Yksikkötestaus ● Yksikkötestauksella tarkoitetaan lähdekoodiin kuuluvien yksittäisten osien testaamista. Termi yksikkö viittaa ohjelman pienimpiin mahdollisiin.
7. Hyvä ohjelmointitapa..
Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
9. Aritmeettiset operaatiot
13. Pakkaukset.
Ohjelman perusrakenteet
TIETO JA TIETOKONEOHJELMA
3. Attribuutit.
13. Pakkaukset.
4. Luokan testaus ja käyttö olion kautta
Esityksen transkriptio:

Usein aliohjelman kutsun tulos ei riipu pelkästään eksplisiittisistä syötteistä vaan myös moduulin tai olion tilasta (state). ● Tila määräytyy yleensä moduulin tms. aiemmasta historiasta. ● Testitapaukseksi tarvitaan peräkkäisten kutsujen sarja. Äärimmäisen yksinkertainen esimerkki: interface Simppeli { void aseta (int arvo); int lue (); } ● Metodin lue pitää palauttaa se luku, joka on ollut viimeksi metodin aseta kutsun parametrinä. ● Metodin lue pitää aiheuttaa poikkeus, jos metodia aseta ei ole vielä kutsuttu. ● Miten testataan luokkaa L, joka toteuttaa tämän liittymän? ● Voidaan olettaa, että käyttäytyminen on kaikille kokonaisluvuille samanlainen. Tilapohjainen mustalaatikkotestaus (1/8)

Ensimmäinen testitapaus: Simppeli olio = new L; int tulos = olio.lue (); Tämän pitää aiheuttaa poikkeus. Toinen testitapaus: final int nayte1 =...; Simppeli olio = new L; olio.aseta (nayte1); int tulos = olio.lue (); Tämän jälkeen pitää tietysti olla tulos == nayte1. Mahdollinen kolmas testitapaus toisen jatkona: tulos = olio.lue (); Pitää saada sama tulos. ● Metodi lue ei saa muuttaa olion tilaa. ● Esim. yhden elementin pino ei kelpaa. Tilapohjainen mustalaatikkotestaus (2/8)

Mahdollinen neljäs testitapaus, samoin toisen jatkona: final int nayte2 =...; olio.aseta (nayte2); tulos = olio.lue (); ● Tarkistetaan, että aseta vaikuttaa muulloinkin kuin ensimmäisellä kerralla. ● Viidentenä tapauksena voitaisiin testata tätä ilman ensimmäistä lue- metodin kutsua. ''Tilalla'' on erilaisia merkityksiä. ● Moduulin tms. kaikkien muuttujien arvojen yhdelmä. ● Jokin abstraktio tästä – ekvivalenssiluokka. ● Määritellään usein tilainvariantin avulla. ● Muuttujista muodostettu looginen lauseke (predikaatti). ● Kiinnostava on sellainen erottelu, että moduulin käyttäytyminen on eri tiloissa erilaista. ● Esim. kiinteänkokoisen pinon tilat: tyhjä (alkioita == 0), vajaa (alkioita > 0 && alkioita < max), täysi (alkioita == max). Tilapohjainen mustalaatikkotestaus (3/8)

Tilapohjaista käyttäytymistä kuvataan yleensä tilakaavioilla. ● Useita muunnelmia. ● Voidaan esittää myös taulukkomuodossa. Moduulin tai olion tilakaaviossa on ainakin neljänlaisia elementtejä: ● Tila ● Tapahtuma (event): ulkoinen syöte tai heräte, esim. metodin kutsu ● Siirtymä (transition): tapahtuman aiheuttama siirtyminen tilasta toiseen (tai samaan tilaan) ● Toiminto (action): siirtymään liittyvä muu toiminto (esim. toiselle oliolle lähetetty tapahtuma). Kaavio kertoo, mitkä tapahtumat ovat sallittuja missäkin tilassa sekä minkä siirtymän ja toiminnon kukin niistä aiheuttaa. ● Siirtymän täytyy määräytyä yksikäsitteisesti (deterministisesti). ● Esim. UML:n tilakaavioissa kuhunkin siirtymään voidaan lisäksi liittää ehto. ● Tällöin voi olla vaihtoehtoisia siirtymiä, jos ehdot ovat toisensa poissulkevia. Tilapohjainen mustalaatikkotestaus (4/8)

Tietyssä tilassa kelpaamattoman tapahtuman käsittelyn mahdollisuuksia: ● Jätetään kokonaan huomiotta. ● Aiheuttaa poikkeuksen tai muun erikoistoiminnon. ● Pannaan jonoon ja käsitellään myöhemmin, jos olio tulee sellaiseen tilaan, jossa tapahtuma on sallittu. ● UML jättää valinnan avoimeksi. Pinoesimerkki: Tilapohjainen mustalaatikkotestaus (5/8) Empty Full Loaded pop / EmptyStackException push(x) / FullStackException pop [n==1] / return top(x) push(x) pop [n>1] / return top(x) pop / return top(x) push(x) [n<max-1] push(x) [n==max-1]

● Kaavion ehdot perustuvat pelkästään pinon atribuutteihin. ● Käyttäytymiseen vaikuttava olion tila on siis esitetty osittain kaavion tiloina, osittain siirtymien ehtoina. ● Tiloja voisi olla max+1, jolloin ehtoja ei tarvittaisi. ● Toinen ääripää: vain yksi kaavion tila ja enemmän ehtoja. ● Ei kovin hyödyllinen. Testitapaukset? ● Toinen ääripää: yritetään ottaa alkio tyhjästä pinosta. ● Toinen ääripää: täytetään pino (max panoa) ja yritetään panna siihen vielä yksi alkio. ● Pano- ja ottosarjoja, joiden ei pitäisi aiheuttaa poikkeusta. ● Kaikissa tapauksissa ei ehkä tutkita, onko saatu alkio oikea. Tilapohjainen mustalaatikkotestaus (6/8) pop [n==0] / EmptyStackException FullStackException pop [n>0] / return top(x) push(x) [n<max] push(x) [n>=max] /

Tilakaavioihin liittyviä yksinkertaisia testauksen kattavuuskriteerejä: ● Paloittainen kattavuus: kaikki tilat, kaikki tapahtumat, kaikki toiminnot. ● Liian heikkoja (Binder). ● Kaikki eksplisiittiset siirtymät (ts. kussakin tilassa sallitut tapahtumat). ● Paloittainen kattavuus seuraa tästä automaattisesti. ● Kaikki siirtymät (ts. kaikki tapahtumat kaikissa tiloissa). ● Suositellaan vähimmäisvaatimukseksi (Binder). Polkukattavuuskriteerejä: ● Kaikki N-siirtymäiset: jokainen mahdollinen N siirtymän sekvenssi käydään läpi ainakin kerran. ● Kaikki silmukat: jokainen mahdollinen silmukka (jostakin tilasta takaisin samaan tilaan toistamatta mitään siirtymää) käydään läpi ainakin kerran. ● Nämä ovat vahvempia vaatimuksia kuin kaikki siirtymät, mikäli kaavio on vahvasti yhtenäinen (jokaisesta tilasta on polku jokaiseen). Tilapohjainen mustalaatikkotestaus (7/8)

Raja-arvotestaus ● Jos tilat on määritelty tilainvarianttien avulla, niihin voi soveltaa samoja periaatteita kuin syötteen ekvivalenssiluokkiin. ● Puhtaassa mustalaatikkotestauksessa voi olla vaikeaa tai mahdotonta saada aikaan tilainvarianttien raja-arvoja. Sellaisia luokkia, joiden käyttäytyminen riippuu tilasta (historiasta), sanotaan modaalisiksi, muita luokkia ei-modaalisiksi. ● Testattavuuden kannalta olisi hyvä, että ohjelmistossa olisi mahdollisimman vähän modaalisia luokkia. ● Varmuuden vuoksi ei-modaalistakin luokkaa voidaan testata myös samanlaisilla metodinkutsusarjoilla kuin modaalista. ● Voi olla perusteita epäillä tietynlaisia toimintoketjuja virhealttiiksi. Tilapohjainen mustalaatikkotestaus (8/8)