Koskikara-projekti

Ville Laitila
Pekka Moisio
Aapo Mäkinen
Harri Pölkki

Sovellusraportti 29.1.2003

Jyväskylän yliopisto
Tietotekniikan laitos

Koskikara-projektin tietoja
Tekijät:	Ville Laitila (vimalait@cc.jyu.fi),
Pekka Moisio (pejumois@cc.jyu.fi),
Aapo Mäkinen (ajmakine@cc.jyu.fi) ja
Harri Pölkki (hepolkki@cc.jyu.fi).

Työ: Sovellusraportti tietotekniikan Sovellusprojektiin.
Tiivistelmä: Koskikara-sovellusprojektissa jatkokehitettiin Kottarainen-projektin toteuttamaa kyselyjen laatimis- ja hallintajärjestelmää. Kehitystyössä keskityttiin vastausten analysointiin, tulosten esittämiseen ja kyselypankkiin. Sovellusraportissa esitetään sovellukselle asetetut vaatimukset, niiden toteutusratkaisut sekä kyseiset käyttöliittymän sivut.
Tilaajat ja muut projektiin liittyvät henkilöt: Sovelluksen tilaajia olivat yliopiston organisaatioista avoin yliopisto edustajanaan Eija Ihanainen, hallinto edustajanaan Mauno Väisänen, opetuksen laadun kehittämishanke OPLAA! edustajanaan Jari Rantamäki sekä virtuaaliyliopisto, jota edusti Antti Auer. Laitoksen vastaavana ohjaajana toimi Jukka-Pekka Santanen sekä teknisinä ohjaajina toimivat Teemu Vähä-Ruka ja Vesa Lappalainen.
Yhteystiedot: Projektiorganisaation sähköpostilistan arkisto on nähtävissä osoitteessa http://korppi.jyu.fi/list-archive/koskikara/index.html. Kotisivu löytyy osoitteesta http://kotka.it.jyu.fi/koskikara/.
Avainsanat: Kysely, kyselyiden hallinta, vastausten analysointi, tulosten esittäminen, raportointi, kyselypankki, WWW-sovellus, Korppi-järjestelmä.

Versionhallinta
Versio	Päiväys	Tehnyt	Muutokset	
0.1	20.11.	Pekka Moisio	Dokumentin luonti.	
0.2	21.11.	Pekka Moisio	Johdanto, termistön luonti ja alustava rakenne.	
0.3	8.12.	Pekka Moisio	Tietokantataulut.	
0.4	10.12.	Pekka Moisio	Testaus. Jatkokehitysideoita.	
0.5	15.12.	Pekka Moisio	Kuvien lisäys dokumenttiin.	
0.6	27.12.	Pekka Moisio	Lukujärjestys uusiksi.	
0.7	29.12.	Pekka Moisio	Yhteenveto, liitteet ja yleinen virheiden korjaus.	
0.8	30.12.	Pekka Moisio	Dokumenttien yhtenäistäminen. 	
0.9	7.1.	Pekka Moisio	Tietokantarakenteen kuva.	
0,91	8.1.	Pekka Moisio	Santasen korjausten toteutus.	
0,98	12.1.	Pekka Moisio	Santasen korjausten toteutus.	
0.99	22.1	Harri Pölkki	Sisältöä täydennetty, oikoluku tehty.	
0.991	26.1	Harri Pölkki	Tarkastettu sekä lisätty parempia kuvia.	
1.0	28.1	Harri Pölkki	Lopullinen tarkastus.	
1.1	29.1	Ville Laitila	Lisätty luokkakaavio ja korjattu ulkoasua.	

Sisällysluettelo
1	Johdanto
2	Termejä
3	Asetettujen tavoitteiden toteutuminen
3.1	Kohteiden hakeminen hakutyökalun avulla
3.2	Kyselyiden koostaminen kyselypankin kohteista
3.3	Kyselyiden vastausten analysointi
3.4	Tulosten raportointi
4	Toteutustekniikat ja -työkalut
4.1	JSP-tekniikka
4.2	Java-pavut
4.3	Palvelinohjelmistot
5	Tietokanta
5.1	Koskikara-sovelluksen tiedostoratkaisut
5.2	Tietokannan ER-kaavio
5.3	Tietoa varastoivat taulut
6	Sovelluksen rakenne
6.1	JSP-sivut
6.2	Analysointiin liittyvät Java-tiedostot
6.3	Hakutuloksiin ja kyselyiden koostamiseen liittyvät sekä muut Java-tiedostot
7	Käyttöliittymien sivut
7.1	Sivujen yleinen rakenne
7.2	Aloitussivu
7.3	Kyselyiden yksinkertainen hakusivu
7.4	Kyselyiden monipuolinen hakusivu
7.5	Hakutulosten esittäminen
7.6	Hakutyökalun esikatselusivu
7.7	Kyselyn raporttien ja mallien valintasivu
7.8	Kyselyn analysointisivu
7.9	Raporttisivu
8	Testaus ja tulokset
8.1	Testausympäristö
8.2	Testausperiaatteet
8.3	Testitulokset
9	Puutteet ja jatkokehitysideat
10	Yhteenveto
Lähteet
Liitteet
Liite 1. Tietokantataulujen rakenne
questionnaireanalyzemodel
questiongrouppresentation
questionpresentation
Liite 2. Sovelluksen luokkakaavio

1	Johdanto
Koskikara-niminen tietotekniikan Sovellusprojekti jatkokehitti Korppi-järjestelmään WWW-pohjaista kyselyjen haku- ja analysointisovellusta Jyväskylän yliopiston käyttöön. Projektin puitteissa toteutettuja osia ovat kyselyiden haku kyselypankista sekä vastausten analysointi ja tulosten raportointi. 
Järjestelmään ovat aiemmin toteuttaneet sovelluksia Kotka-, Korppi-, Halko-,
Kolibri-, Koppelo-, Kiuru- ja Kottarainen-projektit. Niitä on edelleen jatkokehitetty Jyväskylän yliopiston tietotekniikan laitoksella.
Kyselysovellus on yksi Korppi-nimisen opetustietojärjestelmän moduuleista. Koskikara-projekti hyödynsi työssään aiemmin toteutetun Kottarainen-projektin käyttämiä työkaluja ja toteuttaman sovelluksen tietorakenteita.
Dokumentissa kuvataan Koskikara-projektin osalta kyselysovellukselle asetettujen tavoitteiden sekä toimintojen ja ominaisuuksien toteutuminen. Lisäksi dokumentissa on kuvattu sovelluksen toteutunut käyttöliittymä. Dokumentissa kuvataan myös Koskikara-projektin tekemiä ratkaisuja tiedostokäytänteiden ja tietokannan suhteen sekä JSP-sivujen ja Java-papujen tehtävät ja tärkeimmät toiminnot.
Projektissa laadittiin myös muita dokumentteja. Projektiraportissa kuvataan projektin toteutunut ja suunniteltu läpivienti. Vaatimusmäärittelyssä ja sovellussuunnitelmassa kuvataan sovellukselle asetetut vaatimukset ja sovelluksen suunniteltu toteutus. 
Luvussa 2 esitellään aiheeseen liittyviä käsitteitä. Luvussa 3 kuvataan projektissa sovellukseen toteutettuja ominaisuuksia. Luku 4 esittelee käytössä olleet toteutustekniikat ja -työkalut. Luku 5 kuvaa sovelluksen tietokantarakennetta. Luvussa 6 kuvataan sovelluksen rakennetta. Luvussa 7 esitellään käyttöliittymän WWW-sivut. Kahdeksannessa luvussa on käsitelty sovelluksen testausta ja sen tuloksia. Luvussa 9 on kirjattu virheitä, puutteita ja jatkokehitysideoita. 
2	Termejä 

Luvussa on kuvattu Koskikara-projektissa käytettävää termistöä. Koskikara-projektin aiheeseen ja Korppi-järjestelmään liittyviä termejä ovat seuraavat: 
Analysointi	on vastausten oleellisten havaintojen tiivistämistä pienemmäksi tulosjoukoksi.
Benchmarking 	on arviointitapa, jossa useampi organisaatio suorittaa matriisimuotoisen laadunarviointikyselyn ja vertailee saamiaan tuloksia keskenään.
Keskiarvo	on havaintojen summa jaettuna havaintojen lukumäärällä.
Keskihajonta	kuvaa havaintoarvojen keskimääräistä etäisyyttä keskiarvosta.
Kohde	tarkoittaa kysymystä, kysymysryhmää tai kyselyä.
Korppi	on Jyväskylän yliopistossa kehitetty opintotietojä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ä.
Kyselypankki 	varastoi kyselyt julkisuusasteen mukaan kyselyjen analysointia ja uusien kyselyiden luontia varten.
Kyselytulokset	ovat yksittäisen kyselyn tuottamaa dataa, johon luetaan vastaukset ja raportit.
Kysymysryhmä	käsittää yhden tai useampia loogisesti tai visuaalisesti samaan aihepiiriin liittyviä kysymyksiä.
Kysymystyyppi	luokittelee kysymykset kyselyn luontivaiheessa kysymyksen esitysmuodon mukaan.
Maksimi	on havaintoaineiston suurin arvo.
Mediaani	on suuruusjärjestykseen asetettujen havaintoarvojen keskimmäinen arvo tai kaksi keskimmäistä, mikäli havaintoja on parillinen määrä.
Metatieto	on kohteisiin liitettävää tarkoitusta, käyttömuotoa 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.
Minimi		on havaintoaineiston pienin arvo.
Moodi		on havaintoaineiston todennäköisin arvo.
Raportti	on vastauksia analysoimalla saatu tulosjoukko, johon sisältyy tekstiä ja graafeja.
Vastattava kysely	on kysely, jonka voimassaoloaika ei ole vielä ohi. 
Vastaustyyppi	luokittelee kysymykset kyselyn analysointivaiheessa. Yleensä kysymystyyppi kiinnittää vastaustyypin.

Projektin toteutusympäristöön sekä käytettäviin työkaluihin ja tekniikoihin liittyviä termejä ovat seuraavat:
Bugzilla	on WWW-pohjainen monipuolinen virheiden korjausten hallintajärjestelmä.
CSS	eli Cascading Style Sheets on WWW-sivujen ulkoasua kuvaava kieli.
CSV	(Comma Separated Values) on tiedon esitysmuoto, jossa eri muuttujien arvot erotetaan toisistaan pilkulla. 
CVS	(Concurrent Version System) on ohjelmistokehityksessä käytettävä versionhallintajärjestelmä.
Eväste	(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.
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.
JBuilder	on ohjelmistonkehitystyökalu mm. Java- ja JSP-ohjelmointiin.
JDBC	eli Java Database Connectivity on Java-teknologian käyttämä tietosilta erilaisiin tietokantoihin.
JSP	eli Java Server Pages on skriptikieli, jossa HTML-koodin sekaan on mahdollista lisätä Java-koodia.
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 rakenteisten dokumenttien määrittely- ja kuvauskieli.

3	Asetettujen tavoitteiden toteutuminen
Kyselysovelluksen tärkeimmiksi jatkokehityskohteeksi Koskikara-projektin osalta muotoutuivat kyselypankki sisältäen hakutyökalun ja kyselyiden koostamisen sekä analysointityökalun vastausten analysointiin ja HTML-raporttien luomiseen. Sovellukset toteutettiin Korppi-järjestelmän yhteyteen. 
Tarkemmin tavoitteista ja niiden toteutumisesta on luvussa 9. Projektin taustasta tarkempaa tietoa löytyy projektiraportin luvusta 3. Osioiden käyttöliittymiä kuvataan luvussa 7.
3.1	Kohteiden hakeminen hakutyökalun avulla 
Kysymysten, kysymysryhmien ja kyselyiden (myöhemmin näihin viitataan kohteina) hakukäyttöliittymä suunniteltiin mahdollisimman helppokäyttöiseksi. Käyttöliittymää suunniteltiin useaan otteeseen palavereissa ja lopullisen muodon se saavutti ohjelmoinnin aikana, jolloin testaamalla pystyttiin havaitsemaan sen toimivuus. Tavoitteet toteutuivat hakutyökalun osalta täysin.
Valmistuneella työkalulla käyttäjä voi hakea kyselykohteita hakusanan, organisaation, virallisuusasteen, luontiajankohdan, metatietojen ja kyselyn laatijan nimen perusteella. Hakutyökalussa on kaksi eri tasoista hakutapaa. Yksinkertaisessa haussa käyttäjä pystyy hakemaan hakusanan, organisaation ja virallisuusasteen mukaan. Monipuolisessa haussa käyttäjä voi edellä mainittujen tietojen lisäksi hakea kyselyn laatijan, luontiajankohdan sekä metatietojen perusteella. 
Käyttäjän haettua kohteita tietokannasta, käyttäjälle tarjoutuu mahdollisuus esikatsella haun tuloksena saatuja kohteita. Esikatseluun siirrytään klikkaamalla kohteen nimeä.
3.2	Kyselyiden koostaminen kyselypankin kohteista
Kyselyiden koostaminen integroitiin Kottarainen-projektin toteuttaman kyselyidenluontisivun yhteyteen. Tavoitteet eivät täysin toteutuneet kyselyiden koostamisen osalta, sillä koostamiseen jäi järjestysnumeroihin liittyviä ongelmia.
Uutta kyselyä luotaessa tai vanhaa muokatessa annetaan käyttäjälle mahdollisuus etsiä kyselypankista muokattavaan kyselyyn liitettäviä kohteita. Kohteita haetaan luvussa 3.1 mainitulla hakutyökalulla. Hakutuloksista valitaan haluttu kohde ja klikkaamalla otsikkolinkkiä siirrytään esikatseluun. Esikatselusivulla olevaa liittämispainiketta painamalla esikatseltu kohde siirtyy osaksi muokattavaa kyselyä.
3.3	Kyselyiden vastausten analysointi
Kyselyn analysoinnin osalta projektiryhmä toteutti analysointityökalun ja siihen liittyvät esitystavat. Käyttöliittymän viimeistely, taustamuuttujan käyttö analysoinnissa, esitystavan esikatselu, kohteiden kommentointi ja analysointimallien oikeuksien hallinta jäivät jatkokehitykseen. 
Valmistuneella työkalulla käyttäjä voi luoda graafisia ja numeerisia raportteja Kotka-tietokannassa olevien kyselyiden vastauksista. Raportti laadintaan analysointimalliin pohjautuen. Raportin laatimisessa voi käyttää aiemmin luotuja analysointimalleja kyselylle tai tekemällä uuden analysointimallin. Analysointimallit tallennetaan tietokantaan. Tästä kerrotaan tarkemmin luvussa 5.3. Vaatimusmäärittelyssä mainitut esitystavat toteutettiin tunnuslukupylväsgraafia ja viivagraafeja lukuunottamatta. Toteutetut esitystavat kuvataan tarkemmin käyttöohjeessa ja vaatimusmäärittelyssä.
3.4	Tulosten raportointi
Projektissa toteutetulla kyselysovelluksen analysointityökalulla tuotetaan raportteja käyttäjän määrittelemän analysointimallin mukaan. Raportti julkaistaan HTML-muodossa, jossa kuvat ovat PNG-muodossa. 
Raporttiin liittyvä kohteiden kommentointi jäi jatkokehityksen toteutettavaksi. Raportin ulkoasu kuvataan luvussa 7.9 ja raportin tallennushakemisto luvussa 5.1. 
4	Toteutustekniikat ja -työkalut
Luvussa kuvataan Koskikara-projektissa kyselysovelluksen jatkokehittämiseen käytettyjä työkaluja ja ohjelmointiympäristöjä. Ryhmällä oli ohjelmointityökaluna käytössään Linux-koneissa JBuilder 9.0. Käyttöjärjestelminä kahdella projektin koneista oli Windows XP Professional  ja kahdella RedHat Linux 9.
4.1	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 1). 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. Olemassaoleva servletti suoritetaan ja se palauttaa selaimelle tuloksen HTML-muodossa. Jos servlettiä ei löydy, pyyntö ohjautuu Tomcatille, joka generoi servletin. Kuvassa 1 esitetään luvussa käsiteltyjen palvelinohjelmistojen suhteita toisiinsa.

Kuva 1. Palvelinohjelmistojen suhteet toisiinsa.
4.2	Java-pavut
Java-pavut (engl. JavaBeans) ovat uudelleen käytettävien WWW-sivujen komponenttien luontiin tarkoitettu standardi, joka on kehitetty 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 Koskikara-projekti tuotti pääosin yleiskäyttöisiä ja hyvin kommentoituja Java-papuja, joita järjestelmän jatkokehittäjät voivat hyödyntää.
4.3	Palvelinohjelmistot
Koskikara-projekti käytti työssään Korppi-järjestelmässä käytössä olevia palvelinohjelmistoja. 
Kyselysovelluksella käytetään Kotka-tietokantaa PostgreSQL:n avulla. PostgreSQL on vuonna 1986 alkunsa saanut avoimen lähdekoodin relaatiotietokannan hallintaohjelmisto.
HTTP-palvelimena projektissa käytettiin Apache-nimistä suosittua Linux-käyttöjärjestelmän ohjelmistoa. 
TomCat on Apache-projektin haarauma, joka kääntää JSP-sivut ja mahdolliset Java-pavut HTML-koodiksi. 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.
5	Tietokanta
Koskikara-projekti käytti Kottarainen-projektin luomaa kyselysovelluksen tietokantaa. Vanha tietokanta ei sellaisenaan ollut riittävä, joten Koskikara-projektin tarpeisiin lisätiin Kotka-tietokantaan sekä uusia tauluja, että kenttiä olemassaoleviin tauluihin. 
5.1	Koskikara-sovelluksen tiedostoratkaisut
Kyselysovellus on jaettu neljän tyyppisiin tiedostoihin. Näistä JSP-sivut ja Java-pavut ovat yleisesti käytössä JSP-tekniikkaa toteuttavissa sovelluksissa. 
HTML-muotoisten raporttien graafien tiedostomuoto on PNG. Raportti- ja graafitiedostot tallentuvat WWW-palvelimelle kyselyn ja analysointimallin mukaisiin alihakemistoihin, hakemiston kotka/survey/reports alle luotaviin alihakemistoihin.
5.2	Tietokannan ER-kaavio
Kyselysovelluksen tietokannan ER-kaavio on kuvassa 2. Taulut sekä taulujen kentät ovat listattuna luvussa 5.3. Tarkemmat kuvaukset tauluista sekä niiden avainkentistä löytyvät tämän dokumentin liitteestä 1. Kyselysovelluksen tietokanta kuvataan tarkemmin Kottarainen-projektin sovellusraportissa ja Kotka-tietokannan tietokantaraportissa.

Kuva 2. Kyselysovelluksen ER-kaavio. 

5.3	Tietoa varastoivat taulut
Tietokantatauluja lisättiin Kotka-tietokantaan kolme kappaletta. Ne kaikki liittyvät kyselyn analysointimallin tallentamiseen.
Taulu questionnaireanalyzemodel sisältää analysointimallin nimen sekä yhdistää mallin kyselyyn ja analyysimallin laatijaan. Analysointimalli sisältää riittävän tiedon raportin generoimiseksi kyselyn vastaustiedoista. Taulun kentät ovat seuraavat:
o	questionnaireanalyzemodelid on taulun avainkenttä.
o	questionnaireid osoittaa tauluun questionnaire. Viitteen arvo kertoo, mihin kyselyyn analyysi liittyy.
o	personid osoittaa tauluun person. Viitteen arvo kertoo, analysointimallin laatijan.
o	name kertoo analysointimallin nimen. 
o	description on analysointimallin kuvaus.
Taulu questiongrouppresentation sisältää kysymysryhmien kommentit analysointimalli kohtaisesti. Taulun kentät ovat seuraavat:
o	questiongroupid osoittaa tauluun questiongroup. Viitteen arvo kertoo, mikä kysymysryhmä on kyseessä.
o	questionnaireanalyzemodelid osoittaa tauluun questionnaireanalyzemodel. Viitteen arvo kertoo valintoihin liittyvän analysointimallin.
o	comment on kysymysryhmäkohtainen kommentti.
Taulu questionpresentation sisältää analysointimalliin liitetyt kysymysten vastausten esitystavat, eli esitysgraafit ja kysymysryhmän asetukset. Taulun kentät ovat seuraavat:
o	questionpresentationtypeid  kertoo kysymykselle valitun esitystavan. Esitystavat yksilöivät arvot löytyvät sovelluksen lähdekoodista, luokasta PresentationFactory.
o	questionid osoittaa tauluun question. Viitteen arvo kertoo analyysiin liittyvän kysymyksen. 
o	questiongrouppresentationid osoittaa tauluun questiongrouppresentation. Viitteen arvo kertoo, mihin kokonaisuuteen (questiongrouppresentation) esitystavan valinta kuuluu.
o	comment kysymyskohtainen kommentti.
o	settings syventävää ulkoasua määrittelevää tietoa (esim. värillisyys).
Taulujen tarkempi kuvaus ja sisältö löytyy liitteestä. 
6	Sovelluksen rakenne
Luvussa käsitellään projektissa toteutetun sovelluksen lähdekooditiedostoja ja niiden jakautumista hakemistoihin. Tarkemmat tiedot luokista löytyvät JavaDoceista.
6.1	JSP-sivut
Luvussa kuvataan lyhyesti Koskikara-projektissa luodut JSP-sivut sekä niiden käyttötarkoitus. Toteutettujen sivujen ulkoasu on yhtenäinen Korppi-järjestelmän kanssa. 
Korppi-järjestelmän hakemistorakenne Koskikara-projektin toteuttamien JSP-lähdekooditiedostojen osalta on seuraava: 

/survey
/analyzing
			selectModel.jsp
			selectPresentations.jsp
			generateReport.jsp
/bank
/search
simple.jsp
versatile.jsp
/preview
previewque.jsp

Hakemistot survey ja bank löytyvät Korppi-järjestelmän juurihakemistosta. JSP-tiedostot on jaettu kyselypankin hakutyökalun ja koostamisen käyttöliittymän sivuihin, sekä analysointityökalun käyttöliittymän sivuihin
Analysointityökalun käyttöliittymän JSP-sivut ovat seuraavat:
•	selectModel.jsp on mallin tai sitä vastaavan valmiin raportin valintasivu. 
•	selectPresentations.jsp on analysointisivu, jolla muodostetaan analysointimalli.
•	generateReport.jsp generoi analysointimallista raportin. 

Kyselypankin hakutyökalun ja koostamisen käyttöliittymien JSP-sivut ovat seuraavat:
•	simple.jsp on yksinkertaisen haun sivu.
•	versatile.jsp on monipuolisen haun sivu.
•	previewque.jsp on kohteiden esikatselusivu koostamista varten.

6.2	Analysointiin liittyvät Java-tiedostot
Koskikara-projekti toteutti sovelluksen kehityksen aikana seuraavat analysointitoimintoihin liittyvät Java-tiedostot Korppi-järjestelmään: 
AnalyzeModel 	pitää huolen analysointimallista ja asetuksista.
AnalyzeSettings	vastaa analysointimallin asetuksista.
AnalyzeSettingsFormatter	generoi analysointiasetusten valintaa varten HTML-taulukon.
Analyzer	luo raportin käyttäen tietokantaa ja analysointimallia.
AnalyzerTest	on Analyzer-luokan testausluokka.
AnswerTable	on kyselydatan (yhden kysymysrivin säiliö (abstrakti luokka).
BarGraph	on pylväsgraafi (yliluokka kaikille pylväsgraafeille).
ColorPalette	antaa värejä järjestetystä värijoukosta.
ComplexLiteralAnswerTable	on monimutkaisten sanallisten vastausten säiliöluokka (monta tekstikenttää yhtä kysymysriviä kohti).
FrequencyHTMLtable	esittää frekvenssitaulukon raportissa.
GraphPresentation	on kaikkien graafien yliluokka tallentaen kuvan tiedostoon.
GraphTestFrame	on graafien testausta varten kehitetty JFrame-tyyppinen käyttöliittymäluokka.
HTMLFormatted	on rajapinta kaikille raportin osille.
HTMLHeader	luo HTML-otsikon raporttiin tallennettavaksi.
HTMLlist	luo HTML-listaesitystavan raporttia varten.
HorizontalBarGraph	luo vaakapylväsgraafin esitystavan.
ImageUtility	generoi yksilöllisiä kuvien nimiä raportin kuville ja sisältää muita kuviin liittyviä aputoimintoja.
KeyValuesHorizontalBarGraph	luo tunnuslukuja kuvaavan vaakapylväsgraafin esitystavan.
KeyValuesVerticalBarGraph	luo tunnuslukuja kuvaavan pystypylväsgraafin esitystavan.
LiteralAnswerDescriptions	on taulukko sanallisten kenttien kuvauksille.
LiteralAnswerTable	säilöö sanalliset vastaukset (olio per kysymysrivi).
NullPresentation	on näkymätön esitystapa raportissa.
NumericalAnswerTable	on numeerisen vastausdatan säilövä taulukko (olio per kysymysrivi).
NumericalAnswerTableRepeating	tarjoaa taustamuuttujatuen numeeriselle vastausdatalle.
NumericalKeyValueHTMLtable	esittää tunnusluvut HTML-taulukkona.
PieGraph	luo piirakkagraafiesitystavan
Presentation	on kaikkien esitystapojen yliluokka.
PresentationFactory	luo esitystapaluokkien olioita.
QueryData	on tietolähdeluokka analysointimallille.
QuestionAnalyzeHTMLtable	tuottaa kysymysriviä vastaavan HTML-kokonaisuuden raporttiin.
QuestionAsGroupHeader	vastaa kysymysrivejä sisältävän kysymysryhmän otsikkoa raportissa.
QuestionGroupHeader	vastaa kysymysryhmiä sisältävän kysymysryhmän otsikkoa raportissa.
QuestionGroupPresentation	vastaa samannimistä taulua sisältäen kysymysryhmäkohtaista analyysitietoa.
QuestionSettings	sisältää analysointimallin kysymyskohtaista tietoa.
SelectModel	käsittelee samannimistä JSP-sivua, vastaten mallien valinnasta.
TextualHTMLtable	sisältää HTML-taulukon generoimiseen liittyvän toiminnallisuuden.
VerticalBarGraph	luo pystypylväsgraafin.
6.3	Hakutuloksiin ja kyselyiden koostamiseen liittyvät sekä muut Java-tiedostot
Koskikara-projekti tuotti sovelluksen kehityksen aikana seuraavat hakutuloksiin, kyselyiden koostamiseen liittyvät sekä muut Java-tiedostot Korppi-järjestelmään:

AggregateQuestionnaire 	huolehtii kyselyiden koostamisesta.
Debug	avustaa sovelluksen perkaamisessa.
UserStatic	auttaa kotkabeans.User-luokan käyttämisessä Java-koodista.
SavedFieldHandler	tallentaa fields-oliot tietokantaan.
QueriesPreview	vastaa kyselyjen, kysymysryhmien ja kysymysten esikatselusta.
QueryBankGenericHTMLGenerator	luo hakusivuille alasvetolistoja.
QueryBankResultSQLGenerator	luo SQL-kyselyjä formatoidakseen hakutulokset.
QueryBankSearch	ajaa haut kyselypankissa.
7	
Käyttöliittymien sivut
Luvussa käsitellään projektissa toteutettujen kyselysovelluksen sivujen ulkoasua ja toiminnallisuutta. 
7.1	Sivujen yleinen rakenne
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äosan navigointialue sisältää Korppi-järjestelmän perustoiminnot, joita ovat poistuminen, palaute, asetukset ja opastus. Vasemmassa reunassa olevassa puurakenteessa puolestaan on esitetty linkkilistana Korppi-järjestelmän eri sovelluksiin liittyvät kokonaisuudet. Niiden avulla Korppi-järjestelmän käyttäjä pystyy liikkumaan eri sovellusten ja toimintojen välillä. Navigaatiopuussa on linkki myös kyselysovellukseen, joka sisältää Kottarainen- ja Koskikara-projektien toteuttamat osiot. 
Kuvassa 3 on kuvattu kyselysovelluksen käyttöliittymän rakenne Koskikara-projektissa toteutettujen sivujen osalta.

Kuva 3. Koskikara-projektin tuottamat kyselysovelluksen sivut.
7.2	Aloitussivu
Luvussa kuvataan Koskikara-projektin toteuttamien sivujen huomioimista kyselysovelluksen aloitussivuilla. 
Kuvassa 4 näkyvällä Kottarainen-projektin luomalla kyselyjen pääsivulla main.jsp on linkki valmiin kyselyn muokkaamiseen. 
Kuva 4. Kottarainen-projektin kyselyjen hallintasivu.
Sivun Muokkaamaan-linkistä päästään kuvan 5 kyselyn luontisivulle.

Kuva 5. Kyselyjen luontisivu.
Kuvassa 5 olevasta painikkeesta Analysointiin päästään kyselyn Eijan uusi syksykysely analysointisivulle. 
Kyselysovelluksen kyselypankin toimintoihin päästään käsiksi kyselyjen luontisivuilta questionnairehandler.jsp (katso kuva 6).Tämä sivu on Kottarainen-projektin tuotoksia. 
Kuvan 5 painike Hae kyselypankista vie hakusivulle simple.jsp. Hakutyökalun sivuja kuvataan tarkemmin luvuissa 7.3 ja 7.4.

Kuva 6. Kyselyn tietojen muokkaussivu questionnairehandler.jsp
7.3	
Kyselyiden yksinkertainen hakusivu
Kuvassa 7 on esitelty Hae kyselypankista -painikkeesta oletuksena aukeava sivu simple.jsp. Sivun yläosassa on linkki monipuoliseen hakuun, jota on kuvattu enemmän luvussa 7.4. Yksinkertaisen haun toimintoja ei tässä turhaan kuvata, koska ne sisältyvät monipuolisen haun toimintoihin.
 Kuva 7. Yksinkertainen haku simple.jsp.
7.4	Kyselyiden monipuolinen hakusivu
Yksinkertaisesta hausta (luku 7.3) pääsee monipuolisen haun sivulle linkin kautta. Tällöin avautuu sivu versatile.jsp. Täältä päästään yksinkertaisen haun puolelle sivun yläreunassa olevan linkin kautta.
Kuvassa 8 on esitelty monipuolisen haun näkymä. Käyttäjällä on mahdollisuus kohdistaa hakuaan määrittämällä haettavat kohteet, uudelleenkäyttöaste, hakutuloksiin tulostettavat tiedot, julkaisuorganisaatio, metatiedot ja niihin liittyvä hakusana, luonti- ja voimassaoloaika sekä laatijan nimi. Haun ehdot ja valinnat on kuvattu tarkemmin vaatimusmäärittelyssä ja käyttöohjeessa.

Kuva 8. Monipuolinen haku versatile.jsp.

7.5	Hakutulosten esittäminen
Hakutulokset esitetään kuvan 9 mukaisella sivulla. Jokaisesta tuloksesta on linkki luvussa 7.6 kuvattavaan esikatseluun.

Kuva 9. Hakutulokset versatile.jsp.
7.6	 Hakutyökalun esikatselusivu 
Hakutulosten sivulta (katso kuva 9) pääsee kyselyn, kysymysryhmän tai kysymyksen esikatseluun kohteen linkkiä klikkaamalla. Kuvan 10 esikatselusivu esittää kohteen ulkoasun ja sisällön. Esikatselusivun alalaidassa olevilla painikkeilla voidaan valita kohde lisättäväksi muokattavissa olevaan kyselyyn tai palata takaisin hakusivulle.

Kuva 10. Kyselyn esikatselu previewque.jsp.

7.7	
Kyselyn raporttien ja mallien valintasivu
Kyselyjen luontisivun Analysointiin-painikeesta päästään kyselyn analysointiin. Jos kyselystä on aiemmin luotu analysointimalli, tulee esille kyselyyn liitetyt analysointimallit ja raportit esittävä sivu selectModel.jsp (katso kuva 11). Sivulta voi jatkaa analysoimaan kyselyä klikkaamalla Mallit-listan linkkejä, jolloin tulee esille mallia vastaava analysointisivu tai selata kyselyn aiemmin luotuja raportteja klikkaamalla Raportit-listan linkkejä.

Kuva 11. Kyselyn mallien ja raporttien valintasivu selectModel.jsp.
7.8	 Kyselyn analysointisivu 
Kyselyn vastausten analysointityökalun toiminnallisin ja olennaisin sivu on  selectPresentations.jsp. Kuvassa 12 näkyvällä sivulla määritellään käytettävä analysointimalli. Lisäksi käyttäjä voi valita kunkin kysymyksen kohdalla,  otetaanko kysymys mukaan raporttiin vai ei. 

Kuva 12. Kyselyn vastausten analysointisivu selectPresentations.jsp.

Tunnuslukutaulukko voidaan valita esitettäväksi kyseisellä valintaruudulla. Tekstiä sisältävät avoimet vastaukset tulostuvat allekkain vastauksittain. Esitystavaksi voidaan valita piirakkagraafi, vaaka- tai pystypylväsgraafi, lista tai ettei esitystapaa käytetä ollenkaan. 
Esitettävä raportti  tallennetaan HTML-muodossa palvelimen hakemistoon kotka/survey/reports/[kyselyn id]/[analysointimallin id]. Raportin tiedosto index.html sisältää viittauksia samassa hakemistossa sijaitsevien graafien kuvatiedostoihin.

7.9	Raporttisivu 
Raportti tulostuu kuvan 15 mukaisesti. Raporttiin tulostuu aina frekvenssitaulukko.

Kuva 14. Kyselyn raportin ulkoasu.

8	Testaus ja tulokset
Luvussa tarkastellaan Koskikara-projektin testaamista yleisellä tasolla. Koskikara-projektin testaaminen voidaan jakaa ohjelmoinnin aikana tapahtuvaan yksikkö- ja integraatiotestaukseen.
8.1	Testausympäristö
Testaus tapahtui pääosin kehitysympäristössä. Kehitysympäristö koostui kolmesta Linux-koneesta. Kehitysympäristössä testatessa voitiin reagoida nopeasti havaittuihin virheisiin koodissa. Lopullinen integraatiotestaaminen suoritettiin tuotantoympäristössä. Testausta suoritettiin myös projektiryhmäläisten kotoa, hitaampien verkkoyhteyksien läpi.
Testatut selaimet olivat Internet Explorer 6.0, Mozilla 1.4 sekä Opera 7.1. Ainoastaan Operalla havaittiin jotain pieniä ongelmia, jotka ovat ilmenneet jo aiemmin Korppi-järjestelmän sovelluksissa. Muita yhteensopivuusongelmia ei ole ilmennyt.
Tarkemmat tiedot kehitys- ja tuotantoympäristön palvelinohjelmista löytyvät luvusta 4.
8.2	Testausperiaatteet
Projektiryhmän tavoitteena oli testata mahdollisimman paljon sovellusta sen kehittämisen aikana. Tavoite toteutui kohtuullisesti. Sovelluksen kehittäminen jaettiin kahteen erilliseen osioon: kyselypankkiin ja analyysityökaluun. Kyselypankin toteuttamisen vastaavina henkilöinä olivat Harri ja Aapo. Analysointityökalun vastaavina olivat Pekka ja Ville. Pekka ja Ville testasivat Harrin ja Aapon tuotokset ja päinvastoin. Tällä menettelyllä saatiin hiukan tarkemmin selvitettyä puuttuvia ominaisuuksia ja virheitä. 
Tilaajien ja ohjaajien käyttöön annettiin ryhmän toimesta testattu ohjelma. Heidän kommenttiensa ja havaittujen virheiden perusteella korjattiin ja kehitettiin sovellusta. Sovelluksen järjestelmätestausvaihe oli lyhyt, koska sovellukselle sovitut toiminnot valmistuivat vasta projektin loppupuolella. 
Bugzilla-ohjelman käyttö havaittiin projektin kohdalta turhaksi. Kommentoinnin ja ongelmien ratkaisun avuksi käytettiin ryhmän sisäistä sähköpostilistaa. Tämä ratkaisu toimikin tehokkaasti. 
8.3	Testitulokset
Testausvaiheissa löytyi useita virheitä, eritoten kehitysympäristössä koodia ajaessa ja peratessa. Nämä korjattiin yleensä heti tai sitten vähemmän kriittiset virheet jätettiin odottamaan myöhempää korjausta.
Tuotantoympäristössä testattaessa suurimmat virheet löytyivät koostamisesta ja varsinkin liitettyjen kohteiden järjestys ei aina mennyt oikein. Koostamista on yhä projektin loppuun saakka korjattu ja siihen jäi pieni satunnainen järjestykseen liittyvä virhe.
Koostettujen kyselyiden analysoinnin kohdalla ilmeni ongelma, joka esti analysoinnin ja raportin tuottamisen. Tämäkin johtui koostamisen järjestysnumeroon liittyvästä ongelmasta. 
Analysoinnissa oli ongelmia lisäksi tunnuslukujen kanssa. Tunnusluvut laskettiin vääristä arvoista ja se aiheutti muita pienempiä ongelmia.
9	Puutteet ja jatkokehitysideat 
Luvussa kuvataan jatkokehitykseen sovittuja puutteita, ominaisuuksia ja ideoita. Osa niistä oli vaatimusmäärittelyssä kirjattu Koskikara-projektin tehtäviin. 
Sovelluksen testausvaiheessa havaittiin, että kaikkia ominaisuuksia ei ehditä toteuttamaan Koskikara-projektin puitteissa. Nämä toteutetaan tulevaisuudessa erillisinä sovellusprojekteina, erikoistöinä tai palkattuina työtekijöinä. 
Analyysityökalun kehittämiskohteita ovat:
•	kyselyn, kysymysryhmän, kysymyksen ja vastauksen kommentointi raporttiin,
•	kyselyn virallistamisprosessin tarkempi selvittäminen ja konkretisointi,
•	graafin esitystavan, värien ja sijoittelun lopullinen määritteleminen,
•	raportin ulkoasun esikatselu,
•	raportin ulkoasun muokkaamiseen työkalu,
•	kaikki tarpeelliset analysointiaineistot kattava esitystapojen ja tunnuslukujen lisääminen
•	taustamuuttujan huomiointi (esimerkiksi miesten ja naisten vastausten vertailu erillään),
•	toistuvan kurssikyselyn analysointi (trendien analysoinnissa tarvittava ominaisuus),
•	servlet huolehtimaan raporttien lukemisesta (hakemistorakenne),
•	ja kaikkien HTML-raporttien selaaminen huomioiden käyttäjäoikeudet mallikohtaisesti.
Hakutyökalun kehittämiskohteena ovat:
•	Google-tyyppinen haku, jolla listataan siis yhdelle sivulle vain osa hakutuloksista kerrallaan ja laitetaan sivun alle tarvittaessa linkit ohjamaan lisähakuja,
•	ja hakutulosten lukumäärän rajaaminen (COUNT-lause), liittyy Google-tyyppiseen hakuun.
Hakutyökalun Java-lähdekooditiedostojen ToDo-osassa on myös listattu kehitysideoita.

Ideoita jatkokehitystä varten ovat:
•	Kyselyn kopioiminen tietokannasta toiseen voisi toteuttaa tietokantasovelluksen avulla. Data otettaisiin ulos tekstitiedostoon tai XML-tiedostoon.
•	Pitäisikö sivulle tultaessa ilmoittaa kysely ja kysymysryhmä, johon kyselyitä, kysymysryhmiä tai kysymyksiä ollaan poimimassa? Tämä tieto olisi siis lähinnä muistutuksena käyttäjille.
•	Pitäisikö myös ilmoittaa, missä tarkoituksessa kyselypankista ollaan kohteita hakemassa? Eikö siis analysoinninkin yhteydessä tarvittu joskus pankkia?
•	Yksinkertainen ja monipuolinen haku voitaisiin toteuttaa välilehdin. Ei kai nykyistä esitys- ja valintatapaa löydy muualta Korppi-järjestelmästä?
•	Tarvitaanko kyselyn esikatselu ja kohteen valinnan sisältävä esikatselu erikseen vai riittäisikö niille yhteinen sivu?
10	Yhteenveto
Koskikara-sovellusprojekti jatkokehitti WWW-pohjaista kysely-sovelluksen prototyyppiä Jyväskylän yliopiston käyttöön. Projektin puitteissa toteutuneita osia olivat kyselyiden haku ja vastausten analysointi WWW-ympäristössä.
Jatkokehitykseen jäivät mm. kysymyksen ja vastauksen kommentointi raporttiin, kyselyn virallistamisprosessi, taustamuuttujan mukaan suoritettu analysointi ja hakupuolella Google-tyyppinen haku. Projektissa toteutetulla sovelluksella pystyy kuitenkin laatimaan kyselyitä hakutyökalun avulla sekä analysoimaan vastauksia graafisesti ja tuottamaan kyselyn vastauksista HTML-raportti. 
Sovelluksen valmistuminen myöhästyi suunnitellusta aikataulustaan kolme viikkoa, eikä täyttänyt kaikkia sille alunperin asetettuja vaatimuksia. Projektin jäsenet olettivat sovelluksen toimintojen toteuttaminen yksinkertaisemmaksi.
Suurimpia syitä myöhästymiseen olivat sovelluksen rajaamisen epäonnistuminen. Myös koko projektin jatkunut liian suuri keskittyminen sovelluksen ulkoasuun ja käyttöliittymään aiheutti liikaa työtä. Sovelluksen toteuttaminen oli huomattavasti vaativampaa kuin suunnitelmissa ennakoitiin. 
Pääsyy kuitenkin sovelluksen valmistumisen myöhästymiseen oli raportin kuvien luomiseen liittynyt ongelma, joka johtui JSP-ohjelmointikielen rajoittuneisuudesta. 

Lähteet
Lintunen Sampsa, Pöyhönen Tiina, Vähä-Ruka Teemu ja Ylönen Timo, ”Kottarainen-projektin Sovellusraportti”, <URL: http://kotka.it.jyu.fi/kottarainen/dokumentit/viralliset/Sovellusraportti.rtf>, Jyväskylän yliopisto, tietotekniikan laitos, 2003.
David M. Geary, ”Advanced Java Server Pages”, Prentice Hall, 2001.
Lahtonen Tommi, “SQL ToolKit”, Docendo, 2002.
Mika Vesterholm. Jorma Kyppö, “Java-ohjelmointi Pro Training”, Satku, 2000.

Liitteet
Liite 1. Tietokantataulujen rakenne

questionnaireanalyzemodel
Field	Type	Not Null	
deleted	boolean	NOT NULL	
questionnaireanalyzemodelid	integer	NOT NULL	
name	character varying (400)		
description	Character varying (4000)		
questionnaireid	integer	NOT NULL	
personid	integer	NOT NULL	

questiongrouppresentation
Field	Type	Not Null	
deleted	boolean	NOT NULL	
questiongrouppresentationid	integer	NOT NULL	
questionnaireanalyzemodelid	integer	NOT NULL	
questiongroupid	integer	NOT NULL	
comment	character varying (4000)		

questionpresentation
Field	Type	Not Null	
deleted	boolean	NOT NULL	
questionpresentationid	integer	NOT NULL	
questionid	integer	NOT NULL	
questionpresentationtypeid	integer	NOT NULL	
questiongrouppresentationid	integer	NOT NULL	
settings	character varying (400)		
Comment	character varying (4000)		

Liite 2. Sovelluksen luokkakaavio