User Tools

Site Tools


codeq:vivid2015

This is an old revision of the document!


Članek za eno najprestižnejših konferenc na območju osrednje Slovenije. Navodila za oblikovanje članka.

Uvod

  • motivacija - bluzenje iz projekta

Pregled aplikacije

Letos smo na vajah pri predmetu Principi programskih jezikov uporabljali prototipno različico spletne aplikacije za poučevanje prologa. V tem razdelku bomo opisalo splošno delovanje aplikacije, v nadaljevanju pa se bomo posvetili podrobnejšemu pregledu izbranih komponent. Slika 1 prikazuje uporabniški vmesnik aplikacije.

Slika 1. (a) Izbira naloge. (b) Urejevalnik.

Kot večina računalniških sistemov za poučevanje tudi naš pristop temelji na reševanju problemov. Glavni meni (slika 1a) tako vsebuje seznam nalog, ki so na voljo za reševanje. Za vsakega uporabnika sistem vodi evidenco nalog, ki jih je rešil delno ali v celoti; v seznamu je to označeno z sivim oziroma zelenim krogcem pred imenom naloge. Prav tako je prikazan delež nalog, ki jih je uporabnik rešil v posamezni kategoriji.

Slika 1b prikazuje vmesnik za reševanje nalog. Naloga na sliki zahteva definicijo relacije “X je sestra od Y” z uporabo podatkov o starševstvu in spolu. Družinsko drevo, ki predstavlja te podatke, je na sliki 2. Na isti sliki je tudi grafični prikaz zahtevane relacije.

% slika 2 (a = družinsko drevo ; b = grafični hint za sister/2)

Uporabnikova rešitev na sliki 1b je skoraj pravilna, manjka le še pogoj, da X in Y nista ista oseba (brez tega pogoja bo prolog namreč sklepal, da je vsaka ženska sestra sama sebi). Ista slika vsebuje tudi primere različnih tipov povratnih informacij, ki jih generira naš sistem; podrobneje jih bomo razložili v naslednjih razdelkih.

Trenutna različica spletne aplikacije je dokaj osnovna, a vsebuje vse poglavitne komponente, ki jih imajo podobni sistemi:

  1. razlago naloge in primere;
  2. urejevalnik programske kode, kamor uporabnik piše svojo rešitev;
  3. možnost izvajanja poljubnih poizvedb;
  4. testiranje pravilnosti programov s pomočjo testnih primerov in
  5. možnost takojšnjih individualiziranih povratnih informacij.

Poleg tega ima uporabnik možnost vpogleda v že rešene programe, ki jih lahko uporablja pri pisanju novih rešitev.

Ob koncu semestra smo opravili neformalno anketo, s katero smo želeli oceniti zadovoljstvo študentov z aplikacijo. Odzivi študentov so bili pretežno pozitivni, predlagali pa so tudi vrsto možnih izboljšav. Mnenja iz ankete bomo podrobneje predstavili v sledečih razdelkih; tukaj navajamo le nekaj splošnih vtisov, ki izpostavljajo prednosti takega pristopa k vajam:

Overall dobra aplikacija. Všeč mi je to, da mi ni bilo potrebno doma nastavljati določenih stvari, nalagati knjižnice, etc ampka je bilo vse na voljo na internetu.
Aplikacija je v splošnem super, saj se z njo dosti lažje učiš kot pa če bi moral programirati in preverjati pravilnost svoje rešitve v programu, kjer tudi nimaš na voljo avtomatskega preverjanja pravilnosti rešitve tako kot ste si jo zamislili.

Izbrane funkcije

Testni primeri

Najosnovnejša funkcija sistemov za poučevanje je možnost preverjanja rešitev. Pred uvedbo spletne aplikacije so študenti na vsakih vajah poleg novih nalog dobili še “uradne” rešitve za naloge prejšnjega tedna, s katerimi so lahko preverili svoje rešitve. Tak pristop ima dve očitni slabosti: študent lahko nalogo reši na drugačen način, zaradi česar je rešitvi težko primerjati; poleg tega pa lahko med reševanjem naloge in povratno informacijo mine precej časa.

Ker je v splošnem nemogoče samodejno preveriti, ali dan program pravilno opravlja neko funkcijo, sistemi za poučevanje programiranja ponavadi za preverjanje rešitev uporabljajo testne primere. Učitelj za vsako nalogo določi množico testnih vhodov, sistem pa preveri odgovore, ki jih uporabnikov program vrne pri teh vhodih. Dan program sprejmemo kot pravilno rešitev takrat, ko pravilno reši vse testne primere. Na ta način pokrijemo vse možne rešitve, ki se lahko konceptualno precej razlikujejo. Primer testnega vhoda za nalogo sister/2 iz prejšnjega razdelka je vprašanje

?- sister(vanessa,vanessa).

Pravilen program odgovori “false”, medtem ko napačen program iz slike 1b odgovori “true”. Glede na kombinacijo pravilno in narobe rešenih testnih primerov lahko sklepamo o prisotnosti določenih konceptualnih napak v programu. V zgornjem primeru lahko tako z veliko gotovostjo sklepamo, da v rešitvi manjka pogoj, da X in Y nista ista oseba.

Kljub široki uporabi imajo testni primeri nekaj pomanjkljivosti. Prva je ta, da ne zagotavljajo, da je nek program pravilna rešitev dane naloge, temveč le, da uspešno prestane vse teste. Ta problem rešujemo s premišljeno izbiro testnih primerov, ki jih v primeru napak tudi posodabljamo.

Drug problem je ta, da morajo za uspešno preverjanje vsaj nekateri testni primeri ostati skriti. V nasprotnem primeru bi uporabnik lahko spisal program, ki vrne pravilni odgovor samo za dane vhode, sistem pa bi ga sprejel kot pravilno rešitev naloge. Po drugi strani pa skriti testni primeri lahko predstavljajo problem:

Ni izpisa testnih primerov. Se je zgodilo, da sam nisem mogel najti protiprimera s katerim bi našel napako v programu, testiranje pa ni bilo 100%.

Naključni protiprimeri

Ta problem smo rešili tako, da smo v sistem dodali funkcijo za generiranje naključnih testnih primerov. Kadar uporabnik pošlje nepravilen program v testiranje, mu sistem poleg števila opravljenih testov izpiše še protiprimer, za katerega uporabnikov program vrne nepravilni odgovor.

Delovanje te funkcije si oglejmo na primeru predikata gcd(A,B,D), ki poišče največji skupni delitelj D števil A in B. Za vsako nalogo definiramo vzorec, na podlagi katerega sistem generira naključne kombinacije vhodnih podatkov; za predikat gcd(A,B,D) je ta vzorec

[int(1,100),int(1,100),out].

To pomeni, da sta prva dva argumenta celi števili med 1 in 100, zadnji argument pa predstavlja izhod programa - v tem primeru največji skupni delitelj izbranih števil. Ko uporabnik pošlje nepravilen program v testiranje, sistem najprej zgenerira nov nabor vhodnih podatkov (v tem primeru dve števili). Na tem vhodu požene pravilno rešitev in uporabnikov program. Če sta rezultata enaka, postopek ponovi, v nasprotnem primeru pa vrne generiran vhod kot protiprimer, na katerem uporabnikov program ne deluje pravilno.

To funkcionalnost smo kot manjši dodatek implementirali šele po začetku semestra, a se je hitro izkazala za eno najuporabnejših orodij v našem sistemu. Protiprimei so v veliko pomoč študentu pri iskanju napak v programu, saj lahko na njih simulira izvajanje programa in tako hitreje odkrije mesto napake.

Iz tehničnih razlogov smo naključne protiprimere zaenkrat implementirali le za določene naloge. Na njihovo uporabnost najbolje kažejo izjave študentov, ki so jih pri drugih nalogah pogrešali:

Izpis protiprimera v VSEH primerih bi bil odličen.
Glavni problem je bil to, da pri veliko nalogah ne izpiše protiprimerov, kar bi zelo olajšalo lovljenje hroščev.

Vnaprej definirani namigi

Samodejno odpravljanje napak

Dodatna prednost uporabe računalniških sistemov za poučevanje je, da nam omogočajo podrobno analizo različnih postopkov reševanja nalog. Naš sistem v ta namen za vsak poskus hrani podrobno sled reševanja. Ta sled vključuje vse spremembe na programski kodi – vstavljanje oziroma brisanje znakov – in ostale interakcije s spletno aplikacijo, kot je izvajanje poizvedb in testiranje rešitve.

V spletno aplikacijo smo vključili metodo za samodejno odpravljanje napak, ki jo razvijamo v našem laboratoriju~\cite{lazar2014data}.

Poigritev

Nazadnje omenimo še en vidik aplikacije, na katerega v začetku nismo pomislili, a se je hitro izkazal za bistveno prednost pred obstoječim načinom dela na vajah. Gre za t.i. “poigritev” (angl. gamification) oziroma uporabo elementov iz računalniških iger v drugih aplikacijah. Tipičen primer takega prijema je podeljevanje značk (angl. badges) uporabnikom za razne dosežke, kot npr. pravilna rešitev v prvem poskusu ali v zelo kratkem času. Poigritve so v osnovi namenjene motivaciji in ohranjanju zanimanja za aplikacijo, saj uporabniku predstavljajo jasen cilj.

Naš sistem ne vsebuje nobenih funkcionalnosti, ki bi bile primarno namenjene poigritvi. Kljub temu pa se je izkazalo, da že uvodni zaslon s seznamom nalog opravlja podobno funkcijo. Študent namreč vidi, koliko nalog je na voljo v vsakem poglavju in koliko jih še mora rešiti.

Diskusija

codeq/vivid2015.1436801741.txt.gz · Last modified: 2015/07/13 17:35 by timotej