TIE-21200 Ohjelmistojen testaus Harjoitustyön esittely osa 1: Yleisinfo ja vaiheet 1 & 2 Antti Jääskeläinen Matti Vuori
Yleinen byrokratia 2.9.2013 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 2.9.2013 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 2.9.2013 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) 2.9.2013 5
Harjoitustyö 2.9.2013 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 RegexSearcher Java-luokka säännöllisten lausekkeiden etsintään merkkijonosta /share/ohjcourses/testaus/packages/regexsearcher.tar.gz Lintulassa Testikohde järjestelmätestauksessa on jedit ohjelmoijan tekstieditori http://www.jedit.org/ 2.9.2013 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 2.9.2013 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! 2.9.2013 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ä 2.9.2013 10
Aikataulu Yksikkötestaussuunnitelma viikko 38: välinäytöt viikko 39: palautus viikko 40: 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 2.9.2013 11
Vaiheet 1 & 2: Yksikkötestaus 2.9.2013 12
Päämäärä RegexSearcher-luokan 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 2.9.2013 13
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? 2.9.2013 14
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.) 2.9.2013 15
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 2.9.2013 16
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 2.9.2013 17
Työkalut 2.9.2013 18
Java 1/3 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; 2.9.2013 19
Java 2/3 Primitiivityypit toimivat C++:n tapaan byte, short, int, long, float, double, boolean, char Merkkijonot ovat olioita mutta niille on erityistukea syntaksissa String str = abc + toinenstr; Määre final muuttujan määrittelyssä estää primitiivimuuttujan arvon muuttamisen estää olioviitteen kääntämisen viittaamaan toiseen olioon (muttei viitatun olion tilan muuttamista) @-merkillä alkavat annotaatiot ovat määreitä, joilla voidaan lisätä koodiin metadataa @Override public void perittymetodi() { } JUnit käyttää näitä mm. tunnistamaan testimetodit 2.9.2013 20
Java 3/3 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 2.9.2013 21
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 2.9.2013 22
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() { } 2.9.2013 23
JUnit: Testitapaukset 1/2 @Test public void tekstihaku() { RegexSearcher searcher = new RegexSearcher("ijk", false, false); searcher.settext("abcdefghijklmnopqrstuvwxyz"); Match match = searcher.findnext(); } assertequals("begin", 8, match.begin); assertequals("end", 11, match.end); 2.9.2013 24
JUnit: Testitapaukset 2/2 // null-parametrin pitäisi aiheuttaa poikkeus @Test(expected=RuntimeException.class) public void nullteksti() { RegexSearcher searcher = new RegexSearcher("ijk", false, false); searcher.settext(null); searcher.findnext(); } 2.9.2013 25
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 CodeCover-kattavuusmittausplugin, löytyy polusta /share/ohjcourses/testaus/eclipse/eclipse Ohjeet käyttöön päätestaussuunnitelmasta Lisätietoja sivulta http://www.eclipse.org 2.9.2013 26
Vinkkejä Eclipsen käyttöön Osittain kirjoitetun nimen voi täydentää painamalla Ctrl-Space Nimen ollessa valittuna sen määrittelyyn voi hypätä 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 2.9.2013 27