Kottarainen-projekti

Sampsa Lintunen

Tiina Pöyhönen

Teemu Vähä-Ruka

Timo Ylönen

Sovellusraportti 18.6.2003

Jyväskylän yliopisto
Tietotekniikan laitos

Kottarainen-projektin tietoja

Tekijät: Sampsa Lintunen ( sampsa@cc.jyu.fi)
Tiina Pöyhönen ( tmpoyhon@cc.jyu.fi)
Teemu Vähä-Ruka ( teemuvr@cc.jyu.fi)
Timo Ylönen ( tylonen@cc.jyu.fi)

Yhteystiedot: Agora, huone C223.2, puh.nro. 014-260 49 64 projektiorganisaation sähköpostilista on kottarainen@korppi.jyu.fi. Sen keskustelua voi seurata osoitteessa http://korppi.it.jyu.fi/list-archive/kottarainen/. Kotisivu löytyy osoitteesta http://kotka.it.jyu.fi/kottarainen/.

Työn nimi: Kottarainen-projekti, sovellusraportti

Työ: Sovellusraportti tietotekniikan sovellusprojektiin

Tiivistelmä: Kottarainen-projekti toteutti prototyypin WWW-pohjaisesta kyselyjen hallintasovelluksesta. Projektissa keskityttiin kyselyn laatimiseen ja siihen vastaamiseen. Kottarainen-sovellus tulee olemaan yksi aiemmin toteutetun Korppi-järjestelmän moduuleista. Sovellusraportissa kuvataan määriteltyjen vaatimusten toteutumista sekä sovelluksen toteutusta ja toimintaa.

Avainsanat: Tiedonkeruu, kyselyt, palaute, WWW-lomakkeet, WWW-sovellus, Korppi-järjestelmä.

Versionhallinta

Versio
Päiväys
Tehnyt
Muutokset
0.1
13.5.
Teemu Vähä-Ruka
Ensimmäinen versio.
0.21
20.5.
Tiina Pöyhönen
Otsikot jsp-sivuista ja pari lausetta lisää sinne tänne.
0.22
22.5.
Tiina Pöyhönen
Jatkokehitys-osioon lisää tarinaa.
0.23
26.5.
Tiina Pöyhönen
Jatkokehitys-osioon lisäystä. Kuvat java-papujen hierarkiasta ja suhteista toisiinsa. Papusista otsikot ja selostusta tiedostoratkaisuista. Testausosio.
0.3
1.6.
Timo Ylönen
Kuvaukset papujen toiminnasta ja jsp-sivuista.
0.31
2.6.
Tiina Pöyhönen
Käyttöliittymäkuvat. Yhteenvetoselostus alulle. Hienosäätöä.
0.32
3.6.
Tiina Pöyhönen
Teemun ehdottamia korjauksia. Koodikirjasimella papujen nimiä jne..
0.35
9.6.
Timo Ylönen
Korjauksia Santasen kommenttien perusteella.
0.40
10.6.
Timo Ylönen
Korjauksia Santasen kommenttien perusteella.
0.41
11.6.
Teemu Vähä-Ruka
Lisää korjauksia ja kuvien muokkausta.
0.42
16.6.
Tiina Pöyhönen
Korjauksia Santasen kommenttien perusteella.
1.0
18.6.
Teemu Vähä-Ruka
Loput viilaukset. Hyväksytty dokumentti

Sisällysluettelo

1 Johdanto

Kottarainen-niminen tietotekniikan Sovellusprojekti toteutti prototyypin WWW-pohjaisesta kyselyjen laatimis-, hallinta- ja analysointisovelluksesta Jyväskylän yliopiston käyttöön. Projektin puitteissa toteutuneita osia ovat kyselyiden luominen WWW-ympäristöön ja kyselyyn vastaaminen. Muut osiot siirrettiin jatkokehitykseen, mutta ne on huomioitu sovelluksen ja tietokannan rakenteessa sekä kirjattu vaatimusmäärittelyyn.

Kottarainen-sovellus on yksi Korppi-nimisen opetushallintajärjestelmän moduuleista. Järjestelmään ovat aiemmin toteuttaneet sovelluksia Kotka-, Korppi-, Halko-,
Kolibri-, Koppelo- ja Kiuru-projektit. Niitä on edelleen jatkokehitetty Jyväskylän yliopiston tietotekniikan laitoksella.

Dokumentissa kuvataan Kottarainen-sovellukselle asetettujen tavoitteiden sekä toimintojen ja ominaisuuksien toteutuminen. Lisäksi dokumentissa on kuvattuna sovelluksen toteutunut käyttöliittymä ja jatkokehitykseen jäävät ominaisuudet. Dokumentissa kuvataan myös Kottarainen-projektin tekemiä ratkaisuja tiedostokäytänteiden ja tietokannan suhteen sekä JSP-sivujen ja java-papujen tehtävät ja tärkeimmät toiminnot.

Aiemmin laadittuja dokumentteja ovat Projektiraportti ja Projektisuunnitelma, joissa kuvataan projektin toteutunut ja suunniteltu läpivienti. Sovellussuunnitelmassa, Vaatimusmäärittelyssä ja Haastatteluraportissa kuvataan sovelluksen suunniteltu toteutus, sovellukselle asetetut vaatimukset sekä haastatteluiden tulokset.

Luvussa 2 esitellään aiheeseen liittyviä käsitteitä. Luvussa 3 kuvataan sovelluksen toteutuneita ominaisuuksia. Luku 4 esittelee käytössä olleet toteutustekniikat ja -työkalut. Luku 5 kuvaa sovelluksen tietokantarakennetta. Luvussa 6 kuvataan sovelluksen JSP-sivujen tietoja ja toimintaa. Luku 7 käsittelee Kottarainen-projektissa käytettyjä Java-papuja. Luvussa 8 on käsitelty sovelluksen testaamista ja sen tuloksia. Luvussa 9 on analysoitu virheitä, puutteita ja jatkokehitysideoita.

2 Termejä

Luvussa on selvennetty Kottarainen-projektissa käytettyä termistöä.

Kottarainen-projektin aihealueeseen ja Korppi-järjestelmään liittyviä termejä ovat seuraavat:

Kohde on tässä dokumentissa käytetty lyhenne, jolla tarkoitetaan kysymystä, kysymysryhmää tai kyselyä.

Korppi on Jyväskylän yliopistossa kehitetty opetushallintajärjestelmä.

Kotka on Korppi-järjestelmän tietokanta ja henkilötietojen hallintaosio.

Kysely käsittää koko kyselyn ja voi koostua yhdestä tai useasta kysymysryhmästä.

Kysymyspankki on kokoelma kysymyssarjoja, joista voi valita uuden kyselynsä pohjaksi kokonaisia sarjoja, kysymysryhmiä tai yksittäisiä kysymyksiä.

Kysymysryhmä käsittää yhden tai useampia loogisesti tai visuaalisesti samaan aihepiiriin liittyviä kysymyksiä.

Kysymyssarja on kysymyspankkiin saataville sijoitettu kysely.

Looginen ryhmittely on kysymysten ryhmittely analysointia varten asiasisällön mukaan.

Metatieto on kohteisiin liitettävää käyttötapausta ja laatimista kuvaavaa lisätietoa, joka helpottaa kyselyitä haettaessa ja vastauksia analysoitaessa eri kohteiden liittämistä toisiinsa. Mahdollisia metatietoja ovat esimerkiksi kyselyn laatija ja laatimisajankohta.

SAS on tilastollinen ohjelma.

SPSS on yliopistolla laajasti käytetty tilastollinen analysointi-ohjelma.

SPSS Data Entry on WWW-kyselyiden tekemiseen tarkoitettu ohjelma.

Survo on käyttöympäristö tekstin ja numeerisen tiedon luovaan käsittelyyn.

Visuaalinen ryhmittely on kysymysten ryhmittely visuaalisesti eri ryhmiin niin, että käyttäjältä piilotetaan loogiset ryhmät.

Projektin toteutusympäristöön sekä käytettäviin työkaluihin ja tekniikoihin liittyviä termejä ovat seuraavat:

Apache on ilmainen HTTP-palvelinohjelmisto.

CSS eli Cascading Style Sheets on WWW-sivujen ulkoasua kuvaava kieli.

CSV eli Comma Separated Values on tiedon esitysmuoto, jossa eri arvot erotetaan toisistaan pilkulla.

CVS (Concurrent Version System) on ohjelmistokehityksessä käytettävä versionhallintajärjestelmä.

Eväste (engl. c ookie) 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.

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 kutsua JSP-sivuilla.

JDBC eli Java Database Connectivity on Java-teknologian käyttämä tietosilta erilaisiin tietokantoihin.

JSP eli JavaServer Pages on ohjelmointikieli, jossa HTML-koodin sekaan mahdollista lisätä Java-koodia.

PostgreSQL on ilmainen tietokannanhallintajärjestelmä.

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

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

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

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.

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

TomCat on ilmainen servletti- ja JSP-moottori.

XML on rakenteinen dokumenttien määrittely- ja kuvauskieli.

3 Asetettujen tavoitteiden toteutuminen

Kottarainen-sovelluksen ensisijaiseksi vaatimukseksi projektin aikana muotoutui helppokäyttöisen kyselyiden luontityökalun ja vastaamisen käyttöliittymän toteuttaminen Korppi-järjestelmän yhteyteen. Kyselyn teko tapahtuu WWW-selaimella ja kysely tulee heti valmistuttuaan näkyviin palvelimelle. Jonkun vastattua kyselyyn vastaukset tallentuvat tietokantaan.

3.1 Kyselyiden luominen

Kysymysten, kysymysryhmien ja kyselyiden (myöhemmin näihin viitataan kohteina) luomisen käyttöliittymä suunniteltiin mahdollisimman helppokäyttöiseksi. Käytännössä käyttöliittymää ei ehditty hioa läheskään loppuun saakka, vaan se tehtävä jätettiin jatkokehitykseen. Sovelluksen virheitä, puutteita ja jatkokehitysideoita on kuvattu tarkemmin luvussa 9.

Valmistuneella työkalulla kyselyn luoja voi laatia kyselyitä, niihin liittyviä kysymysryhmiä ja kysymyksiä sekä tallentaa ne tietokantaan. Kun kysely on valmis, se tallennetaan palvelimelle ja on nähtävissä ja täytettävissä Kottarainen-sovelluksessa.

3.2 Vastausten tallentaminen

Kyselyjen vastaukset tallennetaan Kotka-tietokantaan. Olemassa olevaa tietokantaa laajennettiin ja muutettiin Kottarainen-sovelluksen tarpeiden mukaan. Tietokantaa kuvataan tarkemmin luvussa 5.

Vastaukset tallennetaan tietokantaan niin, että niissä säilyy tieto kyselystä ja vastausajanhetkestä. Näin voidaan vertailla saatuja tuloksia esimerkiksi eri vuosien välillä. Lisäksi vastauksiin liitetään erilaisia metatietoja, kuten vastaajan yksilöivä tunniste. Tallentamisessa otetaan huomioon tietojen jatkokäytön vaatimukset (kuten vastausten tarkempi analysointi), joita kuvataan tarkemmin Vaatimusmäärittelyssä.

3.3 Tulosten esittäminen

Tuloksia ei tämän projektin puitteissa ehditty esittää lainkaan. Myös vastausten selaaminen siirrettiin jatkokehitykseen ajanpuutteen vuoksi .

Jatkokehitykseen siirrettiin myös vastausten siirrettävyys muihin ohjelmiin.

4 Toteutustekniikat ja -työkalut

Luvussa kuvataan Kottarainen-sovelluksen toteuttamiseen käytettyjä työkaluja ja ohjelmointiympäristöjä. Ryhmällä oli ohjelmointityökaluna käytössään NetBeans 3.4.1. Käyttöjärjestelminä kahdella projektin koneista oli Windows 2000 ja kahdella RedHat Linux 7.3.

4.1 Palvelinratkaisut ja suhde muihin järjestelmiin

Kotka-projektin valitsemaa palvelinratkaisua käytettiin myös Kottarainen-sovelluksessa, koska se on Korppi-opetushallintajärjestelmän moduli. Kuvassa 1 esitetään Kottarainen-sovelluksen suhdetta muihin olemassa oleviin järjestelmiin.

Jatkokehitykseen jäi tulosten muuttaminen CSV-muotoon jatkoanalysointia varten. Lisäksi Kottarainen-sovelluksen jatkokehittäjien tulee aikataulun salliessa toteuttaa XML-muuntaja, joka tuottaa kyselyistä IMS-standardin mukaista XML-muotoa. Tällä tavoin on mahdollista siirtää kyselyitä muihin ympäristöihin, kuten esimerkiksi Optima-oppimisympäristöön.

Kuva 1: Kottarainen-sovelluksen suhde muihin järjestelmiin.

4.2 JSP-tekniikka

JSP-sivuilla on tavallisen HTML-koodin sekaan mahdollista lisätä Java-koodia. Kun WWW-palvelin vastaanottaa pyynnön selaimelta, se päättelee, onko kyseessä staattinen HTML-sivu vai JSP-sivu (katso kuva 2). Apache palauttaa pyydetyt staattiset sivut suoraan takaisin selaimeen.

JSP-sivun pyyntö välittyy servlettimoottorille, joka Korppi-järjestelmässä on TomCat. Se tutkii, onko kyselyä vastaava servletti jo olemassa. Olemassa oleva servletti suoritetaan ja se palauttaa selaimelle tuloksen HTML-muodossa. Jos servlettiä ei löydy, pyyntö ohjautuu JSP-moottorille, joka generoi servletin. Kuvassa 2 esitetään luvussa käsiteltyjen palvelinohjelmistojen suhteita toisiinsa.

Kuva 2: Palvelinohjelmistojen suhteet toisiinsa.

4.3 Java-pavut

Java-pavut (engl. JavaBeans) ovat uudelleen käytettävien komponenttien luontiin tarkoitettu standardi, joka on luotu erityisesti visuaalisia kehitysvälineitä ajatellen. Ne ovat Javalla toteutettuja luokkia, joihin Java-koodi pyritään keskittämään. Tällä tavoin varsinaiset JSP-sivut säilyvät helposti ylläpidettävinä sisältäen vain HTML-rakenteen ja staattiset tekstit.

Aikaisempien Korppi-järjestelmään moduleita toteuttaneiden projektien tavoin Kottarainen-projekti tuotti pääosin yleiskäyttöisiä ja hyvin kommentoituja Java-papuja, joita järjestelmän jatkokehittäjät voivat hyödyntää.

4.4 Tietokanta

PostgreSQL on vuonna 1986 alkunsa saanut avoimen lähdekoodin relaatiotietokannan hallintaohjelmisto, joka on käytössä Kotka-tietokannassa. Koska Kottarainen-sovelluksessa käytetään Kotka-tietokantaa, käytettiin myös kyseistä ohjelmistoa. Seuraavana on esitelty yleisellä tasolla tietokannan rakenne ja taulut.

4.5 Apache ja TomCat

HTTP-palvelimena projektissa käytettiin Apache-nimistä suosittua Linux-käyttöjärjestelmän ohjelmistoa. Apache oli jo aiemmin valittu Korppi-järjestelmän HTTP-palvelimeksi, joten ratkaisu oli selvä.

TomCat on Apache-projektin haarauma, joka kääntää JSP-sivuista mahdollisten java-papujen avulla HTML-koodia. TomCatin avulla JSP-sivut siis muunnetaan selaimella esitettäviksi HTML-sivuiksi. TomCatiin on sisällytetty mukaan myös HTTP-palvelimen toiminnallisuus. HTTP-ominaisuuksia ei kuitenkaan käytetty, koska HTTP-palvelimena käytetyllä Apachella saatiin käyttöön myös SSL-salaus.

4.6 Kottarainen-sovelluksen tiedostoratkaisut

Kottarainen-sovellus on jaettu neljän tyyppisiin tiedostoihin. Näistä JSP-sivut ja Java-pavut ovat yleisesti käytössä JSP-tekniikkaa toteuttavissa sovelluksissa.

Näiden lisäksi Kottarainen-sovellus käyttää sqlt- ja htmt-päätteisiä tiedostoja. Sqlt-tiedostot sisältävät lähes kaikki SQL-lauseet, mikä helpottaa virheiden etsimistä SQL-hauissa. Htmt-tiedostot puolestaan sisältävät lähes kaiken HTML-koodin. Näin ollen HTML-koodiin tulleet virheet on helpompi löytää ja sivujen ulkoasua on helppo muokata.

Molempien tiedostojen muuttujien parsimiseen Java- ja JSP-koodin sekaan käytetään TemplateHandler-nimistä Java-papua. TemplateHandlerista on kirjoitettu oma käyttöohjeensa, joka on saatavissa Kottarainen-projektin kotisivuilta osoitteesta http://kotka.it.jyu.fi/kottarainen/.

5 Tietokanta

Kottarainen-projekti käytti Kotka-tietokantaa toteutettavan sovelluksen tietokannan pohjana. Vanha tietokanta ei sellaisenaan taipunut Kottarainen-sovelluksen tarpeisiin ja haluttujen ominaisuuksien toteuttamiseen, joten tietokantaan suunniteltiin ja toteutettiin Kottarainen-sovellusta varten kokonaan oma osio. Kotka-tietokannan dokumentointikäytännön mukainen yksityiskohtaisempi kuvaus tietokannasta löytyy Kotka-tietokantaraportin luvusta 9.

5.1 Tietokannan rakennekaavio

Tietokannan rakennekaaviosta (katso kuva 3) käyvät ilmi Kottarainen-projektia varten luodut uudet taulut ja niiden sisältämät kentät. Tarkemmat kuvat tauluista sekä niiden avainkentistä löytyvät tämän dokumentin liitteistä.

Kuva 3: Tietokannan rakennekaavio.

Tietoa varastoivat taulut

Tietoa varastoivat taulut ovat seuraavat:

questionnaire sisältää kyselyn perustiedot.

questiongroup sisältää kysymysten ryhmittelytiedot. Taulun rakenne on rekursiivinen, joten alkiot muodostavat puurakenteen, jossa kysymysryhmät voivat sijaita toistensa sisällä. Kysymysryhmän sisällä voi olla sekä kysymyksiä että muita kysymysryhmiä.

question sisältää yksittäisen kysymyksen perustiedot. Käyttöliittymätasolla kysymys on teksti, joka esittää kysyttävän asian.

questionfield sisältää kysymyksen yhteen kenttään tai useampiin kenttiin liittyvät tiedot. Käyttöliittymätasolla kenttä edustaa HTML-komponenttia, joita ovat mm. radiopainike, valintaruutu, tekstirivi, tekstialue ja valintalistan alkio.

questionresult sisältää vastauksen tiettyyn kenttään. Huomioitavaa on, että esimerkiksi radiopainikekysymyksen kohdalla vastaus liittyy yksittäiseen radiopainikkeeseen, ei kysymykseen.

5.3 Viitetaulut

Viitetaulut ja niiden tarkoitus ovat seuraavat:

questionnaire_questiongroup yhdistää kyselyyn sen kysymysryhmät. Taulu sisältää myös tiedon kyselyn järjestysnumerosta.

questionnaire_usergroup yhdistää kyselyn tiettyyn käyttäjäryhmään. Taulussa määritellään myös toiminto, joka ryhmälle kyseiseen kyselyyn annetaan.

questiongroup_question yhdistää kysymyksen yhteen kyselyyn tai useampiin kyselyihin. Taulussa kerrotaan myös, mihin kysymysrymään kysymys kuuluu.

questionfield_htmlparameter määrittää HTML-ominaisuuksia kysymyskentälle. Taulun avulla saadaan esimerkiksi määrättyä tekstirivin pituus ja monirivisen tekstikentän korkeus ja leveys.

5.4 Määritystaulut

Seuraavana on esitelty määritystaulut ja niiden tarkoitus:

htmlparametertype sisältää HTML-ominaisuustyypit kysymyskentille.

questionnaireaction sisältää eri toiminnot, joita kyselylle voidaan suorittaa. Toimintoja ovat luonti, muokkaus, vastaus, tulosten luonti ja katselu.

questionstatus sisältää määrittelyt kyselyn osien mahdollisisista tiloista. Eri tiloja voi olla piilotettu, auki ja luku.

questiontype sisältää kysymyksille mahdolliset tyypit. Näitä ovat tekstirivi, tekstialue, monivalintaruutu, kommenttirivi, radiopainike ja alasvetolista.

question_bankgroup sisältää ryhmittelyt (kuten esim. kyselyn näkyvyys organisaatiolle), joita kysymyspankissa voi eri kohteille olla. Taulu sisältää myös alkion salattu, jolloin kohde ei ole muiden saatavilla.

question_bankuseright sisältää määrittelyt oikeuksille, joilla kohdetta on mahdollista uudelleenkäyttää. Eri oikeuksia ovat viite, viite lukuoikeuksin, kopio ja kopio vastauksin.

5.5 Metatietotaulut

Metatietotaulurakenteen avulla voidaan määritellä eri kohteiden ominaisuuksia. Tarkoituksena on, että ominaisuuksia voi lisätä jo valmiiseen sovellukseen koskematta lähdekoodiin. Taulun rakenne on sellainen, että kohteeseen liitetyn tiedon tyyppi ilmaistaan viitteellä, jolloin uuden tyypin lisääminen ei aiheuta muutoksia tietokannan rakenteeseen. Metatietotaulut ja niiden tarkoitus ovat seuraavat:

question_parametertype sisältää määritykset eri metatietotyypeille. Tyyppejä voi lisätä valmiin sovelluksen julkaisun jälkeen.

questionnaire_parameter yhdistää metatiedon kyselyyn. Alkio sisältää tiedon metatiedon tyypistä sekä tiedon varsinaisen sisällön.

questiongroup_parameter yhdistää metatiedon kysymysryhmään. Alkio sisältää tiedon metatiedon tyypistä sekä tiedon varsinaisen sisällön.

question_parameter yhdistää metatiedon kysymykseen. Alkio sisältää tiedon metatiedon tyypistä sekä tiedon varsinaisen sisällön.

questionresult_parameter yhdistää metatiedon vastaukseen. Alkio sisältää tiedon metatiedon tyypistä sekä tiedon varsinaisen sisällön.

6 JSP-sivut

Luvussa kuvataan lyhyesti Kottarainen-projektin puitteissa luodut JSP-sivut ja niiden käyttötarkoitus. Sovelluksen ulkoasu on yhtenäinen Korppi-järjestelmän kanssa, koska se tässä vaiheessa toimii ainoastaan Korppi-järjestelmän alaisuudessa.

Kottarainen sovellukseen toteutettiin käyttöliittymät kyselyiden luomiseen ja hallintaan sekä käyttöliittymä kyselyihin vastaamiselle. Vastausten tarkastelu sekä tulosten ja raporttien tarkempi muodostaminen ja tarkastelu jätettiin jatkokehityksen ja myöhemmän projektin tehtäväksi.

6.1 Sivujen käyttöliittymä

Sivujen käyttöliittymä koostuu kolmesta eri osasta: kahdesta navigaatioalueesta sekä tietoalueesta. Navigaatioalueet ovat selainikkunan yläosassa oleva osio sekä vasemmassa reunassa oleva navigaatiopuu kalentereineen.

Yläosiossa on Korppi-järjestelmän perustoiminnot: poistuminen, palaute, asetukset ja opastus. Vasemmassa reunassa olevassa puurakenteessa puolestaan on kaikki Korppi-järjestelmien eri osioihin liittyvät alipuut. Niiden avulla Korppi-järjestelmän käyttäjä pystyy liikkumaan eri osioiden välillä. Navigaatiopuussa on linkki myös Kottarainen-kyselysovellukseen.

Luontityökalu sisältää sivut kyselyn, kysymysryhmän ja kysymyksien luomiselle ja niiden tietojen muokkaamiselle. Vastaajan sivulle haetaan vastattava kysely tietokannasta.

Navigointisivu

Kuvassa 4 näkyvällä Kottarainen-sovelluksen pääsivulla main.jsp on linkki kaikkiin kyselyihin, joita käyttäjä on luonut ja joihin käyttäjä voi vastata.

Kuva 4 : Käyttöliittymänäkymä aloitussivusta.

Kyselyn rakennesivu

Rakennesivulla index.jsp esitetään kyselyn eri kysymysryhmät sekä linkit, joiden avulla ryhmiä pääsee muokkaamaan. Tällä sivulla voi myös luoda uuden kysymysryhmän ja siirtyä muokkaamaan tai lisäämään siihen kysymyksiä. Rakennesivun käyttöliittymä on esitetty kuvassa 5.

Kuva 5 : Rakennenäkymä.

Kyselyn metatietojen asettamissivu

Metatietojen asettamissivulla questionnairehandler.jsp (katso kuva 6) annetaan kyselyä koskevia metatietoja, joiden avulla kyselyjä hallitaan ja kenties myöhemmin lajitellaan. Metatiedot ovat erityisen tärkeitä uudelleenkäytön kannalta, johon myöhemmin toteutettava kysymyspankki antaa mahdollisuuden.

Kuva 6: Kyselyn metatietojen asetussivu.

Kysymysryhmän metatietojen asettamissivu

Kysymysryhmän metatietojen asettamissivulla questiongrouphandler.jsp annetaan kysymysryhmiä koskevia metatietoja, joiden tavoitteena on parantaa uudelleenkäytettävyyttä. Sivu on esitelty kuvassa 7.

Kuva 7: Kysymysryhmän metatietojen asettamissivu.

Kysymysten lisäys- ja muokkaussivu

Kyselyn luontityökalun toiminnallisin ja olennaisin osio on sivulla questionasgrouphandler.jsp. Kuvassa 8 näkyvällä sivulla muokataan yhden kysymysryhmän kysymyksiä kerralla. Käyttäjä voi lisätä kysymyksiä sekä valita niiden tyypin lisäksi kysymysmatriisien tapauksessa rivien ja sarakkeiden lukumäärän. Jokaiselle kysymykselle voi myös asettaa vastaajalle näkyvän oletusarvon.

Kaikissa kysymystyypeissä on pyritty johdonmukaisuuteen siten, että myös tekstikentistä ja -alueista kysytään rivien ja sarakkeiden lukumäärää. Näin esimerkiksi 3x3-tekstialuematriisin teko on todella helppoa. Tavoitteena tähän ratkaisuun päädyttäessä on ollut, että lyhyellä kokemuksellakin on helppo omaksua erilaisten kysymystyyppien luominen kaikkien käyttäytyessä samalla tavalla. Kysymystyypit ja niiden ulkoasu käyvät ilmi kuvasta 9.

Myöhemmin tälle sivulle toteutetaan myös uusi, laajennettu, näkymä, joka on tarkoitettu kokeneemmille Kottarainen-sovelluksen käyttäjille. Laajennettu näkymä tullee tarjoamaan runsaasti pieniä valintoja, joiden avulla kyselyä voi muokata mieleisekseen.

Kuva 8: Kysymyksien muokkaaminen.

Kyselyyn vastaamisen sivu

Kyselyyn vastaamisen sivu resultHandler.jsp luodaan hakemalla halutun kyselyn id-numerolla kysely sessiomuistiin ja pyytämällä siltä tulostus vastaamista varten. Tämän jälkeen tulostetaan vastaussivu ja hävitetään oliorakenne muistia kuormittamasta. Kun käyttäjä on vastannut kyselyyn ja painaa Lähetä-painiketta, hänet ohjataan luvun 6.8 kiitossivulle.

Kuva 9: Kuva kyselyn vastaamissivusta.

6.8 Kyselyyn vastaamisen kiitossivu

Kuittaussivulle tullaan, kun kyselyn vastaus on lähetetty ja sille tulostuu teksti Kiitos vastauksestasi . Käytännössä resultReady.jsp-sivulla myös tallennetaan kyselyn vastaukset tietokantaan SaveAnswer-pavun avulla.

Jatkokehityksessä kiitossivun viesti poimitaan kyselyn pakolliseksi metatiedoksi. Tiedot kyselyn tarkoituksesta ja tekijästä sekä kiitosviesti tulostuvat vastaajan näkyviin vastauksen tallennuttua, jolloin kyselyyn vastaajalle jää selvä kuva siitä, että tiedot on otettu vastaan ja ne tullaan käsittelemään asiallisesti.

7 Java-pavut

Kottarainen-projektin toteuttamat pavut on jaettavissa neljään luokkaan: HTML-pavut, tietokantatauluja vastaavat pavut, yleiskäyttöiset käsittelijäpavut sekä vastauksen tallentamisen hoitava papu. Papujen suhde toisiinsa, htmt-ja sqlt-tiedostoihin sekä JSP-sivuihin ja tietokantaan on esitetty kuvassa 10.

Kuva 10: Java-papujen suhteet toisiinsa.

7.1 HTML-pavut

HTML-pavut HtmlQuestionnaire, HtmlQuestiongroup ja HtmlQuestionasgroup on peritty vastaavannimisistä pavuista Questionnaire, Questiongroup ja Questionasgroup. Tarkoituksena on, että alkuperäiset pavut ovat paremmin uudelleenkäytettäviä, kun HTML-koodin muodostukseen liittyvät metodit on kirjoitettu perittyihin papuihin.

7.1.1 HtmlQuestionnaire.java

Papu hoitaa kyselytason HTML-tulostukset. Sen kautta määritellään eri tulostustilat, jotka sitten välitetään myös alemmille pavuille. Eri tiloja voivat olla esimerkiksi kyselyn laatimistila ja vastaamistila.

7.1.2 HtmlQuestiongroup.java

Luokka huolehtii kysymysryhmien tulostamisesta. Se kysyy Questionasgroup-luokalta, miten ne tulostetaan ja muotoilee tulokset otsikkotietojen ja tilan mukaisesti halutun kaltaiseksi.

7.1.3 HtmlQuestionasgroup.java

Luokka hoitaa eri kysymysten tulostuksen. Tulostettava yksikkö on siis kysymysmatriisi, joka voi pitää sisällään yhden tai useita samantyyppisiä kysymyksiä. Luokka kysyy Questionilta ja edelleen Questionfieldiltä, miten ne tulee tulostaa ja muotoilee saamansa tiedon perusteella sen hetkisen tilan mukaisen tulosteen.

7.2 Tietokantatauluja vastaavat pavut

Tietokantatauluja vastaavat pavut muodostavat varsinaisen oliorakenteen Kottarainen-sovelluksessa. Luvuissa 7.2.1-7.3.3 esitetyt java-pavut sisältävät kukin alemmista olioista koostuvan taulukon. Tätä hierarkiaa kuvataan tarkemmin kuvassa 11.

Kyselyn luomisen ja kyselylomakkeen tulostamisen aikana luodaan parhaimmillaan kuvan 11 esittämä rakenne Questionnaire-luokasta Questionfield-luokkaan. Vastausten tallentamisessa on resurssien säästämiseksi kuitenkin luotu uusi luokka SaveAnswer. Tämä toimii säiliönä Questionfield-olioille, joilla taas on omistuksessaan Questionresult-olioita. Questionresulttien avulla varsinaiset vastaukset tallentuvat tietokantaan. Tämän avulla koko raskasta hierarkiaa ei tarvitse luoda vastauksien saattamiseksi tietokantaan.

Kaikki pavut osaavat lukea itseensä liittyvät tiedot tietokannasta ja tallentaa ne sinne. Alaisilla tarkoitetaan tästä eteenpäin olion subElements-vektorissaan säilyttämiä olioita. Jos pavulla on alaisia, sillä on myös alaisten käsittelyyn sopivia metodeja, kuten lisääminen ja poistaminen. Tällaiset pavut osaavat myös käskeä alaisiaan suorittamaan eri toimintoja, kuten tietokannasta lukemisen ja tallennuksen.

Kuva 11: Papujen hierarkia Kottarainen-sovelluksessa.

7.2.1 Questionnaire.java

Luokka pitää sisällään tietokannan questionnaire-taulua vastaavat tiedot. Sillä on tallessa kaikki siihen liittyvät metatiedot ja alaiset. Niiden avulla se hoitaa kaikki kyselyn hallintaan liittyvät toiminnot.

Alla on esitelty luokan olennaisimmat metodit. Asteriskilla (*) merkityt metodit löytyvät myös Questiongroupista, siitä peritystä Questionasgroupista, Questionista sekä Questionfieldistä.

*addMetaElements lisää parametrina viedyn määrän metatietoelementtejä metaElements-vektoriin.

*addSubElements lisää parametrina viedyn määrän alaisia ja lisää ne subElements-nimiseen vektoriin.

buildQuestionnaireId hakee tietokannasta ensimmäisen vapaan id-numeron ja asettaa sen olion arvoksi.

*createSubId rakentaa tunnisteen, jonka avulla eri oliot yksilöidään WWW-sivuilla.

Empty tyhjentää vektorit ja alustaa olion.

*getMetaElementsFromdb hakee metatietotyypit tietokannasta ja luo jokaisesta ilmentymän.

getState palauttaa olion tilan, jonka avulla päätellään tulostusmuoto ja eräiden metodien lukitseminen.

*getSubElementsFromDb hakee alaiset tietokannasta ja lisää ne subElements-vektoriin.

*getValuesFromDb hakee arvot tietokannasta.

*update päivittää olion tiedot lukemalla Internet-selaimen lähettämien muuttujien arvot Requestista.

updateSubElements käskee alaisia päivittämään itsensä.

7.2.2 Questiongroup.java

Questiongroup-luokka toimii Questionnaire-luokan alaisuudessa ja sen alaisia ovat Questionasgroupit. Attribuutti parentid on aina nolla. Se ilmaisee tietokannassa eron Questiongroupien ja Questionasgroupien välillä. Attribuutin parentid ollessa nolla tietokannassa questiongroup-taulussa oleva Questiongroup kuuluu aina Questionnairelle. Tärkeimmät metodit ovat seuraavat:

getMetaElementsFromdb hakee metatietotyypit tietokannasta ja luo jokaisesta ilmentymän.

getSubElementsFromDb hakee alaiset tietokannasta ja lisää ne subElements-nimiseen vektoriin.

setPointerDeleted poistaa ryhmän viittauksen viitetaulusta.

7.2.3 Questionasgroup.java

Questionasgroup-papu on ilmentymä samasta tietokannan taulusta kuin Questiongroupkin. Erona on se, että Questiongroup kuuluu kyselyn, eli Questionnairen alaisuuteen, kun taas Questionasgroup on jonkin ryhmän alaryhmä. Tällöin siis sen parentid-attribuutti viittaa toiseen saman taulun ilmentymään, Questiongroupiin. Tämän pavun avulla saadaan toteutettua esimerkiksi radioryhmät kysymysryhmien sisälle.

7.2.4 Question.java

Question-papu ilmentää yksittäistä kysymystä, johon voi liittyä yksi tai useampia syöttökenttiä. Question-papua vastaa tietokannassa taulu question. Esimerkiksi radioryhmässä Question-pavun ilmentymä on yksi rivi, joka pitää sisällään kysymyksen ja yhden tai useampia Questionfieldejä (kenttien ilmentymiä).

7.2.5 Questionfield.java

Questionfield-papu ilmentää HTML-lomakkeella olevaa yksittäistä ohjainta, joita voivat olla tekstikenttä, tekstialue, valintaruutu, radiopainike tai valintalistan alkio. Yhtä kysymystä kohti voi olla rajoittamaton määrä Questionfieldejä. Tietokannan taulu Questionfieldeille on nimeltään questionfield.

7.2.6 Questionresult.java

Questionresult-pavun ilmentymä pitää tallessa yhteen Questionfield-olioon käyttäjältä saadun vastauksen. Periaatteessa jokaista Questionfieldiä vastaa siten yksi Questionresult yhtä kyselyyn vastaajaa kohden.

Jos Questionfieldille ei saada arvoa JSP-sivulta, Questionresult-oliota ei tallenneta tietokantaan ollenkaan. Näin esimerkiksi radioryhmän tapauksessa säästetään tietokannan resursseja, kun tallennetaan questionresult -tauluun vain sen Questionfieldin tila, joka on valittuna.

7.3 Muut pavut

Muut pavut hoitavat joko todella yleisiä tehtäviä tai erittäin tarkasti määriteltyjä erikoistehtäviä. TemplateHandler - ja DBHandler-papuja käytetään lähes jokaisessa muussa luokassa, kun taas SaveAnswer on vastausten tallennuksen nopeuttamiseksi luotu erikoisratkaisu.

7.3.1 TemplateHandler.java

TemplateHandler-papu käsittelee sille parametreinä annettujen tietojen perusteella jotakin tiedostopohjaa ja lisää muuttujissa olevan tiedon tekstimuodossa pohjaan. Tarkemmin kyseisen pavun toiminnasta on kerrottu TemplateHandlerin käyttöohjeessa. Alla on kuvattu tärkein metodi:

completeTemplate täydentää tiedostopohjan sille tuodun taulukon alkioilla.

7.3.2 DBHandler.java

DBHandler-papu hoitaa tietokantayhteyksien muodostamiseen liittyvät rutiinitoimenpiteet. Alla on esitelty tärkeimmät metodit:

bringFromDatabase hakee dataa tietokannasta annetuilla hakuehdoilla. Metodista on myös ylikuormitettu versio, joka käyttää parametrina tuotua tietokantayhteyttä.

insertIntoDatabase lisää dataa tietokantaan annetuilla parametreillä. Metodista on myös ylikuormitettu versio, joka käyttää parametrina tuotua tietokantayhteyttä.

7.3.3 SaveAnswer.java

SaveAnswer.java on Question -pavusta peritty papu. Se mahdollistaa kyselyn vastauksien tallentamisen ilman, että koko oliorakennetta tarvitsee luoda uudestaan.

Papu saa parametrina JSP-sivulta haluttujen Questionfieldien id-numerot taulukossa. Tämän taulukon mukaan sitten käydään Questionfieldit läpi ja tallennetaan niiden vastaukset Questionresult-papua hyödyntäen. SaveAnswer-papu nopeuttaa merkittävästi vastausten tietokantaan tallentamista.

8 Testaaminen

Projektiryhmä ei ehtinyt toteuttaa riittävää testausta projektin puitteissa. Testausta tehtiin kuitenkin koko ajan sovellusta luotaessa niin, että jokainen sovelluksen komponentti oli toimiva ennen yhdistämistä muihin osiin. Sovelluksen osien valmistuttua ne yhdistettiin yksi kerrallaan isommaksi kokonaisuudeksi. Tällöin pyrittiin löytämään kaikki mahdolliset ongelmakohdat sovelluksessa ja testaamaan sekä korjaamaan toiminta.

Kottarainen-projektille tärkein toteutettava osa sovelluksesta oli helppokäyttöinen kyselynlaadintaosio, joten käyttöliittymän prototyyppiä kehitettiin yhdessä tilaajien ja tulevien käyttäjien kanssa. Käytännössä sovellus on kuitenkin niin keskeneräinen, että käyttöliittymään tulee vielä paljon muutoksia jatkokehityksen aikana. Joitakin toiminnallisiakin virheitä löytyi ulkopuolisten testaajien avulla. Testausta on vielä jatkettava komponenttien yhteentoimivuuden varmistamiseksi.

Testaukseen osallistuivat ryhmän jäsenten lisäksi jonkin verran tilaajien edustajat sekä ohjaajat. Testausapuna olivat myös Petri Heinonen ja Tommi Lahtonen Jyväskylän yliopistolta sekä Tiina Pöyhösen opiskelijaystävä Mirva Paavola. Näin saatiin tuoreita mielipiteitä käyttöliittymään ja havaittiin joitakin ongelmakohtia, joita sovelluksen kehittämiseen osallistuneet eivät olleet havainneet. Testauksen aikana havaittiin lisäksi, että jatkokehityksessä on paneuduttava entistä enemmän luontityökalun helppokäyttöisyyden lisäämiseen, sillä jotkin testaajat pitivät käyttöliittymää aivan liian hankalana ensimmäisellä käyttökerralla. Testauksessa havaittuja virheitä on kuvattu luvussa 9.

9 Virheet, puutteet ja jatkokehitysideat

Luvussa kuvataan jatkokehitykseen jääneitä ominaisuuksia ja jatkokehityssuunnitelmaa. Jatkokehityksen ensimmäiseksi tehtäväksi jäi ohjelman tarkempi testaaminen sekä löytyneiden virheiden korjaaminen. Tämän lisäksi toteutetaan vaatimuksien mukaisia ominaisuuksia, jotka jäivät projektin puitteissa toteuttamatta.

9.1 Luontityökalun toimintojen viimeistely

Seuraavissa luvuissa on selitetty tarkemmin eri luomisen vaiheisiin liittyviä jatkokehityksen asioita. Kaikkien tässä luvussa mainittujen osioiden jatkokehityksen tehtävänä on näiden lisäksi mahdollisten virheiden etsiminen ja niiden korjaaminen.

9.1.1 Tietojen välittämisrakenne

Tärkein jatkokehitykseen jäävä luontityökalun ominaisuus liittyy tietojen välittämiseen WWW-sivulta toiselle siirryttäessä. Tällä hetkellä luontityökalussa pohjaudutaan aivan liiaksi sessiossa säilytettävään oliorakenteeseen, joka rasittaa järjestelmää huomattavasti. Session koko on saatava pienemmäksi, jotta luontityökalun käyttäminen Korppi-järjestelmässä on mahdollista. Session sijaan tietoa tulee välittää esimerkiksi URI-osoitteessa ja piilokentissä sekä tiedot on tallennettava tietokantaan mahdollisimman usein.

Kaikilta kyselyn luomisen sivuilta tulee olla mahdollisuus päästä esikatselemaan luotavaa kyselyä. Lisäksi kaikille sivuille tulee lisätä selkeät ohjeet helposti saataville.

9.1.2 Kyselyn luominen ja muokkaaminen

Luomistyökalun kyselyn muokkausosasta puuttuvia ominaisuuksia ovat WWW-osoitteiden lisääminen, kyselyn voimassaoloajan huomioonottaminen, yksilöivän nimen antaminen sekä muut niin sanotut lisäominaisuudet (katso Vaatimusmäärittelyn luku 4.4). Myös metatietojen lisäämisen käyttöliittymä jäi osittain jatkokehityksen tehtäväksi, kyselyyn ja kysymysryhmään liittyviä metatietoja lukuunottamatta. Näiden metatietojen antamista on kuvattu luvuissa 6.4 ja 6.5.

Käyttäjäryhmien ja käyttöoikeuksin liittäminen kyselyyn vastaamisoikeuksien ja kyselyn muokkausoikeuksien suhteen jää täysin jatkokehittäjien harteille. Lisäksi käyttäjäoikeuksien hallinnasta tulisi laatia kattava dokumentti myöhemmille jatkokehittäjille. Kyselyt tulee voida myös liittää tiettyyn kurssiin tai ryhmään ihmisiä, jolloin kyseisen kurssin kotisivuilta tulee olla linkki kyselyyn. Tällöin kurssille ilmoittautuneille ihmisille tulee antaa automaattisesti vastaamisoikeus kyselyyn.

Kyselyyn liitettävien lisätietojen syöttämisen suhteen on tehtävä tarkistuksia, jotta kaikki oleelliset tiedot tulee annettua. Kyselyn laatijaa on huomautettava, mikäli jokin tieto on pakko täyttää.

Kyselyn laatijan on lisäksi tulevaisuudessa saatava määrittää kyselylle tyylitiedosto, joka määrää kyselyn ulkoasun vastausvaiheessa. Oletuksena kysely käyttää Korppi-järjestelmän tyylitiedostoa. Kyselyn laatijan on myös saatava päättää, näkyykö Korpin navigaatioalue vastaamissivun yläreunassa.

9.1.3 Kysymysryhmien luominen ja muokkaaminen

Kysymysryhmän luominen tulee tapahtua "wizardimaisesti" eli askel kerrallaan niin, että käyttäjän tulee syöttää ryhmälle nimi ja välttämättömät lisätiedot ennen kuin ryhmä tulee näkyviin kyselyn rakennesivulle (katso kuva 5 luvussa 6.3).

Muita puuttuvia ominaisuuksia ovat ryhmien järjestyksen vaihtaminen, metatietojen lisäämisen käyttöliittymä (osittain) sekä esikatselu pelkästään juuri muokattavan kysymysryhmän kysymyksistä.

Kysymysryhmien poistaminen tulee tapahtua ryhmän kysymysten muokkaussivulta nykyisen rakennesivulta tapahtuvan poistamisen sijaan. Lisäksi poistamiseen tulee lisätä vahvistuksen pyytäminen käyttäjältä.

Toivottava ominaisuus on lisäksi mahdollisuus siirtyä yhden ryhmän tietojen muokkaamisesta suoraan seuraavan ryhmän tietojen muokkaamiseen ilman, että käyttäjän tarvitsee käydä välillä kyselyn rakennesivulla.

9.1.4 Kysymysten luominen ja muokkaaminen

Kysymysten luomisesta ja lisäämisestä puuttuu vielä kysymyksiin liittyvien metatietojen syöttöominaisuus, joka on alustavasti suunniteltu toteutettavaksi välilehtityylisellä ratkaisulla.

Käyttäjän tulee voida jatkossa vaihtaa kysymyksien järjestystä. Lisäksi kysymyksille täytyy lisätä myös poistomahdollisuus.

Toivottava ominaisuus on lisäksi mahdollisuus siirtyä yhden ryhmän kysymyksien muokkaamisesta suoraan seuraavan ryhmän kysymysten muokkaamiseen ilman, että käyttäjän tarvitsee käydä välillä kyselyn rakennesivulla valitsemassa toinen ryhmä.

9.2 Kysymyspankki

Kysymyspankin toteuttaminen jää kokonaan jatkokehitykseen. Kyselynlaadintaoikeudet omaavan henkilön tulee nähdä ja saada käyttää kaikkia laatimiaan kyselyitä sekä kaikkia muitakin kyselyitä, joiden käyttämiseen ja muokkaamiseen hänen oikeutensa riittävät. Käyttöoikeusryhmiä ei ole vielä määritelty.

Kaikilla Korppi-järjestelmän käyttäjillä, joilla on oikeus laatia kyselyitä, tulee olla myös oikeus ottaa kohteita kysymyspankista ja tallentaa tekemänsä kohteet sinne. Mikäli kysymyspankkiin julkaisemista päädytään rajoittamaan, on kaikki kysymyspankkiin siirrettävät kohteet hyväksytettävä sovitulla taholla. Tätä toimintamallia puoltaisi se, että näin toimimalla kysymyspankin sisältö saataisiin pysymään korkealaatuisena ja hyvin jäsenneltynä.

Kysymykset, kysymysryhmät ja kysymyssarjat tulee tallentaa kysymyspankkiin niin, että niissä säilyy tiettyjä metatietoja. Näitä ovat mm. laatija, luontipäivämäärä ja
-tarkoitus sekä kurssikyselyiden tapauksessa kurssin nimi.

Kohteita tulee voida hakea kysymyspankista kysymyksessä olevan sanan tai laatijan, päivämäärän sekä muiden kohteeseen liittyvien metatietojen perusteella. Jos kysymys on liitetty nimenomaan kurssikyselyyn, täytyy se voida hakea myös kurssin nimen perusteella.

Laatijan tulee voida halutessaan julkaista kysymyspankkiin tallentamansa kohteet, jolloin kaikki muutkin kyselyiden laatimiseen oikeutetut käyttäjät saavat ne näkyviinsä. Tällöin laatija kuitenkin antaa muille käyttäjille oikeudet kohteiden vapaaseen hyödyntämiseen. Pankkiin julkaistuja kohteita ei saa pystyä muokkaamaan, vaan muokkaamisen tulee luoda kohteesta uusi ilmentymä.

9.3 Kyselyyn vastaamisen viimeistely

Kyselyyn vastaaminen saatiin toteutettua projektin puitteissa hyvin, mutta pientä hienosäätöä jäi vielä jatkokehityksen puolelle. Luvussa on esitelty kyseisiä parannusideoita.

9.3.1 Kyselyn esittämissivun jatkokehitys

Kyselyn esittämissivun ( resultHandler.jsp) tulee jatkossa käyttää käyttäjän antaman tyylitiedoston määrityksiä. Lisäksi kyselystä tulee voida muodostaa tulostettava versio.

Korppi-järjestelmän navigaatioalueen näkyminen vastaamisen yhteydessä tulee olla kyselyn laatijan valittavissa. Navigaatioalueen tulisi tulla näkyviin vain, kun kysely on selkeästi kurssiin liittyvä. Muutoin navigaatiopalkki saattaa hämätä vastaajia.

9.3.2 Kyselyn kiitossivun jatkokehitys

Tulevaisuudessa laatija saa kyselyä luodessaan määrätä kiitostekstin, joka tulostuu resultReady.jsp-sivulle. Sivua tulee muuttaa siten, että sille voidaan tuoda kyseinen teksti sekä lisätä tiettyjen pakollisten metatietojen tulostuminen. Tällaisia metatietoja ovat esimerkiksi laatijan nimi, laatimisajankohta sekä kyselyn tarkoitus.

Koska vastaukset tallentuvat tietokantaan varsinaisesti vasta resultReady.jsp-sivulla, tulee sen toimintaa testata huolellisesti, ettei vastauksia muokatessa ole millään tavalla mahdollista muokata myös itse kyselyä.

9.4 Vastausten ja tulosten raportointi

Kottarainen-projekti ei ehtinyt toteuttaa minkäänlaista tarkastelumuotoa kyselyiden vastauksille. Jatkokehityksen ensimmäinen tehtävä onkin tuottaa tietokantaan tallennetuista vastauksista raportteja. Alustavasti riittäisi pystyä tarkastelemaan yhden ihmisen vastauksia kerrallaan vastaamisnäkymässä. Tämän jälkeen kaikkien ihmisten vastaukset tulee koostaa yhteen. Kyselyn laatijalla tulee myös olla mahdollisuus kommentoida ja ryhmitellä saatuja vastauksia.

Lisäksi tulokset on saatava ulos CSV-muodossa (Comma Separated Values), jotta tieto on siirrettävissä muille analysointisovelluksille. Kaikki analysointiin liittyvä tiedonkäsittely päätettiin jo projektin puolivälissä jättää tuleville projektiryhmille.

Tarkemmat raportteja sekä tulosten muodostamista koskevat vaatimukset käyvät ilmi Vaatimusmäärittelystä.

9.5 Ohjeet

Luontityökalu vaatii kattavat ja selkeät ohjeet, joiden laatiminen jää jatkokehitykseen. Ohjeissa tulee olla etenkin kysymysten lisäämistä koskien selkeitä kuvia ja selityksiä erilaisten kysymystyyppien ulkoasusta. Ohjeisiin tulee päästä kaikilta sivuilta ja mieluiten linkistä suoraan esimerkiksi kysymystyypin otsikkoa klikkaamalla (katso kuva 8 luvusta 6.6).

9.6 Kehitysideoita

Sovelluksen testausvaiheessa puhuttiin siitä, että kysymysten lisäämisessä tulisi olla mahdollisuus yksi kerrallaan lisäämiseen. Tämä parantaisi luontityökalun käytettävyyttä ja ymmärrettävyyttä. Tarkemmin sanoen yksi kysymys luotaisiin kerrallaan valmiiksi ja sitten vasta lisättäisiin seuraava.

Sovellusta kehityksen aikana testanneet ihmiset pitivät kysymysten lisäämisen nykyistä käyttöliittymää hankalana, koska kysymyksiä voi kerrallaan lisätä useamman kuin yhden. Toisaalta tilaajat puolestaan toivoivat näkevänsä kokonaisuuden, joten usean kysymyksen luominen yhdellä kertaa säilyy tulevaisuudessakin ainakin rinnakkaisena vaihtoehtona.

10 Yhteenveto

Kottarainen-projektiryhmä toteutti prototyypin WWW-pohjaiselle tiedon keräämiseen ja hallintaan tarkoitetulle sovellukselle. Sovellus koostuu kahdesta osasta: kyselyiden luominen ja kyselyyn vastaaminen sekä tiedon hallinta. Tulosten esityksen toteuttaminen päätettiin projektin kuluessa siirtää omaksi jatkoprojektikseen. Vastausten selailu puolestaan siirrettiin jatkokehityksen puolelle projektin loppuvaiheessa.

Sovelluksen prototyyppi myöhästyi suunnitellusta aikataulustaan neljä viikkoa, eikä täyttänyt läheskään kaikkia sille alunperin asetettuja vaatimuksia. Jatkokehitykseen jäivät vastausten ja tulosten raportointi, monia käyttöliittymään liittyviä asioita, sovelluksen nopeuden optimointi ja perinpohjainen testaaminen. Valmiilla sovelluksella pystyy kuitenkin laatimaan kyselyitä ja vastaamaan niihin, mikä oli ensisijainen tavoite.

Suurimpia syitä myöhästymiseen olivat vaatimusten määrittelyn ja rajaamisen epäonnistuminen sekä väärä valinta sovelluksen toteutustekniikan osalta.

Toteutustekniikan osalta ryhmä ajautui väärään ratkaisuun, koska yksi ryhmän jäsenistä oli käyttänyt valittua tekniikkaa menestyksellä työelämässä. Kukaan ryhmän jäsenistä ei tiennyt sessio-muistin käyttöön perustuvan tekniikan osalta havaituista aiemmista ongelmista Korppi-järjestelmässä, joten sitä käytettiin. Ongelmalta oltaisiin vältytty, mikäli Korppi-järjestelmän ohjelmointikäytännöistä sekä yleiskäyttöisistä luokista olisi pidetty kunnon perehdytys projektin puolivälissä. Tätä ei kuitenkaan osattu pyytää, joten ryhmä oli yksittäisen ja suppeahkon Korpin koodausohjeen varassa.

Lähteet

Antti Auerin, Eija Ihanaisen ja Jari Rantamäen toimittamat esimerkit heidän tarpeistaan kyselyn osalta.

Hillebrand Minna, Silván Markus, Vanhanen Antti ja Ylitalo Marko, "Koppelo-projektin projektikansio", Jyväskylän yliopisto, tietotekniikan laitos, 2002.

Hilpinen Toni, Koivuniemi Marko, Mäkinen Jussi ja Nurminen Miika, "Kiuru-projektin projektikansio", Jyväskylän yliopisto, tietotekniikan laitos 2002.

Horppu Ismo, Mielityinen Markku ja Vire Markku, "Kotka-projektin projektikansio", Jyväskylän yliopisto, tietotekniikan laitos, 2000.

Hillebrand Minna, Horppu Ismo, Kuittinen Jussi, Lintunen Sampsa, Lupari Matti, Mielityinen Markku, Nurminen Miika, Pekkanen Markku, Vire Markku, "Kotka-järjestelmän tietokantaraportti", Jyväskylän yliopisto, tietotekniikan laitos, 2003.

Jaakkola Mia, Juutinen Sanna, Lupari Matti ja Nieminen Mikko, "Kolibri-projektin projektikansio", Jyväskylän yliopisto, tietotekniikan laitos, 2001.

Kujala Pauli, Lahtonen Tommi, Lappalainen Vesa ja Nurminen Miika, "Korpin koodausohje", Jyväskylän yliopisto, tietotekniikan laitos, 2003.

Kyppö Jorma ja Vesterholm Mika, "Java-ohjelmointi", Talentum Media Oy, 2001.

Lesonen Minna, Pekkanen Hannu, Tawast Tuukka ja Uuksulainen Heikki, "Korppi-projektin projektikansio", Jyväskylän yliopisto, tietotekniikan laitos, 2001.

Lintunen Sampsa, "TemplateHandler-käyttöohje" Jyväskylän yliopisto, tietotekniikan laitos, 2003.

Lintunen Sampsa, Pöyhönen Tiina, Vähä-Ruka Teemu, Ylönen Timo, "Kottarainen- projektin Vaatimusmäärittely" Jyväskylän yliopisto, tietotekniikan laitos, 2003.

Lintunen Sampsa, Pöyhönen Tiina, Vähä-Ruka Teemu, Ylönen Timo, "Kottarainen- projektin Projektisuunnitelma" Jyväskylän yliopisto, tietotekniikan laitos, 2003.

Lintunen Sampsa, Pöyhönen Tiina, Vähä-Ruka Teemu, Ylönen Timo, "Kottarainen- projektin Sovellussuunnitelma" Jyväskylän yliopisto, tietotekniikan laitos, 2003.

Lintunen Sampsa, Pöyhönen Tiina, Vähä-Ruka Teemu, Ylönen Timo, "Kottarainen- projektin Projektiraportti" Jyväskylän yliopisto, tietotekniikan laitos, 2003.

Lintunen Sampsa, Pöyhönen Tiina, Vähä-Ruka Teemu, Ylönen Timo, "Kottarainen- projektin Haastatteluraportti" Jyväskylän yliopisto, tietotekniikan laitos, 2003.

Momjian Bruce, "PostgreSQL: Introduction and Concepts", saatavilla WWW-muodossa <URL: http://www.postgresql.org/docs/aw_pgsql_book/>, 8.1.2002.

Santanen Jukka-Pekka, "Opinnäytteiden kirjoittaminen, lyhyt oppimäärä", Jyväskylän yliopisto, tietotekniikan laitos, 2000.

Santanen Jukka-Pekka, "Tietotekniikan Sovellusprojektien ohje", Jyväskylän yliopisto, tietotekniikan laitos, 2002.

Sun Microsystems, "JavaTM 2 Platform, Standard Edition, v 1.4.1 API Specification", saatavilla WWW-muodossa <URL: http://java.sun.com/j2se/1.4.1/docs/api/>, 16.9.2002.

Liitteet: Tietokantataulujen rakenne

Liite 1: question

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionid
int4
4
Yes
questiontypeid
int4
4
Yes
label
varchar
var
Yes
uri
varchar
var
No
bankgroupid
int4
4
Yes
bankuserightid
int4
4
Yes
personid
int4
4
Yes

Keyname
Unique
Primary
Field
question_pkey
Yes
Yes
questionid

Liite 2: question_parameter-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionid
int4
4
Yes
parametertypeid
int4
4
Yes
value
varchar
var
Yes

Keyname
Unique
Primary
Field
question_parameter_pkey
Yes
Yes
parametertypeid
question_parameter_pkey
Yes
Yes
questionid

Liite 3: questionbankgroup-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
bankgroupid
int4
4
Yes
name
varchar
120
Yes

Keyname
Unique
Primary
Field
question_bankvisibility_pkey
Yes
Yes
bankgroupid

Liite 4: questionbankuseright-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
bankuserightid
int4
4
Yes
name
varchar
120
Yes

Keyname
Unique
Primary
Field
question_bankuseright_pkey
Yes
Yes
bankuserightid

Liite 5: questionfield-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionfieldid
int4
4
Yes
questionid
int4
4
No
defaultvalue
varchar
var
No
weight
int2
2
No
ordernum
int2
2
Yes
1
label
varchar
var
No
genericname
varchar
var
No

Keyname
Unique
Primary
Field
questionfield_pkey
Yes
Yes
questionfieldid

Liite 6: questionfield_htmlparameter-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionfieldid
int4
4
Yes
parametertypeid
int4
4
Yes
value
varchar
var
No

Keyname
Unique
Primary
Field
questionfield_htmlparamete_pkey
Yes
Yes
parametertypeid
questionfield_htmlparamete_pkey
Yes
Yes
questionfieldid

Liite 7: questiongroup-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questiongroupid
int4
4
Yes
parentid
int4
4
No
label
varchar
var
Yes
uri
varchar
var
No
bankgroupid
int4
4
Yes
bankuserightid
int4
4
Yes
personid
int4
4
Yes

Keyname
Unique
Primary
Field
questiongroup_pkey
Yes
Yes
questiongroupid

Liite 8: questiongroup_parameter-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questiongroupid
int4
4
Yes
parametertypeid
int4
4
Yes
value
varchar
var
Yes

Keyname
Unique
Primary
Field
questiongroup_parameter_pkey
Yes
Yes
parametertypeid
questiongroup_parameter_pkey
Yes
Yes
questiongroupid

Liite 9: questiongroup_question-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questiongroupid
int4
4
Yes
questionid
int4
4
Yes
questionstatusid
int4
4
Yes
ordernum
int4
4
Yes

Keyname
Unique
Primary
Field
questiongroup_question_pkey
Yes
Yes
questiongroupid
questiongroup_question_pkey
Yes
Yes
questionid

Liite 10: questionnaire-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionnaireid
int4
4
Yes
begintime
timestamp
8
No
endtime
timestamp
8
No
bankgroupid
int4
4
Yes
bankuserightid
int4
4
Yes
personid
int4
4
Yes
uri
varchar
var
No
label
varchar
var
No

Keyname
Unique
Primary
Field
questionnaire_pkey
Yes
Yes
questionnaireid

Liite 11: questionnaire_parameter-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionnaireid
int4
4
Yes
parametertypeid
int4
4
Yes
value
varchar
var
Yes

Keyname
Unique
Primary
Field
questionnaire_parameter_pkey
Yes
Yes
parametertypeid
questionnaire_parameter_pkey
Yes
Yes
questionnaireid

Liite 12: questionnaire_questiongroup-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionnaireid
int4
4
Yes
questiongroupid
int4
4
Yes
questionstatusid
int4
4
Yes
ordernum
int4
4
Yes

Keyname
Unique
Primary
Field
questionnaire_questiongrou_pkey
Yes
Yes
questiongroupid
questionnaire_questiongrou_pkey
Yes
Yes
questionnaireid

Liite 13: questionnaire_usergroup

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionnaireid
int4
4
Yes
usergroupid
int4
4
Yes
questionnaireactionid
int4
4
Yes

Keyname
Unique
Primary
Field
questionnaire_group_pkey
Yes
Yes
questionnaireactionid
questionnaire_group_pkey
Yes
Yes
questionnaireid
questionnaire_group_pkey
Yes
Yes
usergroupid

Liite 14: questionnaireaction-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionnaireactionid
int4
4
Yes
name
varchar
120
Yes

Keyname
Unique
Primary
Field
questionnaireaction_pkey
Yes
Yes
questionnaireactionid

Liite 15: questionparametertype-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
parametertypeid
int4
4
Yes
name
varchar
120
Yes

Keyname
Unique
Primary
Field
question_parametertype_pkey
Yes
Yes
parametertypeid

Liite 16: questionresult-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionresultid
int4
4
Yes
questionfieldid
int4
4
Yes
personid
int4
4
Yes
markerid
int4
4
Yes
value
varchar
var
Yes

Keyname
Unique
Primary
Field
questionresult_pkey
Yes
Yes
questionresultid

Liite 17: questionresult_parameter-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionresultid
int4
4
Yes
parametertypeid
int4
4
Yes
value
varchar
var
Yes

Keyname
Unique
Primary
Field
questionresult_parameter_pkey
Yes
Yes
parametertypeid
questionresult_parameter_pkey
Yes
Yes
questionresultid


Liite 18: questionstatus-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questionstatusid
int4
4
Yes
name
varchar
120
Yes

Keyname
Unique
Primary
Field
questiostatus_pkey
Yes
Yes
questionstatusid

Liite 19: questiontype-taulu

Field
Type
Length
Not Null
Default
deleted
bool
1
Yes
questiontypeid
int4
4
Yes
name
varchar
120
Yes

Keyname
Unique
Primary
Field
questiontype_pkey
Yes
Yes
questiontypeid