Ohjelmointitehtävien automatisoitu tarkistusohjelmisto CodeRunner

0

Perinteisesti opettaja arvioi itse opiskelijan palauttamat ohjelmointitehtävät. Käytännössä tämä tarkoittaa ohjelmakoodin suorittamista kehitysympäristössä ja koodin silmäilyä. Prosessi on aikaavievä ja altis inhimillisille virheille. Erityisen ongelmaiseksi tilanteen tekee viime vuosina alati kasvaneet aloitusryhmien koot. Tietojenkäsittelyn koulutuksessa ongelman ratkaisemiseksi syksyllä 2021 otettiin käyttöön CodeRunner-ohjelmisto, jolla voidaan automaattisesti testata, toimiiko opiskelijan tekemä ohjelmakoodi oikein. Opiskelijoiden kokemuksien mukaan CodeRunner-tehtävät motivoivat ja parantavat näin oppimistuloksia.

CodeRunner on Moodlen lisäosa, jonka avulla voidaan rakentaa ohjelmointitehtäviä, jotka tarkistetaan automaattisesti tehtävänpalautuksen jälkeen. Ohjelmointitehtävissä käytetty ohjelmointikieli voi olla esimerkiksi Java, Python, PHP tai JavaScript. Lisäosa on ilmainen, avoimen lähdekoodin ohjelmisto.

CodeRunner-tehtävien luominen

Aluksi CodeRunner-tehtävän tekeminen tuntuu vaikeahkolta. Määriteltäviä kenttiä on paljon ja ohjelman logiikan oppiminen vie aikaa. Lisäksi, jos kyse on arvioitavista tehtävistä, tehtävän tekeminen vaatii erityistä tarkkaavaisuutta. Myös ohjelman käyttöliittymä jättää toivomisen varaa.

CodeRunner-tehtävän tekeminen alkaa tehtävänannon kirjoittamisella. Tämä voi olla esimerkiksi: ”Tee laskeSumma-niminen funktio, jolla on kaksi parametria. Funktio tulostaa parametrien summan.” Tämän jälkeen lisätään toimiva ohjelmakoodi, mitä CodeRunner käyttää koodin tarkistusvaiheessa. Lopuksi määritellään testitapaukset, joita voi olla yksi tai useampia. Testitapaus yllä esitettyyn tehtävään voi olla esimerkki: laskeSumma(2,2). Tämän lisäksi määritellään testitapauksen odotettu tulos, mikä on tässä tapauksessa 4.

Opiskelijalle CodeRunner-tehtävä näyttäytyy yhtenä Moodle-tentin tehtävänä (Kuva 1). Käytännössä opiskelija usein ohjelmoi tehtävässä pyydetyn logiikan käyttäen jotain ohjelmointiympäristöä ja lopuksi kopioi ohjelmakoodin CodeRunner-tehtävän vastauskenttään. Heti palautuksen jälkeen opiskelija saa tiedon, mitkä testitapaukset menivät läpi. Tämän jälkeen opiskelija voi muuttaa vastaustaan ja yrittää palautusta uudelleen.

Kuva 1. Opiskelijan on palauttanut CodeRunner-tehtävän. Kaikki testitapaukset ovat läpäistyjä.

Opiskelijoiden kokemuksia

Ohjelmoinnin perusteet -opintojakson jälkeen lokakuussa 2021 tietojenkäsittelyn päivä-, monimuoto- ja muunto-opiskelijoita pyydettiin antamaan palautetta CodeRunner-tehtävistä. Vastauksia saatiin yhteensä 51 – jokaisesta ryhmästä lähes yhtä paljon.

Kun opiskelijoilta pyydettiin ennalta annetuista vaihtoehdoista nimeään huonoin piirre, lähes 70 % vastaajista valitsi: ”Vaikka CodeRunnerin mukaan ratkaisu oli oikein, ei voinut olla varma, oliko tehty ratkaisu hyvä”. Tämä on yksi CodeRunner-tehtävien selkeä ongelma. Etenkin aloitteleva ohjelmoija kaipaisi palautetta ratkaisunsa logiikan oikeellisuudesta. CodeRunner ei pysty arvioimaan ohjelmakoodin logiikkaa tai ratkaisun oikeaoppisuutta.

Opiskelijoilta pyydettiin myös kertomaan CodeRunner-tehtävien hyviä puolia. Avoimista vastauksista selkeästi yleisin hyvä puoli oli se, että tehtävän oikeellisuuden sai heti selville (20). Seuraavaksi yleisin hyvä ominaisuus oli se, että tehtäviä sai yrittää niin monta kertaa kuin halusi (5). Vastauksista voi poimia vielä huomion siitä, että CodeRunner-tehtävät jäävät Moodleen talteen, josta opiskelija löytää ne tarvittaessa helposti.

Opiskelijat kokivat kehittyvänsä ohjelmoijina selkeästi CodeRunner-tehtäviä tehdessä (Kuva 2). Tämä varmasti liittyy osaltaan siihen, että Moodlesta näkee kootusti, mitä on tehnyt ja mitä vielä tulee tehdä. Kun opiskelijoilta vielä kysyttiin, kumpia tehtäviä he suosisivat, perinteisesti manuaalisti arvioitavia ohjelmointitehtäviä vai CodeRunner-tehtäviä, tulos kääntyi hyvinkin selvästi CodeRunner-tehtävien puoleen (Kuva 3).

Kuva 2. Kun sain ratkaistua CodeRunner-tehtäviä, tunsin kehittyväni ohjelmoijana (Täysin samaa mieltä =5)

 

Kuva 3 CodeRunner-tehtävät ovat parempia kuin perinteiset ohjelmointitehtävät (Täysin samaa mieltä = 5)

Kokemuksia opettajan näkökulmasta

CodeRunner-tehtävät tyypillisesti ovat kohtuullisen yksinkertaisia. Vaikka käytännössä vaaditun logiikan voi rakentaa haluamallaan tavalla, lopputuloksen tulee olla täysin se, mitä testitapaukset vaativat. Lisäksi CodeRunner ei osaa arvioida ohjelman osia. Tämän voi kiertää siten, että ohjelman jakaa osatehtäviin. Perinteisesti annetut ja manuaalisti arvioidut ohjelmointitehtävät voivat olla laajempia ja niitä tehdessä opiskelijalla on enemmän soveltamisen varaa. Täten voidaankin sanoa, että parhaan oppimistuloksen saa, kun tarjolla on sekä CodeRunner- ja laajempia manuaalisti arvioitavia ohjelmointitehtäviä.

 

Kirjoittaja Tommi Saksa on tietojenkäsittelyn lehtori, joka opettaa ohjelmoinnin perusteet vuosittain noin 150 opiskelijalle.

Leave A Reply