TIE Ohjelmistojen testaus Harjoitustyön esittely osa 1: Yleisinfo ja vaiheet 1 & 2. Antti Jääskeläinen Matti Vuori

Samankaltaiset tiedostot
TIE Ohjelmistojen testaus Harjoitustyön esittely osa 1: Yleisinfo ja vaiheet 1 & 2. Antti Jääskeläinen Matti Vuori

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 2: Vaiheet 3 & 4. Antti Jääskeläinen Matti Vuori

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 2: Vaiheet 3 & 4. Antti Jääskeläinen Matti Vuori

TIE Ohjelmistojen testaus 2016 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori

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

9. Periytyminen Javassa 9.1

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaihe 3. Antti Jääskeläinen Matti Vuori

7/20: Paketti kasassa ensimmäistä kertaa

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

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

Ohjelmistojen mallintaminen. Luento 11, 7.12.

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Taulukot. Jukka Harju, Jukka Juslin

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

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

20. Javan omat luokat 20.1

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

15. Ohjelmoinnin tekniikkaa 15.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

7. Oliot ja viitteet 7.1

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

14. Poikkeukset 14.1

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

17. Javan omat luokat 17.1

5. HelloWorld-ohjelma 5.1

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Harjoitustyön testaus. Juha Taina

Sisältö. 22. Taulukot. Yleistä. Yleistä

17. Javan omat luokat 17.1

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

11/20: Konepelti auki

Metodien tekeminen Javalla

Java-kielen perusteet

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Testivetoinen ohjelmistokehitys

Java-kielen perusteet

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

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

14. Poikkeukset 14.1

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Harjoitus 5 (viikko 48)

ITKP102 Ohjelmointi 1 (6 op)

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

1. Omat operaatiot 1.1

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

TIE Ohjelmistojen testaus 2016 Harjoitustyö Vaihe 3. Antti Jääskeläinen Matti Vuori

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

9. Periytyminen Javassa 9.1

16. Javan omat luokat 16.1

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

Eclipse ja JUnit-ohjelmoijatestit

Java-kielen perusteet

Javan perusteita. Janne Käki

Pakkauksen kokoaminen

Olio-ohjelmointi Javalla

5. HelloWorld-ohjelma 5.1

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

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

15. Ohjelmoinnin tekniikkaa 15.1

2. Olio-ohjelmoinista lyhyesti 2.1

Pakkauksen kokoaminen

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

Mikä yhteyssuhde on?

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Test-Driven Development

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Harjoitus 4 (viikko 47)

Ohjelmointi 2 / 2010 Välikoe / 26.3

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

1 Tehtävän kuvaus ja analysointi

Java-API, rajapinnat, poikkeukset, UML,...

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Ohjelmointi 2, välikoe

19. Olio-ohjelmointia Javalla 19.1

Poikkeustenkäsittely

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

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

Test-Driven Development

4. Olio-ohjelmoinista lyhyesti 4.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

8. Näppäimistöltä lukeminen 8.1

Groovy. Niko Jäntti Jesper Haapalinna Group 31

ITKP102 Ohjelmointi 1 (6 op)

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

T Testiraportti - integraatiotestaus

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

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

8. Näppäimistöltä lukeminen 8.1

JUnit ja EasyMock (TilaustenKäsittely)

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

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

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Transkriptio:

TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: Yleisinfo ja vaiheet 1 & 2 Antti Jääskeläinen Matti Vuori

Yleinen byrokratia 1.9.2014 2

Kurssihenkilökunta Antti Jääskeläinen vastuu harjoitustyön rakenteesta ja yleisistä järjestelyistä ohjaa osaa ryhmistä vastaanotto: tiistaisin 11:30-12:30, huone TE204 antti.m.jaaskelainen@tut.fi Matti Vuori ohjaa osaa ryhmistä huone TE204, http://www.cs.tut.fi/~vuori5 matti.p.vuori@tut.fi Ryhmien oma assistentti vastaa työn yksittäisiin vaiheisiin liittyviin kysymyksiin, kyselyt koko harjoitustyön järjestelyistä Antille 1.9.2014 3

Harjoitustyöhön valmistautuminen Rekisteröidy IDLEen kurssille Muodosta ryhmä etsi pari luokaa ryhmä IDLEen ryhmät jaetaan ohjaajille (lähes) automaattisesti Lue harjoitustyön nettisivu yleinen ohjeistus, aikataulu http://www.cs.tut.fi/~testaus/s2013/project/ Lue päätestaussuunnitelma (Master Test Plan, MTP) eri vaiheiden tehtävät, työkalut http://www.cs.tut.fi/~testaus/s2013/project/master_test_plan.pdf 1.9.2014 4

Kurssin läpäisy Harjoitustyössä on neljä vaihetta kustakin tarjolla 0-4 pistettä nollan pisteen palautus ei ole hylätty, vaan kurssilla voi edelleen jatkaa Maksimipisteet harjoitustyöstä 16 puolet koko kurssin pisteistä Voidaksesi osallistua tenttiin sinun on saatava harjoitustyöstä vähintään 5 pistettä tehtävä hyväksytty palautus kaikissa työn vaiheissa Läpäistäksesi kurssin sinun on saatava vähintään 5 pistettä tentistä noin puolet kaikista saatavilla olevista pisteistä (~16/32) 1.9.2014 5

Harjoitustyö 1.9.2014 6

Työn vaiheet Työssä on neljä vaihetta 1. yksikkötestauksen suunnittelu 2. yksikkötestauksen suoritus ja raportointi 3. järjestelmätestauksen suunnittelu 4. järjestelmätestauksen suoritus ja raportointi Testikohde yksikkötestauksessa on URI Resolver URI-merkkijonojen jäsenninmoduuli Testikohde järjestelmätestauksessa on jedit ohjelmoijan tekstieditori http://www.jedit.org/ 1.9.2014 7

Palautukset 1/2 Vaihe 1: yksikkötestaussuunnitelma Vaihe 2: yksikkötestausraportti korjattu suunnitelma yksikkötestit Vaihe 3: järjestelmätestaussuunnitelma Vaihe 4: järjestelmätestausraportti korjattu suunnitelma muut tiedostot lähestymistavan mukaan 1.9.2014 8

Palautukset 2/2 Palautukset tehdään IDLEssä Kaikki suunnitelmat ja raportit palautetaan PDF-muodossa Vaiheessa 2 palautetaan yksikkötestit testit suoritetaan automaattisesti palautuspaketin on oltava oikean muotoinen! 1.9.2014 9

Välinäytöt ja palautetilaisuudet Välinäytöt viikko ennen vaiheiden 1 ja 3 palautuksia tilaisuus esittää kysymyksiä ja esitellä siihenastisia tuotoksia vapaaehtoisia 20 minuuttia per ryhmä Palautetilaisuudet viikko vaiheiden 1 ja 3 palautusten jälkeen palaute suunnitelmasta ja tilaisuus saada ohjausta seuraavaan vaiheeseen pakollisia: kummassakin tilaisuudessa ainakin toisen ryhmän jäsenen oltava paikalla, kummankin ryhmän jäsenen käytävä ainakin toisessa tilaisuudessa 15 minuuttia per ryhmä 1.9.2014 10

Aikataulu Yksikkötestaussuunnitelma viikko 38: välinäytöt viikko 39: palautus viikot 40-41: palautetilaisuudet Yksikkötestausraportti viikko 43: palautus Järjestelmätestaussuunnitelma viikko 45: välinäytöt viikko 46: palautus viikko 47: palautetilaisuudet Järjestelmätestausraportti viikko 49: palautus 1.9.2014 11

Vaiheet 1 & 2: Yksikkötestaus 1.9.2014 12

Päämäärä URI Resolver -moduulin yksikkötestaus Tarkoitus on kehittää testijoukko, joka testaa, toimiiko luokka riittävän hyvin käyttöönottoa varten toimii regressiotestijoukkona luokan myöhemmille versioille Testaus suoritetaan käyttäen JUnit-yksikkötestauskehystä Vaihe 1: suunnittele testijoukon rakenne aloita testijoukon toteutus Vaihe 2: viimeistele testijoukon toteutus suorita testit raportoi tulokset 1.9.2014 13

Testikohde URI Resolver Java-moduuli URIen (Uniform Resource Identifier) jäsentämiseen Löytyy Lintulasta /share/ohjcourses/testaus/packages/uriresolver.tar.gz Pakkaus uriresolver sisältää 6 luokkaa, joista varsinaisesti testattavana ovat Parser ja Resolver Dokumentaatio URIn rakenteen määrittelee RFC 3986 (http://tools.ietf.org/html/rfc3986) Koodissa joitakin kommentteja Muilta osin oikea toiminnallisuus on pääteltävä itse 1.9.2014 14

Suunnitelman teko Mitä testataan? Testitapausten kehittäminen mihin ominaisuuksiin pitäisi keskittyä? millaisilla syötteillä niitä pitäisi testata? Testauksen logistiikka: miten testitapaukset on paras jakaa luokkiin ja testijoukkoihin? Milloin on testattu tarpeeksi? koodikattavuutta voi käyttää apuvälineenä, mutta siihen ei parane luottaa liikaa Milloin testikohde läpäisee testauksen? 1.9.2014 15

Testitapauksen rakenne Alustus luo tarvittavat oliot ja saata ne sopivaan tilaan Suoritus suorita testiaskeleet Tarkastus varmista, että paluuarvot ja olioiden tilat ovat oikein tärkein askel! Siivous vapauta varatut resurssit (oliot, tiedostokahvat yms.) 1.9.2014 16

Raportin teko Mitä on testattu? Poikettiinko suunnitelmista? Jos, niin miten? kaikki sujuu harvoin täsmälleen suunnitelman mukaan, poikkeamia voi tehdä tarpeen vaatiessa Kuinka kattava testaus oli? Millaisessa kunnossa testikohde testauksen perusteella on? Läpäiseekö testikohde testauksen? Mitä virheitä on löydetty? virheraportit kirjoitetaan löydetyistä virheistä, ei epäonnistuneista testeistä: usealle samaan ongelmaan törmänneelle testille yhteinen raportti 1.9.2014 17

Virheraportin rakenne Kerro, mikä testikohteessa on vialla pitäisi näkyä jo otsikossa, jotta vikaluettelosta saisi yleiskuvan testikohteen kunnosta Missä ja miten vika ilmenee testiympäristö syötteet odotetut ja saadut tulokset jne. Motivoi ihmisiä korjaamaan vika vaikutukset käyttäjään vaikutukset kehitykseen ja testaukseen 1.9.2014 18

Työkalut: Java, JUnit ja Eclipse 1.9.2014 19

Java: Tyypit Primitiivityypit toimivat C++:n tapaan byte, short, int, long, float, double, boolean, char Kaikille on vastaava luokka, jota on käytettävä esim. säiliöiden kanssa; nimi sama mutta isolla alkukirjaimella, paitsi Integer ja Character Konversiot primitiiveistä olioiksi ja takaisin tapahtuvat implisiittisesti Merkkijonot ovat olioita mutta niille on erityistukea syntaksissa String str = abc + toinenstr; Sama pätee taulukoihin int[] taulukko1 = new int[] {2, 3, 5}; int[] taulukko2 = new int[koko]; 1.9.2014 20

Java: Oliot ja viitteet Tila olioille varataan aina keosta StringBuilder s = new StringBuilder( abc ); Olioita käsitellään aina viitteinä StringBuilder t = s; s.append( def ); t.tostring(); // palauttaa abcdef Olioiden yhtäsuuruus s == t // ovatko s ja t sama olio? s.equals(t) // ovatko s ja t ekvivalentit? null on viite ei mihinkään (tai oikeasti ei, mutta sinne päin) Ei eksplisiittistä olioiden tuhoamista tai purkajia, roskienkeruu siivoaa oliot kun niihin ei enää viitata s = null; t = null; 1.9.2014 21

Java: Rakenteet Tiedostot ryhmitellään pakkauksiin pakkaus.alipakkaus.luokka Muiden pakkausten (julkinen) sisältö liitettävä mukaan import-lauseella protected-kenttiin pääsee käsiksi saman pakkauksen sisältä Määre final muuttujan määrittelyssä estää primitiivimuuttujan arvon muuttamisen estää olioviitteen kääntämisen viittaamaan toiseen olioon (muttei viitatun olion tilan muuttamista) Useimmat metodin heittämät poikkeukset on kirjattava sen otsikkoon public void avaatiedosto(string nimi) throws IOException { } @-merkillä alkavilla annotaatioilla voidaan lisätä koodiin metadataa @Override public void perittymetodi() { } JUnit käyttää näitä mm. tunnistamaan testimetodit 1.9.2014 22

Java: Materiaalia Javan APIn kuvaus http://docs.oracle.com/javase/7/docs/api/ Kannattaa katsastaa erityisesti säännöllisiä lausekkeita käsittelevät APIn luokat Pattern ja Matcher pakkauksesta java.util.regex Lisätietoja saatavilla osoitteista http://www.cprogramming.com/tutorial/java/syntax-differences-javac++.html http://www.programmersheaven.com/2/faq-java-differences- Between-JAVA-And-C-CPP http://en.wikipedia.org/wiki/comparison_of_java_and_c%2b%2b 1.9.2014 23

JUnit Yksikkötestikehys Java-ohjelmille Huolehtii testien alustamisesta, suorituksesta ja raportoinnista Testitapaukset esitetään rakenteisessa ja ylläpidettävässä muodossa Testitapaukset ovat JUnitin metodeita Useita testitapauksia voidaan koota samaan testiluokkaan kannattaa tehdä testitapauksille, jotka vaativat samanlaisen alustuksen Lisätietoja saatavilla sivulta http://www.junit.org Vastaavia xunit-kehyksiä on tarjolla myös muille ohjelmointikielille 1.9.2014 24

JUnit: Testiluokka public class TestiLuokka { // yhteinen alustus @Before public void alusta() { } // yhteinen siivous @After public void siivoa() { } } // testitapaukset @Test public void testi1() { } @Test public void testi2() { } 1.9.2014 25

JUnit: Testitapaukset 1/2 @Test public void helppouri() throws Exception { String uri = "http://www.tut.fi"; Components result = resolver_.resolveuriref(uri); } assertequals("scheme", "http", result.scheme_); assertequals("host", "www.tut.fi", result.host_); assertequals("host type", HostType.REG_NAME, result.hosttype_); assertarrayequals("path", new String[0], result.path_); 1.9.2014 26

JUnit: Testitapaukset 2/2 // laittoman merkin pitäisi aiheuttaa poikkeus @Test(expected=MalformedUriException.class) public void testhostillegalchar() throws Exception { String uri = "http://no{allowed"; resolver_.resolveuriref(uri); } 1.9.2014 27

Eclipse Ohjelmistokehitysympäristö ennen kaikkea Javalle tuki monille muille kielille tarjolla pluginien avulla Käytössä tällä kurssilla testien kirjoittamiseen ja ajamiseen käyttö vapaaehtoista Käytettävissä Lintulassa tai asennettavissa omalle tietokoneelle Lintulassa kurssin käyttöön oma versio johon on asennettu valmiiksi EclEmma-kattavuusmittausplugin, löytyy polusta /share/ohjcourses/testaus/eclipse/eclipse Ohjeet käyttöön päätestaussuunnitelmasta Lisätietoja sivulta http://www.eclipse.org 1.9.2014 28

Vinkkejä Eclipsen käyttöön Osittain kirjoitetun nimen voi täydentää painamalla Ctrl-Space Metodin kuvauksen saa esiin painamalla sen kohdalla F2 Nimen määrittelyyn voi hypätä sen kohdalta painamalla F3 Koodiin voi lisätä breakpointteja editorin vasemman reunan popup-menusta Breakpointteihin pysähdytään ainoastaan suoritettaessa ohjelmaa debug-moodissa Editorin vasemman reunan virhe- tai varoitusikonia klikkaamalla saa esiin ehdotuksia korjaukseksi 1.9.2014 29