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

Samankaltaiset tiedostot
YHTEYSSUHDE (assosiation)

Mikä yhteyssuhde on?

Metodien tekeminen Javalla

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmistotekniikan menetelmät, koe

Lista luokan sisällä

Listarakenne (ArrayList-luokka)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Olio-ohjelmointi Javalla

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

1 Tehtävän kuvaus ja analysointi

Java-kielen perusteita

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Java-kielen perusteet

Taulukoiden käsittely Javalla

Ohjelmoinnin jatkokurssi, kurssikoe

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

UML ja luokkien väliset suhteet

KOHDELUOKAN MÄÄRITTELY

public static void main (String [] args)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Java-kielen perusteita

TyontekijaOhjelma. +main() (käyttää) + = public - = private

Harjoitustyön testaus. Juha Taina

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Rajapinta (interface)

Ohjelmoinnin perusteet, syksy 2006

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

1. Omat operaatiot 1.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Java-kielen perusteet

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

1. Mitä tehdään ensiksi?

Luokat ja oliot. Ville Sundberg

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

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Poikkeustenkäsittely

9. Periytyminen Javassa 9.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Tietokannat II -kurssin harjoitustyö

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Ohjelmointi 2, välikoe

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Interaktiivinen tarinankerronta

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Javan perusteita. Janne Käki

Oliot viestivät metodeja kutsuen

Ohjelmoinnin perusteet, kurssikoe

7. Oliot ja viitteet 7.1

Metodien tekeminen Javalla

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

Tietorakenteet, laskuharjoitus 7,

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

5. HelloWorld-ohjelma 5.1

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

9. Periytyminen Javassa 9.1

Vahva koostumussuhde (Composition)

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Olio-ohjelmointi Virhetilanteiden käsittely

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Mitä poikkeuskäsittely tarkoittaa?

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Taulukot. Jukka Harju, Jukka Juslin

11. Javan valintarakenteet 11.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

1. Olio-ohjelmointi 1.1

Sovellus: Eläinten ylläpito Testaaja: Pvm:

JUnit ja EasyMock (TilaustenKäsittely)

14. Poikkeukset 14.1

Ohjelmointityö 3. Mikko Laamanen

Sisällys. 15. Lohkot. Lohkot. Lohkot

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Java-kielen perusteet

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Periytyminen (inheritance)

14. Poikkeukset 14.1

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Luokan sisällä on lista

Hirviö Järjestelmätestauksen testitapaukset ja suoritusloki I1

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

19. Olio-ohjelmointia Javalla 19.1

Ohjelmiston testaus ja laatu. Testausmenetelmiä

11. Javan toistorakenteet 11.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

11. Javan valintarakenteet 11.1

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Convergence of messaging

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

Java kahdessa tunnissa. Jyry Suvilehto

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Transkriptio:

Yksikkötestaus Kattava testaus Moduulitestaus Ohjelman testaus 1

Kattava testaus Testauksen perimmäinen tarkoitus on LÖYTÄÄ VIRHEITÄ Testaus pitäisi olla täydellinen: - Jokainen pyydetty arvo pitäisi testata täydellisesti eli olisi kokeiltava jokainen ko. tietotyypin arvo Mahdotonta täydellistä testaus ei ole - Mutta lähelle päästään, kun kokeillaan == rajarvot < raja-arvo > raja-arvo - esim. int arvo = input.nextint(); if (arvo >= 0 && arvo <=10) -- tämä lause pitäisi testata esim. arvoilla -1, 0, 1, 10, 11 2

Kattava testaus jatkuu Esim. String nimi = input.next(); // nimi, joka sisältää täsmälleen 5 merkkiä ja alkaa // R-kirjaimelle hyväksytään if ( nimi.length() == 5 && nimi.charat(0)== R ) testiaineisto: - nimen pituus < 5 tai > 5 - nimen pituus == 5, mutta nimen ensimmäinen merkki ei ole R - nimen pituus == 5 ja nimi alkaa R-kirjaimella 3

Kattava testaus jatkuu esim int vuosi = input.nextint(); // hyväksytään vain vuosi, joka on karkausvuosi, eli // vuosi on tasan jaollinen 400:lla tai vuosi on tasan jaollinen // 4:llä vaan ei 100:lla if (vuosi % 400 == 0 (vuosi % 4 == 0 && vuosi % 100!= 0) ) Testiaineisto: vuosi % 400 == 0 vuosi % 400!= 0, vuosi % 4!= 0, vuosi % 100 == 0 vuosi % 400!= 0, vuosi % 4 == 0, vuosi % 100 == 0 vuosi % 400!= 0, vuosi % 4!= 0, vuosi % 100!= 0 vuosi % 400!= 0, vuosi % 4 == 0, vuosi % 100!= 0 4

Kattava testaus jatkuu Miksi? Ennen kuin ohjelma viedään tuotantoon, pitää olla varma: Mahdolliset ohjelmointivirheet on löydetty testauksen kautta ja virheet korjattu Mahdolliset loogiset virheet on löydetty testauksen kautta ja virheet korjattu Onko ohjelmoitu sitä, mitä on tilattu? pitää testata ja korjata 5

Kattava testaus jatkuu.. Jotta testaus olisi kattava se jaetaan kahteen osaan Moduuli testaus Ohjelma testaus 6

Moduulitestaus Moduulitestaus Tarkoittaa, että jokaisen luokan jokainen metodi on testattava Tämä tehdään yleensä erillisillä ns. testipenkeillä Ohjelmoija, joka on koodannut luokan, vastaa sen toimivuudesta eli testaa sen jokaisen metodin, ennen kuin sitä voidaan käyttää ohjelmassa Testipenkki voi olla vaikkapa erillinen ohjelma tai main-metodi ko. luokassa Jos testipenkki on main-metodissa, se kannattaa testin jälkeen kommentoida, jotta se voidaan uuusia 7

Moduulitestaus jatkuu public class Tuote { private int numero; private String nimi; private double hinta; public Tuote() { this.numero =0; this.nimi = null; this.hinta = 0; public Tuote( int koodi, String tuotenimi, double hinta) { setnumero( koodi); setnimi ( tuotenimi); sethinta ( hinta); public int getnumero() { return numero; public void setnumero( int koodi) { this.numero =0; if (koodi > 0) this.numero = koodi; public String getnimi() { return nimi; 8

Moduulitestaus jatkuu //nimessä vähintään 3 kirjainta, muutetaan alkukirjain suureksi ja loput // pieniksi public void setnimi( String nimi) { this.nimi = null; if (nimi!= null && nimi.trim().length()>2){ nimi = nimi.trim(); this.nimi = nimi.substring(0,1).touppercase()+ public double gethinta() { return hinta; nimi.substring(1).tolowercase(); public void sethinta( double hinta) { this.hinta = 0; if (hinta > 0) this.hinta = hinta; // tostring -metodi public String tostring() { String paluu; paluu = numero + ", " + nimi + ", " + hinta + " eur"; return paluu; 9

Moduulitestaus jatkuu public static void main(string [] args) { Tuote tuote = new Tuote(); System.out.println(tuote.toString()); // odotusarvo: 0, null, 0.0 eur tuote.setnumero(-1); // odotusarvo: 0 System.out.println("tuote.setNumero(-1): " + tuote.getnumero()); tuote.setnumero(0); // odotusarvo: 0 System.out.println("tuote.setNumero(0): " + tuote.getnumero()); tuote.setnumero(1); // odotusarvo: 1 System.out.println("tuote.setNumero(1): " + tuote.getnumero()); tuote.setnimi(null); // odotusarvo: null System.out.println("tuote.setNimi(null);" + tuote.getnimi()); 10

Moduulitestaus jatkuu tuote.setnimi(" ka "); // odotusarvo: null System.out.println("tuote.setNimi(' ka ');" + tuote.getnimi()); tuote.setnimi(" sei "); // odotusarvo Sei System.out.println("tuote.setNimi(' sei ');" + tuote.getnimi()); tuote.sethinta(-0.5); // oodotusarvo 0.0 System.out.println("tuote.setHinta(-0.5); " + tuote.gethinta()); tuote.sethinta(0); // oodotusarvo 0.0 System.out.println("tuote.setHinta(0); " + tuote.gethinta()); tuote.sethinta(0.6); // oodotusarvo 0.6 System.out.println("tuote.setHinta(0.6); " + tuote.gethinta()); tuote = new Tuote (100, " kolme pientä porsasta ", 23.45); // odotusarvo: 100, Kolme pientä porsasta, 23.45 eur System.out.println(tuote); 11

Ohjelmatestaus Ohjelmatestaus on Laaja on usittava tarvittaessa testitietokanta, eli tietokannan sisältö on tietty Kannan sisältö pitää voida palauttaa testikannan sisällöksi Testikantaa perustuen tehdään testitapaukset: Joiden pitää sisältää kaikki ohjelman virheelliset ja virheettömät tilanteet eli jokaisen virheilmoituksen pitää näkyä jossain testitapauksessa Testitapaukset tehdään ilman ohjelmakoodia, käyttätään testitietokannan sisältöä ja ohjelman määrityksiä 12

Ohjelmatestaus jatkuu Testitapauslomakeen rakenne: Käyttötapaus: kerrotaan mitä testataan Testaaja: kerrotaan kuka testaa Pvm: milloin testi on suoritettu Jokasesta testitapauksesta kerrotaan: Testitapauksen kuvaus: Kuvataan tarkasti mitä käyttäjä tekee esim. kirjoittaa ohjelman kyselyyn tai ohjelman lomakkeeseen Odotettu tulos: kerrotaan tarkasti mitä ohjelma tekee seuraavaksi esim. tulostaa tietyn arvon tms. Poikkeamat: testaajaan havaitsema poikkeus odotetun tuloksen ja todellisen tuloksen välillä 13

Ohjelmatestaus jatkuu Esim. Tietyn opintojakson haku tietokannasta: Testitietokannan sisältö: tunnus nimi opintopisteet ICT1TN002 Työasemat ja tietoverkot 9 ICT1TN005 Tiedonhallinta ja tietokannat 6 ICT2TN007 Ohjelmistokehitys 12 ICT2TN009 Tietohallinto 3 ICT1TN006 Ohjelmointi 9 14

Ohjelmatestaus jatkuu Käyttötapaus: tietyn opintojakson haku tietokannasta Testaaja: Pvm: 1. Testitapaus: Käyttäjä käynnistää ohjelman Odotettu tulos: konsolliin tulee rivit: 1) hae kaikki opintojaksot 2) hae tietty opintojakso 0) lopeta valitse: 2. Testitapaus: Käyttäjä kirjoittaa numeron 2 ja painaa enter Odotettu tulos: konsoliin tulostuu:anna opintojakson tunnus: Käyttäjä kirjoittaa tunnuksen ICT1TN006 Odotettu tulos: ICT1TN006, Ohjelmointi, 9 op 1) hae kaikki opintojaksot 2) hae tietty opintojakso 0) lopeta Huom! Testitapauksen etenevät kronologisesti eli kun edellinen testitapaus jää tiettyyn tilaan, seuraava testitapaus jatkaa tästä tilasta jne valitse: 15

Ohjelmatestaus jatkuu 3. Testitapaus: Käyttäjä kirjoittaa luvun -1 Odotettu tulos: tulostuu ilmoitus: Anna luku väliltä 0-2 1) hae kaikki opintojaksot 2) hae tietty opintojakso 0) lopeta valitse: 4. Testitapaus: Käyttäjä kirjoittaa luvun 3 Odotettu tulos: tulostuu ilmoitus: Anna luku väliltä 0-2 1) hae kaikki opintojaksot 2) hae tietty opintojakso 0) lopeta valitse: 5. Testitapaus: Käyttäjä kirjoittaa teksin kolme Odotettu tulos: tulostuu ilmoitus: Anna luku väliltä 0-2 1) hae kaikki opintojaksot 2) hae tietty opintojakso 0) lopeta valitse: 16

Ohjelmatestaus jatkuu 6. Testitapaus: Käyttäjä kirjoittaa numeron 2 ja painaa enter Odotettu tulos: konsoliin tulostuu:anna opintojakson tunnus: Käyttäjä kirjoittaa tunnuksen ICT3TN006 Odotettu tulos: tulostuu ilmoitus: ICT3TN006 opintojakso ei löytynyt 1) hae kaikki opintojaksot 2) hae tietty opintojakso 0) lopeta valitse: 17

Ohjelmatestaus jatkuu 7. Testitapaus: Normaali Puttyn avulla tehty tunnelointi tietokantaan ei ole päällä Käyttäjä kirjoittaa numeron 2 ja painaa enter Odotettu tulos: konsoliin tulostuu:anna opintojakson tunnus: Käyttäjä kirjoittaa tunnuksen ICT1TN006 Odotettu tulos: Tietokantaan ei saada yhteyttä, korjaamme vian tuotapikaa 1) hae kaikki opintojaksot 2) hae tietty opintojakso 0) lopeta valitse: 18

Ohjelmatestaus jatkuu Kun testaaja testaa testitapaukset ja kirjaa onko todellinen tulos vastannut odotettua tulosta, testaaja kirjoittaa myös mitä ohjelma tekee poikkeustilanteessa Testaaja saattaa saada parannusideoita ohjelman käyttöliittymään tai ohjelman toimintaa. Nämä kannatta huomioida ja mahdollisesti muutta ohjelmaa Esim. edellinen ohjelma. 7.Testitapaus, kun tietokantaan ei saada yhteyttä. Herää kysymys: Kannattaako ohjelmaa pitää edelleen käynnissä vai kannttaisiko lopettaa ohjelman toiminta tähän? 19