Univerza V ljubljani fakulteta za matematiko in fiziko

FAKULTETA ZA MATEMATIKO IN FIZIKO
Matematika – praktična matematika (VSŠ)
Igor Efremov
CODERUNNER: ORODJE ZA AVTOMATSKO PREVERJANJE ZNANJA IZ PROGRAMIRANJA
Diplomska naloga
Ljubljana, 2016
ZAHVALA
Zahvaljujem se mentorju mag. Matiji Lokarju za strokovno pomoč, podporo, dosegljivost ter potrpežljivost pri pisanju diplomske naloge. Zahvaljujem se tudi somentorju dr. Gregorju Jeršetu za strokovno pomoč in moralno podporo. Največja zahvala gre družini, prijateljem in partnerki, ki so me v času študija podpirali in mi stali ob strani.
Kazalo
1 Uvod 6
1.1Orodja za avtomatsko preverjanje znanja iz programiranja 6
2 CodeRunner 8
2.1 Kaj je CodeRunner 8
2.1.1 Uporaba CodeRunnerja 12
2.2 Delovanje CodeRunnerja 13
2.2.1 Tipi vprašanj v CodeRunnerju 14
3 Namestitev sistema CodeRunner 16
3.1 Namestitev vtičnika CodeRunner v sistem Moodle 16
3.2 Postavitev Jobe strežnika 20
3.2.1 Zaščita strežnika z API-ključem 21
4 Uporaba CodeRunnerja s strani študenta 24
4.1 Reševanje kviza 24
5 Sestavljanje vprašanj v CodeRunnerju 30
5.1 Sestavljanje vprašanja 30
5.1.1 Predloge 38
5.1.2 Napredna uporaba predlog 43
5.2 Primeri sestavljanja vprašanja 48
5.2.1 Vprašanje tipa 'napiši funkcijo' 48
5.2.2 Vprašanje tipa 'napiši program' 60
6. Naloge na praktičnih primerih 67
6.1 Delitelji števila 68
6.2 Produkt števil v seznamu 81
6.3 Izpis kvadratov števil od 1 do n 94
7 Zaključek 105
8 Spletni viri 106
Program diplomske naloge
V diplomski nalogi predstavite orodje za avtomatsko preverjanje programske kode CodeRunner. Opišite način namestitve in kako s tem orodjem sestavljamo ustrezne naloge za programski jezik Python. V sklopu diplomske naloge sestavite tudi osnovno banko vprašanj, ki jo lahko uporabimo za sestavljanje testov, ki preverjajo osnovno poznavanje programskega jezika Python.
mentor: viš. pred. mag. Matija Lokar
somentor: dr.Gregor Jerše
Povzetek
V praksi se je izkazalo, da se programiranja najlažje naučimo tako, da napišemo čim več programov. Tako iz leta v leto narašča število spletnih učilnic in orodij, ki poleg učnega gradiva ponujajo še preverjanje znanja na praktičnih nalogah v obliki kvizov. V ta namen so razvili tudi orodje CodeRunner.
V diplomski nalogi smo predstavili uporabo orodja CodeRunner in njegovo namestitev v sistem Moodle. Podrobneje smo predstavili sestavljanje vprašanj in testnih primerov, ki se uporabljajo za avtomatsko preverjanje vprašanj. Sestavni del diplomske naloge je tudi zbirka sestavljenih vprašanj, razporejenih v različne kategorije. Vprašanja lahko uporabimo za sestavljanje kvizov, ki preverjajo osnovno znanje programiranja v programskem jeziku Python 3.Vprašanja so priložena k diplomski nalogi v obliki xml datotek.
Math. Subj. Class. (2010): 68N19
Ključne besede: CodeRunner, programiranje, predloge, testni primeri, programiranje, avtomatsko preverjanje znanja iz programiranja, spletno izobraževanje
Keywords: CodeRunner, programming, templates, test cases, automatic assessing of computer programming skills, online education
1 Uvod
CodeRunner je orodje za avtomatsko preverjanje znanja iz programiranja, ki deluje kot vtičnik v sistemu Moodle. V diplomski nalogi se bomo osredotočili na orodje CodeRunner s predpostavko, da sistem Moodle že poznamo. Več o sistemu Moodle si lahko preberemo v diplomski nalogi Kvizi v spletni učilnici Moodle[Bar08].
Orodja za avtomatsko preverjanje znanja iz programiranja
Programiranje je veščina, ki se je ni lahko naučiti. Gregor Jerše, Sonja Jerše, Matija Lokar in Matija Pretnar so avtorji članka [Ppe15], v katerem trdijo, da se je v praksi izkazalo, da se programiranja najlažje naučimo tako, da sami napišemo čim več programov oziroma rešimo čim več nalog iz programiranja. Dober in hiter odziv pri oddaji nalog je ključnega pomena za hitro napredovanje. V prizadevanju, da učitelji prihranijo čas, je bilo razvitih veliko orodij za avtomatsko preverjanje znanja iz programiranja.
Nekaj teh orodij deluje s pomočjo spletnih strežnikov, ki so postavljeni v ta namen. Primer takega orodja sta Codechef[Cod09] ali Putka[Putka]. Študent pošlje svojo kodo na strežnik, le-ta jo nato požene, preveri njeno delovanje in takoj poroča o morebitnih napakah brez učiteljevega posega. S takšnim odzivom študenti hitreje napredujejo, saj so nemudoma seznanjeni z morebitnimi napakami v njihovih kodah.
Tak pristop zahteva precej močan strežnik, saj mora izvajati in preverjati poslane programe vseh študentov, ki pa svoje rešitve pogosto pošiljajo ob istem času. Obenem je izrednega pomena previdnost glede varnosti, saj pošiljamo na strežnik pošiljamo zunanjo kodo. Ti strežniki imajo tudi pomanjkljivost, in sicer učiteljem običajno ne dopuščajo vpogleda v študentove odgovore. Študenti so tako izpostavljeni visoki ravni samostojnega učenja in eksperimentiranja, čeprav je večina takih nalog na osnovni ravni. Morebitna težava se kaže tudi v tem, da študenti za pripravo odgovora (programa) ne morejo uporabiti svojega programskega okolja, ker strežnik zahteva drugega.
Vse zgoraj omenjene težave privedejo do tega, da se večina teh orodij uporablja v okvirjih ustanov, kjer so bila ustvarjena. Zaradi različnega pristopa učenja in nezmožnosti prilagajanja pogosto niso uporabna na drugih lokacijah.
Primer dobrega učnega orodja, ki skorajda nima zgoraj naštetih pomanjkljivosti, je sistem Moodle. Učitelj ima vpogled v vso študentovo aktivnost v učilnici. V svoji bazi ima več vtičnikov za različne tipe vprašanj. Moodlovo bazo lahko nadgradimo z vtičnikom CodeRunner, orodjem za avtomatsko preverjanje znanja iz programiranja. Orodje CodeRunner uporablja za izvedbo nalog samostojen strežnik Jobe, ki premore izvajanje številnih nalog hkrati, prav tako pa je varen za uporabo, saj ga lahko zaščitimo.
V diplomski nalogi bomo predstavili uporabo orodja CodeRunner, ki ga je zasnoval Richard Lobb s pomočjo Jenny Harlow z Univerze Canterbury na Novi Zelandiji[Cod16]. Ogledali si bomo osnovne značilnosti tega vtičnika in postopek njegove namestitve. Prav tako bomo predstavili, kako s strani študenta poteka reševanje testa, ki ga sestavljajo naloge, pripravljene s sistemom CodeRunner. Glavnina opisovanja bo posvečena opisu, kako se sestavijo različna vprašanja, ki se kasneje lahko uporabijo pri sestavljanju testa. Sestavni del diplomske naloge je tudi banka vprašanj, pripravljena v okolju Moodle. S pomočjo teh vprašanj lahko sestavimo različne kvize, ki pokrivajo osnovni tečaj iz programskega jezika Python[Pyt90].
Zaradi težav z nepopolnim prevodom tako sistema Moodle kot tudi samega orodja CodeRunner v slovenščino smo uporabljali nastavitev sistema Moodle v angleškem jeziku. Vse slike so tako povzete iz sistema, kjer je Moodle nastavljen na uporabo angleščine.
2 CodeRunner
2.1 Kaj je CodeRunner
CodeRunner je brezplačni odprtokodni vtičnik, ki se uporablja za razširitev sistema Moodle. Ko ga namestimo, dobimo v Moodlu poleg ostalih vgrajenih tipov vprašanj (več izbire, kratek odgovor, drži/ne drži...)še en dodaten tip (Slika 1).
Slika 1: CodeRunner je nov tip vprašanja
Če si izberemo tak tip vprašanja, lahko sestavljavec vprašanja (v nadaljevanju učitelj) sestavi vprašanje, katerega odgovor je ustrezna programska koda. Trenutno podpira naslednje programske jezike:
Python 2 in 3
C
JavaScript
PHP5
Octave(Matlab)
V nadaljevanju si bomo podrobneje pogledali sestavljanje vprašanj v programskem jeziku Python3.
Omeniti je potrebno, da je možna nadgradnja vtičnika z načinom podpiranja drugih programskih jezikov. Ker je koda odprta, lahko to za želeni programski jezik naredimo sami. To je toliko lažje, saj je sama koda dobro dokumentirana in ima pregledno ter preprosto strukturo.
prikazuje primer vprašanja, sestavljenega v CodeRunnerju.
|