tie-21200 ohjelmistojen testaus harjoitustyön esittely osa...
TRANSCRIPT
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
• 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
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-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
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