OHJELMISTOTUOTANTOPROJEKTI

Samankaltaiset tiedostot
OHJELMISTOTUOTANTOPROJEKTI

OHJELMISTOTUOTANTOPROJEKTI

eassari Practicing, assessment and exam engine Harri Laine Taustaa

eassari tekninen kuvaus Harri Laine Taustaa

Suunnitteludokumentti

eassari harjoitteluympäristön yleisrakenne

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Vaatimusmäärittely. AssariXP. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Toteutusdokumentti. AssariXP. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie

Suunnitteludokumentti

Käyttöohje. AssariXP. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

18. Abstraktit tietotyypit 18.1

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

Ylläpitodokumentti. Oppimistavoitteiden hallintajärjestelmä harri

Lohtu-projekti. Ylläpitäjän dokumentti. Versiohistoria: Ensimmäinen versio Andreas Asuja

Ohjelmoinnin jatkokurssi, kurssikoe

Tietotekniikan laitos Käki-projekti TIETOKANTASUUNNITELMA. 1. Johdanto

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus

Järjestelmäarkkitehtuuri (TK081702)

ALMU-järjestelmä Suunnitteludokumentti

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.

A TIETORAKENTEET JA ALGORITMIT

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Digitaalisen median tekniikat. JSP ja XML

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

KIURU Tietotekniikan sovellusprojekti

Sisältö. 22. Taulukot. Yleistä. Yleistä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

15. Ohjelmoinnin tekniikkaa 15.1

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Taulukot. Jukka Harju, Jukka Juslin

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Tietokantasovelluksen määrittelydokumentti

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3

Tentti erilaiset kysymystyypit

15. Ohjelmoinnin tekniikkaa 15.1

Oppimisalusta eassarin TTK-91-tehtävien käyttöohje

Rajapintakuvaus Liikenneluvat

Testidatan generointi

5. HelloWorld-ohjelma 5.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

emo eassari Moodle-ympäristössä Vaatimusmäärittely

Sisältö. 2. Taulukot. Yleistä. Yleistä

Java-API, rajapinnat, poikkeukset, UML,...

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Hakemistojen sisällöt säilötään linkitetyille listalle.

Ylläpitodokumentti. Kohahdus. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Rajapinta (interface)

Ohjelmisto on selainpohjaisen käyttöliittymän tarjoava tietokantajärjestelmä merikotkien seurantaan WWF:n Merikotka-työryhmän tarpeisiin.

Java kahdessa tunnissa. Jyry Suvilehto

Suunnitteludokumentti

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa

Ylläpitodokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

Olio-ohjelmointi Javalla

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Matematiikan oppifoorumi Projektisuunnitelma

Ohjelmiston toteutussuunnitelma

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Lohtu-projekti. Testaussuunnitelma

HELIA 1 (14) Outi Virkki Tiedonhallinta

Testaussuunnitelma Labra

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Ylläpito-ohje. Matematiikan oppifoorumi. Carl Johansson Jukka Kariola Outi Marttila Helena Venäläinen Sampsa Virtanen. Ohjaaja.

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

INTINU13A6 Java sovellukset

Javan perusteita. Janne Käki

RADAR - RANDOM DATA GENERATOR

Määrittelydokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmistojen mallintaminen, olioja relaatiomallinnuksen suhteesta

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Tietokannat II -kurssin harjoitustyö

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

Metodien tekeminen Javalla

4. Luokan testaus ja käyttö olion kautta 4.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Käyttöohje. Ticket Inspector. Versio 1.0. Sportum Oy

Vaalikone.fi API Presidentinvaalit 2012

9. Periytyminen Javassa 9.1

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Suunnitteluvaihe prosessissa

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Transkriptio:

HELSINGIN YLIOPISTO TIETOJENKÄSITTELYTIETEEN LAITOS OHJELMISTOTUOTANTOPROJEKTI ASSARI Suunnitteludokumentti versio 1.0 Teemu Andersson Mikko Lukkari Vesa-Matti Mäkinen Olli-Pekka Ruuskanen Sami Termonen 6.4.2004

Versiohistoria: versio päivämäärä kommentit/muutokset 0.1 4.3.2004 Dokumentin sisällön hahmotteleminen. 0.2 14.3.2004 Sisällön tarkentaminen arkkitehtuurikuvauksen osalta. 0.3 18.3.2004 Dokumentin sisällön uudelleenryhmitteleminen ja tarkentaminen. 0.4 21.3.2004 Projektipäällikön korjauksia ja täydennyksiä. 0.5 23.2.2004 Projektipalaverissa todettujen puutteiden korjaukset. 0.6 1.4.2004 Cache-rakenteen toiminnan korjauksia. 1.0 6.4.2004 Jäädytetty versio. II

Sisältö: 1. JOHDANTO... 1 1.1 Dokumentin tarkoitus...1 1.2 Dokumentin rakenne...1 1.3 Sanasto...2 2. JÄRJESTELMÄN YLEISKUVAUS... 3 2.1 Sovellusalueen kuvaus...3 2.2 Toimintaympäristö...3 2.3 Toteutusrajoitukset...3 3. ARKKITEHTUURIKUVAUS... 4 3.1 Järjestelmän kokonaisarkkitehtuuri...4 3.2 Komponenttien yhteistoiminta...5 3.2.1 Tehtävien määritteleminen...5 3.2.2 Tehtävien esittäminen...6 3.2.3 Vastausten analysoiminen...7 3.2.4 Palautteen esittäminen...8 4. KEHYSKOODI... 9 4.1 Kehyskoodiservlettien abstrakti määrittely...9 4.1.1 Servlettien tehtävät...9 4.1.2 Servlettien tarjomat palvelut...9 4.1.3 Servlettien säännöt ja rajoitukset...9 4.1.4 Servlettien rajapinnat...9 4.2 Kehyskoodiservlettien luokkakaavio...10 4.3 Kehyskoodiservlettien parametrit...11 5. CACHE-TIETORAKENNE... 13 5.1 Tiedon kulku cache-tietorakenteelta ohjelmistokomponenteille...13 5.2 Tiedon kulku analysointikomponentilta cachelle...14 III

6. TIETOKANTA... 15 6.1 Nykyisen tietokantarakenteen kuvaus...15 6.2 Tietokantaan tehtävät muutokset...16 6.3 Tietojen sijoittuminen tietokantaan...17 6.3.1 Tehtävätyyppien tiedot...17 6.3.2 Tehtävätyyppikohtaiset tiedot...18 6.3.3 Tehtävänmäärittelytiedot...19 6.3.4 Käyttöliittymäelementtien tiedot...22 7. TEHTÄVÄNMÄÄRITTELYKOMPONENTIT... 23 7.1 Tehtävänmäärittelykäyttöliittymät...23 7.2 Controller-servlet...24 7.3 Tietorakenteet...26 7.4 Tukipalvelut...26 7.4.1 Tietojen haku ja tallennus...27 7.5 Tehtävänmäärittelynäkymien tiedonvälitys...28 8. ESITYSKOMPONENTIT... 29 8.1 Esityskomponenttien abstrakti määrittely...29 8.1.1 Komponenttien tehtävät...29 8.1.2 Komponenttien tarjoamat palvelut...29 8.1.3 Komponenttien säännöt ja rajoitukset...29 8.1.4 Komponenttien rajapinnat...29 8.2 Esityskomponenttien tietosisältö ja palvelut...30 8.3 Esityskomponenttien parametrit...31 8.4 Esityskäyttöliittymien ulkoasun muokkaaminen...32 9. ANALYSOINTIKOMPONENTIT... 33 9.1 Analysointikomponenttien abstrakti määrittely...33 9.1.1 Komponenttien tehtävät...33 9.1.2 Komponenttien tarjoamat palvelut...33 9.1.3 Komponenttien säännöt ja rajoitukset...33 9.1.4 Komponenttien rajapinnat...33 9.2 Analysointikomponenttien tietosisältö ja palvelut...34 9.3 Analysointikomponenttien parametrit...35 IV

10. PAKKAUSRAKENNE... 37 11. LÄHTEET... 38 12. LIITTEET... 39 Liite 1: Tehtävänmäärittelyn käyttöliittymien tietosisältö...39 Liite 2: Käyttöliittymäkuvat...44 Liite 3: Käyttöliittymän ulkoasun muokkaaminen...53 Liite 4: Tehtävänmäärittelyn käyttöliittymäelementtien nimet ja kielikohtaiset arvot...54 Liite 5: Tehtävänmäärittelyn käyttöliittymäelementtien tallentaminen tietokantaan...59 V

1. JOHDANTO 1.1 Dokumentin tarkoitus Tämä dokumentti on tarkoitettu Helsingin yliopiston Tietojenkäsittelytieteen laitoksella kevätlukukaudella 2004 toteutettavan ohjelmistotuotantoprojektin Assari-ryhmälle sisäiseksi ohjeeksi siitä, kuinka sen tuottama ohjelmisto tulee toteuttaa. Dokumentissa kuvataan projektin aikana tuotettava ohjelmisto sellaisella tarkkuudella, että sen aikaansaaminen on mahdollista yksinomaan tämän dokumentin pohjalta. Dokumentti on kirjoitettu määrittelydokumentin version 1.0 pohjalta. 1.2 Dokumentin rakenne Dokumentti muodostaa itsenäisen kokonaisuuden, joka antaa lukijalleen riittävän kuvan jo olemassa olevasta järjestelmästä ja siihen projektin aikana liitettävistä ohjelmistokomponenteista niiden toteuttamista ajatellen. Valittu esitystapa johtaa väistämättä osittaiseen päällekkäisyyteen määrittelydokumentin kanssa, mutta jotta suunnitteludokumentin ymmärtäminen olisi mahdollista myös projektiryhmään kuulumattomille lukijoille ilman, että heidän tarvitsee perehtyä muihin projektidokumentteihin, on valittu esitystapa nähty perustelluksi. - 1. luku toimii johdantona muuhun dokumenttiin ja siinä perustellaan dokumentin rakenteeseen ja laajuuteen liittyvät ratkaisut. - 2. luku antaa perustiedot järjestelmästä, jonka osaksi toteutettavat ohjelmistokomponentit liitetään, sekä toteutukselle asetetuista rajoituksista. - 3. luku antaa yleiskuvan toteutettavien ohjelmistokomponenttien arkkitehtuurista sekä niiden yhteistoiminnasta halutun toiminnallisuuden toteuttamiseksi. - 4. luku kuvaa ohjelmistokomponenttien toimintaa kontrolloivan kehyskoodin rakenteen ja toiminnan. - 5. luku kuvaa tietokantaoperaatioista vastaavan cache-tietorakenteen toiminnan. - 6. luku kuvaa järjestelmän tietokannan rakenteen ja toiminnan. - 7. luku kuvaa tehtävänmäärittelykomponenttien rakenteen ja toiminnan. - 8. luku kuvaa tehtävänesityskomponenttien rakenteen ja toiminnan. - 9. luku kuvaa analysointikomponenttien rakenteen ja toiminnan. - 10. luku kuvaa projektissa toteutettavien luokkien jakautumisen pakkauksiin. - 11. luku listaa dokumentissa viitatut lähteet. - 12. lukuun on koottu dokumentin liitteet. 1

1.3 Sanasto Cache Keskusmuistitietorakenne, johon tallennetaan osakokonaisuus järjestelmän tietokantaan tallennetuista tiedoista. Tehostaa järjestelmän suorituskykyä tarjoamalla pääsyn tietoihin ilman toistuvia tietokantakyselyitä. Java API Java SDK JSP Servletti SQL Java Application Programming Interface. Sun Microsystems Inc:n laatima määrittelykokoelma Java-kielen tarjoaman valmiskaluston rajapinnoista. Java Software Development Kit. Sun Microsystems Inc:n laatima kehitysympäristö Java-sovellusten kehittämiseksi. Java Server Pages. Dynaamisten HTML ja XML-sivujen generoimiseen käytetty Java-tekniikka, joka mahdollistaa Java-koodin upottamisen staattisiin HTML -sivuihin. Www-palvelimella suoritettava Java-luokka, joka vastaanottaa pyyntöjä ja generoi niiden kautta saamiensa parametrien perusteella dynaamisia HTML-sivuja. Structured Query Language. Alunperin IBM:n kehittämä ja ANSI:n (American National Standards Institute) ja ISO:n (International Standardization Organization) standardoima relaatiotietokantoihin kohdistuvien operaatioiden tekemiseen tarkoitettu kysekykieli. 2

2. JÄRJESTELMÄN YLEISKUVAUS 2.1 Sovellusalueen kuvaus Assari on Helsingin yliopiston Tietojenkäsittelytieteen laitoksen ohjelmistotuotantoprojekti. Projektissa tuotetaan www-pohjaiseen opetusympäristöön komponentteja erityyppisten harjoitus- ja koetehtävien määrittelyyn ja käyttöön. Projektin pohjana toimii asiakkaan kehittämä eassari-opetusjärjestelmä [LAI03], joka tarjoaa nykyisellään mahdollisuuden tietokantakyselyiden harjoitteluun www-ympäristössä. Tässä projektissa järjestelmää laajennetaan uusilla tehtävätyypeillä. Kaikissa tehtävätyypeissä opiskelijalle esitetään tehtävänanto, johon opiskelijan on laadittava ratkaisu tehtävätyyppikohtaisin välinein. Järjestelmä analysoi ratkaisun ja antaa opiskelijalle palautetta, joka auttaa häntä huomaamaan omissa tiedoissaan mahdollisesti olevia puutteita. eassari-järjestelmä mahdollistaa tehtävien paketoimisen eri opintokokonaisuuksien osaksi. Nämä kokonaisuudet voidaan toteuttaa joko opetus- tai tenttitilassa. Opetustilassa vastaus tarkastetaan ja palaute annetaan opiskelijalle välittömästi vastaamisen jälkeen. Tenttitilassa palaute talletetaan myöhemmin esitettäväksi. Käyttötilan valinta tapahtuu nyt toteutettavien ohjelmistokomponenttien ulkopuolella, mutta komponenttien on tuettava molempien tilojen käyttöä. 2.2 Toimintaympäristö Ohjelmisto toteutetaan Tietojenkäsittelytieteen laitoksen Java-ympäristössä käyttäen Java SDK versiota 1.4.2. Www-osioiden toteutuksessa hyödynnetään Java Servlet -luokkia noudattaen v.2.3 API-määrittelyä. Sovelluspalvelimena käytetään Apache Tomcat 4 ja tietokantapalvelimena Oracle 9 -tuotteita. Palvelinvalmistajien tuotespesifisiä välineitä ei käytetä, joten sovellus voidaan suoraviivaisesti asentaa mille tahansa Java- ja SQL-alustalle. 2.3 Toteutusrajoitukset Toteutuksessa on otettava huomioon olemassa olevan eassari-järjestelmän rakenne ja toiminta. Vaikka asiakas onkin antanut luvan järjestelmän tietokannan muokkaamiseen tarvittavilta osin, pyritään toteutuksessa säilyttämään tietokannan nykyinen rakenne mahdollisimman pitkälle. Tarvittavat laajennukset tehdään nykyisen tietokantarakenteen kanssa yhteensopivin menetelmin. 3

3. ARKKITEHTUURIKUVAUS 3.1 Järjestelmän kokonaisarkkitehtuuri Kuva 1 esittää projektin aikana toteutettavien ohjelmistokomponenttien sijoittumisen eassariopetusjärjestelmän kokonaisarkkitehtuuriin. Kuva 1: Järjestelmän kokonaisarkkitehtuuri 4

3.2 Komponenttien yhteistoiminta Toteutettavien ohjelmistokomponenttien yhteistoiminta ja interaktio kehyskoodin kanssa on esitetty toimintokohtaisina sekvenssikaavioina kuvissa 2-5. Tarkemmat komponenttikohtaiset kuvaukset esitetään luvuissa 7-9. 3.2.1 Tehtävien määritteleminen Kuva 2: Tehtävienmäärittelyn sekvenssikaavio 5

3.2.2 Tehtävien esittäminen Kuva 3: Tehtävien esittämisen sekvenssikaavio 6

3.2.3 Vastausten analysoiminen Kuva 4: Vastausten analysoinnin sekvenssikaavio 7

3.2.4 Palautteen esittäminen Kuva 5: Palautteen esittämisen sekvenssikaavio 8

4. KEHYSKOODI eassari-järjestelmän kehyskoodi muodostuu kolmesta eri servlet-luokasta, jotka vastaavat HTTPkutsun POST-parametrien vastaanottamisesta sekä tehtävien määrittely-, esitys- ja analysointikäyttöliittymien esittämisestä käyttäjille. 4.1 Kehyskoodiservlettien abstrakti määrittely 4.1.1 Servlettien tehtävät - tehtäväparametrien vastaanottaminen www-sivuilta. - tehtävätyyppikohtaisten määrittely-, esitys- ja analysointikomponenttien aktivoiminen. - tehtäväparametrien välittäminen määrittely-, esitys- ja analysointikomponenteille. - XHTML-koodin vastaanottaminen komponenteilta ja esittäminen käyttäjälle. - virheilmoitusten generoiminen ja esittäminen tarvittaessa. 4.1.2 Servlettien tarjomat palvelut - www-sivujen generoiminen käyttäjien selaimille. - tehtäväparametrien välittäminen määrittely-, esitys- ja analysointikomponenteille. 4.1.3 Servlettien säännöt ja rajoitukset - osattava päätellä tehtävätyyppi. 4.1.4 Servlettien rajapinnat - www-selainrajapinta - istuntotietojen käsittely. - POST-parametrien vastaanottaminen. - tehtävänmäärittelykäyttöliittymän/tehtävänannon/palautteen/virheilmoituksen esittäminen. - cache-rajapinta (vain tehtävänmäärittelyservletti) - kielikohtaisten tehtävänmäärittelyn käyttöliittymätietojen noutaminen. - kielikohtaisten tehtävätietojen noutaminen. - kielikohtaisten tehtävänmäärittelytietojen välittäminen tallennettaviksi tietokantaan. - Feedback-oliorajapinta - palautteen vastaanottaminen (vain vastauksenanalysointiservletti). - virheilmoituksen vastaanottaminen. 9

- komponenttirajapinta - tehtäväparametrien välittäminen esityskomponentille (vain tehtävänesitysservletti). -tehtävänannon vastaanottaminen esityskomponentilta (vain tehtävänesitysservletti). - tehtävään annetun vastauksen välittäminen analysointikomponentille (vain vastauksenanalysointiservletti) 4.2 Kehyskoodiservlettien luokkakaavio Kuvassa 6 on esitetty järjestelmän kehyskoodiservletit luokkakaaviona. Kuva 6: Kehyskoodiservlettien luokkakaavio TrainerServlet on kehyskoodiservlettien yliluokka, joka huolehtii kaikille aliluokilleen yhteisen cache-tietorakenteen (TaskBase) luomisesta. 10

4.3 Kehyskoodiservlettien parametrit Servlettien aktivoiminen: Opetusmateriaaliin on määritelty linkkejä, joiden aktivoiminen kutsuu tehtävänesitysservlettiä. Tehtävään vastaaminen puolestaan aktivoi analysointiservletin. Tehtävänmäärittelyservletin kutsuminen tapahtuu nyt toteutettavien ohjelmistokomponenttien ulkopuolelta eassari-järjestelmän muista osista. Kaikki servletit hakevat HTTPServletRequest-parametrijoukosta tehtävänmäärittely-, tehtävänesitys- tai analysointikomponenteille välitettävät tiedot, jotka on esitetty taulukossa 1. tyyppi: nimi: tarkoitus: String userid käyttäjätunnus (vain määrittely- ja analysointiservletit). Käytetään opettajan tunnistamiseen hänen määrittelemiensä tehtävien listaamiseksi ja opiskelijan tunnistamiseen suorituksen kirjaamiseksi tietokantaan tarvittaessa. String tasktype tehtävätyyppi (vain esitys- ja analysointiservletit). Käytetään servlettien aktivoimien esitys-/analysointikomponenttien tyypin tunnistamiseen. String taskid tehtävätunnus (vain esitys- ja analysointiservletit). Käytetään esitettävän/analysoitavan tehtävän tunnistamiseen. String language esityskieli. Taulukko 1: Yleiset kutsuparametrit Tehtävänmäärittelykomponenttien aktivoiminen: Tehtävänmäärittelyservletti välittää taulukossa 2 listatut tiedot tehtävänmäärittelykomponentille. tyyppi: nimi: tarkoitus: String userid käyttäjätunnus. String language käyttöliittymän esityskieli. Taulukko 2: Tehtävänmäärittelykomponenttien kutsuparametrit Tehtävänesityskomponenttien aktivoiminen: Tehtävänesitysservletti aktivoi tehtävätyyppikohtaisen esityskomponentin, jolle se välittää taulukossa 3 esitetyt tiedot tehtävän esitysnäkymän generoimiseksi. tyyppi: nimi: tarkoitus: String taskid esitettävän tehtävän tunnus. String language haluttu esityskieli. Taulukko 3: Esityskomponenttien kutsuparametrit 11

Vastauksenanalysointikomponenttien aktivoiminen: Tehtävänanalysointiservletti aktivoi tehtävätyyppikohtaisen analysointikomponentin, jolle se välittää taulukossa 4 listatut tiedot tehtävään annetun vastauksen analysoimiseksi. tyyppi: nimi: tarkoitus: String userid käyttäjätunnus. String taskid tehtävätunnus. String language käytetty esityskieli. int[] answer opiskelijan valintatehtävään antamat vastaukset. String[] answer opiskelijan järjestystehtävään antama vastaus. String[] answer opiskelijan aukkojentäyttötehtävään antamat vastaukset. Taulukko 4:Analysointikomponenttien kutsuparametrit Tehtävänmäärittelyn, tehtävänannon, palautteen tai virheilmoituksen välittäminen servletille: Servletit käyttävät toista taulukossa 5 esityistä metodeista hakeakseen aktivoimiensa ohjelmistokomponenttien tuottaman XHTML-sivun. tyyppi: nimi: tarkoitus: String getscript käyttäjälle esitettävä tehtävänmäärittelykäyttöliittymä/ tehtävänanto. Feedback analyse käyttäjälle esitettävä palaute/virheilmoitus. Taulukko 5: Palautusparametrit 12

5. CACHE-TIETORAKENNE Cache-keskusmuistitietorakenne (TaskBase) sijoittuu järjestelmässä tietokannan ja sitä käyttävien ohjelmistokomponenttien väliin kuvan 1 (sivu 4) mukaisesti. Cache-rakenne sisältää toiminnot analysointikomponenttien välittämien vastausten tallentamiseksi tietokantaan, sekä tietokantaan tallennetun datan noutamiseksi ja palauttamiseksi sitä pyytävälle ohjelmistokomponentille. Tietorakenteen toteutus pohjautuu viiteen eri hajautustauluun, joihin sijoitetaan tieto järjestelmässä aktiivisina olevista tehtävistä, tehtävätyypeistä, tehtäviin liittyvistä esitys- ja analysointikomponenteista sekä tehtäväattribuuteista. 5.1 Tiedon kulku cache-tietorakenteelta ohjelmistokomponenteille Cache-tietorakenne tarjoaa käyttöön getattribute-metodin, jota kutsumalla muut komponentit voivat hakea rakenteeseen talletettujen attribuuttien arvoja. Kutsun parametreina kutsuja antaa tyyppinsä, nimensä, haluamansa esityskielen ja tarvitsemansa attribuutin nimen. Cache-rakenne muodostaa kutsuparametreista hajautusavaimen, jonka perusteella se hakee loadedattributes-hajautustaulusta pyydetyn parametrin arvon ja palauttaa sen pyytäjälle merkkijonona. Mikäli pyydettyä tietoa ei ole hajautustaulussa, laatii cache tietokantakyselyn pyydetyn dataelementin (esim. XHTML-sivun otsikko) sekä kaiken siihen sidoksissa olevan datan (esim. koko XHTML-sivu) noutamiseksi tietokannasta. Saatuaan datan, cache tallentaa sen hajautustauluunsa ja palauttaa sitten pyydetyn attribuutin arvon sitä pyytäneelle ohjelmistokomponentille. Cache tallentaa tietokannan attributevalues-taulusta noutamansa attribuutit ylläpitämäänsä hajautustauluun seuraavasti: hajautusavain [tyyppi, id, esityskieli, attribuutin nimi] hajautustauluun tallennettava arvo attribuutin arvo Taulukko 6: Hajautustauluparametrit 13

5.2 Tiedon kulku analysointikomponentilta cachelle Vastauksenanalysointikomponentit kutsuvat cache-rakenteeseen toteutettavaa saveanswer-metodia välittääkseen tietokantaan tallennettavan vastauksen cachelle, joka vastaa järjestelmän tietokantaoperaatioista. Esityskomponentit eivät tallenna mitään tietokantaan. public void saveanswer (String objecttype, String objectid, String userid, String courseid, String moduleid, int seqno, int trynumber, int correctness, String whenanswered, String answer, String language) 14

6. TIETOKANTA 6.1 Nykyisen tietokantarakenteen kuvaus eassari-järjestelmän tietokanta koostuu nykyisin kuvassa 7 esitetyistä tauluista. Kuva 7: Tietokannan rakenne Tehtävätyyppien yleistiedot tallennetaan tasktype tauluun, jossa mm. liitetään oikeat esitys- ja analysointikomponentit tehtävätyyppiin komponenttien luokkanimien avulla. Tehtävätyyppiin liittyvien attribuuttien tiedot tallennetaan taskattributes tauluun. Jokaisen attribuutin osalta 15

tallennetaan mm. attribuutin nimi sekä tieto siitä, miten attribuutti saadaan: tietokannasta, generoimalla vai ulkopuoliselta komponentilta. Tehtävätyypin attribuutin arvo tallennetaan attributevalues tauluun. Tehtävänmäärittely käyttää task-taulua tehtävää koskevien yleisten parametrien tallentamiseen. Tehtävälle yksilölliset arvot, kuten tehtävänanto ja oikeat vastaukset, tallennetaan attributevaluestauluun. Käyttöliittymäelementtien tiedot tallennetaan tietokannan attributevalues tauluun. 6.2 Tietokantaan tehtävät muutokset Tietokantaan lisätään systemlanguages-niminen taulu, joka sisältää järjestelmään määriteltyjen kielten korkeintaan kolmikirjaimisen tunnisteen ja esityskielikohtaiset nimet. Taulun rakenne on seuraavanlainen: create table systemlanguages( /* code for the language*/ languagecode varchar(3) not null primary key, ); /* name of the language*/ languagename varchar(40) not null unique, 16

6.3 Tietojen sijoittuminen tietokantaan Tässä luvussa kuvataan yksityiskohtaisesti tehtävänmäärittely- ja suoritustietojen sijoittuminen tietokantaan. 6.3.1 Tehtävätyyppien tiedot Kaikkiin tehtävätyyppeihin liittyy tehtävätyypistä ja määrittelykielestä riippumatta taulukossa 9 listatut tiedot. parametri typename author datecreated description displayer analyser tasktypestyle displayerinit analyserinit tietokantataulu, kenttä ja tyyppi [tasktype] typename: varchar (40) [tasktype] author: varchar (4) [tasktype] datecreated: date [tasktype] description [tasktype] displayer: varchar (40) [tasktype] analyser: varchar (40) [tasktype] tasktypestyle: varchar (80) [tasktype] displayerinit: varchar (1000) [tasktype] analyserinit: varchar (1000) kuvaus - tehtävätyypin nimi - arvon tuottaa tehtävätyypin määrittelijä - tehtävätyypin määrittelijän nimi - arvon tuottaa tehtävätyypin määrittelijä - päivä jolloin määrittely tehty - arvon tuottaa ohjelmisto - tehtävätyyppiin liittyvää metadataa - arvon tuottaa tehtävätyypin määrittelijä - ei käytössä toistaiseksi - tehtävätyyppiin liittyvän esityskomponentin luokan nimi - arvon tuottaa tehtävätyypin määrittelijä - tehtävätyyppiin liittyvän analysointikomponentin luokan nimi - arvon tuottaa tehtävätyypin määrittelijä - tehtävätyyppiin liittyvän tyylitiedoston nimi - arvon tuottaa tehtävätyypin määrittelijä - tehtävätyyppikohtaiset alustusparametrit esityskomponentille - arvon tuottaa tehtävätyypin määrittelijä - tehtävätyyppikohtaiset alustusparametrit analysointikomponentille - arvon tuottaa tehtävätyypin määrittelijä Taulukko 7: Tehtävätyyppien tiedot 17

6.3.2 Tehtävätyyppikohtaiset tiedot Kuhunkin tehtävätyyppiin liittyy joukko tietoa, joka määritellään taulukossa 10 osoitetulla tavalla. parametri tasktype attributename typeofvalue tietokantataulu, kenttä ja tyyppi [taskattributes] tasktype: varchar (40) [taskattributes] attributename: varchar (40) [taskattributes] typeofvalue: varchar (12) languagedependent [taskattributes] languagedependent: char (Y/N) howobtained [taskattributes] howobtained kuvaus -sen tehtävätyypin nimi, johon attribuutti liittyy - arvon tuottaa attribuutin määrittelijä - attribuutin nimi - arvon tuottaa attribuutin määrittelijä - attribuutin arvon tyyppi. Arvona: NONE (= ei arvoa), TEXT (= tekstiarvo) tai NUM (= numeerinen arvo) - arvon tuottaa attribuutin määrittelijä - tieto siitä, onko attribuutti kieliriippuvainen - arvon tuottaa attribuutin määrittelijä - tieto tavasta, jolla attribuutin arvo saadaan. Arvona: STORED (attribuutin arvo saadaan tietokannasta), GENERATED (attribuutin arvo generoidaan) tai EXTERNAL (attribuutin arvo tuotetaan ulkopuolisen ohjelmistokomponentin avulla) - arvon tuottaa attribuutin määrittelijä Taulukko 8: Tehtävätyyppikohtaiset tiedot 18

6.3.3 Tehtävänmäärittelytiedot Uusia tehtäviä määriteltäessä tallennetaan määrittelytiedot tietokantaan. Kaikki tehtävätyypit sisältävät joukon yleisiä määrittelytietoja. Lisäksi tehtävien sisältöön ja palautteeseen liittyy tietoa, jonka tallennus vaihtelee tehtävätyypeittäin. Yleiset tehtävätiedot: Jokaiseen tehtävään liittyy joukko tehtävätyypistä ja esityskielestä riippumattomia parametreja, jotka kuvataan taulukossa 11. parametri author datecreated taskname taskid task tasktype language positivefeedback negativefeedback cutofvalue tietokantataulu, kenttä ja tyyppi [task] author: varchar (40) [task] datecreated: date [task] taskname: varchar (40) [task] taskid: varchar (20) [attributevalues] attributevalue: varchar (2000) [task] tasktype: varchar (40) [attributevalues] language: varchar (3) [attributevalues] attributevalue: varchar (2000) [attributevalues] attributename: varchar (2000) [task] cutoffvalue: integer immediatefeedback [task] shouldevaluate_def: char registertry [task] shouldregistertry_def: char kuvaus - tehtävänmäärittelijän nimi - arvon tuottaa ohjelmisto - päivä jolloin määrittely on tehty - arvon tuottaa ohjelmisto - tehtävän nimi - arvon tuottaa tehtävän määrittelijä - tehtävän tunniste - arvon tuottaa ohjelmisto - tehtävänanto - arvon tuottaa tehtävän määrittelijä - tehtäväntyypin nimi - arvon tuottaa tehtävän määrittelijä - tehtävän kieli - arvon tuottaa tehtävän määrittelijä - arvo viedään jokaisen attributevaluestauluun menevän parametrin languagekentän arvoksi - tehtävään liittyvä globaali positiivinen palaute - arvon tuottaa tehtävän määrittelijä - tehtävään liittyvä globaali negatiivinen palaute - arvon tuottaa tehtävän määrittelijä - tehtävän hyväksyttyyn suoritukseen vaadittava oikeellisuusprosentti - arvon tuottaa tehtävän määrittelijä - tieto siitä, annetaanko tehtävästä palaute välittömästi -oletusarvo, jota voidaan muuttaa paketointivaiheessa - arvon tuottaa tehtävän määrittelijä - tieto rekisteröidäänkö yritys - oletusarvo, jota voidaan muuttaa paketointivaiheessa - arvon tuottaa tehtävän määrittelijä 19

saveanswer numberoftries loginrequired [task] shouldstoreanswer_def: char [task] numberoftries_def: int [task] shouldknowstudent_def: char - tieto tallennetaanko annettu vastaus - oletusarvo, jota voidaan paketointivaiheessa muuttaa - arvon tuottaa tehtävän määrittelijä - tieto sallittujen vastausyritysten määrä - oletusarvo, jota voidaan muuttaa paketointivaiheessa - arvon tuottaa tehtävän määrittelijä - tieto pitääkö tehtävään vastaajan olla kirjautuneenä järjestelmään - oletusarvo, jota voidaan muuttaa paketointivaiheessa - arvon tuottaa tehtävän määrittelijä Taulukko 9: Yleiset tehtävätiedot Valintatehtävien tiedot: Merkillä # kuvataan tallennettavan tiedon sekvenssinumeroa tapauksissa, joissa tietokenttien lukumäärää ei tiedetä etukäteen. Sekvenssinumerot generoidaan tehtävänmäärittelykäyttöliittymissä. parametri option# isselected# positivefeedback negativefeedback tietokantataulu, kenttä ja tyyppi [attributevalues] attributevalue: varchar (2000) [attributevalues] attributevalue: varchar (2000) [attributevalues] attributevalue: varchar (2000) [attributevalues] attributevalue: varchar (2000) kuvaus - vaihtoehdon # kuvaus - arvon tuottaa tehtävän määrittelijä - tieto siitä, pitääkö vaihtoehdon # olla valittuna - arvon tuottaa tehtävän määrittelijä -vaihtoehdon # oikeaan ratkaisuun liittyvä palaute - arvon tuottaa tehtävän määrittelijä -vaihtoehdon # virheelliseen ratkaisuun liittyvä palaute - arvon tuottaa tehtävän määrittelijä Taulukko 10: Valintatehtävien tiedot 20

Järjestystehtävien tiedot: Merkillä # kuvataan tallennettavan tiedon sekvenssinumeroa tapauksissa, joissa tietokenttien lukumäärää ei tiedetä etukäteen. Sekvenssinumerot generoidaan tehtävänmäärittelykäyttöliittymässä. parametri object# correctfeedback# tietokantataulu, kenttä ja tyyppi [attributevalues] attributevalue: varchar (2000) [attributevalues] attributevalue: varchar (2000) tooearlyfeedback# [attributevalues] attributevalue: varchar (2000) toolatefeedback# placeofobject# [attributevalues] attributevalue: varchar (2000) [attributevalues] attributevalue: varchar (2000) kuvaus - järjestettävän objektin # kuvaus - arvon tuottaa tehtävän määrittelijä - objektiin # liittyvä palaute, tapauksessa jossa objekti on oikealla paikalla - arvon tuottaa tehtävän määrittelijä - objektiin # liittyvä palaute, tapauksessa jossa objekti on liian aikaisella paikalla - arvon tuottaa tehtävän määrittelijä - objektiin # liittyvä palaute, tapauksessa jossa objekti on liian myöhäisellä paikalla - arvon tuottaa tehtävän määrittelijä - objektin # oikea paikka - arvon tuottaa tehtävän määrittelijä Aukkojentäyttötehtävien tiedot: Taulukko 11: Järjestystehtävien tiedot Merkillä # kuvataan tallennettavan tiedon sekvenssinumeroa tapauksissa, joissa tietokenttien lukumäärää ei tiedetä etukäteen. Sekvenssinumerot generoidaan tehtävänmäärittelykäyttöliittymässä. parametri text tietokantataulu, kenttä ja tyyppi [attributevalues] attributevalue: varchar (2000) positivefeedback# [attributevalues] attributevalue: varchar (2000) negativefeedback# [attributevalues] attributevalue: varchar (2000) gap# [attributevalues] attributevalue: varchar (2000) Kuvaus - teksti, joka sisältää aukot kaksinkertaisin hakasulkein ([[ ja ]])merkittyinä - arvon tuottaa tehtävän määrittelijä - aukkoon # liittyvä palaute tapauksiin, joissa aukko on täytetty oikein - arvon tuottaa tehtävän määrittelijä - aukkoon # liittyvä palaute tapauksiin, joissa aukko on täytettyväärin - arvon tuottaa tehtävän määrittelijä - aukossa # esiintyvä sana - arvon tuottaa ohjelmisto etsimälllä sanan tekstistä, johon määrittelijä on merkinnyt aukkopaikat Taulukko 12: Aukkojentäyttötehtävien tiedot 21

6.3.4 Käyttöliittymäelementtien tiedot Tietokantaan tallennetaan myös käyttöliittymäkenttien kuvaukset taulukossa 15 esitetyllä tavalla. Parametri Objecttype objectid attributename language valuetype attributevalue tietokantataulu, kenttä ja tyyppi [attributevalues] objecttype [attributevalues] objected [attributevalues] attributename: varchar (40) [attributevalues] language: varchar (3) [attributevalues] valuetype: char [attributevalues] attributevalue: varchar (2000) Kuvaus - objektin tyyppi, johon attribuutin arvo liittyy (esityskomponentissa arvona D) - arvon tuottaa attribuutin määrittelijä - attribuutin viittaaman objektin tunniste - esityskomponentissa arvona luokan nimi - arvon tuottaa attribuutin määrittelijä - attribuutin viittaaman objektin nimi - arvon tuottaa attribuutin määrittelijä - attribuutin arvon kieli - arvon tuottaa attribuutin määrittelijä - attribuutin arvon tyyppi - arvona C (= character) tekstiarvoille ja N (= number) numeerisille arvoille - arvon tuottaa attribuutin määrittelijä - attribuutin arvo - arvon tuottaa attribuutin määrittelijä Taulukko 13: Käyttöliittymäelementtien tiedot 22

7. TEHTÄVÄNMÄÄRITTELYKOMPONENTIT Tehtävänmäärittelykomponentit koostuvat neljäntyyppisistä alikomponenteista: 1. Käyttöliittymät Käyttöliittymät ovat www-selaimessa näytettäviä JSP-sivuja, joiden kautta käyttäjä voi määritellä tehtäviä. 2. Controller-Servlet Controller-komponentti on käyttöliittymiltä saatavien http-kutsujen käsittelyyn ja näkymienhallintaan toteutettava Servlet-luokka. Controller-komponentti lukee jokaisella kutsukerrallaan http-kutsussa vastaanotetut parametrit, päättelee parametritietojen perusteella tarvittavat toimenpiteet ja kutsuu näihin liittyviä tukipalveluita, muodostaa seuraavan käyttöliittymäkomponentin syötteenään tarvitsemat tietorakenteet ja ohjaa kontrollin seuraavalle käyttöliittymälle. 3. Tietorakenteet Tehtävien määrittelytietojen väliaikaistallennukseen ja käsittelyyn toteutetaan tehtävätyyppikohtaiset tietorakenteet. 4. Tukipalveluluokat Controller-komponentti ei suorita itsenäisesti tehtävänmäärittelyjen parametritietojen tietokantatallennuksia ja tietokantahakuja. Sen sijaan controller-komponentti kutsuu erillisiä tukipalveluluokkia, jotka huolehtivat tietokantatoiminnoista. Tietokantatoimintojen lisäksi tukipalveluluokat huolehtivat esimerkiksi tehtävänmäärittelynäkymien parametrien pakkaamisesta tietorakenteisiin ja syötteiden prosessoinnista: esimerkiksi aukkojen etsimisestä tekstimassasta aukkojentäyttötehtävässä. 7.1 Tehtävänmäärittelykäyttöliittymät Käyttöliittymänäkymät tarjoavat järjestelmää käyttävälle opettajalle liittymän tehtävien selaamiseen, uusien tehtävien luomiseen, sekä olemassa olevien tehtävien muokkaamiseen ja poistamiseen. Tehtävätyypit 1 ja 2 eli monivalinta- ja valintatehtävä toteutetaan yhdistetyn tehtävänmäärittelyliittymän avulla. Mikäli tehtävään määritellään täsmälleen yksi oikea ratkaisu, esitetään tehtävä monivalintatehtävänä. Muissa tapauksissa tehtävä esitetään valintatehtävänä. Aukkojentäyttötehtävä ja järjestystehtävä toteutetaan omien kahteen näkymään jakautuvien määrittelyliittymiensä avulla. 23

Taulukossa 16 on listattu kaikki järjestelmän tehtävänmäärittelynäkymät, sekä JSP-sivut, joiden avulla näkymät toteutetaan. Liite 2 sisältää kuvankaappaukset kaikista toteutettavista tehtävänmäärittelykäyttöliittymistä. Näkymän tehtävä JSP-sivu Kuva Tehtävien listaus tasklist.jsp Liite 2, kuva 5 Tehtävän yleisten parametrien määrittely tasksettings.jsp Liite 2, kuva 6 Monivalinta- ja valintatehtävien määrittely optiontask.jsp Liite 2, kuva 7 Aukkojentäyttötehtävän tekstin ja aukkojen blankfill1.jsp Liite 2, kuva 8 määrittely Aukkojentäyttötehtävän palautteen määrittely blankfill2.jsp Liite 2, kuva 9 Järjestystehtävän järjestettävien objektien ja ordering1.jsp Liite 2, kuva 10 palautteen määrittely Järjestystehtävän oikean järjestyksen määrittely ordering2.jsp Liite 2, kuva 11 Taulukko 14: Tehtävienmäärittelyn käyttöliittymät Kaikki määrittelykäyttöliittymät toteutetaan kieliriippumattomasti. Näkymissä esiintyvät tekstiosiot talletetaan tietokantaan ja noudetaan käyttöliittymiä esitettäessä AttributeCache-oliosta. Liite 4 kuvaa tehtävänmäärittelynäkymien kielikohtaiset arvot ja liite 5 listaa näiden sijoittumisen järjestelmän tietokannassa. 7.2 Controller-servlet Tehtävänmäärittelytehtävien hallintaan toteutetaan yksi keskitetty controller-komponentti, jonka vastuulla on kaikkien tehtävänmäärittelyn käyttöliittymänäkymien osalta: POST-kutsujen vastaanottaminen ja parametrien lukeminen. tarvittavien tukipalvelujen, kuten tietokantatoimintojen kutsuminen. seuraavan käyttöliittymänäkymän tarvitsemien tietorakenteiden valmistelu. seuraavan käyttöliittymänäkymän aktivointi. Controller-Servlet päättelee kullakin kutsukerralla tarvittavat toimenpiteet jokaisen kutsun yhteydessä välitettävän event-post-parametrin avulla. Event-parametrit luetaan html-näkymiä generoitaessa sekä controller-servletissä vakiomuuttujia sisältävästä EventParameters-luokasta. Parametrit toimintokuvauksineen on esitetty taulukossa 17. Event-parametrimuuttuja Toiminnon kuvaus LIST_TASKS Kaikkien kirjautuneen käyttäjän luomien tehtävien listaus. NEW_TASK Uuden tehtävän lisäys. EDIT_TASK Olemassa olevan tehtävän muokkaus. EDIT_TASK_AS_NEW Olemassa olevan tehtävän muokkaus siten, että muokattu versio tallennetaan uutena tehtävänä. EDIT_TASK_AS_NEW_LANG Olemassa olevan tehtävän muokkaus siten, että muokattu versio tallennetaan saman tehtävän erikielisenä versiona. DELETE_TASK Olemassa olevan tehtävän poistaminen. OPTION_TASK_COMPOSE Monivalinta/valintatehtävän käsittelyliittymän 24

OPTION_TASK_COMPOSE_ADD_OPTI ONS OPTION_TASK_SUBMIT BLANKFILL_TEXT_COMPOSE BLANKFILL_TEXT_SUBMIT BLANKFILL_FEEDBACK_COMPOSE BLANKFILL_ FEEDBACK_SUBMIT esittäminen. Parametrina välitetään tietorakenne, jossa on kaikki tulee parametrina olevassa tietorakenteesta saada helposti kaikki muokattavan tehtävän tiedot. Monivalinta/valintatehtävän käsittelyliittymän esittäminen siten, että tyhjien valinnansyöttökenttien määrää lisätään. Servletin tulee pakata vastaanotetut POST-parametrit tietorakenteeseen, kasvattaa numberofoptions-parametrin arvoa kahdellakymmenellä ja palauttaa kontrolli monivalinta/valintatehtävän käsittelyliittymälle. Monivalinta/valintatehtävän tallentaminen. Aukkojentäyttötehtävän käsittelyliittymän ensimmäisen osion esittäminen. Ensimmäisessä osassa määritellään teksti ja siihen liittyvät aukkokohdat. Aukkojentäyttötehtävän käsittelyliittymän ensimmäisen osion tallentaminen. Aukkojentäyttötehtävän käsittelyliittymän toisen osion esittäminen. Toisessa osassa määritellään valittuihin aukkokohtiin liittyvät palautteet. Tämä käyttöliittymä vaatii syötteenään keskusmuistitietorakenteen, josta aukkopaikat voidaan helposti poimia palautteen määrittelyä varten. Aukkojentäyttötehtävän käsittelyliittymän toisen osion tallentaminen. ORDERING_OPTIONS_COMPOSE Järjestystehtävän ensimmäisen osion esittäminen. Ensimmäisessä osassa määritellään järjestettävät objektit ja niihin liittyvä palaute. ORDERING_OPTIONS_COMPOSE_ADD _OPTIONS Järjestystehtävän käsittelyliittymän ensimmäisen osion esittäminen siten, että tyhjien syöttökenttien määrää lisätään. Servletin tulee pakata vastaanotetut POSTparametrit tietorakenteeseen, kasvattaa numberofoptionsparametrin arvoa kahdellakymmenellä ja palauttaa kontrolli järjestystehtävän käsittelyliittymälle. ORDERING_OPTIONS_SUBMIT Järjestystehtävän käsittelyliittymän ensimmäisen osion tallentaminen. ORDERING_ORDER_COMPOSE Järjestystehtävän toisen osion esittäminen. Toisessa osassa määritellään järjestettävien objektien oikea järjestys. ORDERING_ORDER_SUBMIT Järjestystehtävän käsittelyliittymän toisen osion TEST tallentaminen. Event-parametri testikäyttöön. Tämän event-tapauksen yhteydessä Servletin tulee tulostaa kaikki POST-kutsussa saadut parametrit html-sivulle. Taulukko 15: Event-parametrit Controller-servlet hyödyntää apuluokkia käyttöliittymiltä saatavien POST-parametrien lukemiseen, tietorakenteiden muodostamiseen sekä tietotyyppimuunnoksiin. Nämä apuluokat on esitetty taulukossa 18. 25

Luokka PostParameterParser MiscUtil DateParser Kuvaus Lukee POST-parametrit ja tallentaa ne oikeanlaiseen tietorakenteeseen. Luokka erilaisten tietotyyppien ja muiden tukitehtävien käsittelyyn. Päivämäärien käsittelyyn tarvittavat palvelut. Taulukko 16: Controller-servletin apuluokat 7.3 Tietorakenteet Tehtävänmäärittelytietojen käsittelyyn ja väliaikaistallennukseen käytetään tehtävätyyppikohtaisia tietorakenteita, jotka on esitetty luokkakaaviona kuvassa 9. Tietorakenteet toteutetaan JavaBean-luokkina, jotka tarjoavat get- ja set- metodit kaikille tehtävätyypin tiedoille. Tiedot, joiden lukumäärää ei tiedetä etukäteen, sijoitetaan HashMaptietorakenteeseen, josta ne voidaan hakea järjestysluvun avulla indeksoiden. Tehtäväkohtaiset tietorakenneluokat perivät BaseTaskDTO-luokan, joka sisältää kaikille tehtävätyypeille yhteiset palvelut. 7.4 Tukipalvelut Kuva 9: Tietorakenneluokat Tehtävien määrittelyyn liittyvät tukipalvelut, kuten tietojen tallennus ja haku toteutetaan erillisten tukipalveluluokkien avulla. Controller-servlet kutsuu näitä palveluita tarvittaessa. 26

7.4.1 Tietojen haku ja tallennus Tietokannan käsittelyyn toteutettavat apuluokat tarjoavat palvelut tehtävätyyppikohtaisten tietorakenteiden sisällön tietokantatallennuksiin sekä määrittelytiedot sisältävien tietorakenteiden hakuun. Kuvassa 8 on esitetty luokkakaavio tietokannan käsittelyyn tarvittavista luokista. Kuva 8: Tietokannan käsittelyluokat Taulukossa 19 listataan yksityiskohtaisesti tietokantaa käsittelevien apuluokkien metodien toiminta. Luokka Metodi Metodin kuvaus DatabaseBase public Connection Avaa tietokantayhteyden ja palauttaa getconnection(); valmiin Connection olion. public void Sulkee tietokantayhteyden. closeconnection(); MultipleChoiceDatabase MenuDatabase public abstract void savedata(basetaskdto data); public abstract Collection loaddata(); public abstract void savedata(basetaskdto data); public abstract Collection loaddata(); public abstract void savedata(basetaskdto data); Abstrakti metodi, joka toteutetaan tehtäväkohtaisesti aliluokissa. Abstrakti metodi, joka toteutetaan tehtäväkohtaisesti aliluokissa. Tallentaa parametrina saadun tietorakenteen tiedot tietokantaan. Tämä metodi saa parametrinaan ChoiceTaskDTO objektin. Hakee kaikki määrättyyn tehtävämäärittelyyn liittyvät tiedot. Tallentaa parametrina saadun tietorakenteen tiedot tietokantaan. Tämä metodi saa parametrinaan ChoiceTaskDTO objektin. 27

OrganizationDatabase FillBlanksDatabase public abstract Collection loaddata(); public abstract void savedata(basetaskdto data); public abstract Collection loaddata(); public abstract void savedata(basetaskdto data); public abstract Collection loaddata(); Hakee kaikki määrättyyn tehtävämäärittelyyn liittyvät tiedot. Tallentaa parametrina saadun tietorakenteen tiedot tietokantaan. Tämä metodi saa parametrinaan OrganizationTaskDTO objektin. Hakee kaikki määrättyyn tehtävämäärittelyyn liittyvät tiedot. Tallentaa parametrina saadun tietorakenteen tiedot tietokantaan. Tämä metodi saa parametrinaan FillBlanksDTO objektin. Hakee kaikki määrättyyn tehtävämäärittelyyn liittyvät tiedot. Taulukko 17: Tietokannankäsittelymetodit 7.5 Tehtävänmäärittelynäkymien tiedonvälitys Tehtävänmäärittely jakautuu kaikille tehtävätyypeille yhteiseen yleiseen tehtävänmäärittelyosaan sekä tehtävätyyppikohtaiseen osaan, jossa määritellään: tehtävänannon elementit, kuten monivalinta- ja valintatehtävän valinnat, järjestystehtävän järjestettävät objektit sekä aukkojentäyttötehtävän teksti aukkoineen. tehtävänannon oikea ratkaisu. tehtävään liittyvä yksityiskohtainen palaute. muu mahdollinen tehtäväkohtainen tieto. Tiedot välitetään käyttöliittymiltä controller-servletille http-post-parametreina. Tarkat parametritiedot on listattu liitteessä 1 taulukossa 20 osoitetulla tavalla. Parametrien käyttö Parametrilistaus Kaikissa post-kutsuissa välitettävät yleiset Liite 1, taulukko 1. parametrit Yleisen tehtävänmäärittelyvaiheen parametrit. Liite 1, taulukko 2. Monivalinta- ja valintatehtävien parametrit. Liite 1, taulukko 3. Aukkojentäyttötehtävien parametrit. Liite 1, taulukko 4. Järjestystehtävien parametrit. Liite 1, taulukko 5. Taulukko 18: Käyttöliittymien POST-parametrit Monivalinta- ja valintatehtävissä, järjestystehtävissä sekä aukkojentäyttötehtävissä esiintyy tietoja, joiden määrää ei tiedetä etukäteen. Näiden parametrien nimien perään katenoidaan käyttöliittymänäkymiä generoitaessa sekvenssinumero, jota esitetään liitteenä olevissa parametrilistauksissa merkillä #. Numerointi alkaa luvusta 1. 28

8. ESITYSKOMPONENTIT Esityskomponentit vastaavat tehtävän esityskäyttöliittymän sisällön generoimisesta. Tehtävätietojen käsittelyyn käytetään cache-tietorakennetta, joka on kuvattu luvussa 5. 8.1 Esityskomponenttien abstrakti määrittely 8.1.1 Komponenttien tehtävät - Käyttäjälle esitettävän tehtävänannon muotoileminen. 8.1.2 Komponenttien tarjoamat palvelut - Tehtävänannon palauttaminen kehyskoodille käyttäjän www-selaimella näytettäväksi. 8.1.3 Komponenttien säännöt ja rajoitukset - Osattava esittää kaikki tehtävätyypit. - Toteutettava AttributeCache-rajapinnan vaatimukset. 8.1.4 Komponenttien rajapinnat - Esitysservlettirajapinta - tehtäväparametrien vastaanottaminen (mm. esityskieli) - tehtävänannon palauttaminen - Cache-rajapinta - kielikohtaisten tehtävätietojen noutaminen 29

8.2 Esityskomponenttien tietosisältö ja palvelut Kuvassa 10 on kuvattu toteutettavat esityskomponentit luokkakaaviona. Kaikki esityskomponentit toteuttavat DisplayerInterface-rajapinnan, ja perivät CommonDisplayer-luokan, joka sisältää esityskomponenteille yhteiset palvelut. Tehtävätyyppikohtainen getscript()-metodi palauttaa esityskäyttöliittymän XHTML-merkkijonona. Kuva 10: Esityskomponenttien luokkakaavio DisplayerInterface-rajapintaluokka vaatii jokaisen esityskomponentin sisältävän toteutuksen ainakin seuraaville metodeille: public void init (String taskid, String language, String initparams); 30

Toiminta: Alustetaan tarvittavat muuttujat. Initparams-muuttuja on xml-muodossa annettu merkkijono, joka tulkitaan jos parametreja on annettu. public String getscript () throws CacheException; Toiminta: Tuotetaan käsiteltävää tehtävää koskevan XHTML-esityskäyttöliittymän headerosaan lisättävät dynaamiset skriptiosiot. public String getsetting(string [] initval, String params, String hiddens, boolean allowtry) throws CacheException; Toiminta: Tuotetaan käsiteltävää tehtävää koskevan XHTML-esityskäyttöliittymän varsinainen sisältö. 8.3 Esityskomponenttien parametrit Tämä luku kuvaa esityskomponenttien käyttämät parametrit tehtävätyypeittäin. Esityskomponenttien aktivoiminen: tyyppi: nimi: tarkoitus: String taskid esitettävän tehtävän tunnus. String language haluttu esityskieli. Taulukko 19: Esityskomponenttien kutsuparametrit Tehtävänmäärittelytietojen noutaminen cache-rakenteesta - valintatehtävät: tyyppi: nimi: tarkoitus: String headline sivun otsikko. String infobox käyttäjälle esitettävä ohjeteksti. String assignment tehtävänanto (= esitettävä kysymys). String[] options vastausvaihtoehdot esitysjärjestyksessä. String buttontext vastauspainikkeen teksti. Taulukko 20: Valintatehtävien esitysparametrit Tehtävänmäärittelytietojen noutaminen cache-rakenteesta - järjestystehtävät: tyyppi: nimi: tarkoitus: String headline sivun otsikko. String infobox käyttäjälle esitettävä ohjeteksti. String assignment tehtävänanto (= esitettävä kysymys). String[] options järjestettävät elementit esitysjärjestyksessä. String buttontext vastauspainikkeen teksti. Taulukko 21: Järjestystehtävien esitysparametrit 31

Tehtävänmäärittelytietojen noutaminen cache-rakenteesta - aukkojentäyttötehtävät: tyyppi: nimi: tarkoitus: String headline sivun otsikko. String infobox käyttäjälle esitettävä ohjeteksti. String assignment tehtävänanto (= aukkoja sisältävä teksti). String[] options tyhjä; ei tarvita tehtävätyypissä. String buttontext vastauspainikkeen teksti. Taulukko 22: Aukkojentäyttötehtävien esitysparametrit Sisällön palauttaminen kehyskoodiservletille: tyyppi: nimi: tarkoitus: String task esitettävä tehtävä XHTML-koodina. String[] initval kunkin vastausvaihtoehdon käyttäjälle esitettävä oletusarvo. Feedback error käyttäjälle esitettävä virheilmoitus. Taulukko 23: Tehtävän esitysparametrit 8.4 Esityskäyttöliittymien ulkoasun muokkaaminen Tehtävien esittämisessä generoitavien xhtml-sivujen ulkoasua voidaan muokata toteuttamalla kurssikohtainen css-tiedosto, jossa liitteen 3 taulukossa 1 listatut css-class tyylimäärittelyt. Mikäli joitain luokkia ei ole toteutettu kurssikohtaisessa tyylitiedostossa, käytetään esittämiseen esityskomponenttien käyttöön toteutettavia oletustyylejä. Omia tyylitiedostoja käytettäessä tulee käyttäjän itse huolehtia tyylimäärittelyjen toimivuuden testaamisesta järjestelmä ei validoi käyttäjien tyylitiedostoja millään tavalla. 32

9. ANALYSOINTIKOMPONENTIT Analysointikomponentit vastaavat käyttäjän antamien vastausten arvioinnista ja palautteen muodostamisesta. Palaute kootaan Feedback-olioon, joka palautetaan kehyskoodiservletille. Tehtävätietojen, kuten oikeiden vastausten ja palautteen, käsittelyyn käytetään cachetietorakennetta, joka on kuvattu luvussa 5. 9.1 Analysointikomponenttien abstrakti määrittely 9.1.1 Komponenttien tehtävät - tehtävään annetun vastauksen arvioiminen. - käyttäjälle esitettävän palautteen muodostaminen. - Feedback-olion luominen. 9.1.2 Komponenttien tarjoamat palvelut - Feedback-olion palauttaminen kehyskoodille 9.1.3 Komponenttien säännöt ja rajoitukset - osattava analysoida kaikki tehtävätyypit. - toteutettava AttributeCache-rajapinnan vaatimukset. - sisällytettävä palautteeseen oikeellisuusprosentti: numeerinen arvio vastauksen oikeellisuudesta. ilmoitusteksti: varsinainen palauteteksti. liiteaineisto: mahdollinen muu tieto, esim. suoritettavan SQL-kyselyn tulos. - tallennettava palaute Feedback-olioon. - palautettava Feedback-olio kehyskoodille. 9.1.4 Komponenttien rajapinnat - vastausservlettirajapinta - tehtäväparametrien vastaanottaminen - vastauksen vastaanottaminen - Feedback-olion palauttaminen - cache-rajapinta - kielikohtaisten oikean vastauksen kuvailutietojen noutaminen - Feedback-oliorajapinta - palautteen tallentaminen 33

9.2 Analysointikomponenttien tietosisältö ja palvelut Kuvassa 11 on kuvattu toteutettavat analysointikomponentit luokkakaaviona. Kaikki analysointikomponentit toteuttavat AnalyserInterface-rajapinnan, ja perivät CommonAnalyserluokan, joka sisältää esityskomponenteille yhteiset tiedot. Tehtävätyyppikohtainen analyse()-metodi arvioi annetun vastauksen ja palauttaa Feedback-olion kehyskoodiservletille. Kuva 11: Analysointikomponenttien luokkakaavio AnalyserInterface-rajapintaluokka vaatii jokaisen analysointikomponentin sisältävän toteutuksen ainakin seuraaville metodeille: public void init (String taskid, String language, String initparams); Toiminta: Alustetaan tarvittavat muuttujat. Initparams-muuttuja on xml-muodossa annettu merkkijono, joka tulkitaan jos parametreja on annettu. public Feedback analyse (String [] answer, String params) throws CacheException; 34

Toiminta: Suorittaa varsinaisen analysoinnin. Answer-parametrin sisältämää vastausta verrataan tietokantaan määriteltyyn oikeaan vastaukseen. public void registercache(attributecache cache ); Toiminta: Rekisteröidään cache analysointikomponenttiin, jotta sitä voidaan käyttää vastauksen analysoinnissa. 9.3 Analysointikomponenttien parametrit Tämä luku kuvaa analysointikomponenttien käyttämät parametrit tehtävätyypeittäin. Analysointikomponentin aktivoiminen: tyyppi: nimi: tarkoitus: String userid käyttäjätunnus. String taskid tehtävätunnus. String language käytetty esityskieli. String[] answer opiskelijan valintatehtävään antamat vastaukset. String[] answer opiskelijan järjestystehtävään antama vastaus. String[] answer opiskelijan aukkojentäyttötehtävään antamat vastaukset. Taulukko 24: Analysointikomponenttien kutsuparametrit Oikean vastauksen kuvailutietojen noutaminen cache-rakenteesta - valintatehtävät: tyyppi: nimi: tarkoitus: String[] Solution kunkin vastausvaihtoehdon oikeellisuustieto. String[] okfeedback oikein valittuihin vaihtoehdoihin annettavat palautteet. String[] badfeedback väärin valittuihin vaihtoehtoihin annettavat palautteet. Taulukko 25: Valintatehtävien analysointiparametrit Oikean vastauksen kuvailutietojen noutaminen cache-rakenteesta - järjestystehtävät: tyyppi: nimi: tarkoitus: String[] Solution järjestettävien elementtien oikea järjestys. String[] okfeedback oikeisiin kohtiin sijoitettuihin elementteihin liittyvät palautteet. String[] earlyfeedback liian aikaiseen paikkaan sijoitettuhin elementteihin liittyvät palautteet. String[] latefeedback liian myöhäiseen paikkaan sijoitettuhin elementteihin liittyvät palautteet. Taulukko 26: Järjestystehtävien analysointiparametrit 35

Oikean vastauksen kuvailutietojen noutaminen cache-rakenteesta - aukkojentäyttötehtävät: tyyppi: nimi: tarkoitus: String[] Solution aukkokohtiin annettavat oikeat syötteet. String[] okfeedback oikein täytettyihin aukkokohtiin annettavat palautteet. String[] badfeedback väärin täytettyihin aukkokohtiin annettavat palautteet. Taulukko 27: Aukkojentäyttötehtävien analysointiparametrit Palautteen välittäminen kehyskoodiservletille: tyyppi: nimi: tarkoitus: Feedback Feedback käyttäjälle esitettävä palaute/virheilmoitus. Taulukko 28: Palautteenvälitysparametrit 36

10. PAKKAUSRAKENNE Projektissa toteutettavat luokat jaetaan taulukossa 31 esitettyyn pakkausrakenteeseen. Paketti fi.hy.eassari.showtask.util fi.hy.eassari.showtask.servlets fi.hy.eassari.showtask.trainer fi.hy.eassari.taskdefinition.util fi.hy.eassari.taskdefinition.servlets fi.hy.eassari.taskdefinition.main Selite Tehtävävien esityksen ja analysoinnin apuluokat. Tehtävävien esityksen Servlet-luokat. Muut tehtävien esityksen ja analysoinnin luokat. Tehtävänmäärittelyn apuluokat Tehtävämäärittelyn Servlet-luokat. Muut tehtävämäärittelyn luokat. Taulukko 29: Pakkausrakenne 37

11. LÄHTEET [LAI03] Harri Laine: eassari Practicing, assesment and exam engine http://www.cs.helsinki.fi/u/laine/eassari.pdf (9.2.2004) 38

12. LIITTEET Liite 1: Tehtävänmäärittelyn käyttöliittymien tietosisältö Kaikissa post-kutsuissa välitettävät yleiset parametrit Nimi Merkitys Tyyppi Muuta event Tähän POST-kutsuun Int Event-parametrien arvot liittyvän tapahtuman luetaan aina EventParametersluokasta. tunniste, jonka avulla vastaanottava Servlet osaa tehdä tarvittavat toimenpiteet. taskname Tehtävän nimi String Nimien on oltava yksikäsitteisiä. Jos annettu nimi on jo olemassa, katenoidaan nimen perään määrittelyhetken aikaleima. taskid Tehtävän tunniste Int Vain olemassa olevilla tehtävillä on id-arvot. Jos arvoa ei saada POST:n yhteydessä, on kyseessä uusi tehtävä. Jokaisen kutsun yhteydessä on validoitava onko käyttäjällä oikeutta käsitellä taskidparametrin osoittamaa tehtävää. Taulukko 1: Jokaisen post-kutsun yhteydessä käytettävät yleiset parametrit Yleisen tehtävänmäärittelyvaiheen post-parametrit Nimi Merkitys Tyyppi Muuta task Tehtävänanto. String tasktype Tehtävän tyyppi, esim. String monivalintatehtävä. Tämän tiedon avulla Servlet osaa kirjata tietokantaan tehtävätyyppiin liittyvän analysointikomponentin ja esityskomponentin, sekä ohjata kontrollin oikeaan tehtävänmäärittelyliittymä än. 39

language Tehtävän määrittelykieli. String positivefeedback Koko tehtävää koskeva String palaute, joka esitetään jos ratkaisu on hyväksyttävä. negativefeedback Koko tehtävää koskeva String palaute, joka esitetään jos ratkaisu ei ole hyväksyttävä cutofvalue Tehtävän hyväksymisraja int (0-100) oikeellisuusprosenttina. immediatefeedback Tieto siitä, esitetäänkö int (0 tai 1) palaute välittömästi. numberoftries Ratkaisuyrityskertojen yläraja. Mikäli parametrin arvo POST-kutsussa ei ole nollaa suurempi kokonaisluku, ei yrityskertojen määrää rajoiteta. registertry Tieto siitä, int (0 tai 1) rekisteröidäänkö tehtävän ratkaisuyritykset. saveanswer Tieto siitä, tallennetaanko int (0 tai 1) tehtävään annetut vastaukset. loginrequired Tieto siitä, onko int (0 tai 1) opiskelijan oltava kirjautuneena järjestelmään suorittaakseen tehtävän. saveasnew Tieto siitä, tallennetaanko int (0 tai 1) tehtävä uudeksi tehtäväksi. Jos tämä parametri on arvoltaan 0, tallennetaan määrittely aiemman tehtävän tilalle. saveasnewlanguage Tieto siitä, tallennetaanko int (0 tai 1) tehtävä olemassa olevan tehtävän erikieliseksi variaatioksi. Jos tämä parametri on arvoltaan 1, tallennetaan tehdyt muutokset saman tehtävän erikielisiksi kuvaustiedoiksi. Taulukko 2: Yleisen tehtävänmäärittelyvaiheen post-parametrit 40

Monivalinta- ja valintatehtävien parametrit Nimi Merkitys Tyyppi Muuta option# #. vaihtoehdon nimi. String Todellisten parametrien nimet ovat option1, option2, option3,, optionn (N=vaihtoehtojen määrä) isselected# Tieto siitä, tuleeko int (0 tai 1) Todellisten parametrien nimet vaihtoehdon # olla ovat isselected1, isselected2, valittuna oikeassa isselected3,, isselectedn ratkaisussa. (N=vaihtoehtojen määrä) positivefeedback# Vaihtoehtoon # liittyvä String Todellisten parametrien nimet negativefeedback# numberofoptions palaute tapauksiin, joissa vaihtoehtoon liittyvä ratkaisu on oikein. Vaihtoehtoon # liittyvä palaute tapauksiin, joissa vaihtoehtoon liittyvä ratkaisu ei ole oikein. Lomakkeella esitettävien vaihtoehtojen määrä. Osa tarjotuista vaihtoehdoista voi olla tyhjiä. Mikäli jonkin vaihtoehdon option#- kenttä on tyhjä, ei vaihtoehtoa tule tallentaa tietokantaan. Tällöin tätä vaihtoehtoa seuraavien vaihtoehtojen sekvenssinumerot tulee korjata oikeellisiksi. String ovat positivefeedback2, positivefeedback3,, positivefeedbackn (N=vaihtoehtojen määrä) positivefeedback1, Todellisten parametrien nimet ovat negativefeedback1, negativefeedback2, negativefeedback3,, negativefeedbackn (N=vaihtoehtojen määrä) int Kaikissa yllä esitetyissä parametreissa # numberofoptions. Taulukko 3: Monivalinta- ja valintatehtävien parametrit 41

Aukkojentäyttötehtävien parametrit Nimi Merkitys Tyyppi Muuta text Tehtävänantoon String Tyhjän aukkopaikan merkintä liitettävä teksti, joka onnistuu merkitsemällä tekstiin sisältää aukkopaikat kaksinkertaiset hakasulut, kaksinkertaisin joiden sisällä ei ole tekstiä. hakasulkumerkein ([[ ja Sisällöllisen aukkopaikan ]]) merkittyinä. merkintä tehdään ympäröimällä aukon oikea täyttötapa kaksinkertaisilla positivefeedback# Aukkopaikkaan # liittyvä palaute tapauksiin, joissa aukko on täytetty oikein. negativefeedback# Aukkopaikkaan # liittyvä palaute tapauksiin, joissa aukkoa ei ole täytetty oikein. Taulukko 4: Aukkojentehtävien parametrit hakasulkumerkeillä. Palaute määritellään eri näkymässä kuin edellä mainittu parametri text. Ennen palautteen määrittelyä käsittelevä Servlet on käsitellyt text-parametrin ja muodostanut keskusmuistitietorakenteen, josta aukkopaikat on helppo poimia palautteen määrittelyä varten. Palaute määritellään eri näkymässä kuin edellä mainittu parametri text. Ennen palautteen määrittelyä käsittelevä Servlet on käsitellyt text-parametrin ja muodostanut keskusmuistitietorakenteen, josta aukkopaikat on helppo poimia palautteen määrittelyä varten. 42

Järjestystehtävien parametrit Nimi Merkitys Tyyppi Muuta object# # järjestettävän objektin String Todellisten parametrien nimet nimi. ovat object1, object2, object3,, objectn (N=objektien määrä) correctfeedback# Objektiin # liittyvä String Todellisten parametrien nimet palaute tapauksiin, joissa objekti on järjestetty oikealle paikalleen. tooearlyfeedback# Objektiin # liittyvä palaute tapauksiin, joissa objekti on järjestetty liian aikaiselle paikalle. toolatefeedback# Objektiin # liittyvä palaute tapauksiin, joissa objekti on järjestetty liian myöhäiselle paikalle. String String Taulukko 5: Järjestystehtävien parametrit ovat positivefeedback2, positivefeedback3,, positivefeedbackn (N=vaihtoehtojen määrä) positivefeedback1, Todellisten parametrien nimet ovat negativefeedback1, tooearlyfeedback2, tooearlyfeedback3,, tooearlyfeedbackn (N=vaihtoehtojen määrä) Todellisten parametrien nimet ovat toolatefeedback1, toolatefeedback2, toolatefeedback3,, toolatefeedbackn (N=vaihtoehtojen määrä) int Kaikissa yllä esitetyissä parametreissa # numberofoptions. numberofoptions Lomakkeella esitettävien vaihtoehtojen määrä. Osa tarjotuista vaihtoehdoista voi olla tyhjiä. Mikäli jonkin vaihtoehdon option#- kenttä on tyhjä, ei vaihtoehtoa tule tallentaa tietokantaan. Tällöin tätä vaihtoehtoa seuraavien vaihtoehtojen sekvenssinumerot tulee korjata oikeellisiksi. placeofobject# Objektin # sijainnin kuvaava järjestysnumero. int Tämä parametri tulee huomioida ainoastaan ORDERING_ORDER_SUBMITevent-parametria käsiteltäessä. Tämän event-parametrin käsittelyssä voidaan muut tämän taulukon parametrit jättää huomioimatta. 43

Liite 2: Käyttöliittymäkuvat Tehtävien esittäminen Kuva 1: Monivalintatehtävän vastauskäyttöliittymä 44

Kuva 2: Valintatehtävän vastauskäyttöliittymä 45

Kuva 3: Aukkojentäyttötehtävän vastauskäyttöliittymä 46

Kuva 4: Järjestystehtävän vastauskäyttöliittymä Tehtävien määritteleminen Kuva 5: Tehtävien listausnäkymä 47

Kuva 6: Tehtävän yleisten parametrien määrittelynäkymä 48

Kuva 7: Monivalinta- ja valintatehtävien määrittelynäkymä 49

Kuva 8: Aukkojentäyttötehtävän tekstin ja aukkojen määrittelynäkymä 50

Kuva 9: Aukkojentäyttötehtävän palautteenmäärittelynäkymä 51

Kuva 10: Järjestystehtävän järjestettävien objektien ja palautteen määrittelynäkymä Kuva 11: Järjestystehtävän oikean järjestyksen määrittelynäkymä 52