Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
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
• Matti Vuori
– ohjaa osaa ryhmistä
– huone TE204, http://www.cs.tut.fi/~vuori5
• 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-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
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