Tietorakenteiden ja algoritmien oppimisympäristö LEAD
Learning Environment for Algorithms and Data structures
Tarkennettu projektisuunnitelma WWW-TRAKLAn kehittämisestä
1 Osaprojektin yleiskuvaus
Projektin tavoitteena on kehittää opiskelijoita varten oppimisympäristö,
jossa he voivat opiskella tietorakenteiden ja algoritmien toimintaa. Eräs
projektin kannalta keskeinen kehittämiskohde ja osa-alue on WWW-TRAKLA.
Kyseessä on tietorakenteiden ja algoritmien opetukseen tarkoitettu
tehtäväkokoelma ja ohjelmisto (TRAKLA), joka kykenee arvostelemaan
opiskelijoiden palauttamia vastauksia automaattisesti. WWW-TRAKLAn kehittämisessä
keskeinen paino on TRAKLA-järjestelmän toiminnallisuuden siirtämisessä
WWW:hen ja samalla ohjelmiston päivittäminen vastaamaan paremmin
tämän päivän tarpeita ja vaatimuksia. Seuraavassa on
esitetty tarkennettu projektisuunnitelma siitä, kuinka WWW-pohjaista
TRAKLAA ja siihen kiinteänä osana liittyvää graafista
käyttöliittymään TraklaEditiä on tarkoitus kehittää.
2 Alkuperäisen projektisuunnitelman osaprojektin kuvaus
TRAKLA-EDITissä on useita kehitystarpeita. Ensinnäkin sen tulee
pystyä toimimaan itsenäisenä sovelluksena, joka ei kommunikoi
enää sähköpostitse TRAKLAn kanssa. Toiseksi, sen tietoturvallisuus
tulee miettiä tarkasti. Kolmanneksi, siihen tarvitaan suuri joukko
uusia tehtäviä, joita on jo implementoitu TRAKLAssa, mutta ei
vielä editorissa. Näiden lisäksi voidaan miettiä uusia
tehtäviä, joita ehkä ei lainkaan kannata toteuttaa TRAKLAan,
mutta joiden graafinen havainnollistaminen TRAKLA-EDITin avulla voisi olla
järkevää.
TRAKLAn tulee pystyä generoimaan tehtävien malliratkaisut
siten, että TRAKLA-EDIT voi esittää ratkaisun (toimintosekvenssinä,
jota opiskelija voi selata edestakaisin). Lisäksi TRAKLA voi antaa
palautetta opiskelijan ratkaisuissa olleista virheistä ja TRAKLA-EDITin
tulee pystyä välittämään tämä palaute
oikeassa kohdassa opiskelijalle näkyviin.
TRAKLA-EDITiä voidaan käyttää oppimateriaalin tukena
siten, että se tarjoaa helpon mahdollisuuden esittää vuorovaikutteinen
esimerkki jonkin algoritmin toiminnasta. Verrattuna tavanomaiseen algoritmianimaatioon
TRAKLA-EDITin etuna on se, että algoritmia voi kelata edestakaisin
ja se, että mukaan voidaan helposti lisätä tekstuaalista
selostusta, joka vaiheistetaan simulaatioesimerkin kanssa. Samaa esitysmuotoa
voidaan käyttää myös palautteen antamiseen opiskelijan
vastauksesta.
3 Tarkennettu kuvaus
Osaprojekti voidaan jakaa luontevasti useaan pienempään osaan.
Seuraavassa on kuvattu nämä osuudet. Osat voidaan toteuttaa osittain
rinnakkain. Yleisesti koko uusi järjestelmä kirjoitetaan Javalla
ja se kommentoidaan ja dokumentoidaan englanniksi, lukuunottamatta käyttäjille
tulevia ohjeita, jotka kirjoitetaan sekä suomeksi että englanniksi.
Osaprojektin tulisi alustavasti olla valmiina vuoden 1998 loppuun mennessä.
Kuitenkin siten, että testiversio järjestelmästä on
käytössä jo syksyllä. Tällöin osa uusista
tehtävistä voi olla vielä toteuttamatta. Osaprojektin suunnittelu
jatkuu toukokuun loppuun saakka. Järjestelmän osien implementaatio
alkaa jo toukokuussa siltä osin, kuin mahdollista.
3.1 C/Java-rajapinta
Koska uudistettava järjestelmä on tarkoitus toteuttaa Javalla,
tulee vanhan ja uuden järjestelmän välinen rajapinta kommunikaation
suhteen toteuttaa sopivasti, ottaen huomioon ainakin seuraavia seikkoja:
kommunikaatiorajapinnan toteutus
tietoturvakysymykset
järjestelmän virheistä toipuminen
järjestelmän suorituskyky
Kommunikaatiorajapinnan toteutuksessa on oleellisesti kaksi eri vaihtoehtoa.
Joko Java-pohjainen toteutettava järjestelmä kommunikoi Javan
natiivirajapinnan avulla vanhan järjestelmän kanssa, jolloin
se voi hyödyntää vanhan TRAKLA-järjestelmän C-kielisiä
osia tai uusi järjestelmä asennetaan vanhan "päälle"
siten, että vanha C-kielinen TRAKLA-järjestelmä osaa sopivalla
tavalla kutsua Java-pohjaisia uusia moduuleita. Valinta riippuu mm. siitä,
kuinka paljon vanhasta järjestelmästä on jatkossa tarkoitus
hyödyntää uudessa järjestelmässä. Aluksi
on ehkä tarkoituksenmukaista pyrkiä hyödyntämään
vanhaa järjestelmää mahdollisimman paljon, jolloin koko
järjestelmää ei tarvitse kirjoittaa uudelleen. Tällöin
uusi Java-pohjainen järjestelmä voidaan nähdä vanhan
järjestelmän eräänä osana, joka toteuttaa sille
asetetut vaatimukset. Keskeisimmät uudistettavat osat ovat tehtävien
räätälöinti (tailor) ja niiden tarkastaminen (check).
Tutkimus ja toteutussuunnitelma: tutkitaan, mitä eri vaihtoehtoja
on olemassa C- ja Java-kielisten ohjelmien liitämiseksi toisiinsa.
Samalla kartoitetaan mitä turvallisuusriskejä mahdollisesti vaihtoehtoihin
liittyy ja kuinka järjestelmän virheistä toipuminen on mahdollista
toteuttaa. Lisäksi on syytä tutkia eri vaihtoehtojen vaikutusta
koko järjestelmän suorituskykyyn. Toteutusosassa toteutetaan
joidenkin C- ja Java-kielisten ohjelmien kommunikaatiorajapinta. Tässä
voidaan hyödyntää esimerkiksi TRAKLA-järjestelmän
tailor-moduulia ja tutkia kuinka siitä voitaisiin kutsua Java-pohjaista
tehtävän räätäliä ja/tai rakentaa Java-pohjainen
"tailor", joka kutsuu TRAKLAn C-kielellä kirjoitettuja tehtäväkohtaisia
tailor-moduuleja.
AIkataulu: toukokuun loppuun mennessä
3.2 Common tailor -luokan toteutus
Eräs keskeinen projektin osa-alue on tehtävien räätälöinti
ja sen toteutuksen implementointi. Implementaatio riippuu pitkälti
kohdassa 3.1 saaduista tuloksista. Oleellista kuitenkin on, että vanhan
TRAKLA-järjestelmän mukaisesta tavasta toteuttaa erillinen räätälöintiohjelma
jokaiselle tehtävälle luovutaan. Uuden toteutuksen keskeisiä
piirteitä ovat seuraavat:
järjestelmässä on vain yksi geneerinen tailor (räätäli),
joka osaa tuottaa sopivaa dataa kaikkiin järjestelmän tuntemiin
tietorakenteisiin
tietorakenteet nähdään järjestelmässä olioina
tietorakenneoliot toteuttavat tietorakennerajapinnan
algoritmit (algoritmiset tehtävät) ovat myös olioita, jotka
kommunikoivat tietorakenteiden kanssa
algoritmioliot toteuttavat algoritmirajapinnan
Räätäliä kutsutaan sopivalla parametrillä,
joka identifioi räätälöitävän tehtävän.
Tehtävä muodostuu
otsikkokentästä,
tehtävänannosta,
makrokielestä,
tehtäväappletin määrittelystä ja
esimerkistä.
3.2.1 Parseri
Räätälin tehtävänä on rakentaa (parseri)
HTML-muotoinen tehtävä edellä mainituista osista. Osasten
esitystapa ja tallennusmuoto jätetään vielä toistaiseksi
avoimeksi. Makrokielellä määritellään tehtäväpohjaan
tulevat muuttuvat tiedot, kuten esimerkiksi opiskelijanumero ja tehtäväkohtainen
muuttuva data. Common tailorissa tuleekin toteuttaa lisäksi eräänlainen
puppugeneraattori, joka osaa tuottaa tehtäväkohtaista dataa halutulle
tietorakenteella. Data on erilainen eri opiskelijoille.
3.2.2 Puppugeneraattori
Puppugeneraattorin tehtävänä on tuottaa sopivaa dataa, jolla
tehtävien tietorakenteet alustetaan. Haasteena on toteuttaa luokka,
joka kykenee tuottamaan dataa tehtävän haluamilla reunaehdoilla.
Esimerkki: tehtävässä on tarkoitus lisätä binääriseen
hakupuuhun annetut alkiot annetussa järjestyksessä.
Tarvittavat tietorakenteet: taulukko (tai tietovuo), jossa lisättävät
alkiot sekä binääripuu
Parametrit: lisättävien alkioiden lukumäärä
N
Algoritmi: insertTree
Tyypillisesti graafisessa esityksessä on tarkoitusenmukaista pitäytyä
tapauksissa, joissa puun korkeus < 6. Tällöin, esimerkiksi
jos N=10, tulee alustettavan taulukon toteuttaa reunaehto, joka riippuu
tehtävän sisältämästä algoritmista. Mikä
tahansa satunnainen alkioiden järjestys ei käy. Tätä
varten puppugeneraattorin tulee kutsua (samaa kuin tehtävän tarkastuksessa)
käytettävää algoritmia ja pyytää tätä
verifioimaan käytettävä data (onko sillä ominaisuus,
että puun korkeus jää < 6). Algoritmin rajapinta vaatii
siis ainakin metodin isValid(), joka on algoritmikohtainen ja joka palauttaa
TRUE, jos algoritmille annettu data täytti tehtävälle asetettavan
datan vaatimukset.
Edellä esitetty voitaisiin toteuttaa esimerkiksi makrolla, joka
olisi vaikkapa muotoa
$String(10, insertTree())
joka kertoisi, että kyseiseen kohtaan tehtäväpohjaa alustetaan
dataa, joka on merkkijono (alkiot ovat kirjaimia) ja joka toteuttaa insertTree()
-algoritmissa määritellyt reunaehdot.
Parserin tehtäväksi jää näinollen kutsua puppugeneraattorissa
sopivaa konstruktoria, joka osaa tuottaa merkkijonoja ja välittää
annetut parametrit tälle. Konstruktoreita tulee luonnollisesti olla
useita samoin kuin erilaisia makroja, joilla dataa voidaan luoda. Seuraavassa
on lueteltu joitain parametrejä, joita makrojen tulisi huomioida ja
osata:
erilaiset merkkijonoesitykset
erilaiset numeromuotoiset esitykset
muut tietorakenteet, kuten vieruslistat, matriisit jne.
tehtäväkohtainen siemenluku
tehtäväkohtaiset erityisvaatimukset (esim. 1. alkion valinta
pienemmästä joukosta kuin muiden)
esitysmuodon valinta
sama rakenne useassa eri kohdassa
Siemenluvun ideana on pystyä tuottamaan sama data eri tehtäviin
samalle opiskelijalle (sama siemenluku eri tehtävissä) tai haluttaessa
eri data (eri siemenluku eri tehtävissä). Esitysmuotomuunnokset
tulee toteuttaa erillisenä luokkana, joka osaa muuntaa eri esitysmuotoja
toisiksi. Esimerkiksi matriisi <-> vieruslista. Lisäksi muunnoksen
tulee osata esittää sama rakenne sekä "ihmisen luettavassa"
muodossa että TraklaEditille jossakin kompaktissa esitysmuodossa.
Tehtäväkohtaisia erityisvaatimuksia voi toteuttaa sikäli
kun ne ovat geneerisiä ja niistä on yleistä hyötyä.
Esimerkiksi binääripuutehtävässä tietorakenteen
alustus voi nopeutua merkittävästi, jos 1. alkio valitaan aakkoston
keskeltä. Satunnaislukugeneraattorin tulee olla deterministinen, eli
sama "satunnainen" rakenne tulee pystyä tuottamaan uudelleen tehtävän
tarkastusvaiheessa. Lisäksi on syytä huomata, että tuotettava
rakenne voi esiintyä tehtävänannossa useassa eri kohdassa,
jolloin makron eri kutsukerroilla tulee makron palauttaa sama rakenne (ellei
esimerkiksi siemenluvulla erikseen toisin määritellä).
Oleellisesti kyseessä on kaksi esitysmuotoa tehtäville. Toisessa
tehtävä tulee kyetä rakentamaan sanalliseen muotoon lähetettäväksi
esimerkiksi sähköpostilla. Toisessa esitysmuodossa rakenteet
ovat ohjelman sisäisiä. Tässä voisi ajatella, että
generaattori palauttaakin tietorakenteen, joka on valmiiksi alustettu.
Tietorakenteiden tulee tällöin toteuttaa tietorakennerajapinta,
joka määrittelee kuinka uusi rakenne luodaan ja alustetaan.
3.2.3 Toteutussuunnitlema ja aikataulu
Tutkimus ja toteutussuunnitelma: tutkitaan erilaisia tehtäviä
ja pyritään johtamaan niistä mahdollisimman yleinen makrokieli,
johon toteutusvaiheessa joudutaan tekemään mahdollisimman vähän
tehtäväkohtaisia lisäyksiä. Pohjana suunnittelussa
kannattaa käyttää TRAKLAn vanhoja tehtäviä. Toteutusvaiheessa
räätälöintiohjelma toteutetaan ja sitä testatataan
projektin aikana kehitettyjen uusien algoritmisten tehtävien kanssa.
Aikataulu: toteutetaan kesäkuun aikana
3.3 Tehtävien suunnittelu ja toteutus
Tehtävien suunnittelu ja toteutus sisältää seuraavien
rajapintojen määrittelyt ja toteutukset sekä implementaatiokysymykset:
algoritmirajapinnan määrittely
tietorakennerajapinnan määrittely
rajapinnat toteuttavien algoritmien implementointi
rajapinnan toteuttavien tietorakenteiden implementointi
tehtävien esitysmuodon ja kielen suunnittelu ja toteutus
Algoritmit tulee siis imlementoida siten, että ne toteuttavat algoritmirajapinnan.
Lisäksi niiden tulee käyttää vain tietorakennerajapinnan
mukaisia tietorakenteita. Tehtävien esitysmuodon valinta riippuu pitkälti
kohdassa 3.2 saaduista tulokista. Eräs tapa on toteuttaa tehtävät
kuten ne on toteutettu vanhassa TRAKLA-järjestelmässä, jossa
jokaiselle tehtävälle on erillinen tehtäväpohja sekä
sähköpostia että WWW:tä varten (kahdella eri kielellä).
Jatkossa voisi tutkia mahdollisuutta tallettaa tehtävät osina
tietokantaan, josta ne voidaan tailorilla "koota" joko sähköpostia
tai WWW:tä varten. SÄhköpostiversion hyödyllisyys tulee
lisäksi pohtia tarkkaan, koska jatkossa tehtävien palauttaminen
sähköpostilla ei ole mahdollista (tai mielekästä).
Oleellista kuitenkin on, että tehtäväkohtainen informaatio
tulee olla helposti konstruoitavissa sekä WWW:ssä että tehtävän
tarkastusvaiheessa.
Tutkimus ja toteutussuunnitelma: aluksi toteutetaan muutamia testiversioita
erityyppisistä tehtävistä. Rajapinnat määrittyvät
tarkemmin toteutusvaiheessa. Tehtävien esitysmuoto tulee lyödä
lukkoon mahdollisimman varhain, kunhan suunnitteluvaihe on tarpeeksi pitkällä.
Aikataulu: suunnitteluvaiheeseen varataan koko toukokuu, toteutus aloitetaan
osin toukokuussa. Testiversio tulee olla valmis syksyllä.
3.4 Perustietorakenteen suunnittelu ja toteutus
Tietorakenteiden näkeminen olioina perustuu ajatukseen, jossa kaikki
algoritmeissa käytettävät tietorakenteet on johdettu jostakin
sopivasta geneerisestä perustietorakenteesta. Kyseisen rakenteen tarkoituksena
on toteuttaa rajapinta TRAKLA:n ja TraklaEditin välille. Perusrakenteen
manipulointi (käytettävä johdettu rakenne välittää
kutsut perusrakenteelle) johtaa toimintosekvensiin, josta algoritmin toiminta
ja vastaavasti tehtävän ratkaisu TraklaEditillä voidaan
verifioida. Tehtävän tarkastus on oleellisesti tämän
jälkeen näiden kahden sekvenssin vertailua. Uuden algoritmin
lisääminen on tällöin helppoa, koska sitä varten
ei tarvitse tehdä erikseen tarkastusohjelmaa, vaan ainostaan määritellä
tarkastuksessa käytettävät perusteet.
Tutkimus ja toteutussuunnitelma: toteutetaan aluksi testiversio, jolla
pyritään kartoittamaan ajatukseen liittyvät ongelmat ja
reunaehdot. Jatkossa toteutetaan kieli, joka kuvaa perusrakenteen
muutoksia.
Aikataulu: touko-kesäkuu, kehitystyö kielen osalta jatkuu
syksyyn.
3.5 TraklaEditin mukauttaminen uuteen järjestelmään
TraklaEditiin joudutaan tekemään lukuisia muutoksia, jotta se
saadaan ymmärtämään uutta järjestelmää.
Tätä työtä on tarkoitus tehdä sitä mukaa,
kun järjestelmän kehitys etenee. Tarkoitus on kuitenkin hyödyntää
TraklaEditissä samoja tietorakenteita, jotka toteutetaan WWW-TRAKLAan.
Tällöin esimerkiksi kohdassa 3.4 esitetyn kielen implementointi
tehdään vain kerran ja tulos voidaan adoptoida TraklaEditiin
suoraan. Oleellisesti TraklaEditiin tulee tällöin implementoida
ainoastaan mekanismi, jolla kuvaus voidaan lähettää tarkastusta
varten. Tietorakennerajapinnassa tulee ottaa huomioon TraklaEditin tarpeet.
Tällöin johdettujen rakenteiden tulee toteuttaa myös graafiset
ominaisuudet, jolloin sama koodi käy sekä WWW-TRAKLAan että
TraklaEditiin. TraklaEdit tuleekin toteuttaa siten, että siihen voi
lisätä minkä tahansa uuden tietorakenteen, joka noudattaa
määriteltyä rajapintaa. Tällöin uuden tehtävän
(joka käyttää jotakin ennestään tuntematonta tietorakennetta)
implementaatio TraklaEditille saadaan jatkossa "ilmaiseksi".
Aikataulu: kesä-syksy
3.6 Tehtävien tarkastaminen
Yleisen tehtäviä tarkastavan moduulin suunnittelu ja toteutus
on keskeinen osa järjestelmää. Toteutus riippuu pitkälti
kohdassa 3.4 saaduista tuloksista. Ajatuksena on, että järjestelmään
voitaisiin toteuttaa geneerinen tarkastusosa, joka osaa tarkastaa minkä
tahansa rajapintojen mukaisen algoritmisen tehtävän. Oleellisesti
kyseessä on toteutetun kielen sekvenssien vertailu: malliratkaisua
edustaa toteutetulla algoritmilla saatu vastaus, jota verrataan TraklaEditillä
opsikelijan tuottamaan ratkaisuun.
AIkataulu: syksy
4 Jatkokehitys
Muut alkuperäinen projektisuunnitelman sisältämät ajatukset
TraklaEditin kehittämiseksi ovat sellaisia, että ne kannattaa
toteuttaa vasta edellä esitetyn jälkeen. Tällaisia ominaisuuksia
ovat esimerkiksi:
toimiminen itsenäisenä sovelluksena/vuorovaikutteiset esimerkit
malliratkaisujen generointi
opiskelijalle annettava palaute
tekstimuotoinen selostus
kaikkien TRAKLA-tehtävien implementointi
Kaikki edellä esitetyt, lukuunottamatta viimeistä kohtaa,
pohjaavat pitkälti kohdassa 3.4 esitettyyn kieleen. Esimerkiksi tekstimuotoinen
selostus voidaan liittää mukaan lisäämällä
kieleen lauseita, joilla voidaan tietyssä kohtaa sekvenssiä asiaa
valaista avautuvalla ikkunalla ja siinä olevalla tekstimuotoisella
selostuksella. Malliratkaisujen generointi uusille tehtäville kuuluu
osana kesän aikana toteutettavaa järjestelmää. Kaikkien
vanhojen tehtävien implementointi ja malliratkaisujen generointi niihin
jätetään myöhemmäksi. Sitä ennen tulee arvioida
mitkä tehtävät ovat sellaisia, että ne kannattaa toteuttaa
uuden järjestelmän mukaisesti.