KORPPI

Minna Lesonen

Hannu Pekkanen

Tuukka Tawast

Heikki Uuksulainen

 

 

Sovellusraportti 4.6.2001


Korppi-projektin tietoja

Tekijät:                        Minna Lesonen (minles@st.jyu.fi)                                           Hannu Pekkanen (krimu@st.jyu.fi)                                    Tuukka Tawast (tutawast@mit.jyu.fi)                                     Heikki Uuksulainen (heuuksul@st.jyu.fi)

Yhteystiedot: Agora, huone C222.2

Työn nimi:      KORPPI, sovellusraportti

Työ:                Sovellusraportti tietotekniikan cum laude -työprojektiin

Sivumäärä:     31

Teettäjä:         Jyväskylän yliopisto, tietotekniikan laitos

Avainsanat:                 Kurssikirjanpito, ilmoittautuminen, kurssit, tentit, tietokanta, WWW-sovellus, dynaamisuus

Tiivistelmä:                 Korppi-projekti toteutti Jyväskylän yliopiston tietotekniikan laitokselle Kurki-kurssikirjanpitojärjestelmän seuraajan. Järjestelmä mahdollistaa WWW-selainpohjaisen kurssikirjanpidon hallinnan. Sovellusraportissa kuvataan projektissa toteutettua sovellusta.


Sisäl

1        Johdanto. 1

2        Käyttöliittymä. 3

3        Sovelluksen rakenne. 6

4        JSP-sivut. 8

4.1    Opettajan aloitussivu ope_aloitus.jsp. 8

4.2    Kurssilaisten pisteiden antosivu ope_kurssilaiset.jsp. 9

4.3    Demopisteiden antosivu ope_demopisteet.jsp. 9

4.4    Tietojen päivitykseen tarvittavat sivut. 10

4.5    Kurssiesiintymän muokkaussivu ope_kurssit.jsp. 11

4.6    Kurssiesiintymän lisäämiseen tarvittavat sivut. 11

4.7    Kurssilaisten lisätietojen sivu ope_lisatiedot.jsp. 14

4.8    Arvostelusivu ope_opintosuoritukset.jsp. 15

4.9    Kurssien raporttisivu ope_raportit.jsp. 16

4.10      Tenttien muokkaus sivu ope_tentit.jsp. 16

4.11      Opettajan kurssiesiintymien tulostussivu esiintymat.code. 16

4.12      Kurssin opetustietojen sivu hae_ryhmat_listana.code. 17

4.13      Ylläpitäjän istuntosivu AdminUsers.jsp. 17

4.14      Opiskelijoiden aloitussivu OpisKurssit.jsp. 17

4.15      Opiskelijan kurssin tietojen sivu CourseInfo.jsp. 18

4.16      Opetusryhmiin ilmoittautumissivu Opry_ilmo.jsp. 18

4.17      Opetusryhmien tietosivu GroupPlaces.jsp. 19

4.18      Tenttiin ilmoittautumissivu OpisTentit.jsp. 19

5        Java-pavut. 21

5.1    Käyttöoikeuksien tarkistuspapu UseModule.java. 22

5.2    Kurssi-ilmoittautumispapu AddUserToCourse.java. 22

5.3    Opetusryhmiin ilmoittautumispapu UserToGroup.java. 23

5.4    Käyttäjän tietoja ylläpitävä papu User.java. 23

6        Sovelluksen testaus. 24

7        Ohjeita ylläpitäjälle. 25

8        Virheet, puutteet ja jatkokehitys. 26

8.1    Yleinen osuus. 26

8.2    Opettajan osuus. 26

8.3    Opiskelijan osuus. 28

8.4    Ylläpitäjän osuus. 29

9        Yhteenveto. 30

Liite. Jatkokehityksen tehtävien priorisointia. 31

 


 

 Termiluettelo

Apache                  on ilmainen HTTP-palvelinohjelmisto.

CSS                       eli Cascade Style Sheets on WWW-sivujen ulkoasua ohjaava tiedosto.

GNUJSP               on ilmainen JSP-moottori.

HTML                  on WWW-sivujen sisältöä kuvaava kieli.

HTTP                    on WWW-arkkitehtuurin käyttämä tiedonsiirtoprotokolla.

Java                      on Sunin kehittämä laitteistoriippumaton olio-ohjelmointikieli.

Java-pavut            (engl. JavaBeans) ovat Java-ohjelmointikielellä luotuja komponentteja, joita voidaan käyttää JSP-sivuilla.

JDBC                    (engl. Java Database Connectivity) on Java-teknologian käyttämä tietosilta erilaisiin tietokantoihin.

Jserv                     on ilmainen Java-servlettimoottori.

JSP                        eli Java Server Pages on skriptaustyylinen ohjelmointikieli.

Keksi                    (engl. cookie) on Netscapen luoma, mutta nykyään jo standardoitu menetelmä saada WWW-sivuista vuorovaikutteisempia. Palvelin lähettää pieniä tietopaketteja selaimelle, jonka perusteella käyttäjä asetuksineen tunnistetaan jatkossa.

KURKI                 on Jyväskylän yliopistossa käytössä oleva kurssikirjanpitojärjestelmä.

Kuukkeli               on Antti Viinikan Jyväskylän yliopistossa kehittämä järjestelmä ohjausaikojen ajanvaraukseen ja hallintaan.

Käyttötapaus        (engl. use case) on käyttäjän tai sovelluksen toimintoa tietyn tehtävän suorittamiseksi kuvaava dokumentti.

Moduuli                on tietyn tehtäväjoukon suorittamiseen kehitetty sovellus ja käyttöliittymä.

Poolman                on ohjelma, joka kontrolloi tietokantayhteyksiä.

PostgreSQL          on ilmainen tietokannanhallintajärjestelmä.

Skripti                   on ohjelmointikieltä muistuttava ja usein hieman yksinkertaistettu tulkattava kieli.

Skriptaus              tarkoittaa WWW-sivujen tapauksessa ohjelmakoodin kirjoittamista HTML-dokumenttien sisään. Palvelinpuolen skriptauksessa koodi ajetaan palvelinkoneessa ja asiakaspään skriptauksessa selaimessa.

Selain                    on ohjelma, joka käyttäjän koneella tulkkaa HTML-kieliset sivut esitettävään muotoon.

Palvelin                 on ohjelmisto, joka WWW-sovellusten tapauksessa palvelee asiakkaana toimivien selainten hakupyyntöjä.

Servletti                on palvelimella sijaitseva sovelma (engl. applet), joka toteuttaa HTTP-palvelimen pyynnöstä tietyn toiminnon.

SQL                      eli Structured Query Language on tietokantojen hallintaan kehitetty standardi kieli.

Tomcat                  on ilmainen servletti- ja JSP-moottori.

 


Johdanto

Ensimmäinen Jyväskylän yliopistossa yleiseen käyttöön toteutettu WWW-pohjainen kurssikirjanpitosovellus, Kurki, toteutettiin matematiikan laitokselle tietotekniikan cum laude -työprojektina keväällä 1998. Se yhdenmukaisti laitoksella käytetyt kurssikirjanpitojärjestelmät ja laajensi niiden käytettävyyden verkkoon. Kurki huomattiin ideana hyväksi ja sen käyttöä haluttiin levittää suuremmalle käyttäjäjoukolle, jonka vuoksi päätettiin aloittaa sen seuraajan toteuttaminen.

Uuden järjestelmän ensimmäinen kehittäjä oli syksyn 2000 cum laude-työprojekti Kotka. Kotka-projekti määritteli uuden järjestelmän ominaisuudet, suunnitteli sille tietokannan, vertaili mahdollisia ohjelmistoja ja valitsi niistä käytettävät sekä toteutti henkilötieto-osion.

Keväällä 2001 Korppi-projekti jatkoi järjestelmän kehitystä. Projektin tehtäviin kuului kurssikirjanpito-osuuden toteutus. Projektin toteutusta jatkavat kesän 2001 aikana Tuukka Tawast ja Heikki Uuksulainen.

Keväällä 2001 myös Halko-niminen cum laude -työprojekti hyödynsi Kotkan laatimaa tietorakennetta. Halko suunnitteli ja toteutti kansalaisopistoille ja muille oppilaitoksille opetushallinto-ohjelman. Kevään aikana tehtiin näiden projektien välillä yhteistyötä erityisesti tietokannan määrittelyssä.

Korppi-projektin tavoitteena oli toteuttaa kurssikirjanpitosovellus, jossa ovat kaikki Kurki-järjestelmän ominaisuudet sekä joitakin uusia. Tavoite oli vaativa ja työläs ja kaikkia tilaajan vaatimia ominaisuuksia ei ehditty toteuttaa valmiiksi asti. Tässä sovellusraportissa kuvataan sovelluksen toteutusta, verrataan sitä sovellussuunnitelmaan sekä esitetään sovellukselle jatkokehitysideoita.

 Korppi-projekti laati myös muita dokumentteja. Projektikäsikirjassa keskitytään itse projektiin, sen organisaatioon, tehtäviin, tavoitteeseen ja aikatauluun sekä niiden toteutumiseen verrattuna alkuperäiseen projektisuunnitelmaan. Sovelluksen käyttöliittymästä laaditaan erillinen käyttöohje kesän 2001 aikana. Sovelluksen vaatimasta tietokannasta toteutetiin erillinen tietokantaraportti yhdessä Halko-projektin kanssa. JavaBean -lähdekoodit löytyvät Java-papu -raportista ja JSP-sivujen lähdekoodit JSP-sivu -raportista.

Luvussa 2 käsitellään sovelluksen käyttöliittymää ja luvussa 3 sovelluksen yleistä rakennetta. Luku 4 paneutuu projektissa tehtyihin JSP-sivuihin ja luku 5 Java-papuihin. Luvussa 6 kerrotaan sovelluksen testauksesta ja luvussa 7 annetaan sovelluksen ylläpitäjälle ohjeita. Luvussa 8 esitellään toteutumatta jääneitä osia ja annetaan ideoita jatkokehittäjille.

 Käyttöliittymä

Kurssikirjanpitojärjestelmän seuraajan kehitys aloitettiin jo syksyllä 2000 Kotka-projektin toimesta. Käyttöliittymän ulkoasussa on eroa riippuen siitä, kumman projektin tuottamilla sivuilla ollaan menossa. Seuraavassa käsitellään käyttöliittymää Korppi-projektin näkökulmasta.

Korppi-sovelluksen käyttöliittymä (katso kuva 1) on sivurakenteena jaettu kaikkien sivujen osalta kolmeen alueeseen: vasemman reunan navigointilistaan, yläosan kuvake- ja henkilötietopalkkiin sekä tieto- toimintoalueeseen.

 

                        Kuva 1. Opiskelijan kurssikirjanpidon Kurssit-sivu.

Käyttöliittymän sivun vasemmassa alueessa on navigointilinkkilista, jonka avulla järjestelmän sivuilla voidaan liikkua. Alueessa on ylinnä Korppi-sovelluksen logo, joka toimii linkkinä järjestelmän aloitussivulle. Logon alla ovat linkit järjestelmässä sillä hetkellä valittuna olevan osion toimintoihin. Nämä linkit riippuvat käyttäjän oikeustasosta, joten opiskelijoille ja opettajille näkyy erilainen linkkilista. Alinna vasemmassa reunassa ovat linkit, joiden avulla liikutaan Kotka-järjestelmän osiosta toiseen. Ylläpitäjän toiminnot näkyvät ylläpitäjälle vielä näiden linkkien alla.

Sivujen yläpalkin vasempaan reunaan on sijoitettu kuvakkeina käyttöliittymän toimintaa tukevat linkit, joita ovat järjestelmästä poistuminen, palaute, asetukset ja ohje. Näiden oikealla puolella sivun oikeassa yläkulmassa on järjestelmään kirjautuneen käyttäjän nimi sekä oikeustaso ja sen organisaatio (esim. opettaja tai opiskelija).  Nimen alla on käyttäjän sen hetkinen sijainti sivustolla. Sekä vasen reuna että yläpalkki pysyvät samanlaisina jokaisella Korppi-osion sivulla, vaikka niissä esitetyt tiedot voivat muuttua.

Kuva 2. Opettajan kurssikirjanpidon Kurssit-sivu

Suurimman osan sivusta täyttää tieto- ja toimintoalue, jossa esitetään kullekin sivulle kuuluvat tiedot ja toiminnot. Perussivussa siinä on lista kurssin valintaa varten sekä linkit tai painikkeet sivun toiminnoille. Kuvassa 1 on esitetty opiskelijan käyttöliittymän kurssikirjanpidon Kurssit-sivu. Kuvassa 2 taas on esitetty opettajan käyttöliittymän Kurssit-sivu. Tarkemmin Korppi-sovelluksen sivuja esitellään kesällä 2001 valmistuvassa käyttöohjeessa.

 

Sovelluksen rakenne

Kotka-järjestelmä on kokonaisuudessaan toteutettu verkkoratkaisuna, jossa dynaamisen WWW-palvelun tuottaa TomCat -palvelin JSP-tekniikalla. Tässä luvussa esitellään tarkemmin Kotka-järjestelmän tekniikkaa ja siten myös Korppi-sovelluksen rakennetta.

Kun WWW-palvelin vastaanottaa pyynnön selaimelta (asiakas), se päättelee, onko kyseessä staattinen HTML-sivu vai JSP-sivu (katso kuva 3). Staattisen sivun tapauksessa palvelin voi palauttaa pyydetyn sivun välittömästi takaisin selaimelle. Tällä hetkellä sovelluksen ainoa staattinen sivu on Kotkan tuottama sisäänkirjautumissivu.

Kuva 3. Järjestelmän yleinen rakenne

JSP-sivun ollessa kyseessä pyyntö välitetään edelleen TomCat -servlettimoottorille. Se tutkii, onko kyseistä sivua vastaava servletti jo olemassa. Aiemmin pyydettyjen sivujen tallentaminen servletteinä järjestelmän muistiin nopeuttaa sen toimintaa, koska sovellus voi palauttaa servletin suoraan. Jos servlettiä ei ole, pyyntö jatkaa matkaansa JSP-moottorille, joka generoi sivua vastaavan servletin. Se on puolestaan JSP-sivusta muodostettu Java-kielinen luokka, johon on liitetty tarvittavat Java-pavut sekä tietokannasta saatavat tiedot.

Tämän jälkeen servletti suoritetaan, jolloin muodostuu selaimen pyytämä HTML-sivu ja se lähetetään takaisin selaimelle (katso kuva 3). Näin asiakassovelluksena toimiva WWW-selain saa pelkkää HTML-koodia sisältävän sivun esitettäväksi. Tällä ratkaisulla  pyritään parantamaan selainyhteensopivuutta.

Sovelluksen tietokannasta tehdään erillinen tietokantaraportti yhdessä Halko-projektin kanssa.

 

 

           

 

JSP-sivut

JSP-sivut koostuvat HTML- ja Java-koodeista. Ne on nimetty käyttöoikeustason ja toiminnon mukaan (esim. opisKurssit.jsp ja ope_aloitus.jsp). Näiden ns. kokoojasivujen nimien pääte on JSP. Ne sisältävä HTML- ja JSP-määritykset sekä osiot, joista sivu koostuu. Näitä määrityksiä sisältämättömät osiot on nimetty code-päätteellä Kotka-sovelluksen käytännön mukaisesti.

 Code-päätteiset sivut eivät siis ole toimivia kokonaisuuksia, vaan ne on aina sisällytettävä toiseen sivuun. Näitä sivuja voidaan sisällyttää vapaasti muihin sivuihin, joten esim. tiedosto esiintymat.code on sisällytetty suurimpaan osaan opettajan sivuista.

Jokaisen JSP-sivun alussa on JSP:n vaatima määrittelyosuus. Siinä kerrotaan ne Java-pavut ja -luokat, jotka sivu vaatii toimiakseen. Tämän määrittelyn jälkeen on kommentointiosuus, jossa lyhyesti kuvataan sivun sisältö ja toiminta. Ensimmäinen koodiosuus sivulla on käyttäjän kirjautumisen tarkistus. Mikäli käyttäjä ei ole kirjautunut sisään järjestelmään, hänet ohjataan sisäänkirjautumiseen. Kirjautumistarkistuksen jälkeen esitellään ja alustetaan muutama yleisesti käytetty muuttuja. Lopuksi sivulla on vaaditut XML-määritykset ja XML-sivun sisällä sisällytetään muut tarvittavat sivut sivuun.

1.1        Opettajan aloitussivu ope_aloitus.jsp

Aloitussivu ope_aloitus.jsp avautuu opettajan siirtyessä kurssikirjanpito-osuuteen. Tälle sivulle on kerätty opettajien eniten käyttämät toiminnot. Sivu sisältää sivun ope_aloitus.code, jossa suoritetaan sivun toiminnot. ope_aloitus.code sisältää aluksi sivun esiintymat.code, joka tulostaa käyttäjälle kaikki käyttäjän kurssiesiintymät taulukossa. Tämän taulukon jälkeen sivu tulostaa toimintopainikkeet, joista käyttäjä voi valita haluamansa toiminnon.

Käyttäjä siirtyy haluamaansa toimintoon sivulla ope_aloitus.jsp olevien response.SendRedirect -lauseiden avulla. Nämä lauseet oli pakko sijoittaa sivun alkuun, ennen ensimmäistäkään HTML-koodia, jotta kaikki selaimet (erityisesti Internet Explorer) toimivat oikein.

1.2        Kurssilaisten pisteiden antosivu ope_kurssilaiset.jsp

Sivulla ope_kurssilaiset.jsp  ovat kaikki opiskelijoihin liittyvät toiminnot. Tämän sivun avulla opettaja voi antaa valitun kurssin kurssilaisille erilaisia pisteitä. Sivu sisältää tiedoston ope_kurssilaiset.code, joka edelleen sisältää esiintymat.coden kurssin valintaan sekä toimintopainikkeet toiminnon valintaan. Käyttäjän siirto valittuun toimintoon on toteutettu ope_kurssilaiset.jsp:ssä olevien response.SendRedirect -lauseiden avulla.

1.3        Demopisteiden antosivu ope_demopisteet.jsp

Sivulle ope_demopisteet.jsp pääsee Aloitus-, Kurssilaiset- ja Kurssit-sivuilta. Tällä sivulla on mahdollista antaa valitun kurssin opiskelijoille demopisteitä. Tämän sivun tekee erikoiseksi se, että se näytetään myös tuntiopettajina toimiville opiskelijoille. Sivu ope_demopisteet.jsp sisältää ope_demopisteet.coden, joka sisältää esiintymat.coden kurssin valintaan.

Sivu ope_demopisteet.code käy läpi valitun kurssin demoryhmät ja tulostaa niistä näytölle taulukon, johon käyttäjä voi täyttää demopisteet. Taulukkoon haetaan groupparticipant-taulun avulla henkilötiedot person-taulusta sekä personid:n ja valitun kurssin avulla result-taulusta tulokset. Result-tauluun tarvitaan personid:n lisäksi hakuavaimeksi fieldid, joka saadaan fieldgroup- ja field-taulun avulla. Fieldgroup-taulusta saadaan valittua kurssiesiintymä ja field-taulusta tapahtuman tyyppi, joiden avulla saadaan yksiselitteinen fieldid.

Tallenna-painikkeen painalluksen jälkeen sivu tallentaa vain muuttuneet tiedot. Tietoihin tallennetaan pisteet, päivämäärä sekä käyttäjä pisteiden antajaksi. Sivulla on myös tarkistus, että käyttäjälle on määritelty result-tauluun vaaditut tallennusehdot täyttävä rivi. Tämän tarkistuksen pitäisi periaatteessa olla täysin turha, sillä opiskelijoille luodaan kurssille ilmoittautumisen yhteydessä vaaditut kentät result-tauluun.

1.4        Tietojen päivitykseen tarvittavat sivut

Sivulle ope_paivitys.jsp pääsee Aloitus-, Kurssilaiset, ja Kurssit-sivulta. Tämän sivun avulla opettajan on mahdollista päivittää opiskelijoille kaikkia kurssiin liittyviä pisteitä (mm. tentti- ja demopisteet). Sivun rakenne on jälleen samanlainen kuin luvuissa 4.1 ja 4.2 käsiteltyjen JSP-sivujen.

Opettajan siirtyessä tälle sivulle avautuu kurssinvalintalistan lisäksi valikoita, joista opettaja valitsee päivitettävät kentät ja opiskelijat. Päivitettävät kentät haetaan eventgroup-taulusta valitun kurssin avulla. Opiskelijoiden valintaa varten tulostetaan aakkoslista, josta opettaja voi valita halutun sukunimen alkukirjaimen tai kirjoittaa tekstilaatikkoon haluamansa sukunimet pilkulla eroteltuina. Mikäli opettaja ei täytä yhtään ehtoa opiskelijoille, järjestelmä olettaa sen tarkoittavan kaikkia.

Valittuaan haluamansa kentät opettaja painaa Päivitä-painiketta, jolloin hänelle avautuu sivu ope_paivitys_2.jsp. Tälle sivulle tulostuu taulukko, jossa ovat opettajan valitsemat opiskelijat sekä päivitettävät tulokset. Opiskelijoiden tiedot saadaan esiin groupparticipant-taulussa olevan personid-kentän avulla. Jos opettaja oli määritellyt nimille joitain lisäehtoja, lisätään ne SQL-kyselylauseeseen muuttujan avulla. Tämä muuttuja on tyhjä, mikäli yhtään lisäehtoa ei ole määritelty. Päivitettävät tulokset joudutaan hakemaan result-taulusta kenttien personid ja fieldid avulla. Fieldid saadaan määriteltyä fieldgroup-taulussa olevan kurssiesiintymän ja field-taulussa olevan tapahtumatyypin avulla. Tapahtumatyyppi tuotiin parametrina edelliseltä sivulta.

Täytettyään haluamansa tulokset opettaja painaa Tallenna-painiketta, joka tallentaa vain muuttuneet tiedot result-tauluun. Samalla käyttäjä siirtyy  sivulle ope_tallenna_paivitys.jsp. Tuloksen tallennuksen yhteydessä tallennetaan myös päiväykseksi sen hetkinen päivämäärä sekä käyttäjän personid tulosten antajaksi. Tallennuksen jälkeen käyttäjälle tulostetaan tietokannasta nykyiset tiedot, joista käyttäjä näkee tallennuksen tuloksen.

1.5        Kurssiesiintymän muokkaussivu ope_kurssit.jsp

Sivu ope_kurssit.jsp sisältää pääosan opettajan toiminnoista. Sen toimintaidea on sama kuin luvuissa 4.1-4.4 mainittujen sivujenkin: Sivu sisältää sivun ope_kurssit.code, joka sisältää esiintymat.coden ja toimintopainikkeet. Erona em.. JSP-sivuihin on se, että nyt myös ope_kurssit.code pystyy suoraan toteuttamaan toimintoja.

 Kurssin poisto ja aktivointi on koodattu sivun alkuun, jolloin niiden toiminta on nopeaa. Kurssin lisääminen, muokkaaminen, lisätiedot, demopisteytys ja opiskelijan tietojen muokkaus avaavat uudet sivut. Sivulla on myös painike Hae kurssin tiedot, jonka avulla käyttäjä saa esiin tärkeimmät tiedot valitusta kurssista. Tämä tietojen haku on koodattu tiedostoon ope_kurssit.code.

1.6        Kurssiesiintymän lisäämiseen tarvittavat sivut

Sivun ope_lisaa_kurssi.jsp rakenne on sama kuin luvuissa 4.1-4.4 mainittujen sivujenkin. Sen avulla käyttäjä voi lisätä hallinnoimistaan kurssiesiintymistään uuden kurssiesiintymän tai muokata valittua kurssiesiintymää.

 Sivulla haetaan ensin valitusta kurssista sen yleiset tiedot courseinstance-taulusta löytyvän courseid-kentän avulla course-taulusta. Kurssin yleisten tietojen jälkeen tulostetaan taulukko, johon tulostuu kurssille määriteltyjen tapahtumien määrät. Tähän taulukkoon opettaja voi muokatessaan tai lisätessään kurssiesiintymää määritellä tapahtumien ryhmämäärän ja toistokerrat.

 Taulukko hakee tapahtumatyyppi kerrallaan tapahtumia ja vertaa niitä string-taulukoihin tallennettuihin kurssille jo määriteltyihin tapahtumiin. Mikäli vastaava tapahtumatyyppi löytyy, tulostetaan sen tiedot, muutoin tulostetaan tyhjät kentät. Erityispiirteenä taulukossa on kenttien jäädessä tyhjäksi tenttien ja luentojen oletusarvot. Tapahtumatyypin ollessa tentti tulostuu kerrat-sarakkeeseen 1 ja tapahtumatyypin ollessa luento määrä-sarakkeeseen 1.

Painaessaan Lisää- tai Muokkaa-painiketta opettaja siirtyy sivulle ope_lisää_kurssi_2.jsp. Sille tulostetaan taulukko, jossa on parametreina tuodut määrät tapahtumia. Mikäli parametrina siirtyi myös eventgroupid ja eventid, voidaan taulukko täyttää alustavasti tietokannan tauluista eventgroup ja event löytyvillä arvoilla. Käyttäjä täytti edellisellä sivulla Ryhmämäärä-kohtaan eventgroup-tauluun tulevien rivien määrän ja Toistokerrat-kohtaan yhteen eventgroup-taulun riviin kuuluvien event-taulun rivien määrän. Parametrit koodattiin URL-osoitteeseen grouptype-taulusta löytyvän tapahtumatyypin nimellä ja järjestysnumerolla.

Opettajan painaessa Tallenna-painiketta järjestelmä siirtyy sivulle ope_tallenna_kurssi.jsp. Tässä kohtaa tiedot siirtyvät poikkeuksellisesti post-metodilla, koska niitä saattaa olla hyvin suuri määrä. Tätä sivua ei  näytetä lainkaan käyttäjälle, vaan tallennuksen jälkeen käyttäjä siirtyy takaisin sivulle ope_lisaa_kurssi.jsp, johon tulostuu tallennuksen tulos.

ope_tallenna_kurssi.jsp tutkii aluksi jokaisen eventgroupin kohdalla, onko käyttäjä laittanut rastin Poista tapahtuma-ruutuun. Mikäli kohdassa on rasti, muutetaan kaikkiin tapahtumiin liittyviin tauluihin (eventgroup, event, fieldgroup, fieldgroupprotection, fieldgrouplang, field, fieldtranslation) deleted-kentän arvoksi true.

Jos kohdassa ei ole rastia, jatketaan seuraavaan kohtaa, jossa tutkitaan, onko kyseessä muokkaus vai lisäys. Muokkauksen ollessa kyseessä tarkistetaan, että eventgroupille tuotiin parametrina eventgroupid. Mikäli tätä ei löydy, siirrytään kuitenkin lisäys-kohtaan. Muokatessa tallennetaan tuodun eventgroupid:n avulla eventgroup-tauluun tiedot ja lisäyksen tapauksessa tauluun lisätään uusi rivi. Tämä muokkaus tallentaa automaattisesti kaikki tiedot, sillä järjestelmä olettaa, että kaksi opettajaa ei samanaikaisesti muuta saman kurssiesiintymän tietoja.

eventgroupin tapahtuman jälkeen siirrytään fieldgroup-tauluihin, jotka ovat tulosten kannalta tärkeimpiä tauluja. Nyt lasketaan fielgroup-taulun kurssiesiintymän tunnuksen ja field-taulun tapahtumantyypin avulla fieldgroup-tauluun määriteltyjen tapahtumien määrä. Mikäli se on nolla, pitää tietokantaan lisätä kentät tauluihin fieldgroup, fieldgroupprotection, fieldgrouplang, fieldtranslation ja field. Mikäli tapahtumien määrä on yksi, ei tehdä mitään, ja jos se on yhtä suurempi, tietokannassa on virhe.

Tietokantaan tallennetaan jokaista kurssille määriteltyä eventgroup-tyyppiä kohden yksi fieldgroup eli käyttäjä voi määritellä eventgroup-tauluun useita ryhmiä, mutta fieldgroup-tauluun tallennetaan vain yksi. Tämä toteutus varmistaa sen, että opiskelija voi saada ainoastaan yhden tuloksen kustakin tapahtumasta.

field- ja fieldtranslation-tauluihin lisättävä kenttämäärä lasketaan event-taulussa olevien eventgroupid-arvojen avulla, jotka saadaan eventgroup-taulusta kenttien courseintanceid ja grouptype avulla. fieldtype-taulun määritykset vastaavat grouptype-taulun määrityksiä, kun niiden id-tunnuksiin lisätään neljä (esim. grouptypeid demoille on 1 ja fieldtypeid demoille on 5). Mikäli kyseessä oleva tapahtuma on luennot, niitä ei tallenneta fieldgroup-puolelle tietokannassa.

Onnistuneen eventgroup-arvon muokkauksen tai lisäyksen jälkeen siirrytään silmukassa event-tapahtumien lisäämiseen tai muokkaamiseen, joka sujuu vastaavasti. event-arvojen yhteydessä tarkistetaan myös, onko tarpeen lisätä field-arvoja. Jokaista event-riviä kohden pitää olla yksi field-rivi. Field-taulun rivit ovat yksittäisiä tapahtumia, joille voidaan antaa pisteitä. Edellä olevassa fieldgroup-rivien tallennuksessa tallennetaan muuttujaan tieto siitä, pitääkö event-rivien yhteydessä tallentaa rivi myös field- ja fieldtranslation-tauluihin.

fieldtypelang-tauluun tallennetaan nimeksi sama käyttäjän antama tapahtumaryhmän nimi kuin eventgroup-tauluun. fieldtranslation-tauluun tallennetaan tämä sama nimi lisättynä järjestysnumerolla. Käyttäjä ei pysty jälkeen päin muuttamaan fieldtypelang-tauluun tullutta nimeä, koska se sotkisi kurssille valittujen pisteidenlaskufunktioiden toiminnan. fieldtranslation-tauluun sen sijaan tallentuu muokkauksen yhteydessä uusi nimi.

field-rivien muokkaus on Korppi-sovelluksen nykyisessä versiossa hieman puutteellinen. Niitä lisätään lisäyksen yhteydessä event-rivejä vastaava määrä, mutta event-rivien muokkauksen yhteydessä niiden määrää ei päivitetä. Tämä puute pitää ehdottomasti korjata nopeasti.

ope_tallenna_kurssi.jsp toteuttaa luvun 4.7 algoritmin.

1.7        Kurssilaisten lisätietojen sivu ope_lisatiedot.jsp

Sivulla ope_lisatiedot.jsp opettaja voi määritellä kurssin opiskelijoilta kysyttäviä tai opiskelijoille näytettäviä lisätietoja. Mikäli kurssille ei ole määritelty yhtään lisätietoa, on Lomakkeet-kohdassa nolla, eikä yhtään lomaketta ole näkyvillä.

Opettaja voi täyttää Lomakkeet-kohtaan haluamiensa lomakkeiden määrän ja painaa Tee lomakkeet-painiketta, jonka jälkeen opettajalle tulostuu haluttu määrä lomakkeita. Mikäli kurssiesiintymälle oli jo määritelty lomakkeita, sovellus tulostaa lomakkeita suurimman määrän mukaan.

Lomakkeet ovat aluksi tyhjiä ja käyttäjän pitää täyttää niihin haluamiensa kenttien määrän.  Täytettyään kaikkiin lomakkeisiin kenttien määrän, käyttäjä painaa Tee kentät -painiketta, jolloin sovellus tulostaa jälleen suurimman määrän mukaan kenttiä.

Täytettyään kentät opettaja painaa Tallenna-painiketta, jolloin sivu latautuu uudelleen ja kentät tallentuvat. Tässä olisi voinut käyttää myös sivua ope_tallenna_lisatiedot.jsp, jota ei olisi näytetty käyttäjälle, vastaavasti kuin ope_tallenna_kurssi.jsp toimii. Mikäli sivulle tulee lisää toiminnallisuuksia, suositellaan siirtymistä kyseiseen tallennustapaan.

Tallennuksen alussa sovellus tarkistaa, onko käyttäjä rastittanut Poista tapahtuma -ruudun. Jos siinä on rasti, muutetaan taulujen fieldgroup, fieldgroupprotection, fieldgrouplang, field ja fieldtranslation deleted-kentän arvoksi true. Muussa tapauksessa joko lisätään tai muokataan näiden taulujen arvoja. fieldgroupprotection-tauluun tallennetaan tieto siitä, saako opiskelija muuttaa vastaavan kentän arvoa result-taulussa.

Tälle sivulle aiheuttaa hieman ongelmia lomakkeiden ja kenttien tulostus suurimman määrän mukaan. Erityisesti ongelmia esiintyy poistettaessa lisätapahtumia, koska sovellus tulostaa suurimman luvun mukaan. Tästä ongelmasta päästään helposti siirtämällä tallennus erilliselle sivulle. Sivu on kuitenkin suunnattu pääosin lehtori Vesa Lappalaiselle, joten sivua kehitetään hänen vaatimustensa pohjalta. Tämän projektin puitteissa ei jäänyt enempää  aikaa tälle periaatteessa vähemmän tärkeälle sivulle.

1.8        Arvostelusivu ope_opintosuoritukset.jsp

Sivulla ope_opintosuoritukset.jsp on opettajan mahdollista arvostella luennoimiaan kursseja. Sivulta voi valita kurssin, arvostelufunktion ja arvostelutaulukon.

Arvostelufunktiolla muokataan kurssista saatavia opetustapahtumien pistemääriä hyvityspisteisiin. Samalla katsotaan, ovatko harjoitustyöt ja tentit suoritettu ennen lopullista arvosanan määräämistä. Arvostelutaulukko määrää suoraan arvosanan kurssista saaduilla pisteillä. Taulukoita on mahdollista katsoa sivulta showEvalTable.jsp.

Kaikki valitut taulukko- ja funktioarvot tallennetaan kantaan oletuksiksi seuraavaa kertaa varten. Laskenta ja arvosanan ilmoittamistoiminnot ovat keskeneräiset, eivätkä ne toimi vielä tässä vaiheessa.

1.9        Kurssien raporttisivu ope_raportit.jsp

Sivu ope_raportit.jsp toimii samoin kuin muutkin sivut. Sen toteutus on tällä hetkellä demoasteella. Tällä sivulla opettajat voivat tulevaisuudessa määritellä haluamiaan raportteja tai käyttää valmiita raporttipohjia.

1.10    Tenttien muokkaus sivu ope_tentit.jsp

Sivulla ope_tentit.jsp sivulla on mahdollista lisätä, muokata ja poistaa tenttejä. Sivun toteutus on vielä pahasti kesken.

1.11    Opettajan kurssiesiintymien tulostussivu esiintymat.code

esiintymat.code on yleiskäyttöinen aliohjelma, joka tulostaa käyttäjän kurssiesiintymät. Tätä aliohjelmaa käytetään pääosin opettajan sivuilla ja se vaatii sisällyttävällä sivulla esiteltävän string-muuttujat valittu_kurssi ja valinta.

 Aliohjelma hakee yleisenä muuttujana määritellyn personid:n avulla kaikki käyttäjän kurssiesiintymät ja tulostaa ne kurssikoodin ja aloitusajan mukaiseen järjestykseen. Listan loppuun tulostetaan opiskelijoille näkymättömät kurssit. Kurssit tulostetaan taulukkoon, jolloin sisällytettävässä sivussa tämä aliohjelma pitää olla lomakkeen (form) sisällä.

 Aliohjelma hakee urlista tiedon mahdollisesti valittuna olevasta kurssista. Valittu kurssi koodataan urliin kurssit-nimellä.

1.12    Kurssin opetustietojen sivu hae_ryhmat_listana.code

hae_ryhmat_listana.code vaatii, että sisällyttävällä sivulla on määriteltynä valittu_kurssi-nimisessä string-muuttujassa valitun kurssiesiintymän tunnus ja ryhmaid-nimisessä string-muuttujassa valitun eventgroupin tapahtumatyyppi (grouptypeid).

Aliohjelmaa käytetään sivussa ope_kurssit.code, jossa se while-silmukan sisällä käy läpi kaikki valitun kurssiesiintymän tapahtumatyypit. Aliohjelma tulostaa numeroimattoman listan (ul), jonka tietueissa on tapahtuman nimi, osallistujat, maksimiosallistujamäärä ja aloitusaika. Luennoille ei tulosteta osallistujamääriä. Listan tietueet aliohjelma hakee event-taulusta, jossa on eventgroupid:nä eventgroup-taulusta saatu eventgroupid, jota annettu grouptypeid (ryhmaid) ja courseinstanceid (valittu_kurssi) vastaavat.

1.13    Ylläpitäjän istuntosivu AdminUsers.jsp

Sivu AdminUsers.jsp generoi järjestelmän senhetkisistä käyttäjistä ylläpitäjälle taulukon, josta näkyvät nimi, tunnus, IP-osoite, käyttäjän sijaintisivu, istunnon tila, viimeisen toiminnon kesto ja arvioitu uloskirjautumisaika. Sivun tarkoituksena on kertoa ylläpitäjälle, jos jonkun käyttäjän istunto on jumiutunut ja ei siten toimi. Sivua tullaan päivittämään tietyin väliajoin automaattisesti. Sivun tiedot kerätään User-pavun muuttujista ajon aikana.

1.14    Opiskelijoiden aloitussivu OpisKurssit.jsp

Tämä sivu on opiskelijan kurssikirjanpidon aloitussivu, joka avautuu valittaessa  vasemmanpalkin osiosta Kurssikirjanpito. Sivu tarvitsee toimiakseen tiedoston pageOpisKurssit.code, jossa on varsinaisen tietoalueen koodi.

Sivulla opiskelija voi ilmoittautua kursseille ja poistaa ilmoittautumisia. Sivun yläreunassa on ensimmäisenä lista kaikista kursseista, joille henkilö on ilmoittautunut opiskelijana. Kurssien nimet ovat linkkejä ja linkistä pääsee kurssin kotisivulle, jos opettaja on sen määritellyt.

Jos opiskelija on ilmoittautunut valintalistasta valitsemalleen kurssille, hänelle tarjotaan mahdollisuus katsella tietoja, jotka opettaja on hänelle määritellyt. Tietoja ovat esimerkiksi tentin pisteet ja  demopisteet. Tietoja katselemaan pääsee painamalla painiketta Tietosi kurssilta, jolloin siirrytään sivulle courseInfo.jsp.

1.15    Opiskelijan kurssin tietojen sivu CourseInfo.jsp

Tämä sivu tarvitsee toimiakseen sivun courseInfo.code, jossa on varsinaisen tietoalueen koodi.

Tällä sivulla opiskelijat näkevät omat tiettyyn kurssiin liittyvät tietonsa. Kurssin tunnus (ID) tuodaan parametrina URL:ssä, jonka mukaan haetaan FieldGroup-taulusta kaikki kyseiselle kurssille määritellyt FieldGroup-rivit ja sen jälkeen jokaiselle FieldGroupille haetaan Field-taulussa määritellyt kentät. Tämän jälkeen katsotaan, minkä tyyppisestä kentästä on kyse ja esitetään kenttä sen mukaan. Tyyppejä voivat olla esim. tekstikenttä tai valintaruutu.

Oikeustarkistus tapahtuu FieldGroup-tasolla. FieldGroupProtection-taulussa onkin määriteltynä, millä käyttäjäryhmällä on luku- ja kirjoitusoikeus  tiettyyn FieldGroupiin ja millä käyttäjäryhmällä vain lukuoikeus. Tällä perusteella sellaiset tiedot, joita opiskelijat saavat vain katsella tulevat sellaiselle lomakkeelle (form), jonka tietoja ei lähetetä, kun Tallenna- painiketta painetaan.

1.16    Opetusryhmiin ilmoittautumissivu Opry_ilmo.jsp

Sivulla opiskelijat voivat ilmoittautua kursseille määriteltyihin opetusryhmin. Sivu vaatii toimiakseen sivun pageOpry_ilmo.code, joka sisältää varsinaisen tietoalueen koodin.

Sivulle voidaan tuoda URL:ssä parametrilla Department laitos, jonka  kursseja ollaan käsittelemässä. Parametrissa Course voidaan määrittää,  minkä kurssin opetusryhmiä halutaan tarkastella. Jos parametria Department ei ole määritelty, haetaan kurssinvalintalistaan kaikkien laitosten kurssit.

Kun kurssi valitaan valintalistasta, käydään etsimässä ensin kyseiselle kurssille määriteltyjä demoryhmiä EventGroup-taulusta (GroupTypeID=1). Jos ryhmiä löytyy, muodostetaan niistä valintalista. Tämän jälkeen etsitään edelleen EvenGroup-taulusta ohjausryhmiä (GroupTypeID=2) ja niistä muodostetaan oma valintalista. Valittuaan jommastakummasta listasta ryhmän, opiskelija painaa OK-painiketta, jolloin hän siirtyy sivulle GroupPlaces.jsp ja vie parametrina ryhmän, kurssin ja laitoksen tunnisteen sekä ryhmän tyypin.

1.17    Opetusryhmien tietosivu GroupPlaces.jsp

Sivulla näytetään parametrina tuodun ryhmän kokoontumiskerrat ja ilmoittautuneet. Sivu vaatii toimiakseen sivun pageGroupPlaces.code.

Ensin haetaan ryhmän tapahtumat Event-taulusta ja kyseisiin tapahtumiin liittyvät salit EventSpace-taulusta. Näistä tiedoista muodostetaan taulukko, jossa näkyy kunkin tapaamisen paikka, aloitusaika ja lopetusaika. Tämän jälkeen haetaan kaikki ryhmään ilmoittautuneet henkilöt GroupParticipant-taulusta ja muodostetaan niistä taulukko.

Jos ryhmässä on vielä tilaa, eikä käyttäjä ole vielä ilmoittautunut kyseiseen ryhmään, hänelle tarjotaan Ilmoittaudu-painike, jolla ilmoittautumisen voi suorittaa. Jos käyttäjä on jo ilmoittautunut ryhmään, hänelle tarjotaan Poista ilmoittautuminen -painike.

1.18    Tenttiin ilmoittautumissivu OpisTentit.jsp

Sivulla opiskelijat voivat ilmoittautua järjestelmästä löytyviin tentteihin. Sivu vaatii toimiakseen sivun pageOpistentit.code.

Sivulla haetaan EventGroup-taulusta ensin kaikki tentit (GroupTypeID=3), joihin käyttäjä on ilmoittautunut, ja niihin liittyvät tiedot tulostetaan nähtäville. Jos department-parametria ei ole asetettu, haetaan kaikkien laitosten tentit valintalistaan. Opiskelija voi ilmoittautua valitsemaansa tenttiin painamalle Ilmoittaudu-painiketta.

Java-pavut

Java-papuihin on ohjelmoitu yleiskäyttöiset aliohjelmat. Kotka-projekti toteutti jo oman työnsä yhteydessä niistä suurimman osan, mutta Korppi-projekti joutui uudistamaan niistä joitakin.

 Korppi-projektin tarkoituksena oli ohjelmoida joitain uusiakin Java-papuja, mutta ajan puutteen vuoksi niiden toteutus jätettiin kesälle. Toteutumatta jääneitä Java-papuja ovat ainakin päivämäärien muokkaukseen käytetty papu ja Kotkan jäljiltä täysin toimimaton  sähköpostipapu Mail.

Luvussa esitellään uudet pavut (AddUserToCourse.java, UserToGroup.java) sekä ne Kotka-ryhmän pavut, joihin on tehty muutoksia (User.java, UseModule.java). Muut Kotka-projektin kehittämät pavut ovat seuraavat:

AddUser.java       Käytetään henkilön lisäyksessä.

AutoNumber.java         Autoincrement-ominaisuuden mahdollistava papu.

Crypt.java         Salasanan kryptaamiseen tarkoitettu papu.

DB.java       Tietokantayhteyksiä muille pavuille tarjoava papu.

Error.java,                      Virheiden käsittelyä varten toteutettu papu.

Localize.java                Monikielistämisessä käytettävä papu

Login.java                       Sisäänkirjautumisessa tarvittava papu.

Mail.java              Palautteen antamiseen suunniteltu papu.

Tools.java                       Yleiskäyttöisiä aliohjelmia sisältävä  papu.

Person.java                     Käytetään henkilötietojen hallintaan.

 

1.19    Käyttöoikeuksien tarkistuspapu UseModule.java

UseModule-papua on tarkoitus käyttää käyttöoikeuksien tarkistukseen. Ensimmäisen version pavusta teki Kotka-projekti, mutta sen toiminnallisuus rajoittui vain henkilötietomoduulin oikeuksien tarkistukseen.

Korppi-projekti lisäsi papuun kaksi metodia rightLevel ja courseRight. rightLevel-metodia käytetään yleisen käyttöoikeuden tarkistukseen ja courseRight-metodia tarkistamaan tietyn henkilön asema tietyllä kurssilla. Tällä hetkellä tarkistetaan, onko henkilö opiskelijana vai opettajana kurssilla.   

1.20    Kurssi-ilmoittautumispapu AddUserToCourse.java

AddUserToCourse-papu on Korppi-projektin kehittämä papu, jota käytetään rekisteröimään henkilö tietylle kurssille. Pavusta löytyy kolme metodia: registerUser, unregisterUser ja checkUser.

Metodi registerUser rekisteröi tietyn käyttäjän tietylle kurssille. Metodille viedään parametrina henkilön tunnus (ID), kurssin tunnus ja käyttäjäryhmä (kuten opiskelija tai tuntiopettaja). Metodi palauttaa arvon true, jos rekisteröinti onnistui, muuten false. Ilmoittautumisen yhteydessä tarkistetaan myös, löytyykö Result-taulusta opettajan kurssille määrittelemät lisätietokentät. Jos kenttiä ei löydy, ne lisätään.

Metodi unregisterUser poistaa tietyn henkilön ilmoittautumisen tietyltä kurssilta. Metodille viedään parametrina henkilön tunnus (ID), kurssin tunnus ja käyttäjäryhmä (kuten opiskelija tai tuntiopettaja). Metodi palauttaa arvon true, jos ilmoittautumisen poisto onnistui, muuten false. Ilmoittautumisen yhteydessä mahdollisesti Result-tauluun lisättyjä kenttiä ei voi poistaa. Jos henkilö on ilmoittautunut joihinkin kurssin opetusryhmiin, poistetaan ilmoittautuminen näistä ryhmistä. Poisto ei koske kuitenkaan tenttiä, jos henkilö on ilmoittautunut tenttiin.

Metodi checkUser tarkistaa, onko henkilö rekisteröitynyt tietylle kurssille. Metodi palauttaa arvon true jos on, muutoin false.

1.21    Opetusryhmiin ilmoittautumispapu UserToGroup.java

UserToGroup-pavusta löytyvät samat metodit kuin AddUserToCourse-pavustakin eli registerUser, unregisterUser ja checkUser.

registerUser-metodille viedään parametrina henkilön ID, ryhmän ID ja kommentti. Kommentin käyttäjä voi tällä hetkellä käyttöliittymän puolelta antaa vain tenttiin ilmoittautuessa. Jos henkilö on jo ilmoittautunut saman kurssin samantyyppiseen opetusryhmään, ilmoittautuminen vaihdetaan tähän ryhmään. Samantyyppisiin opetusryhmiin voi siis ilmoittautua vain yhteen.

unregisterUser-metodi poistaa ilmoittautumisen annetusta opetusryhmästä ja checkUser-metodi tarkistaa, onko käyttäjä ilmoittautunut annettuun opetusryhmään.

1.22    Käyttäjän tietoja ylläpitävä papu User.java

User-papuun lisättiin muuttujia ja metodeja ylläpidon monitoroinnin vuoksi. Jatkokehityksen osalta tullaan tekemään lisää muutoksia. Papu ylläpitää istuntotietoja yhteyden aikana muuttujissa, joten sen käyttö ei lisää tietokantahakujen määrää.

Lisättyjä muuttujia ovat currentstatus, currentform, expiretime, opstarttime, opendtime ja lastoptime. Currentstatus ja currentform tallentavat muistiin JSP-sivun suoritustilan ja käyttäjän sijaintisivun nimen. Expiretime kertoo käyttäjän automaattisen uloskirjautumisajan. Kyseinen toiminta on vielä keskeneräinen ja ei toimi Korppi-sovelluksessa. Muuttujat Opstarttime, opendtime ja lastoptime määrittelevät operaation alkuajan, loppuajan ja viimeisen operaation keston. Operaatiolla tarkoitetaan tässä jonkin tietyn JSP-sivun suoritusta.

Sovelluksen testaus

Sovelluksen yksittäisiä JSP-sivuja on testattu päivittäin sitä mukaa, kun niitä on saatu valmiiksi. Testauksen on suorittanut yleensä sivun tuottanut henkilö. Koko sovellus saatiin testattavaksi koko projektiorganisaatiolle toukokuun alussa, vaikka vielä silloinkin kehitystyötä tehtiin. Sovellusta on pyritty testaamaan mahdollisimman monella eri selaimella, sillä selainyhteensopivuuden on havaittu olevan hyvin tärkeä ominaisuus.

Testausta on suoritettu ainakin Netscapen selaimien versioilla 4.x ja 6 sekä Microsoftin selaimista Explorerin versiolla 5. Testausta on suoritettu myös Operan versiolla 5 sekä Mozillalla. Tekstipohjaisten selaimien toimivuus varmistettiin Linuxin Lynx-nimisellä varusohjelmalla. Käyttöliittymän ulkoasussa on hieman eroavaisuuksia riippuen siitä, millä selaimella sovellusta käytetään. Tämä johtuu selainten erilaisesta CSS-tuesta, sillä etenkin vanhoilla selaimilla CSS-tuki on olematon.

Palautetta on tullut etenkin käyttöliittymän ulkoasusta ja käytettävyydestä. Käyttöliittymää onkin muutettu pitkin kuluvaa kevättä ja nykyisellään ulkoasuun  ollaan jo varsin tyytyväisiä. Käytettävyydestä tulleita parannusehdotuksia on pyritty ottamaan kehitystyössä huomioon mahdollisimman paljon, mutta käytettävyydessä on vieläkin parantamisen varaa. Palautetta on saatu lähinnä projektiorganisaatioon kuuluvilta henkilöiltä (ohjaajat), sekä tietojenkäsittelytieteiden laitokselta muutamilta henkilöiltä. Palautetta on pääosin saatu sähköpostilistan välityksellä ja viestit ovat nähtävissä projektikansiossa omalla välilehdellään.

Ohjeita ylläpitäjälle

Järjestelmän palvelinosio on suunniteltu ja toteutettu toimivaksi Linux-käyttöjärjestelmässä. Järjestelmä käyttää palvelinohjelmistoina Tomcat-, Poolman-, Apache- ja PostgreSQL-ohjelmistoja. Tomcat on JSP-tekniikassa käytettävä servletti- ja JSP-moottori. Poolman on tietokannan ja servlettien välissä käytettävä ohjelma, joka jakaa tietokantayhteyksiä niitä tarvitseville servleteille. Apache on HTTP-palvelin ja PostgreSQL tietokannanhallintajärjestelmä. Kotka-järjestelmän ylläpito vaatii vähintäänkin perustietämystä näistä kaikista ohjelmistoista ja Linux-käyttöjärjestelmästä.

Käyttöjärjestelmän puolella tarvitaan hieman Linuxin shell-ohjelmointitaitoja, sillä tietokannan ja järjestelmän varmistukset kannattaa automatisoida. Lisäksi osa järjestelmän mahdollisista ongelmatilanteista voidaan kiertää rakentamalla riittävän hyvä toiminnallisuus käyttöjärjestelmän puolelle. Järjestelmän toimivuutta pystytään myös tarkkailemaan käyttöjärjestelmän puolelta. Tämän tyylisen valvonnan ylläpitäjä voi toteuttaa haluamallaan tavalla. Yksinkertaisimmillaan ja oikein suunniteltuna ylläpitäjälle voidaan lähettää virhetilanteissa ilmoitus sähköpostitse tai jopa tekstiviestillä. Ylläpidolliset ratkaisut jätetään kuitenkin tulevan ylläpitäjän harkittavaksi.

 Ylläpitäjän olisi hyvä myös tietää Kotka-järjestelmän toiminnallisuudesta mahdollisimman paljon. Sovelluksen erilaiset virhetilanteet täytyy pystyä korjaamaan ammattitaitoisesti. Tämä edellyttää perehtymistä käytettyihin ohjelmistoihin ja ohjelmakoodiin.

Järjestelmän asennuksesta ja siirrosta toiselle palvelimelle on laadittu erillinen asennusohje. Lisäksi ylläpitäjän ohjeistusta käydään tarkemmin läpi kesällä 2001 valmistuvassa sovelluksen käyttöohjeessa.

Virheet, puutteet ja jatkokehitys

Korppi-projektissa kuluiarvioitua enemmän aikaa tietokannan ja järjestelmän suunnitteluun, joten kaikkia toimintoja ei ehditty toteuttaa tai toteutukset jäivät vaillinaisiksi. Tässä luvussa esitellään kesken jääneitä toimintoja sekä annetaan jatkokehitysideoita. 

1.23    Yleinen osuus

Muutamia sovellusta koskevia puutteita yleisellä tasolla:

·           Päiväyksen tallentamiseen tietokantaan tarvitaan papu, jolle annetaan parametrina käyttäjän antama päiväys ja joka palauttaa sen tietokannan vaatimassa muodossa.

·           Mail-papu pitää korjata toimivaksi.

·           Järjestelmää pitää testata myös Mac-käyttöjärjestelmällä.

·           Kalenteriosuus kannattaa toteuttaa.

1.24    Opettajan osuus

        Suurimmassa osassa tietokantalisäyksiä ei ole määritelty lisättäviä kenttiä, vaan oletuksena kaikki kentät pitää täyttää. Tämä ei oikeastaan ole virhe, sillä tietokantaan pitäisi täyttää mahdollisimman vähän null-arvoja. Nyt tietokanta antaa kenttälisäyksen yhteydessä virheilmoituksen, mikäli sovellukseen ei ole tehty vastaavaa tietokannan vaatimaa muutosta.

        Kurssien tapahtumien päivitys toimii täysin vain eventgroup- ja event-tauluihin. fielgroup-taulun puolelle pitää lisätä muokkaus field- ja fieldtranslation-tauluihin. Puute koskee vain tapahtumien määrän lisäystä tai vähennystä.

          Kaikki opettajan sivuille toteutetut tietokantatallennuksen tarkistukset toimivat vain suuntaa-antavasti. Sovellukseen voisi lisätä näihin kohtiin string-muuttujan, johon tallennetaan tieto virheellisistä tallennuksista. Tämä muuttuja välitetään parametrina tallennuksen tulokset tulostavalle sivulle. Esimerkiksi fieldin tallennus ei mene kantaan, jolloin päivitys palauttaa 0 ja viallisen field-rivin tunnus tallennetaan muuttujaan. Parempi tapa tosin olisi käyttää try-catch -rakennetta, joka on jo toteutettu sivulle ope_tallenna_paivitys.code.

Tietojen tallennuksista puuttuu tietokannan lukitus muutoksen ajaksi. Tämä toiminto on toteutettu ainoastaan tiedostoon ope_tallenna_paivitys.code.

          Opiskelijan tietojen muokkaus -sivun tulokset tulostetaan, mutta taulukon otsikot jäävät tulostamatta. Tarkoitus olisi tulostaa taulukko, jonka opettaja voi halutessaan tulostaa ilmoitustaululle tai kopioida kurssin kotisivulle. Kurssiesiintymän lisäyksen yhteydessä oleva salin valinta on kokonaan toteuttamatta. Kurssin tapahtumien aikojen ja salien lisääminen voisi tapahtuma kalenterimaisesti.

          Kurssiesiintymän lisäyksen yhteydessä on tuntiopettajien lisäys toteuttamatta. Tälle toiminnolle on painike Kurssilaiset-sivulla. Saman painikkeen avulla on mahdollista lisätä mm. opiskelijoita ja demonpitäjiä kurssiesiintymälle

Lisätapahtumien toiminta tulee testata tarkoin. Siinä esiintyy aika ajoin epäloogisuutta, joka luultavasti johtuu sivun tulostuksesta eikä lisätietojen tallennuksesta.

          Tietojen tallennus kantaan vaatii kannan lukituksen, joka on koodattu ainoastaan ope_tallenna_paivitys.jsp –sivulle.

          Opiskelijoiden tietojen tallennuksessa käytettävä haluttujen opiskelijoiden ja päivitettävien ryhmien valinta pitää korjata toimivammaksi esim. Mika Vesterholmin tai Vesa Lappalaisen antaman palautteen mukaisesti. Pikkupäivitys jäi kokonaan toteuttamatta.

          Yksikään sähköpostin käsittelyyn liittyvä toiminto ei toimi, koska Mail-papu ei ollut toimiva. Ne voidaan toteuttaa Mail-pavun toteutuksen jälkeen.

1.25    Opiskelijan osuus

Opiskelijalle tarkoitetuista toiminnoista saatiin toimiviksi lähes kaikki tilaajan vaatimat ominaisuudet. Opiskelijat voivat ilmoittautua kursseille, opetusryhmiin ja tentteihin. He voivat myös katsella heille määriteltyjä tietoja kursseilta ja tallentaa opettajan haluamia kursseihin liittyviä tietoja. Käyttöliittymän helppokäyttöisyyteen kuitenkin täytyy vielä jatkokehityksessä kiinnittää huomiota.

Jatkokehitysideoita opiskelijan käyttöliittymän parannusta varten:

·           Kurssit-sivuilla olevien painikkeiden sijoittelu on ehkä hieman hämäävä         verrattuna otsikoihin.

·           Samoin Kurssit, joille olet ilmoittautunut -otsikon alla olevien linkkien kohde voisi kenties olla jokin hyödyllisempi kuin kurssin kotisivu.

·           Opetusryhmiin ilmoittautumissivulla ei kenties tarvitsisi aivan niin paljon alasvetovalikoita kuin siellä nyt on. Tämä selkeyttäisi sivua ja siten helpottaisi käyttöä.

·           Kaikki aikaesitykset olisi hyvä muuttaa paremmin ymmärrettävään muotoon. Nykyinen esitystapa (vvvv-kk-pp) on todella ikävä. Tarvittaessa jopa erilainen esitystapa eri kielille olisi mahdollinen vaihtoehto.

·           Tenttiin ilmoittautumissivulla olevia tenttituloksia ei haeta vielä kannasta.

·           Tenttiin annettavan lisätietokentän tallennuksessa on suoritettava tarkistuksia. Kyseessä on vakava tietoturva-aukko, jos käyttäjällä on tiedossa tietokannan rakenne.

·           Tällä hetkellä ilmoittautumista ei voi suorittaa kuin yhteen tenttiin kerrallaan.

·           Jonkinlainen raporttisivu olisi hyvä olla opiskelijankin käytössä, josta hän näkisi järjestelmässä olevat omat tietonsa (kuten kaikki kurssit, tentit, opetusryhmät joille ilmoittautunut ja tenttien tulokset).

1.26    Ylläpitäjän osuus

Ylläpitäjän monia ominaisuuksia jätettiin tarkoituksella jatkokehityksen tehtäviksi, koska kehittämisemme suuntaaminen yhden käyttäjän tarpeille ei ollut projektin aikataulun puitteissa perusteltavaa. Ylläpitäjän toiminnoista miltei valmiina ovat käyttäjätarkkailu ja kurssin lisäys.

 Käyttäjätarkkailusta puuttuu vielä automaattinen uloskirjaus ja yksikäsitteinen istuntojen hajautus järjestelmän muistissa olevaan hajautustauluun. Myös käyttäjien uusien salasanojen generointi ja yleisten tietojen hallinta on puutteellinen. Yleisestikin ylläpitäjän tulisi voida käyttää kaikkia järjestelmän toimintoja täysin oikeuksin.

Tietokannan suora editoimistyökalu on suunnitteilla. Sillä tulisi voida muokata suoraan tietokannan kenttien arvoja tarpeen mukaan. Tämä ominaisuus on toiminut jo vanhassa Kurki-järjestelmässä itsenäisellä ohjelmalla. Kotka-järjestelmään tulee toteuttaa Delphi- tai Java-pohjainen sovellus tietokannan hallintaan.   

 

Yhteenveto

Korppi-projektin tavoitteena oli korvata käytössä oleva KurKi-järjestelmä suunnitelluin parannuksin. Laajahko aihe ja edellisen ryhmän työn tuloksien sisäistäminen asettivat projektille vaatimuksia jo alkuvaiheessa. Toiminnallisesti sovelluksen toteutus onnistui osittain.  Tietokantamuutosten suunnitteluun ja ominaisuuksien lisäämiseen käytettiin liikaa aikaa. Päätöksiä olisi pitänyt saada tehdyksi aikaisemmassa vaiheessa ulkoasun, toiminnan ja tietokannan osalta. Ajankäytön painottuessa  suunnitteluun ja muutoksiin, varsinainen ohjelmointityön toteutus jäi keskeneräiseksi.

Projekti sujui hyvin lukuun ottamatta kehitys- ja testausvaiheen jäämistä keskeneräiseksi. Vasta loppuvaiheessa aloimme saada testausten yhteydessä palautetta, joka olisi ollut arvokasta jo kehitysvaiheessa. Saadusta palautteesta tulee olemaan suuri hyöty jatkokehitykselle.

Projekti opetti ryhmäläisiä monella tietotekniikan osa-alueella. Ryhmä panosti työhön reilusti normaaliprojektia enemmän aikaa. Kehitystä jatketaan kesällä 2001 Tuukka Tawastin ja Heikki Uuksulaisen toimesta. Kokonaisuutena kevään projekti ei aivan saavuttanut tavoitettaan. Kokemusta, tietoa ja näkemyksiä se varmasti antaa jatkossa saman aihepiirin työprojektitoteutuksille.

Liite. Jatkokehityksen tehtävien priorisointia

Korppi-projektin osalta kaikkia tilaajan toivomia ominaisuuksia ei ehditty toteuttaa, vaan joitakin ominaisuuksia jouduttiin jättämään suosiolla jatkokehittäjille. Seuraavassa esitetään lista tehtävistä jonkinlaisessa tärkeysjärjestyksessä.

Ensisijalla kehityksessä

·        Palautelomake, toteuttamalla saadaan testikäyttäjät antamaan kommentteja kehittäjille.

·        Salasanojen kryptaaminen tietokantaan toteutetaan omalla funktiolla PostgresSQL-laajennuksella JDBC:hen. 

·        Kotkan ja Korpin käyttöliittymien ulkoasut tulee yhtenäistää. Login-sivu uudistetaan aluksi suomeksi ja englanniksi. Portaalisivu ohitetaan järjestelmään mentäessä siirtymällä suoraan kurssikirjanpitoon.

·        Yksikäsitteinen hajautus toteutetaan hashmapiin muistissa. Hajautusavain muokataan jollain lisätiedolla yksikäsitteiseksi. Nykyinen on ip-osoitteen  ja käyttäjätunnuksen tulos, joten saman koneen istunnot näkyvät yhtenä oliona.

·        Demopisteiden anto ja muokkaus tulee olla mahdollista syöttää teksti-tiedostona. Henkilönimien hakurajausta demopistepäivityksessä tulee parantaa.

·        Raporttien toteuttaminen tulee olla enemmän nykyisen Kurki-järjestelmän  tapainen. Erityisesti mahdollisuus omiin kenttiin tulee sallia.

·        Arvostelun osalta arvostelufunktio toteutetaan aluksi Java-pavulla, mutta myöhemmin se on mahdollista syöttää syöttöikkunan kautta. Lopullinen arvosanataulukointi ja Joreen siirto on myös tehtävä.

·        Järjestelmä tulee saattaa testikuntoon syksyn kurssille (KESÄN TAVOITE!)

·        Lokitiedostoihin tulee kirjata kaikki suoritetut SQL-lauseet sekä sisään- että uloskirjautumiset.

·        Järjestelmän yleistä käytettävyyttä on kehitettävä.

 

 

Myöhemmässä vaiheessa

·        Opettajalla tulee olla mahdollisuus lisätä tentti. Automaattinen tenttilistan generointi tulee myös lisätä järjestelmään.

·        Järjestelmän tietokantatiedoissa jo oleva opiskelija tulee voida lisätä kurssille.

·        Sisäänkirjautuneiden käyttäjien tarkkailusivu tulee hioa loppuun. Uloskirjausajan lisäys, toiminnan varmistus ja hajautus vaikuttavat lopulliseen  tarkkailusivun toimivuuteen.

·        Ylläpitäjälle tulee tehdä kaikkien henkilötietojen muokkaamis- ja käsittelymahdollisuudet omaksi sivukseen.

·        Käyttöohje tulee toteuttaa testiversion valmistuttua.

·        Monikielisyyden toteuttaminen hoidetaan lisäämällä User-papuun metodi, joka aluksi palauttaa saman merkkijonon kuin syöte.

·        Kalenterimoduuli jäänee mahdollisesti syksyn 2001 työprojektitoteutukseksi.