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.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 osoitteeseenprog2@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:
Your program ran for over 90 seconds and it was killed. Usually this means that the program's execution got stuck in an endless loop or recursion. The program was killed during the last available io test below.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, taireturn-lause sijaitseeif-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!!!