Automaattitestit

Kurssin viikkotehtävien testaamisessa käytetään automaattitestejä. Niillä on se hyvä puoli, että saat samantien tietää, läpäisikö ohjelmasi testit ja kuinka paljon pisteitä sait.

Automaattitestien haittapuolena on se, että tehtävänannossa näytetyt tulostukset pitää olla täsmälleen oikein. Lisäksi automaattitestien antamat virheilmoitukset saattavat joskus olla vaikeita tulkita. Tästä syystä tähän kohtaan on koottu tarkistuslista asioista, jotka on syytä käydä läpi, jos ihmettelet automaattitestien palautetta.

  • Vertaa huolellisesti testerin näyttämiä eroja oman tulostuksesi ja mallituloksen välillä. Pienikin ero (iso/pieni kirjain, ylimääräinen/puuttuva välilyönti) on testerille oleellinen.

  • Tarkista, ettei keskustietovarastossasi ole kääntäjän generoimia tiedostoja tai hakemistoja (build-alkuisia hakemistoja, .o-loppuisia tiedostoja ym.). Jos tällaisia tiedostoja/hakemistoja löytyy, poista ne, sillä niiden olemassaolo saattaa estää testerin kääntäjän toiminnan.

    • Älä missään tapauksessa poista tiedostoja web-käyttöliittymän kautta, vaan poista ne ensin paikallisesti omasta hakemistostasi ja puske sitten muutos keskustietovarastoosi.

    • Välttääkseni yllä mainitun ongelman jatkossa, kannattaa tehdä .gitignore-tiedosto (ks. teoria ja harjoitus).

  • Alustamattomat muuttujat aiheuttavat usein vaikeasti tulkittavia varoituksia tai virheitä ohjelman toiminnassa. Tarkista siis, että kaikki muuttujat alustetaan. Huomaa myös alustaa luokan jäsenmuuttujat eli attribuutit.

  • Jos testeri ilmoittaa “Palautus on vastaanotettu” ja tilana näkyy “Arvosteltavana”, niin kannattaa odottaa jonkin aikaa ja tarvittaessa ladata sivu uudelleen. Jos tämä tilanne kestää pitkään (yli tunnin), eikä uudelleenlataaminen auta, lähetä sähköpostia osoitteeseen prog2@tuni.fi.

  • Jos testeri ei anna mitään palautetta eli testi jää jumiin, kannattaa epäillä ohjelman jäämistä ikuiseen silmukkaan. (Jumitus voi joskus johtua myös palvelimen häiriöstä, mutta silloin yleensä auttaa tehtävän palauttaminen uudelleen jonkin ajan kuluttua.)

  • Jos testeri antaa seuraavanlaisen ilmoituksen:

    se voi olla merkki päättymättömästä silmukasta tai rekursiosta, mutta se voi myös tarkoittaa, että ohjelmasi kaatui. Hyvin tavallinen syy kaatumiselle on vektorin tai taulukon ohi-indeksointi. (Tämä taas paljastuu helpoimmin, kun käytät at-indeksointia hakasulkujen sijasta.)

    Huomaa myös, että esimerkiksi Windows-kone voi päästää edellä mainitut virhetilanteet (ja mahdollisesti muitakin) läpi, mutta automaattitestit eivät. Voit saada paremman käsityksen ohjelmasi toimivuudesta, jos kokeilet sen ajamista Linux-etätyöpöydällä.

  • Jos ohjelmassasi on virheitä, jotka estävät ohjelman ajamisen, ohjelma ei (tietenkään) läpäise myöskään automaattitestejä. Vaikka ohjelmassa ei olisi tällaisia virheitä, se voi silti tuottaa varoituksia. Varoitukset eivät estä ohjelman ajamista, joten se voi näyttää toimivan ihan oikein. Automaattitestit eivät kuitenkaan hyväksy ohjelmaa, joka tuottaa varoituksia. Tällaisessa tapauksessa testeri kertoo hylkäämisen syyn.

  • Jos automaattitesti antaa varoituksen:

    control reaches end of non-void function...
    

    se tarkoittaa, että jostakin arvon palauttavasta funktiosta puuttuu return-lause, tai return-lause sijaitsee if-rakenteen sisällä siten, että kääntäjä antaa varoituksen.

  • Joissakin (varsinkin isommissa) tehtävissä käytetään yksikkötestejä. Niillä tarkoitetaan testejä, jotka testaavat, toimiiko yksittäinen funktio oikein. Tällöin ei siis riitä, että ohjelma kokonaisuudessaan toimii oikein, vaan jokaisen funktion pitää toimia oikein.

    • Jos funktion suoritus riippuu esim. toisen funktion palauttamasta arvosta, niin yksikkötesti saattaa epäonnistua siten, että ongelma onkin toisessa funktiossa eikä siinä funktiossa, josta testeri valittaa.

    • Yksikkötesti epäonnistuu, jos funktio tulostaa jotain, mitä sen ei pitäisi tulostaa, eli ohjelma näyttää toimivan oikein, mutta tulostus suoritetaan väärässä paikassa.

Tärkeää

Ohjelmia pitää ehdottomasti testata myös muilla syötteillä kuin tehtävänannon esimerkeissä annetuilla!!!