Pieni testausesimerkki

Julkaistu

Oletetaan, että eräänä vuonna harjoitustyön aiheena on binäärilukujen käsittely loogisilla operaatioilla ja että eräs kurssin annettu esimerkki on catch22. Esimerkin syötteet ovat input_catch22.txt-tiedostossa ja malliohjelman näillä syötteillä tuottamat oikeat tulosteet ovat output_catch22.txt-tiedostossa. Oletetaan lisäksi, että ollaan Windows-järjestelmässä, jossa nämä tiedostot on kopioitu Laskuri-nimisen harjoitustyöohjelman lähde- ja tavukoodin sisältävään hakemistoon.

Tällöin komentoikkunassa annetulla komennolla:

   java Laskuri < input_catch22.txt > output_catch22_oma.txt

ohjelmaa voidaan käskeä lukemaan syötteet näppäimistön sijasta input_catch22.txt-tiedostosta ja ohjaamaan tulosteet näytön sijasta output_catch22_oma.txt-nimiseen tiedostoon.

Tulosten kaappauksen jälkeen ohjelman tuottamia tulosteita ja oikeita tulosteita verrataan toisiinsa. Tämä onnistuu nopeasti esimerkiksi komentoikkunassa annettavalla fc-komennolla (Mac-, UNIX- ja Linux-järjestelmissä diff-komento) seuraavasti:

   fc /N output_catch22.txt output_catch22_oma.txt

Komento tulostaa ilmoituksen, josta käy ilmi ovatko tiedostot sisällöltään samat vai onko tiedostoissa on eroja. Jos eroja löytyy, niin näytölle tulostuu eron sisältävä kohta. N-parametri lisää fc-komennon tulosteisiin rivinumerot.

Oletetaan, että yllä annettu komento löytää eron output_catch22.txt– ja output_catch22_oma.txt-tiedostojen välillä:

   Comparing files output_catch22_oma.txt and output_CATCH22.TXT
   ***** output_catch22_oma.txt
      16:  2. parametri on 0101010.
      17:  AND-operaation tulos on 10000000.
      18:  OR-operaation tulos on 11111111.
   ***** output_CATCH22.TXT
      16:  2. parametri on 0101010.
      17:  AND-operaation tulos on 00000000.
      18:  OR-operaation tulos on 11111111.
   *****

Tulosteesta nähdään, että aluksi tulostuu osa fc-komennolle ensimmäisenä annetun tiedoston sisällöstä (output_catch22_oma.txt) ja tämän jälkeen vastaava osa jälkimmäisenä annetun tiedoston sisällöstä (output_catch22.txt). Tulostetut osat erotetaan toisistaan tähtimerkeillä. Tulosteita vertailemalla selviää, että harjoitustyöohjelma oli laskenut AND-operaation tuloksen (rivi 17) yhden numeron osalta väärin.

Tulosteesta käy myös ilmi, että fc-komento ei yleensä tulosta vain eroavia rivejä, vaan kyseisiä rivejä ennen ja niiden jälkeen voi tulostua myös täysin samoja oikeellisia rivejä.

Eron löydyttyä harjoitustyön lähdekoodia korjataan, kunnes tulosteet vastaavat toisiaan merkilleen.

Kun edellä esitetetyssä esimerkissä ollut virhe saadaan korjattua, niin fc-ohjelma sanoo tulostetiedostoja vertailtaessa:

   Comparing files output_catch22_oma.txt and output_CATCH22.TXT
   FC: no differences encountered

sen merkiksi, että harjoitustyöohjelman ja malliratkaisun tulosteet vastaavat täsmälleen toisiaan catch22-esimerkin osalta ja harjoitustyö selviää siten kyseessä olevasta julkisesta testistä.

Jos virheitä on useita, niin ensimmäistä eroa seuraavat fc-komennon tulosteet ovat hyvin vaikeaselkoisia. Tästä syystä ohjelmaa kannattaa muokata siten, että keskittyy aina vain ensimmäisen eron tuottavan virheen korjaamiseen.