Tietojenkäsittelytiede 31 Marraskuu 2010 sivut 43–56
c kirjoittaja(t)
Toimittaja: Jorma Tarhio
Jype — visualisointi ja automaattinen arviointi
ohjelmoinnin opetuksessa
Juha Helminen
Aalto-yliopisto
Tietotekniikan laitos
juha.helminen@cs.hut.fi
Tiivistelmä
Ohjelmoinnin oppimisen tueksi on kehitetty lukuisia ohjelmistoja. Useimmat näistä havainnollistavat ohjelmointiin liittyviä käsitteitä visualisoinnin keinoin. Toisen pääjoukon
muodostavat automaattiset arviointi- ja palautejärjestelmät. Tutkimusten mukaan visualisointityökalut näyttäisivät tukevan oppimista tehokkaammin, jos ne aktivoivat oppijan
pelkän passiivisen katselun sijaan. Tämä on innostanut tutkimaan visualisoinnin ja automaattisen arvioinnin sekä palautteen tiivistä yhdistämistä. Artikkelissa annetaan yleiskatsaus em. työkaluista ja esitellään Jype, uusi web-pohjainen ohjelmointiympäristö Pythonille. Jypessä yhdistyvät suoraviivainen yksinkertaistettu koodausympäristö, joka myös
mahdollistaa visuaalisen virheenjäljityksen ohjelman tilan visualisaatioiden tukemana, ja
automaattisesti arvioidut ohjelmointitehtävät.
1 Johdanto
Ohjelmointitaidon opetus on kriittinen osa
tietotekniikan koulutusta ja ohjelmoinnin alkeet on yleensä yksi ensimmäisistä opintojaksoista tietotekniikan opetusohjelmissa. Ohjelmoinnin oppiminen on
kuitenkin hyvin vaikeaa. Ennen kaikkea
ohjelmoinnin oppiminen vaatii, että oppija muodostaa mielessään käsitetason ymmärryksen ohjelmointikielen suoritusmallista [11] sekä siitä, miten ohjelmointirakenteet ja -käsitteet kytkeytyvät siihen
ohjaus- ja tietovuossa. Lisäksi on opittava
käyttämään ohjelmatyökaluja, joilla hallitaan ohjelmoinnin eri osatehtäviä, kuten
kääntämistä, testausta ja virheenjäljitystä.
Oppimistutkimuksissa
yliopistoopettajat kautta maailman ovat toistu-
vasti havainneet, että opiskelijat eivät ole
omaksuneet tietoja ja kehittäneet taitoja,
joita heiltä odotetaan, kun he ovat suorittaneet alkeisohjelmoinnin opintojaksonsa [49, 51]. Siksi ohjelmoinnin opetusmenetelmiä on tutkittu paljon, ja erityisesti
ohjelmoinnin opetuksen tueksi on kehitetty monenlaisia ohjelmistoja, joilla pyritään tukemaan ja edistämään ohjelmointiosaamisen kehittymistä. Tässä artikkelissa annetaan yleiskatsaus ohjelmoinnin
opetuksen ohjelmatyökaluista keskittyen
erityisesti ohjelmien visualisointiin sekä
järjestelmiin, joissa sitä on yhdistetty automaattiseen arviointiin. Lopuksi esitellään eräs uudempi järjestelmä, Jype, joka
on web-pohjainen ohjelmoinnin opetustyökalu Pythonille, missä ohjelmointiympäristö on tiiviisti yhdistetty automaatti-
OHJE KIRJAPAINOLLE: B5-arkin vasen- ja yläreuna kohdistetaan A4-arkin vasempaan ja
yläreunaan. Näin pitäisi marginaaliksi tulla taitteen puolella noin 33 mm ja muualla noin 22 mm.
44
Visualisointi ja automaattinen arviointi ohjelmoinnin opetuksessa
seen arviointiin.
Ohjelmoinnin oppimista tukevat ohjelmatyökalut keskittyvät yleensä johonkin
tiettyyn oppimisen osa-alueeseen. Monet
näistä työkaluista perustuvat ohjelmien
visualisointiin. Pyrkimyksenä on havainnollistaa ohjelmoinnissa usein esiintyviä
abstrakteja käsitteitä ja rakenteita. Näin
toivotaan parannettavan ja nopeutettavan
tietorakenteiden, algoritmien ja yleensäkin ohjelmien suorituksen ymmärtämistä.
Myös itse ohjelmointi voi tapahtua kokonaan graafisilla operaatioilla tekstin kirjoittamisen sijaan. Toinen pääryhmä on
erilaiset automaattisen arvioinnin työkalut. Näissä oppija suorittaa ohjelmointiin
liittyviä tehtäviä ja järjestelmä antaa välitöntä palautetta vastausten oikeellisuudesta. Kolmas pääryhmä tässä karkeassa jaottelussa on erilaiset erikoisympäristöt, joissa yleiskäyttöiseen ohjelmointikieleen tutustutaan askelissa, tasoittain, kasvattaen
käytettävissä olevaa kielen ominaisuuksien joukkoa vähitellen tai se on korvattu
kokonaan jollain peruskäsitteiden opetukseen paremmin soveltuvalla rajoitetummalla opetuskielellä. Artikkelit [38, 41]
antavat kattavan katsauksen ohjelmoinnin
opetuksen ja oppimisen tutkimuksesta.
2 Visualisointi ja
automaattinen arviointi
ohjelmoinnin opetuksessa
sesti käytetty menetelmä oppimisprosessin tukemiseen ohjelmoinnin opetuksessa
on ohjelman tilan visualisointi. On olemassa lukuisia opetustyökaluja sekä aloittelijoille suunnattuja kehitysympäristöjä,
jotka hyödyntävät visualisointia ohjelman
tilan havainnollistamisessa. Järjestelmät
voidaan karkeasti ryhmitellä neljään pääluokkaan: visuaalisen ohjelmoinnin ympäristöt, mikromaailmat, algoritmien visualisointi ja ohjelmien visualisointi. Seuraavaksi tarkastellaan kutakin ryhmää yksitellen ja mainitaan esimerkkeinä tunnettuja sekä uudempia ja edistyneimpiä järjestelmiä. Kirja [50] sisältää historiallisen
katsauksen visualisointijärjestelmistä.
Visuaalisen ohjelmoinnin ympäristöissä periaatteena on tarjota yksinkertaistettu graafinen käyttöliittymä ohjelmien
rakentamiseen tekstipohjaisen ohjelmoinnin sijaan. Ajatuksena on, että tekstipohjaisessa ohjelmoinnissa huomattava osa
ajasta kuluu kieliopin kanssa taistellessa ja että näin oppijat voivat päinvastoin
aluksi keskittyä paremmin ohjelmoinnin
olennaisiin käsitteisiin sen sijaan, että takertuisivat ongelmiin monimutkaisen formaalin kielen muodostavien ohjelmointikomentojen kanssa. Joitain esimerkkejä
ovat JPie [13], Karel Universe [3], RAPTOR [6] ja Alice [31].
Mikromaailmat rakentavat saman periaatteen pohjalle, mutta lähestymistapa on
2.1 Visualisointi ohjelmoinnin
tarjota opetukseen suunniteltu erikoisohopetuksessa
jelmointikieli, jonka rakenteet ovat yksinKeskeinen tavoite alkeisohjelmoinnin kertaisempia kuin tavallisessa yleiskäytopintojaksoilla on oppia lukemaan ja kir- töisessä ohjelmointikielessä. Lisäksi tämä
joittamaan ohjelmia. Paitsi riittävä har- kieli on tiiviisti yhdistetty graafiseen maajoittelu, avainasemassa on tarkka ymmär- ilmaan, jonka puitteissa ohjelmointikierys siitä, mistä ohjelman tila muodostuu lellä toimitaan. Maailma sisältää olentoja miten ohjelman suoritus vaikuttaa sii- ja ja esineitä, joita voidaan ohjata ja käsihen. Kuten kaikkien abstraktien rakentei- tellä kielen sisältämillä yksinkertaisilla ja
den kohdalla, erilaisia havainnollistuksia tarkoitukseen suunnitelluilla komennoilvoidaan käyttää tiedon välittämiseen ja la. Maailmat perustuvat teemoihin, joilymmärtämisen edistämiseen. Täten ylei- la on fyysinen vastine, kuten robotin oh-
Helminen
45
jaamiseen. Visualisointi tarjoaa siten lähes
käsinkosketeltavan havainnollistuksen ohjelman suorituksesta ja tilasta. Joitain esimerkkejä ovat Karel the robot [37], Jeroo [47], PigWorld [28] ja greenfoot [17].
Algoritmien visualisointijärjestelmillä
tuotetaan animaatioita algoritmeista. Näiden järjestelmien tarkoitus on mahdollistaa algoritmien keskeisten periaatteiden
havainnollistaminen ohjelman suoritusta
ja tietokoneen muistia korkeammalla abstraktiotasolla. Tämä perustuu tyypillisesti sellaisten tietorakenteiden kuten taulukkojen, puiden ja verkkojen käsitetason
visualisaatioihin, jotka korostavat tietoalkioiden käsitteellisiä suhteita sen sijaan,
että esitettäisiin niiden varsinainen sijainti muistissa. Nämä järjestelmät on pääasiassa suunniteltu käytettäväksi luennoilla tai sähköisessä oppimateriaalissa, sillä
ne vaativat yleensä algoritmin annotointia manuaalisesti visualisointikomennoilla, animoinnin kirjoittamista alusta alkaen
erityisellä algoritmianimaatiokielellä tai
-kirjastolla tai sen rakentamista graafisella
käyttöliittymällä. Joitain esimerkkejä ovat
Animal [42], JHAVÉ [34], Alvie [8] ja
TRAKLA2 [29].
Ohjelmien visualisoinnissa keskitytään
havainnollistamaan varsinaisten ajettavien
tai ajossa olevien ohjelmien muistin ja tietorakenteiden toimintaa. Niitä käytetään
virheenjäljityksessä sekä ylipäätään ohjelmien ymmärryksen helpottamisessa. Ne
voivat tarjota visualisaatioita monista eri
osista ohjelman suoritusta kuten lausekkeiden evaluoinnista, muuttujasidonnoista ja kutsupinosta. Tyypillisesti järjestelmä mahdollistaa ohjelmakoodin suorittamisen askelittain, missä ohjelman tilan muuttumista voi seurata visualisaa1 http://cs.joensuu.fi/jeliot
2 http://www.jgrasp.org
3 http://www.cs.tut.fi/~vip/en/
4 http://ville.cs.utu.fi
5 http://www.engr.mun.ca/
theo/TM/
tioiden tukemana visuaalisten virheenjäljittimien tapaan ja visualisaatiot rakentuu kielen käsitteiden ympärille muuttujien, funktioiden ja luokkien tasolle.
Joitain esimerkkejä ovat Jeliot 31 [30],
jGRASP2 [9] (Graphical Representations
of Algorithms, Structures, and Processes), VIP3 [52] (Visual InterPreter), ViLLE4 [25] (the visual learning tool) ja Teaching Machine5 [36].
2.2
Ohjelmointitehtävien
automaattinen arviointi
Yksinkertaisen ohjelman kirjoittaminen,
laajentaminen tai muokkaaminen ovat
tyypillisiä tehtäviä ohjelmoinnin alkeiden
opintojaksoilla. Tällaisten palautusten läpikäynti ja arvostelu on aikaavievää ja
suurelta osin hyvin suoraviivaista. Siksi ohjelmointitehtävien arvioinnin automatisointiin on kehitetty monia järjestelmiä. Automaattinen arviointi mahdollistaa työkuorman pitämisen hallittavissa, kun opiskelijoita on paljon tai tehtäviä halutaan tarjota paljon. Järjestelmien
tulisi tukea oppimista tarjoamalla riittävän hyvää palautetta oppijoille, jotta he
pystyvät kehittymään itsenäisesti käytännön ohjelmointitehtävien kautta. Työkaluja on niin yksinkertaisista yksikkötestien ajamiseen perustuvista järjestelmistä älykkäisiin tutorointijärjestelmiin, jotka seuraavat ja mallintavat oppijan edistymistä ja tarjoavat sen perusteella vinkkejä ja ohjausta oppijalle. Pääasiassa ohjelmointitehtävien arviointi perustuu kuitenkin lopputuotteeseen, eli erityisesti tuotettuun ohjelmakoodiin. Ohjelmalta vaaditaan oikeaa toiminnallisuutta sekä hyvää
rakennetta ja ohjelmointityyliä. Tyypillisesti automaattisilla menetelmillä keskity-
46
Visualisointi ja automaattinen arviointi ohjelmoinnin opetuksessa
tään ohjelman oikeellisuuden arviointiin
tutkimalla sen ajonaikaista käyttäytymistä. Lisäksi saatetaan arvioida esimerkiksi
ohjelman tehokkuutta tai ohjelmointityyliä. Analyyseillä voidaan pyrkiä havaitsemaan vaikka globaalien muuttujien tarpeetonta käyttöä, huonoa muuttujien nimeämistä tai sisentämistä. Artikkeli [2]
antaa katsauksen ohjelmointitehtävien automaattisesta arvioinnista.
Nykyiset ohjelmointitehtävien automaattisen arvioinnin järjestelmät ovat
poikkeuksetta web-pohjaisia. Tyypillisesti oppija lähettää työnsä web-lomakkeella
palvelinkoneelle arvioitavaksi ja saa palautteen vastaavasti web-sivuna. Ohjelmien arviointiin on karkeasti kaksi päälähestymistapaa: yksikkötestit ja ohjelman tulosteen vertailu. Tulostelähestymisessä annettu ohjelmakoodi ajetaan jollakin testisyötteellä ja tulostetta verrataan
merkkipohjaisesti mallivastauksen tuottamaan tulosteeseen (esimerkiksi TRY [40],
ASSYST [20], Goblin6 , RoboProf [10],
BOSS [21], CourseMarker [18], Online
Judge [7]). Ohjelman tulee siis tulostaa
tiettyjä asioita tietyssä muodossa tietyssä järjestyksessä. Yksikkötestilähestymisessä annettua koodia tutkitaan kutsumalla osia siitä yksikkötestityyliin tarkastaen
funktioiden/metodien oikea toiminta (esimerkiksi Scheme-robo [46], BOSS [21],
Ludwig [48], Javala [27], WebTasks [43]).
Web-CAT [12] sisältää hieman erilaisen
lähestymistavan, jossa arviointiin sisällytetään oppijan itse kirjoittamat testit. Tässä asetelmassa oppija demonstroi itse, että ohjelma toimii sen sijaan, että järjestelmä testaa toimivuuden. Arviointi perustuu kolmeen tekijään: testien oikeellisuus,
testien kattavuus ja testitulokset. Oppijan
testit ajetaan mallitoteutukselle testien oikeellisuuden ja kattavuuden arvioimiseksi. Lisäksi testit ajetaan oppijan omalle to6 http://goblin.tkk.fi/goblin/
teutukselle. Perustelu menettelylle on, että
jos testit ovat oikeat ja kattavat, niin myös
ohjelman täytyy olla oikein, jos se läpäisee nämä testit.
Automaattisen arvioinnin hyötyjä ovat
välitön palaute, palvelun hyvä saatavuus
riippumatta ajasta tai paikasta sekä arvostelun puolueettomuus ja yhtenäisyys.
Lähes poikkeuksetta nykyaikaiset arviointijärjestelmät mahdollistavat myös oppijoiden tehtäväpalautusten seuraamisen ja
raporttien tuottamisen niistä. Automaattisen arvioinnin heikkouksia ovat yleensäottaen ihmistä heikompi palautteen laatu
ja plagiarismi. On esimerkiksi hyvin vaikea arvioida ja antaa automaattisesti palautetta siitä, mistä mahdollisesta virhekäsityksestä jokin ohjelmaan jäänyt virhe johtuu. Plagiarismia on käytännössä mahdotonta estää, jos tehtävien tekemistä ei valvota, mutta sen havaitsemiseen on kehitetty monia järjestelmiä, jotka vertailevat palautuksia arvioiden, kuinka suurelta osin ne muistuttavat toisiaan. Tämän menetelmän luotettavuus toki heikkenee sen mukaan, mitä pienempiä tai muuten luonnostaan samankaltaisia palautukset ovat. Esimerkkejä tehokkaista nykyaikaisista järjestelmistä, jotka
perustuvat ohjelmakoodin muuntamiseen
merkkijonoalkioiksi [26], ovat YAP3 [53],
JPlag [39] ja Plaggie [1]. Tällaiset järjestelmät eivät kompastu tavallisiin yksinkertaisiin leksikaalisiin tai rakenteellisiin
muunnoksiin, joilla tyypillisesti yritetään
peitellä plagiointia.
2.3
Ohjelmien visualisointi ja oppijan
aktivointi
Kun oppijoille tarjotaan puitteet ohjelmien ja algoritmien tutkimiseen visuaalisesti, odotetaan heidän pystyvän hahmottamaan ohjelmien suoritukseen liittyvät
käsitteet nopeammin ja syvällisemmin.
Helminen
On kuitenkin olemassa ristiriitaisia tutkimustuloksia sen suhteen, että edistävätkö
visualisaatiot itsessään, kuten algoritmianimaatiot, todella oppimista. Tutkimukset
antavat ymmärtää, että vuorovaikutuksen
määrä visualisointia käytettäessä on merkittävä tekijä [14, 19, 35]. Passiivisten animaatioiden sijaan aktivoivat visualisointityökalut vaikuttavat tehokkaammilta. Erityisesti tämän tuloksen innoittamana on
kehitetty monia järjestelmiä, jotka yhdistävät visualisoinnin ja automaattisen arvioinnin: oppijoille annetaan visualisaatioon liittyviä tehtäviä ja heidän vastauksistaan annetaan välitöntä palautetta automaattisen arvioinnin keinoin.
Tehtävät voivat esimerkiksi olla algoritmianimaatioon tai koodinanimaatioon
pohjautuvia monivalintakysymyksiä [22,
25, 32, 33, 44, 45]. Tyypillisessä kysymyksessä oppijan tulisi ennustaa jonkin muuttujan arvo senhetkisen koodilauseen suorituksen jälkeen. Toinen
esimerkki ovat automaattisesti arvioidut visuaaliset algoritmisimulaatiotehtävät, joissa oppijat rakentavat algoritmianimaatioita simuloimalla algoritmin suoritusaskelia. TRAKLA2:ssa [29] oppijat käsittelevät tietoalkioita tietorakenteiden visualisaatioissa raahaamalla ja valitsemalla
niitä hiirellä ja lopputuloksen oikeellisuus
arvioidaan vertaamalla luotuja tilasiirtymiä vastaaviin algoritmitoteutuksen tuottamiin siirtymiin. MA&DA:ssa [24] oppijat käsittelevät tietorakenteita valikoiden
kautta. PILOT:ssa [4] verkkoalgoritmeja
jäljitetään valitsemalla verkkojen kaaria.
47
eli tehtäville, joissa oppijan tulee vastata kysymyksiin ohjelman myöhemmistä
tiloista nykyisen tilan (visualisaatioiden)
perusteella: ”Mikä on muuttujan tulos
arvo tämänhetkisen ohjelmarivin suorittamisen jälkeen?”. ViLLE-järjestelmässä
voidaan luoda ohjelma-animaatioita, joihin voidaan liittää suoritukseen liittyviä
monivalintakysymyksiä. Teaching Machine voi myös sisältää samantyylisiä kysymyksiä [5]. VIP on ainoa järjestelmä, joka
yhdistää ohjelmointitehtävät ja ohjelmien
visualisoinnin: integroitu ympäristö tarjoaa koodieditoriin ja visuaalisen virheenjäljittimen sekä antaa palautetta ohjelmien
oikeellisuudesta.
3
Jype
Useimmat nykyiset ohjelmien visualisaatioita näyttävät järjestelmät on rakennettu Java-kielelle, joka on ollut yleisin opetuskieli viime vuosina. Pythonin opetuksen tueksi ei ole vielä montaa ohjelmatyökalua. Joitain mikromaailmaan perustuvia ohjelmointiympäristöjä on kehitetty: rur-ple7 , Guido van Robot8 ja Turtlet9 . ViLLE [25] tarjoaa myös jotain tukea
Pythonin suorituksen visualisointiin, sillä
siinä Java-ohjelmakoodin suorituksen animaatio voidaan jossain määrin muuntaa
vastaavaksi animaatioksi Pythonilla. Jype [15, 16] on uusi web-pohjainen ohjelmointiympäristö Pythonille, jossa yhdistyvät suoraviivainen yksinkertaistettu
koodausympäristö, joka myös mahdollistaa visuaalisen virheenjäljityksen ohjelman tilan visualisaatioiden tukemana ja
Vain harvoissa jäjestelmissä, jotka automaattisesti arvioidut ohjelmointitehnäyttävät ohjelmavisualisaatioita, oppija tävät. Työkalu on suunniteltu ensimmäiaktivoidaan tehtävillä. Jeliot 3:lle on ole- sen alkeisohjelmointikurssin tarpeisiin ja
massa alustava toteutus ohjelman suori- painopisteenä on siten lause- ja funktiotukseen liittyville ennustustehtäville [32] tason ohjelmointi (ei oliolähtöinen kurs7 http://sourceforge.net/projects/rur-ple/
8 http://gvr.sourceforge.net/
9 http://www2.lut.fi/~jukasuri/Kilppari/
48
Visualisointi ja automaattinen arviointi ohjelmoinnin opetuksessa
Kuva 1: Jypen yleisnäkymä.
Kuva 2: Funktiokutsuja voi tarkastella nopeasti liikuttamalla hiiren kursoria pinokehysten päällä.
Helminen
si). Sen tulisi tukea ohjelmien alkeiden
oppimista tarjoamalla harjoitteluympäristö ohjelmakoodin kirjoittamiseen ja ohjelmien suorituksen jäljittämiseen. Teknillisessä korkeakoulussa tehty diplomityö [15] kuvaa tarkasti työkalun ensimmäisen version suunnitteluperiaatteet ja
niiden perustelut sekä teknisen toteutuksen. Työkalun pohjalta on myös julkaistu
konferenssiartikkeli [16], jossa tarkastellaan ohjelmatyökalun piirteitä opetuskontekstissa.
Kuvassa 3 on Jypen yleisnäkymä.
Käyttöliittymä on jaettu neljään pääosioon. Vasemmassa ylänurkassa on komponentti koodin kirjoittamiseen ja muokkaamiseen. Sen alapuolella on visualisaatioalue, jossa havainnollistetaan suorituspinon ja muuttujien tiloja. Oikealla on tila
tekstikomponenteille, jotka ovat välilehdissä. Tulostevirran sisältö näytetään yhdessä välilehdessä ja lisävälilehdet voivat näyttää tehtäväohjeita tai automaattisen arvioinnin palautteita.
49
vot esitetään yksinkertaisessa taulukkonäkymässä merkkijonoina. Kun uusi muuttuja esitellään kyseinen rivi korostetaan
keltaisella värillä vastaten koodinäkymän
väritystä. Kun olemassaolevaan muuttujaan sidotaan uusi arvo, vain arvon sarake
korostetaan (kuva 3.1).
Kuvattujen perusvisualisaatioiden lisäksi Jypeä voidaan laajentaa vaihtoehtoisilla näkymillä. Tällä hetkellä Jype
käyttää sisällytettyä tietorakenteiden visualisointikirjastoa näyttääkseen dynaamisen taulukon visualisaation Pythonin
sisäänrakennetulle listatietotyypille (kuva 3.2). Koska Jypessä käytetty Pythontoteutus voi suoraan kutsua ja käyttää
Java-luokkia, voidaan myös käyttää visualisointikirjaston monia Java-toteutuksia
tavallisista tietorakenteista visualisaatioineen. Kuvassa 3.2 on esimerkkinä binäärihakupuu. Muita kirjaston tietorakenteita
ovat b-puu, punamusta puu, verkot, listat
ja jonot. Jypeä voidaan siis käyttää myös
algoritmianimaatioiden luomiseen Pythonilla käyttäen näitä rakenteita.
3.1 Visualisointi
Ohjelman suoritusta voidaan tarkastella
kahdesta päänäkökulmasta: ohjausvuo ja
tietovuo. Jypessä ohjausvuon muutokset
näytetään koodissa värittämällä parhaillaan suoritettava rivi vihreällä ja viimeksi
suoritettu rivi keltaisella. Lisäksi suorituksen keskeyttävät poikkeukset korostetaan
koodinäkymässä punaisella. Jype näyttää
myös suorituspinon tilan yksinkertaisella visualisaatiolla. Laatikot näyttävät pinokehysten tyypit ja funktioille näytetään
myös argumentit ja paluuarvot. Funktiokutsujen jonoa voi tarkastella myös liikuttamalla hiiren kursorin funktiokehysten päälle, jolloin koodinäkymästä korostetaan tämän funktiokutsun koodirivi kuten kuvassa 3.
Kuvat 3.1 ja 3.1 näyttävät datavuon perusvisualisaation. Muuttujien nimet ja ar-
3.2
Toiminnallisuus
Ohjelmien suoritusta hallitaan Jypessä yksinkertaisilla painikkeilla, jotka näkyvät
kuvassa 3: mene suorituksen alkuun, askella taaksepäin, pysäytä suoritus, askella
eteenpäin ja aja ohjelma. Käyttäjä voi sujuvasti vaihdella koodin muokkauksen ja
ohjelman ajamisen välillä ilman kääntämisaskelta – kun koodia muokataan kesken ohjelman ajon eli animaation, se keskeytetään automaattisesti. Suoritusta voi
myös navigoida suorituspinon laatikoiden
kautta. Valitsemalla laatikon hiirellä suoritus/animaatio siirtyy tähän kohtaan suoritushistoriaa, josta askeltamista voi taas
jatkaa eteen- tai taaksepäin aivan normaalisti. Tätä toimintoa voitaisiin kutsua ’astumiseksi taaksepäin kutsujaan’.
Tulostevirta on myös sidottu suorituk-
50
Visualisointi ja automaattinen arviointi ohjelmoinnin opetuksessa
Kuva 3: Uusi muuttuja esiteltiin viimeksi suoritetulla rivillä kuten keltaiset väritykset ilmaisevat.
Kuva 4: Kahden muuttujan arvot muuttuivat (käsitteellisesti) viimeksi suoritetulla rivillä kuten
keltaiset värityksen ilmaisevat. list-ref viittaa samaa listaolioon kuin a-list, johon lisättiin,
joten olioviittausten tasolla muuttujasidonnat eivät muuttuneet.
Helminen
51
Kuva 5: Pythonin listatietotyypistä, joka on visualisoitu dynaamisena taulukkona, lisätään alkioita binäärihakupuuhun.
Kuva 6: Tämän tehtävän palautteessa näytetään odotettu tuloste ja oppijan palautuksen tuottama tuloste allekkain eri väreillä. Palaute paljastaa ohjelmassa olevan järjestelmällisen virheen,
missä tulosteen alkuun tulee aina virheellinen merkki.
52
Visualisointi ja automaattinen arviointi ohjelmoinnin opetuksessa
sen animaatioon virheenjäljittämisen selkeyttämiseksi. Joten askellettaessa suoritusta taaksepäin myös tulosteet ’peruutetaan’ takaisin aikaisempaan tilaan. Tämän on tarkoitus helpottaa erityisesti sellaisten ohjelmien virheiden jäljittämistä,
joissa tuloste on keskeisessä osassa eli
esimerkiksi syöte/tuloste-tyyppiseen vuorovaikutukseen perustuvissa yksinkertaisissa komentorivipohjaisissa ohjelmissa.
Kun syötevirtaa luetaan, eli ohjelma odottaa syötettä esimerkiksi Pythonin sisäänrakennetulla raw_input()-funktiolla, tulostevirran tekstinäkymä muuttuu rivieditoriksi, jonka kautta syöte annetaan.
täen hyväksi mahdollisesti tehtävänannossa annettua valmiskoodia – tätä tutkiskelua tukee mahdollisuus suorittaa ohjelmaa
askel askeleelta tutkien tilan muuttumista, (2) seuraavaksi oppija yrittää ratkaista tehtävän ja tekee omat testinsä ajamalla sitä ja vertaamalla tulosta odotettuun,
(3) kun oppija on vakuuttunut, että hänen
ratkaisunsa toteuttaa tehtävänannon vaatimukset, hän lähettää sen arvosteltavaksi saadakseen palautetta esityksestään, (4)
jos ohjelmassa on virheitä, oppija jatkaa
jäljittämällä virheitä käyttäen hyödykseen
saatua palautetta sekä visualisaatioita ja
mahdollisuutta askeltaa koodia joustavasJypessä voi olla kahdenlaista sisältöä ti eteen- ja taaksepäin, kunnes on jälleen
– esimerkkiohjelmia ja harjoituksia. Esi- vakuuttunut ohjelman oikeellisuudesta ja
merkkiohjelmien tarkoitus on mahdollis- jatkaa askeleesta 3.
taa tiettyjen rakenteiden ja käsitteiden
opiskelu pedagogisesti perusteltujen esimerkkien kautta suorituksen askeltamisen
tukemana. Nämä voivat toimia valmis- 3.3 Tekninen toteutus
teluna tehtävälle, jossa tietoja harjoitellaan ja testataan. Tehtävien tarkoitus on Jype on toteutettu Javalla käyttäen Swingmahdollistaa oppijoiden päästä nopeas- käyttöliittymäkirjastoa ja on siten suhteelti ja helposti kokeilemaan pienten ohjel- lisen järjestelmäriippumaton. Sitä voidaan
mien kirjoittamista välittömän automaat- ajaa Java Applettina tai Java Web Start
tisen palautteen tukemana (kuva 3.2). Pa- -sovelluksena webin ylitse, sekä myös
laute koostuu vähintään hyväksytyistä ja paikallisesti asennettuna sovelluksena. Jyepäonnistuneista testeistä, joissa on kuvat- pe tarjoaa ainoastaan ympäristön ohjeltu odotettu lopputulos ja opiskelijan oh- masuoritusten tarkasteluun ja ohjelmoinjelman tuottama tulos. Testien kirjoittaja titehtävien ratkontaan, ja se onkin tarvoi lisäksi liittää jokaiseen testiin kuvauk- koitettu käytettäväksi osana jotain kurssen, mitä testissä tehdään, mikä sitten an- sinhallintajärjestelmää, jota käytetään pataa vihjeen mahdollisesta ohjelman ongel- lautusten tallentamiseen ja hallinnointiin.
masta. Tulosteita verrattaessa opiskelijan Tällä hetkellä Jype sisältää integraation
ohjelman virheellinen tuloste korostetaan. TRAKLA2-järjestelmään [29]. Se mahKiteytettynä oppija käyttäisi järjestelmää seuraavalla tavalla: (1) oppija lukee
tehtävänannon sekä mahdollisen muun
tehtävään liittyvän oppimateriaalin ja alkaa tehdä kokeiluja tehtävään liittyvillä
ohjelman käsitteillä ja rakenteilla käyt10 http://www.jython.org/
11 http://www.jedit.org/
dollistaa kurssin luomisen Jype-tehtävistä
ja henkilökohtaiset käyttäjätilit pisteiden
tallentamiseen ja seuraamiseen. Jype on
rakennettu seuraavia avoimen lähdekoodin kirjastoja käyttäen: Jython10 , Matrix [23] ja jEdit11 .
Helminen
53
4 Yhteenveto
Tutkimusten mukaan visualisointityökalut näyttäisivät tukevan oppimista tehokkaammin, jos ne aktivoivat oppijan pelkän
passiivisen katselun sijaan. Tässä artikkelissa annettiin yleiskatsaus ohjelmoinnin opetuksen ohjelmatyökaluista keskittyen erityisesti ohjelmien visualisointiin
sekä järjestelmiin, joissa sitä on yhdistetty automaattiseen arviointiin. Jype on
uusi web-pohjainen ohjelmoinnin opetustyökalu Pythonille, missä ohjelmointiympäristö on tiiviisti yhdistetty ohjelmavisualisaatioihin ja automaattisesti arvioituihin ohjelmointitehtäviin.
7.
8.
9.
Viitteet
1. A. Ahtiainen, S. Surakka, and M. Rahikainen. Plaggie: GNU-licensed source code plagiarism detection engine for Java
exercises. In Proceedings of the 6th Baltic
Sea conference on Computing education
research: Koli Calling 2006, pages 141–
142. ACM Press, New York, NY, USA,
2006.
2. K.M. Ala-Mutka. A survey of automated
assessment approaches for programming
assignments. Computer Science Education, 15(2):83–102, 2005.
3. J. Bergin. Karel Universe drag & drop
editor. In ITICSE ’06: Proceedings of
the 11th Annual SIGCSE Conference on
Innovation and Technology in Computer
Science Education, pages 307–307, 2006.
4. S. Bridgeman, M.T. Goodrich, S.G. Kobourov, and R. Tamassia. PILOT: An
interactive tool for learning and grading.
SIGCSE Bulletin, 32(1):139–143, 2000.
5. M. Bruce-Lockhart, P. Crescenzi, and
T. Norvell. Integrating test generation
functionality into the Teaching Machine
environment. Electronic Notes in Theoretical Computer Science, 224:115–124,
2009.
6. M.C. Carlisle. Raptor: a visual programming environment for teaching objectoriented programming. Journal of Com-
10.
11.
12.
13.
14.
15.
puting in Small Colleges, 24(4):275–281,
2009.
B. Cheang, A. Kurnia, A. Lim, and W.C.
Oon. On automated grading of programming assignments in an academic institution. Computers & Education, 41(2):121–
131, 2003.
P. Crescenzi and C. Nocentini. Fully integrating algorithm visualization into a CS2
course.: a two-year experience. In ITiCSE ’07: Proceedings of the 12th Annual
SIGCSE Conference on Innovation and
Technology in Computer Science Education, pages 296–300, 2007.
J.H. Cross, T.D. Hendrix, and L.A. Barowski. Integrating multiple approaches
for interacting with dynamic data structure visualizations. In Proceedings of the
5th Program Visualization Workshop, pages 3–10, 2008.
C. Daly and J.M. Horgan. An automated learning system for Java programming. IEEE Transactions on Education,
47(1):10–17, 2004.
B. Du Boulay, T. O’Shea, and J. Monk.
The black box inside the glass box:
Presenting computing concepts to novices". International Journal of Human–
Computer Studies, 51(2):265–277, 1999.
S. Edwards. Using test-driven development in the classroom: providing students
with automatic, concrete feedback on performance. In Proceedings of the International Conference on Education and
Information Systems: Technologies and
Applications EISTA, volume 3, 2003.
Kenneth J. Goldman. An interactive environment for beginning Java programmers. Science of Computer Programming,
53(1):3–24, 2004.
S. Grissom, M.F. McNally, and T. Naps.
Algorithm visualization in CS education:
Comparing levels of student engagement.
In Proceedings of the 2003 ACM Symposium on Software Visualization, pages 87–
94, 2003.
J. Helminen. Jype – an education-oriented
integrated program visualization, visual
debugging, and programming exercise
54
16.
17.
18.
19.
20.
21.
22.
23.
Visualisointi ja automaattinen arviointi ohjelmoinnin opetuksessa
tool for Python. Master’s thesis, Department of Computer Science and Engineering, Helsinki University of Technology,
March 2009.
J. Helminen, L. Malmi, and A. Korhonen. Quick introduction to programming
with an integrated code editor, automatic
assessment and visual debugging tool –
work in progress. In Proceedings of the
9th Koli Calling International Conference
on Computing Education Research, Joensuu, Finland, October 2009.
P. Henriksen and M. Kölling. greenfoot: Combining object visualisation with
interaction. In OOPSLA ’04: Companion to the 19th Annual ACM SIGPLAN
Conference on Object-Oriented Programming Systems, Languages, and Applications, pages 73–82, 2004.
C.A. Higgins, G. Gray, P. Symeonidis,
and A. Tsintsifas. Automated assessment
and experiences of teaching programming. Journal on Educational Resources
in Computing (JERIC), 5(3), 2005.
C.D. Hundhausen, S.A. Douglas, and J.T.
Stasko. A meta-study of algorithm visualization effectiveness. Journal of Visual
Languages and Computing, 13(3):259–
290, 2002.
D. Jackson and M. Usher. Grading student
programs using ASSYST. Proceedings of
the twenty-eighth SIGCSE technical symposium on Computer science education,
pages 335–339, 1997.
M. Joy, N. Griffiths, and R. Boyatt.
The boss online submission and assessment system. Journal on Educational
Resources in Computing (JERIC), 5(3),
2005.
V. Karavirta and A. Korhonen. Automatic tutoring question generation during algorithm simulation. Proceedings of the
6th Baltic Sea conference on Computing
education research: Koli Calling 2006,
pages 95–100, 2006.
A. Korhonen, L. Malmi, P. Silvasti, V. Karavirta, J. Lönnberg, J. Nikander, K. Stålnacke, and P. Ihantola. Matrix – a framework for interactive software visualiza-
tion. Research Report TKO-B 154/04,
Laboratory of Information Processing
Science, Department of Computer Science
and Engineering, Helsinki University of
Technology, Finland, 2004.
24. M. Krebs, T. Lauer, T. Ottmann, and
S. Trahasch. Student-built algorithm visualizations for assessment: flexible generation, feedback and grading. SIGCSE
Bulletin, 37(3):281–285, 2005.
25. M.J. Laakso, E. Kaila, T. Rajala, and
T. Salakoski. Define and visualize your
first programming language. In 8th IEEE
International Conference on Advanced
Learning Technologies, pages 324–326,
2008.
26. T. Lancaster and F. Culwin. A comparison of source code plagiarism detection
engines. Computer Science Education,
14(2):101–112, 2004.
27. T. Lehtonen. Javala – addictive e-learning
of the Java programming language. In
Proceedings of the 5th Annual Finnish
/ Baltic Sea Conference on Computer
Science Education, pages 41–48. University of Joensuu, November 2005.
28. R. Lister. Teaching java first: Experiments with a pigs-early pedagogy. In ACE
’04: Proceedings of the 6th Conference on
Australasian Computing Education, pages
177–183, 2004.
29. L. Malmi, V. Karavirta, A. Korhonen,
J. Nikander, O. Seppälä, and P. Silvasti. Visual algorithm simulation exercise system with automatic assessment:
TRAKLA2. Informatics in Education,
3(2):267–288, 2004.
30. A. Moreno, N. Myller, E. Sutinen, and
M. Ben-Ari. Visualizing programs with
Jeliot 3. In Proceedings of the Working Conference on Advanced Visual Interfaces, pages 373–376, 2004.
31. B. Moskal, D. Lurie, and S. Cooper. Evaluating the effectiveness of a new instructional approach. In SIGCSE ’04: Proceedings of the 35th SIGCSE Technical Symposium on Computer Science Education,
pages 75–79, 2004.
Helminen
32. N. Myller. Automatic generation of prediction questions during program visualization. Electronic Notes in Theoretical
Computer Science, 178:43–49, 2007.
33. T.L. Naps. JHAVÉ – addressing the
need to support algorithm visualization
with tools for active engagement. IEEE
Computer Graphics and Applications,
25(6):49–55, 2005.
34. T.L. Naps, J.R. Eagan, and L.L. Norton.
JHAVÉ—an environment to actively engage students in web-based algorithm visualizations. In SIGCSE ’00: Proceedings
of the 31st SIGCSE Technical Symposium
on Computer Science Education, pages
109–113, 2000.
35. T.L. Naps, G. Rössling, V. Almstrum,
W. Dann, R. Fleischer, C. Hundhausen,
A. Korhonen, L. Malmi, M. McNally,
S. Rodger, et al. Exploring the role ofvvisualization and engagement in computer science education. SIGCSE Bulletin,
35(2):131–152, 2003.
36. T.S. Norvell and M.P. Bruce-Lockhart.
Teaching computer programming with
program animation. In Proceedings of
the 2004 Canadian Conference on Computer and Software Engineering Education, 2004.
37. R.E. Pattis. Karel the robot: a gentle introduction to the art of programming. John
Wiley & Sons, 1994.
38. A. Pears, S. Seidman, L. Malmi, L. Mannila, E. Adams, J. Bennedsen, M. Devlin,
and J. Paterson. A survey of literature
on the teaching of introductory programming. SIGCSE Bulletin, 39(4):204–223,
2007.
39. L. Prechelt, G. Malpohl, and M. Philippsen. Finding plagiarisms among a set of
programs with JPlag. Journal of Universal Computer Science, 8(11):1016–1038,
2002.
40. K.A. Reek. The TRY system - or - how to
avoid testing student programs. SIGCSE
Bulletin, 21(1):112–116, 1989.
41. A. Robins, J. Rountree, and N. Rountree.
Learning and teaching programming: A
55
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
review and discussion. Computer Science
Education, 13(2):137–172, 2003.
G. Rössling and B. Freisleben. ANIMAL:
A system for supporting multiple roles in
algorithm animation. Journal of Visual
Languages & Computing, 13(3):341–354,
2002.
G. Rössling and S. Hartte. WebTasks: online programming exercises made easy. In
ITiCSE ’08: Proceedings of the 13th annual conference on Innovation and technology in computer science education, pages 363–363. ACM, New York, NY, USA,
2008.
G. Rössling and G. Haussge. Towards
tool-independent interaction support.
Proceedings of the Third Program Visualization Workshop, pages 110–117,
2004.
G. Rössling and S. Schneider. An integrated and "engaging"package for tree animations. Electronic Notes in Theoretical
Computer Science, 178:69–78, 2007.
R. Saikkonen, L. Malmi, and A. Korhonen. Fully automatic assessment of programming exercises. SIGCSE Bulletin,
33(3):133–136, 2001.
D. Sanders and B. Dorn. Jeroo: a tool for
introducing object-oriented programming.
In SIGCSE ’03: Proceedings of the 34th
SIGCSE Technical Symposium on Computer Science Education, pages 201–204,
2003.
S.C. Shaffer. Ludwig: an online programming tutoring and assessment system. SIGCSE Bulletin, 37(2):56–60, 2005.
B. Simon, R. Lister, and S. Fincher. Multiinstitutional computer science education
research: A review of recent studies of novice understanding. In 36th Annual Frontiers in Education Conference, pages 12–
17, 2006.
J. Stasko. Software visualization: Programming as a multimedia experience.
MIT Press, 1998.
J. Tenenberg, S. Fincher, K. Blaha,
D. Bouvier, D. Chinn, S. Cooper, A. Eckerdal, H. Johnson, R. McCartney, et al.
Students designing software: a multi-
56
Visualisointi ja automaattinen arviointi ohjelmoinnin opetuksessa
national, multi-institutional study. Informatics in Education, 4(1):143–162, 2005.
52. A.T. Virtanen, E. Lahtinen, and H.M. Järvinen. VIP, a visual interpreter for learning introductory programming with C++.
In Proceedings of The 5th Koli Calling
Conference on Computer Science Education, pages 125–130, 2005.
53. M.J. Wise. YAP3: improved detection of
similarities in computer program and other texts. SIGCSE Bulletin, 28(1):130–
134, 1996.