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

TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

TIE-21200 Ohjelmistojen testaus

Harjoitustyön esittely osa 1:

Yleisinfo ja vaiheet 1 & 2

Antti Jääskeläinen

Matti Vuori

Page 2: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

Yleinen byrokratia

1.9.2014 2

Page 3: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

[email protected]

• Matti Vuori

– ohjaa osaa ryhmistä

– huone TE204, http://www.cs.tut.fi/~vuori5

[email protected]

• Ryhmien oma assistentti vastaa työn yksittäisiin vaiheisiin liittyviin

kysymyksiin, kyselyt koko harjoitustyön järjestelyistä Antille

1.9.2014 3

Page 4: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 5: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 6: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

Harjoitustyö

1.9.2014 6

Page 7: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 8: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 9: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 10: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 11: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 12: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

Vaiheet 1 & 2:

Yksikkötestaus

1.9.2014 12

Page 13: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 14: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 15: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 16: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 17: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 18: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 19: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

Työkalut:

Java, JUnit ja Eclipse

1.9.2014 19

Page 20: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 21: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 22: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 23: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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-java-

c++.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

Page 24: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 25: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 26: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 27: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 28: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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

Page 29: TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: …tie21201/s2014/project/testaus... · 2014-09-01 · Java: Tyypit • Primitiivityypit toimivat C++:n tapaan – byte,

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