Kaakkuri
Tietotekniikan sovellusprojekti
Petteri Kela
Antti Pokela
Santtu Salmi
Matti Suomalainen
Sovellusraportti
16. helmikuuta 2005
Versio 1.0
Tietoja Kaakkuri-projektista
Tekijät: Petteri
Kela, PK, (kapekela@cc.jyu.fi)
Antti Pokela, AP, (anpokela@cc.jyu.fi)
Santtu Salmi, SS, (ssalmi@cc.jyu.fi)
Matti Suomalainen, MS, (msuomal@cc.jyu.fi)
Tilaaja: Jyväskylän yliopisto, tietotekniikan laitos
Tilaajan edustajat: Päivi Jämsen, (pjamsen@mit.jyu.fi)
Vesa Lappalainen (vesal@mit.jyu.fi)
Vastaava
ohjaaja: Lari
Kannisto (kalahe@mit.jyu.fi)
Tekninen
ohjaaja: Arto
Rikalainen (artturi@cc.jyu.fi)
Käytettävyyskonsultit:
Ville Haapsaari (vjhaaps@cc.jyu.fi)
Jukka Partanen (jpartan@cc.jyu.fi)
Yhteystiedot: Työtila AgC222.2, puhelin (014) 260 4963
Kotisivu: http://sovellusprojektit.it.jyu.fi/kaakkuri/
Postilista: kaakkuri@korppi.jyu.fi
Tiivistelmä: Kaakkuri-projekti
määritteli ja toteutti Jyväskylän Yliopiston tietotekniikan laitokselle Windows-pohjaisen
suunnittelusovelluksen yhden tai useamman laitoksen kurssien opetustapahtumien
sijoitteluun. Sovellusraportissa kuvataan vaatimusmäärittelyssä [1]
määriteltyjen vaatimusten toteutumista ja sovelluksen toteutusta ja toimintaa.
Versiohistoria
Versio |
Päiväys |
Tekijä |
Muutokset |
0.1 |
26.1.2005 |
SS |
Ensimmäinen versio. |
0.2 |
1.2.2005 |
SS |
Tiivistelmä kirjoitettu uudestaan. Johdantoa korjailtu. Lisätty kohta 7.1 Parantelua vaativat ominaisuudet. Lisätty lähteitä. |
0.3 |
16.2.2005 |
SS |
Tehty monia pieniä korjauksia. Vaihdettu kappaleiden paikkoja. Lisätty kappaleen 3 ”Sovelluksen rakenne” alkuun selvitys sovelluksen yleisestä toiminnasta. |
1.0 |
15.3.2005 |
MS |
- Tarkennettu sovelluksen rakenteen kuvausta luvussa 3 - Lisätty selvitys käytetyistä työkaluista |
Sisällysluettelo
7.1 Parantelua vaativat ominaisuudet
Liite 1: Tärkeimpien luokkien luokkakaavio
Liite 2: Sovelluksen rakenteen kaaviokuva
Liite 3: Sovelluksen toiminnan kaaviokuva
Kaakkuri oli Jyväskylän yliopiston tietotekniikan laitokselle toteutettu sovellusprojekti. Projekti toteutti tietotekniikan laitokselle sovelluksen, jonka avulla voidaan laatia lukukauden luentolukujärjestys. Lukujärjestyksen laatimiseksi täytyy ottaa huomioon useita rajoitteita, jotka hankaloittavat suunnittelutyötä. Sovelluksen on tarkoitus helpottaa tätä suunnittelutyötä, sekä mahdollistaa salivarausten tekemisen suoraan Korppi-järjestelmään.
Sovelluksen ensisijainen
tavoite oli luentojen sijoittelun helpotus ja toissijainen tavoite demojen,
pääteohjausten ja muiden tapahtumien sijoittelun helpotus.
Kaakkuri-sovelluksessa sijoittelu tapahtuu käyttöliittymällä, jossa raahataan
hiirellä kurssien tapahtumia näkyvissä olevaan kalenteriin. Ohjelma antaa
tapahtumille päivän ja kellonajan riippuen siitä mihin tapahtuma(t) on raahattu.
Tapahtumalle määrätään myös sali riippuen siitä, mikä sali oli valittuna, kun
sijoitus tapahtui.
Kurssien tiedot haetaan Korppi-järjestelmästä, jonka jälkeen kurssien tapahtumat esisijoitetaan ohjelman kalenteriin samaan aikaan ja paikkaan kun ne olivat korpissa määritelty. Salien tiedot haetaan myös Korppi-järjestelmästä ja niistä valitaan suunnittelussa käytettävät salit ns. omiksi saleiksi. Saleille on mahdollista asettaa lempinimiä, jolloin pitkät salinimet mahtuvat paremmin kalenterin rajoitettuun tilaan.
Kun tiedot on haettu Korppi-järjestelmästä, niin käyttäjä tekee haluamansa muutokset lukujärjestykseen. Suunnittelutilanteen voi halutessaan tallentaa tietokoneen kovalevylle. Lopuksi suunnitelman ollessa valmis muutokset lähetetään takaisin Korppi-järjestelmään. Suunnitelman voi lähettää Korppi-järjestelmään halutessaan ilman salivarausta. Näin muiden on mahdollista esikatsella tulevaa lukujärjestystä ennen kuin se on lopullinen. Suunnitelmissa oli myös erillinen suunnittelutilanteen synkronointi toiminto, jolla olisi mahdollista synkronoida suunnittelutilanne muiden suunnittelijoiden kanssa, mutta sitä ei tämän projektin puitteissa saatu toteutettua.
Luvussa selitetään muutamia aihealueeseen liittyviä termejä ja lyhenteitä.
Bugzilla Järjestelmä, jonka avulla voidaan pitää kirjaa sovellukselta vaadittavista ominaisuuksista ja löydetyistä virheistä.
CVS (Concurrent Version System) Sovelluskehityksen apuna käytettävä versionhallintajärjestelmä. Järjestelmä helpottaa ohjelmistojen versionhallintaa ja mahdollistaa mm. minkä tahansa aikaisemman version palauttamisen. Lisäksi useampi henkilö voi samanaikaisesti kehittää ohjelmistoa muokkaamalla samoja lähdekooditiedostoja.
Java Java on oliopohjainen, laitteistoriippumaton ohjelmointikieli, mikä mahdollistaa Javalla kirjoitettujen sovellusten ajamisen useilla eri laitteistoarkkitehtuureilla.
Blokki Blokki on Lukujärjestyksen suunnittelussa käytetty apuväline. Lukujärjestys jaetaan useisiin blokkeihin ja ajatuksen on, että samaan blokkiin sijoitetut tapahtumat eivät saisi mennä päällekkäin. Hyöty tästä on siinä, että jos esimerkiksi tiedetään kurssin toisen luennon aika, niin toinen luento kannattaa tällöin sijoittaa johonkin toiseen samaan blokkiin kuuluvaan soluun.
Korppi Korppi on
opintotietojärjestelmä, joka tarjoaa tietoa ja työvälineitä mm. opiskelijoille
ja opettajille. Korppi-järjestelmän avulla voidaan mm. ilmoittautua kursseille
ja tentteihin, varata opetusta varten saleja ja muita työvälineitä.
Korppi-järjestelmä löytyy osoitteesta: https://korppi.jyu.fi/
Toiminnallisen rakenteen luovat parseri, kooderi, tietokanta ja käyttöliittymä. Tietokanta on toteutettu olioarkkitehtuurin mukaisesti eikä siis käytä mitään tietokannanhallintajärjestelmää. Sovelluksen tietorakenne on siten ”tekstinkäsittelymäinen” eli kaikki data on olemassa vain tietokoneen muistissa kunnes käyttäjä tallettaa sen levylle. Sovellus toimii lyhyesti seuraavanlaisesti. Ensiksi kurssitiedot haetaan Korppi-järjestelmästä ja talletetaan tiedostoon, jonka jälkeen kurssitiedot luetaan tiedostosta ohjelman tietokantaan. Sitten käyttäjä tekee haluamansa muutokset suunnitelmaan, jonka jälkeen kurssitiedot talletetaan tiedostoon ja lopuksi tiedosto lähetetään Korppi-järjestelmään. Katso liite 2.
Sovellus saa siis syötteenä XML tiedoston, jonka parseri purkaa puumuotoon. Jokainen puun juuritasolla sijaitseva solmu on yksi kurssi. Käsiteltyään tiedon parseri lähettää sen Courses oliolle, joka alkaa luoda kursseja vastaavia olioita. Kurssit luovat itse sisältämänsä tapahtumat, jotka samalla sijoitetaan oikeille paikoilleen tietorakenteessa. Kun kaikki kurssit on luotu, on mahdollista alkaa tiedon käsitteleminen käyttöliittymän avulla. Työn ollessa valmis viedään palautteena vain muuttuneet tapahtumat, jotta Korppi-järjestelmän kuormitus olisi mahdollisimman pientä.
Sovellus on toteutettu Borlandin JavaBuilder9 kehitysympäristöllä ja käyttäen vain standardikirjastoja yhteensopivuuden maksimoimiseksi.
Ohjelman tietokanta jakautuu kolmeen pääosaan: Courses, Rooms ja ScheduleDatabase. Katso liite 1.
Courses on tietorakenne kursseista, jotka on luentolukujärjestyksen suunnitteluun haettu. Courses pitää sisällään Course ilmentymiä. Course vastaa yhtä tiettyä kurssin ilmentymää. Course sisältää yleisen informaation kurssista ja kaikki siihen kuuluvat tapahtumat. Courses tietorakenne tallennetaan levylle XML muodossa.
Yhteen Course ilmentymään liittyvät tapahtumat on jaettu tapahtumaryhmiin. Tapahtumaryhmiä vastaa DnDGroup luokka. Yhteen DnDGroup ilmentymään voi sisältyä mielivaltainen määrä tapahtumia. Tarkoituksena olisi, että yhteen tapahtumaryhmään kuuluvat tapahtumat olisivat peräkkäisillä viikoilla samaan aikaan, mutta poikkeuksetkin sallitaan. Tapahtumat tietävät itse mihin aikaan ja paikkaan ne kuuluvat. Yhtä tapahtumaa vastaa DnDEvent luokka.
Rooms on tietorakenne luentosaleista, jotka ovat käytössä. Rooms sisältää Room nimisiä ilmentymiä, jotka vastaavat tiettyä luentosalia. Rooms tietorakenne tallennetaan levylle XML muodossa.
ScheduleDatabase on sovelluksen kalenterimainen tietorakenne, jota käytetään tapahtumien aikojen sijoittamiseen. ScheduleDatabase koostuu joukosta Scheduleja, joista jokainen edustaa tiettyä viikkoa kalenterissa. Schedule tietää mitkä tapahtumat sen edustamalle ajanjaksolle kuuluu. ScheduleDatabaseen liittyy myös ScheduleView, joka koostaa halutunlaisen näkymän (periodi- tai kalenterinäkymä). ScheduleDatabase pystyy esisijoittamaan talletetun Courses tietorakenteen pohjalta tapahtumat oikeisiin paikkoihinsa, joten suunnittelua voidaan jatkaa viimeksi tallennetusta kohdasta.
Käyttöliittymän suunnittelulla oli keskeinen rooli Kaakkuri-projektissa, koska oltiin siirtämässä tietokoneelle jotain sellaista mikä aikaisemmin oli tehty lähinnä paperin ja kynän avulla. Useasti mietittiin esimerkiksi, että ollaanko tässä nyt tekemässä sitä parasta mahdollista ratkaisua vai vain siirtämässä vanhaa tuttua keinoa tietokoneen näytölle.
Pääkäyttöliittymässä on neljä pääkomponenttia: puurakenne, taulukko, kurssi-info ja virheilmoitusruutu.
Sovelluksen vasemmassa reunassa on puurakenne, jossa näkyy kaikki kurssit, joita luentolukujärjestyksen suunnittelussa käytetään. Puu on jaettu kahteen osaan: sijoittamattomat kurssit ja sijoitetut kurssit. Puurakenteesta voi raahata kurssien luentoja taulukkoon, jolloin ne sijoittuvat haluttuun aikaan.
Taulukko on sovelluksen pääelementti ja siksi suurin komponentti näytöllä. Taulukko jakautuu kahteen eri näkymään: periodinäkymä ja kalenteri. Näiden välillä voi liikkua vaihtamalla välilehteä taulukon yläpuolella. Periodinäkymä on kooste joltain tietyltä ajanjaksolta. Se näyttää kaikki kurssit, jotka kuuluvat sen alueelle. Kalenteri taas esittää ruudussa viikon kerrallaan. Käyttäjä voi sijoittaa kursseja molempiin näkymiin.
Kurssi-info näyttää puurakenteessa valittuna olevaan kurssiin liittyvän informaation. Tämä sisältää muun muassa opintoviikkojen määrän, opettajien toiveet ja kurssiryhmät, joihin kyseinen kurssi kuuluu. Tilan säästämiseksi ruudulla näkyy vain tietyt infot kerrallaan ja niiden välillä voi vaihdella välilehdillä.
Virheilmoitusruutu näyttää informaatiota käyttäjän tekemistä virheistä. Virheet on jaettu absoluuttisiin virheisiin ja huomautusvirheisiin. Absoluuttisen virheen tapauksessa sovellus peruu käyttäjän tekemän toiminnon ja ilmoittaa siitä virheilmoitusruudussa. Huomautusvirheissä sovellus vain näyttää virheilmoituksen, mutta jättää käyttäjän tekemän toiminnon voimaan. Absoluuttisiksi virheiksi luetaan saman kurssin tapahtumien sijoittaminen päällekkäin ja samaan saliin samaan aikaan kahden tapahtuman sijoittaminen. Huomautusvirhe tulee kun sijoittaa kaksi samaan kurssiryhmään kuuluvaa tapahtumaa päällekkäin.
Blokkieditorilla voi käyttäjä muokata haluamansa blokkirakenteen. Blokkijärjestelmä pienentää ongelma-avaruutta ja se otettiin osaksi sovellusta aikaisemmin käytössä olleen toimintatavan mukaisesti.
Kurssiryhmäeditorilla luodaan kurssiryhmiä, joille voi antaa mielivaltaisen nimen. Kurssiryhmään voidaan sijoittaa kursseja, joiden ei haluta jostain syystä joutuvan suunnittelussa päällekkäin. Ryhmään voi sijoittaa myös toisen ryhmän.
Kaakkuri-sovellus hakee Korpista kaikki Jyväskylän yliopistolla käytössä olevat salit. Saleja on hyvin paljon, joten salieditorin avulla käyttäjä voi valita käyttöönsä vain haluamansa salit ja antaa niille tarvittaessa lyhyemmän tai paremmin muistettavan nimen.
Tässä luvussa
esitellään yleisesti vaatimusmäärittelyssä [1] asetetut vaatimukset sekä
kerrotaan miten ne on toteutettu Kaakkuri-sovelluksessa.
Haastattelujen perusteella aikaisemmin lukujärjestyksen suunnittelu on tapahtunut pääosin paperilla tai Excel-taulukolla. Paperilla muutoksien tekeminen on hankalaa ja työlästä. Excel-taulukolla toisaalta on vaikea hahmottaa koko suunnittelutilanne. Kaakkuri-sovellus yrittää tarjota näihin ongelmiin ratkaisua.
Suunnittelutilanteen tarkastelua varten Kaakkuri-sovelluksessa on useita eri näkymiä. Ajallisesti on viikko- ja periodinäkymä sekä paikkakohtaisesti eri salinäkymiä. Viikkonäkymä on oikeastaan suoraviivainen kalenteri, jonne on helppo sijoittaa tapahtumia yksi kerrallaan. Säännöllisien kurssien tapahtumien sijoittelussa taas periodi-näkymä on kätevä. Siinä on mahdollista sijoittaa useita tapahtumia kerralla alkamaan samaan aikaan eri viikoilla. Periodi-näkymästä on myös helppo hahmottaa suunnittelutilanne usean viikon ajalta. Tämän lisäksi suunnittelutilannetta voidaan tarkastella salikohtaisesti. Valitsemalla joku tietty sali voidaan nähdä vain tähän saliin sijoitetut tapahtumat. Näin on helppo nähdä mihin voidaan sijoittaa tapahtuma joka vaatii välttämättä jonkun tietyn salin.
Muutoksien tekeminen suunnitelmaan on yritetty saada mahdollisimman helpoksi. Sijoitettujen tapahtumien sijoituksen voi poistaa kätevästi hiiren oikealla napilla ja vaihtoehtoisesti voidaan myös poistaa kaikkien kurssiin liittyvien tapahtumien sijoitus. Tapahtumia voi myös helposti hiirellä raahata näkymästä eri ajankohtiin.
Jos usealla suunnittelijalla on jaettuja resursseja kuten saleja tai kursseja, olisi kätevä saada suunnittelutilanne jotenkin synkronoitua mahdollistaen usean suunnittelijan työstävän suunnitelmaansa yhtäaikaisesti. Tätä ominaisuutta ei valitettavasti Kaakkuri-sovelluksen nykyisessä versiossa ole toteutettu.
Suunnittelun yksi tärkeimmistä tavoitteista on erilaisten päällekkäisyyksien estäminen. Esimerkiksi sama opettaja ei voi olla kahdessa paikassa samaan aikaan tai samaan saliin ei voi laittaa useaa tapahtumaa samaan aikaan. Ehkä vaikeimmin hahmotettava päällekkäisyys on samaan aikaan opiskeltavaksi tarkoitettujen kurssien päällekkäisyys. Esimerkiksi jos kaksi kurssia on tarkoitettu opiskeltavaksi ensimmäisenä syksynä, niin ei olisi suotavaa että näiden kurssien tapahtumia sijoitettaisiin samoihin aikoihin.
Päällekkäisyydet on jaettu Kaakkuri-sovelluksessa kahteen eri luokkaan: absoluuttisiin ja ohjeellisiin rajoitteisiin. Absoluuttiset rajoitteet hallitaan sovelluksessa kieltämällä rajoitteen vastainen sijoitus kokonaan. Ohjeellisen rajoitteen rikkova sijoitus sen sijaan sallitaan, mutta siitä annetaan varoitus.
Absoluuttiset rajoitteet hoidetaan Kaakkuri-sovelluksessa automaattisesti. Tällä hetkellä ainoastaan saman salin samaan ajankohtaan sijoittaminen on ainut absoluuttinen rajoite. Saman opettajan lisääminen kahteen tapahtumaan samanaikaisesti voisi jatkokehityksessä olla toinen absoluuttinen rajoite. Ohjeelliset rajoitteet hoidetaan Kaakkuri-sovellukseen rakennetulla kurssiryhmien hallinnalla. Pääideana on, että samaan kurssiryhmään kuuluvia kursseja ei ole tarkoitettu sijoitettavan päällekkäin. Tietyn kurssin ollessa valittuna sovellus näyttää lukujärjestyksestä eri sävyillä sen mihin ajankohtaan kurssia ei kannata sijoittaa.
Yhteyttä Korppi-järjestelmään tarvitaan, jotta saadaan sovelluksen käyttöön ajankohtaiset sali ja kurssi tiedot. Yhteys korppiin sovittiin toteutettavan tiedostoilla. Käyttäjän autentikoinnista puhuttiin, mutta siitä ei tehty lopullista päätöstä miten se toteutetaan.
Kaakkuri-sovellus hakee kurssi ja sali tiedot Korppi-järjestelmästä XML-tiedostoina ja parsii niistä tiedot itse sovellukseen. Kun käyttäjä haluaa viedä muutokset Korppi-järjestelmään, sovellus tekee muutoksista XML-tiedoston ja lähettää sen takaisin Korppi-järjestelmään. Käyttäjän autentikointia ei sovelluksessa vielä ole vaan Korppi-järjestelmä sallii haku pyynnöt vain tietyistä IP-osoitteista.
Näkymiä sovellukseen haluttiin ainakin periodi- ja kalenterinäkymä. Periodeja käyttäjän pitäisi pystyä itse lisäämään.
Molemmat näkymät on toteutettu Kaakkuri-sovellukseen, mutta ainakaan tällä hetkellä periodeja käyttäjä ei pysty itse lisäämään käyttöliittymästä. Väliaikaisena ratkaisuna periodit luetaan tiedostosta, jota voi muuttaa tekstieditorilla.
Ainakin tietotekniikan laitoksella on aiemmin ollut käytössä niin sanottu Blokki-järjestelmä. Tällä saadaan suunnittelun laajaa ongelma-avaruutta pienennyttyä ratkaisevasti. Tilaaja halusi blokki-järjestelmän myös sovellukseen.
Kaakkuri-sovelluksessa on erillinen blokkien muokkaus ikkuna, jolla on mahdollista tehdä oma blokki-rakenne. Muutoksien hyväksymisen jälkeen blokki-rakenne tulee näkyviin lukujärjestykseen. Tämän jälkeen jos käyttäjä raahaa kokonaisen luentohaaran johonkin soluun, niin ohjelma tarkistaa onko tässä solussa blokkia. Jos on, niin ohjelma sijoittaa kaikki kurssin luentoryhmät kyseisen blokin soluihin aloittaen solusta mihin luennot raahattiin. Jos solussa ei ole blokkia, niin mitään ei tehdä.
Seuraavassa on listaus sovellukseen kuuluvista luokkatiedostoista sekä lyhyt kuvaus niiden tarkoituksesta. Suurin osa luokkatiedostoista on jaettu paketteihin sen mukaan mihin asiaan kyseinen luokkatiedosto liittyy. Lukujen otsikot tarkoittavat kyseistä paketin nimeä.
Tiedosto |
Kuvaus |
Block.java |
Blokin ilmentymä. |
BlockEditor.java |
Blokkirakenteen muokkaukseen tehty käyttöliittymäluokka. |
BlockStructure.java |
Blokkirakenteen ilmentymä. Määrittelee rakenteen miten yhden tai useamman viikon ajalle blokit sijoittuvat. |
Tiedosto |
Kuvaus |
Course.java |
Kurssin ilmentymä. |
Courses.java |
Sisältää kaikki suunnittelussa käytettävät kurssit. |
DnDAllLectures.java |
Nimestään huolimatta sisältää kaikki yhteen kurssiin liittyvät tietyn tyyppiset tapahtumat. Nimen pitäisi olla ehkä DnDAllEvents. |
DnDEvent.java |
Yhden tapahtuman ilmentymä. |
DnDGroup.java |
Yhden tapahtumaryhmän ilmentymä. Sisältää mielivaltaisen määrän DnDEvent-olioita. |
RoomSelectionPanel.java |
Salin valintadialogin yhden salin ”rivi”. |
RoomSelectionRadioButton.java |
Salin valintadialogin yksi vaihtoehtonappula. Sisältää myös otsikon mille viikolle valinta on. Otsikon voi myös piilottaa. |
SelectRoomDialog.java |
Salin valintadialogin käyttöliittymäluokka. |
VisibleEventComponent.java |
Yhden tai useamman tapahtuman näkyvä osa. |
Tiedosto |
Kuvaus |
Constraints.java |
Sisältää kaikki kurssiryhmät ja hoitaa niiden käsittelyn. |
CourseGroup.java |
Kurssiryhmä, johon voi sisältyä useita kursseja tai toisia kurssiryhmiä. |
CourseGroupComponent.java |
Kurssiryhmien tekemiseen tehty komponentti. Käyttäjä voi raahata haluamansa kurssit tähän komponenttiin, jolloin ne liitetään komponenttia vastaavaan kurssiryhmään. |
CourseGroupsEditor.java |
Käyttöliittymäluokka kurssiryhmien lisäämistä ja muokkausta varten. |
Tiedosto |
Kuvaus |
MultiLineEditor.java |
Taulukon editori. Käytetään kun hiirellä käsitellään yhden solun sisältöä. |
MultiLineRenderer.java |
Taulukon piirtämisestä vastaava luokka. |
MultiLineTable.java |
Sovelluksessa käytetty taulukkokomponentti. |
MyCellPanel.java |
Yhden solun sisällön rakentava luokka. |
MyColumnListener.java |
Kuuntelee taulukon sarakkeissa tapahtuvia muutoksia. Esimerkiksi kun marginaalien koko muuttuu, tämä kutsuu taulukon koon uudelleen laskemista. |
MyTransferHandler.java |
Hiirellä raahaamisen (Drag&Drop) käsittelevä luokka. |
TableMouseListener.java |
Käsittelee taulukossa hiirellä tehdyt toiminnot lähinnä klikkaukset. |
TableMouseMotionListener.java |
Tällä hetkellä vain muuttaa hiiren kursorin alla olevan solun editointi tilaan. |
TableTransferHandler.java |
Käsittelee taulukon sisällä tapahtuvat raahaukset. |
VerticalLayout.java |
Ulkoasu, joka sijoittaa komponentteja ylhäältä alaspäin eikä vaihda saraketta kuten VerticalFlowLayout. Käytetään sijoittaessa tapahtumien näkyvää osaa soluun. |
Tiedosto |
Kuvaus |
Schedule.java |
Yhden viikon ”lukujärjestys”. Sisältää ScheduleRow-olioita. |
ScheduleCell.java |
Yhden solun ilmentymä. Osaa kysyä oman aikansa ja kertoa mitkä tapahtumat kuuluvat tähän soluun. |
ScheduleDatabase.java |
Tietokanta, joka sisältää kaikki suunnittelussa käytettävät Schedule-oliot. Aikaväli määritellään kiinteästi esimerkiksi vuosi 2004-2005. |
ScheduleIterator.java |
Yhden viikon ”lukujärjestyksen” läpikäyntiin tehty iteraattori. |
ScheduleRow.java |
Sisältää yhden viikon yhteen aikaväliin kuuluvat solut. Esimerkiksi viikko 13 kello 10-12. Kiinteästi määritelty sisältämään 8 solua (7 päivää + kellonaikasolu). |
ScheduleView.java |
Koostaa näkymän lukujärjestyksestä yhden tai useamman viikon ajalta. |
Week.java |
Sovelluksessa käytetty viikko-olio. Sisältää vuoden ja viikon. |
WeekDialog.java |
Ponnahdusikkuna, joka tulee esille kun sijoitetaan tapahtuma puusta periodi-näkymään. |
WeekIterator.java |
Käy kaikki tietokannassa käytetyt viikot läpi. |
Tiedosto |
Kuvaus |
CustomTreeModel.java |
Kurssipuun tietorakenne. Osaa sijoittaa kurssit oikeisiin haaroihin. |
PanelCoursesTree.java |
Kurssipuun sisältävä komponentti. |
TreeTransferHandler.java |
Käsittelee kurssipuusta raahatut oliot. |
Tiedosto |
Kuvaus |
KorppiSelectionDialog.java |
Korpista haettavien kurssien hakuun tehty käyttöliittymäluokka. |
XMLParser.java |
Lukee Korpista haetut XML-tiedostot sovelluksen tietorakenteeseen. |
Tiedosto |
Kuvaus |
ContainerText.java |
Yhden tapahtuman käyttäjälle näkyvä osa. Sisältää myös raahauksen (Drag&Drop) ja klikkauksen käsittelyn. Peritty JTextArea-luokasta. |
CourseEditor.java |
Kurssin tietojen muokkaukseen tehty käyttöliittymä, joka on tällä hetkellä pois käytöstä. |
ErrorPanel.java |
Virheilmoituskomponentti. Tulostaa sijoituksessa mahdollisesti esille tulleet varoitukset ja virheet. |
GUI.java |
Sisältää sovelluksen pääohjelman. |
LoadDialog.java |
Suunnittelutilanteen avaukseen tarkoitettu käyttöliittymäluokka. |
MainFrame.java |
Pääikkuna ja siihen liittyvät komponentit ja metodit. |
Period.java |
Yhden jakson ilmentymä. Sisältää alku- ja loppuviikon. |
Room.java |
Yhden salin ilmentymä. |
RoomDialog.java |
Omien salien valintaan tehty käyttöliittymäluokka. |
Rooms.java |
Sisältää kaikki suunnittelussa käytettävät salit. |
SaveDialog.java |
Suunnittelutilanteen tallennukseen tarkoitettu käyttöliittymäluokka. |
SplashScreen.java |
Vastaa sovelluksen käynnistyksen yhteydessä näytettävän kuvan piirtämisestä. |
TabbedInfo.java |
Valitun kurssin tiedot näyttävä komponentti. Toiveet, Info ja Kurssiryhmät. |
Sovellus jäi projektin jäljiltä vielä monilta osin keskeneräiseksi. Osa ominaisuuksista toimii vielä varsin huonosti ja joitain ominaisuuksia ei toteutettu lainkaan. Seuraavassa on esitelty puutteelliset tai kokonaan toteuttamattomat ominaisuudet.
Kaikki projektin aikana sovellukseen toteutetuista ominaisuuksista eivät luultavasti toimi parhaalla mahdollisella tavalla. Aikarajoitteen vuoksi oli kuitenkin mentävä koko ajan eteenpäin.
Käyttäjän kannalta ehkä silmiinpistävin puute on lukujärjestyksen piirtämisessä. Tällä hetkellä sijoitetun kurssin tekstikenttä piirtyy joissain tilanteissa liian pieneksi, jolloin koko teksti ei näy. Tilanne korjaantuu kun solu piirtyy uudelleen (esim. kun vie hiiren kursorin solun päälle). Myöskään rivin koon lasku ei toimi joka tilanteessa. Projektiryhmä epäilee molempien ongelmin johtuvan Javan tavasta käsitellä komponenttien kokoa kun ne eivät ole näkyvissä. Javassa komponentilla ei ole vielä kokoa kun se ei ole näkyvissä, jolloin koon laskualgoritmit eivät toimi.
Projektin alkuvaiheessa tehtiin päätös, että käyttöliittymään ei panosteta yhtä paljon kuin yleensä. Tähän syynä oli se että sovelluksen kohderyhmä oli pieni ja todettiin että kohderyhmän kouluttaminen ohjelman käyttämiseen olisi suhteellisen pieni vaiva. Pääkäyttöliittymään on kuitenkin panostettu suhteellisen paljon, mutta ainakin muilta osin käyttöliittymä kaipaisi parantelua. Erikoisesti kurssiryhmäeditori on erittäin epäselvä ja vaikea käyttää. Projektin käytettävyysryhmä teki raportin [10] tarpeellisista parannuksista käyttöliittymään, josta selviää tarkemmin mitä käyttöliittymässä pitäisi muuttaa.
Sovelluksen reagointi käyttäjän syötteisiin saattaa joskus kestää hetken aikaa. Tämä johtuu useista algoritmeista, joilla sovellus muodostaa käyttäjälle näkyvän lukujärjestyksen sekä laskee voimassa olevat rajoitteet ja ilmaisee ne väreillä. Algoritmien toiminta ei välttämättä ole optimaalinen. Suorituskykyä on pyritty pitämään silmällä ja projektiryhmän mielestä se on kohtalainen. Parannettavaa tietysti olisi, mutta se saattaisi vaatia suuriakin muutoksia sovelluksen rakenteeseen. Parasta kuitenkin olisi että sovellus reagoisi viiveettömästi käyttäjän toimiin.
Projektin aikana ei ehditty toteuttaa kaikkia sovellukselle asetettuja vaatimuksia. Seuraavassa listattu toteuttamattomia ominaisuuksia, jotka olisi toteutettava jatkokehityksessä.
Ominaisuus |
Kuvaus |
Käyttäjän mahdollisuus valita suunnittelussa käytetyt periodit. |
Tällä hetkellä sovellus lukee suunnittelussa käytetyt periodit tiedostosta. Olisi kuitenkin toivottavaa, että käyttäjä voisi sovelluksen avulla valita suunnittelussa käytetyt periodit. |
Suunnittelussa tapahtuneiden muutosten vienti Korppiin ohjelmallisesti. |
Tällä hetkellä suunnittelun tuloksena syntyneet muutokset tulostetaan tiedostoon, jonka vieminen korppiin on käyttäjän vastuulla. Sovelluksen pitäisi tehdä tämä käyttäjän puolesta. |
Autentinkointi Korpin kanssa |
Korppi sallii kurssitietojen lukemisen tietyistä IP-osoitteista. Parempi vaihtoehto olisi, että sovelluksen käyttäjä kirjautuisi Korppiin omilla tunnuksillaan, jolloin IP-osoite rajoituksia ei tarvittaisi. |
Tietokannan aikavälin valinta. |
Olisi toivottavaa että käyttäjä voisi valita suunnitteluaikavälin, joka tällä hetkellä luetaan tiedostosta. Toinen vaihtoehto olisi, että sovellus automaattisesti huolehtisi tietorakenteen kasvatuksesta kun käyttäjä käsittelee viikkoa, jota ei ole vielä tietorakenteessa. |
Pitkien tapahtumien käsittely. |
Tällä hetkellä sovellus ei osaa käsitellä yli kahden tunnin tapahtumia oikein. Toivottavaa olisi, että sovellus osaisi käsitellä jopa mielivaltaisen pitkiä tapahtumia. |
Viikon jakaminen ajanjaksoihin |
Tietorakenne on suunniteltu mahdollistamaan tuntijaon tekemisen muillekin ajanjaksoille kuin kahden tunnin jaolle. Jakoa ei kuitenkaan voi käyttäjä vielä missään määrittää. |
Pakolliset sivuaineet |
Sovellus osaisi varoittaa, jos suunnittelija yrittää sijoittaa tapahtuman jonkun pakollisen sivuaineen tapahtuman kanssa päällekkäin. |
Salien koon huomiointi suunnitteluvaiheessa. |
Salien kokoa ei ole huomioitu nykyisellään ollenkaan. Sovellus voisi varoittaa käyttäjää, jos hän sijoittaa pieneen saliin tapahtuman, jolla on paljon osanottajia. |
Synkronointi |
Kun useilla suunnittelijoilla on jaettuja resursseja, niin olisi oltava mahdollisuus synkronoida suunnittelutilanne suunnittelijoiden kesken. Tämä olisi mahdollista toteuttaa esimerkiksi siten, että toisen suunnittelijan tapahtumat luettaisiin sovellukseen ns. vertailutapahtumiksi. Sovellus sen jälkeen ilmoittaisi päällekkäisyyksistä näiden vertailutapahtumien kanssa. |
Mahdollisuus luoda uusia tapahtumia. |
Kurssiin voisi liittää uuden tapahtuman Kaakkuri-sovelluksen avulla. |
Opettajien huomiointi |
Sovellus osaisi varoittaa tai kieltää sijoitukset, joissa tapahtumalla on sama opettaja samaan aikaan. |
Peruuta-toiminto |
Sovelluksessa olisi mahdollista peruuttaa edellinen tai edelliset muutokset. |
Rajoite-editori |
Käyttäjä pystyisi tekemään omia rajoitteita. |
Kaakkuri-projekti toteutti Jyväskylän yliopiston tietotekniikan laitokselle prototyypin koko lukuvuoden lukujärjestyksen suunnittelusovelluksesta. Kaikki pakolliset ja myös osa toivotuista vaatimusmäärittelyssä [1] sovituista ominaisuuksista saatiin toteutettua. Sovellus otetaan mahdollisesti tietotekniikan laitoksella testikäyttöön jo keväällä 2005.
Sovellus toteutettiin Java-kielellä, joka
mahdollistaa sen käytön useilla käyttöjärjestelmillä. Ainakin Windows, Linux,
Unix ja Mac OS X ovat tuettuja käyttöjärjestelmiä.
Lähteet
[1] PK, AP, SS, MS, Kaakkuri: ”Vaatimusmäärittely”, Jyväskylän yliopisto, tietotekniikan laitos, 2004
[2] PK, AP, SS, MS, Kaakkuri: ”Sovellussuunnitelma”, Jyväskylän yliopisto, tietotekniikan laitos, 2005
[3] PK, AP, SS, MS, Kaakkuri: ”Projektisuunnitelma”, Jyväskylän yliopisto, tietotekniikan laitos, 2004
[4] PK, AP, SS, MS, Kaakkuri: ”Testaussuunnitelma”, Jyväskylän yliopisto, tietotekniikan laitos, 2005
[5] PK, AP, SS, MS, Kaakkuri: ”Testausraportti”, Jyväskylän yliopisto, tietotekniikan laitos, 2005
[6] PK, AP, SS, MS, Kaakkuri: ”Käyttö- ja asennusohje”, Jyväskylän yliopisto, tietotekniikan laitos, 2005
[7] Jämsen Päivi, ”Opetustapahtumien sijoitteluprojekti –kuvaus”, Jyväskylän yliopisto, tietotekniikan laitos
[8] Santanen Jukka-Pekka, ”Tietotekniikan Sovellusprojektien ohje”, Jyväskylän yliopisto, tietotekniikan laitos, 2004.
[9] Santanen Jukka-Pekka, ”Opinnäytteiden kirjoittaminen, lyhyt oppimäärä”, Jyväskylän yliopisto, tietotekniikan laitos, 23.8.2000
[10] Jukka Partanen ja Ville Haapsaari, ”Gavia parannusehdotukset loppuraportti”