Harjoitustyön Testaaminen
(Jos teet jo harjoitustyötä) Lue ensin moodle
Kurssin Moodle sivujen sisältämä tieto kannattaa lukea aina kurssin aluksi! Siellä selitetään kurssin tavoitteista, arvostelusta ja rakenteesta tarkemmin. Moodlesta löytyy myös suorat linkit näiden sivujen olennaisimpiin osiin. Nämä sivut olettavat, että tunnet moodlessa olevan materiaalin ja voivat tuntua sekavilta jos et.
Täältä löydät harjoitustyön testaamiseen liittyvää materiaalia.
Testauksen vaatimuksista
Lue harjoitustyön testauksen vaatimuksista kurssin arvostelussa.
Yksikkötestaus ja riippuvuuksien injektointi
Mikäli yksikkötestaus ei ole entuudestaan tuttua kannattaa ensin lukea Ohjelmistotuotanto kurssin yksikkötestaus ohjeet. Myös materiaalista riippuvuuden injektoinnista Pythonille tai Javalle voi olla hyötyä. Riippuvuuksien injektointi on ohjelmointitekniikka joka tekee testaamisesta helpompaa.
Monimutkaisten algoritmien testauksesta.
Harjoitustyössä toteutetaan monimutkaisia algoritmeja. Näiden testaaminen voi olla haasteellista, usein yksikkötestit eivät riitä. Monimutkaisten algoritmien testaaminen vaatii hyvää ymmärrystä algoritmin toiminnasta. Mitä tarkoittaa että algoritmisi toimii oikein?
- Pelejä pelaavan botin oikeellisuus ei ole että se “pelaa hyvin”. Miinaharavabotti ei saa koskaan osua miinaan silloin, kun ruutua pidetään turvallisena. Shakkibotti ei saa tehdä laittomia siirtoja, ja sen on osattava tehdä matti, mikäli se on mahdollista sillä laskentasyvyydellä, jota käytetään.
- Reitinhaku algoritmin oikeellisuus ei ole vain että se löytää lyhyimmän reitin. Esimerkiksi A* haku, jonka heuristiikka on käänteellinen, löytää lyhyimmän reitin mutta siihen menee vaan paljon kauemmin aikaa kuin pitäisi.
- Pakkausalgoritmin oikeellisuuteen ei riitä, että purettu tiedosto on sama kuin pakattu. Tämän lisäksi esim pakatun tiedoston koon täytyy olla odotuksien mukainen.
- Neuroverkkojen oikeellisuuden testaamiseen ei riitä, että verkko klassifioi ison osan testisetistä oikein. Tämän lisäksi pitäisi testata, onko sen rakenne oikein? Toimiiko backpropagation oikein?
Testisyötteiden edustavuus
Monimutkaisille algoritmeille voi olla vaikea keksiä kuvaavia esimerkkisyötteitä joita testata. Voimmeko olla varmoja, että esimerkkisyötteemme testaavat kaikki haarat? Entä jos koodimme bugaa vain yli tuhannen kokoisilla syötteillä? Varsinkin monimutkaisten algoritmien testaamisessa on oleellista, että käytetyt syötteet ovat edustavia.
Testisyötteiden edustavuudesta lisää täällä.
Yksikkötestien lisäksi
Vaikka yksikkötesteillä ja edustavilla syötteillä päästään jo pitkälle, harjoitustyön vakuuttavaan testaukseen vaaditaan usein muitakin testaustekniikkoja. Esimerkkejä tälläisistä tekniikoista ovat:
Huomaa kuitenkin, että näitä kaikkia ei tarvitse käyttää. Tärkeintä on miettiä omaan harjoitustyöhön sopivat testit. Kurssin henkilökunta auttaa tarvittaessa. Verrattuna yksikkötesteihin, monimutkaisempien ominaisuuksien oikeellisuus- ja suorituskyvyn testit voivat kestää melko kauan. Niinpä niitä ei välttämättä kannata ajaa yksikkötestien kanssa joka kerralla. Sen sijaan testeistä kannattaa laittaa muutama edustava (esim automaattisesti löydetty) tapaus yksikkötesteihin ja ajaa loput erillisenä testiohjelmalla. Toisin sanoen, harjoitustyössä tarvitaan sekä yksikkötestejä, että monimutkaisempia testejä.
Lisää materiaalia
- Pylint on Python koodin stattiseen analysiin tarkoitettu työkalu joka helpottaa koodin laadun ylläpitoa.
- Neuroverkkojen testauksesta Sebastian Björkqvistin blogikirjoitus.
- Range Minimum Querie esimerkki repositorio jossa esimerkkejä hieman monimutkaisempien algoritmien testaamisesta.
Korjauksia tälle sivulle
Tee korjausehdotus editoimalla tätä tiedostoa GitHubissa.