Kottarainen-projekti

Sampsa Lintunen
Tiina Pöyhönen
Teemu Vähä-Ruka
Timo Ylönen

Sovellussuunnitelma 14.4.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) sekä
Timo Ylönen (tylonen@cc.jyu.fi).
Työ: Sovellussuunnitelma tietotekniikan sovellusprojektiin
Tiivistelmä: Kottarainen-projekti toteuttaa WWW-pohjaisen kyselysovelluksen, jonka osiot mahdollistavat kyselyiden luomisen WWW-ympäristöön, vastausten hallinnan sekä tulosten muodostamisen ja esittämisen. Kottarainen-sovellus tulee olemaan yksi  aiemmin toteutetun Korppi-järjestelmän moduuleista. Sovellussuunnitelmassa kuvataan sovellusta tekniseltä toteutukseltaan sekä sen toimintojen ja ominaisuuksien priorisointi. Suunnitelmassa esitetään myös hahmotelmat sovelluksen sivustokartasta sekä kuvataan koodin kommentointia.
Tilaajat ja muut projektiin liittyvät henkilöt: Sovelluksen tilaajia ovat 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 edustaa Antti Auer. Laitoksen vastaavana ohjaajana toimii Jukka-Pekka Santanen sekä teknisinä ohjaajina Jussi Mäkinen ja Vesa Lappalainen.
Yhteystiedot: Agora, huone C223.2, puh.nro. 014-260 4964, projektiorganisaation sähköpostilista kottarainen@korppi.jyu.fi.
Avainsanat: Tiedonkeruu, kyselyt, palaute, tiedon esittäminen, WWW-sovellus, Kotka-järjestelmä
Versionhallinta
Versio	Päiväys	Tehnyt	Muutokset	
1.0	10.3.	Tiina Pöyhönen	Suunnitelmanteko alulle, otsikkojen suunnittelu.	
1.3	10.3.-19.3.	Tiina Pöyhönen	Otsikoiden alle tekstiä. Työkalujen ja käyttöympäristöjen faktoja selville. Käyttötapauksien suunnittelu alkuun.	
1.4	20.3.	Tiina Pöyhönen	Sampsan ehdottamien muutosten korjaus.	
1.41	24.3.	Tiina Pöyhönen	Timon ehdottamien muutosten korjaus.	
1.42	25.3.	Tiina Pöyhönen	Idea vaatimusmäärittelyn tiivistelmän lisäämisestä hylätty. Tyylejä muokattu. Käyttötapauksia paranneltu.	
1.5	25.3.	Sampsa Lintunen	Käyttötapauksiin lisää se selostuksia. Hienosäätöä.	
1.51	26.3.	Tiina Pöyhönen	Teemun tekemien käyttöliittymäkuvien lisääminen ja selostuksia. Viimeistely ensimmäisen version esittämiskuntoon.	
2.0	31.3.	Tiina Pöyhönen	Lisätty tietoa koodin kommentointikäytännöstä. Korjattu Santasen ehdottamia korjauksia.	
2.1	1.4.	Tiina Pöyhönen, Timo Ylönen	Korjattu Santasen ehdottamia korjauksia.	
2.2	2.4.	Tiina Pöyhönen	Korjattu Santasen ehdottamia korjauksia. Käyttötapaukset siirretty vaatimusmäärittelyyn.	
2.3	7.4.	Sampsa Lintunen	Lisätty tietokannan määrittely.	
2.4	14.4.	Teemu Vähä-Ruka	Santasen ehdottamia korjauksia.	
2.45	10.6.	Teemu Vähä-Ruka	Hiomista kansiota varten.	

Sisällysluettelo

1	Johdanto
2	Termistöä
3	Sovelluksen tavoitteet, ominaisuudet ja toiminnot
3.1	Kyselyiden luomisen toiminnalliset vaatimukset
3.2	Kysymyspankki
3.3	Vastausten tallentamisen toiminnalliset vaatimukset
3.4	Tulosten esittämisen toiminnalliset vaatimukset
3.5	Aikataulun salliessa toteutettavia toiminnallisia vaatimuksia
3.6	Jatkokehitykseen jääviä toimintoja
4	Toteutustekniikat- ja työkalut
4.1	Palvelinratkaisut
4.2	JSP-tekniikka
4.3	Java-pavut
4.4	Tietokanta
4.5	Apache TomCat
5	Käyttöliittymä
5.1	Kyselyn luomisen aloitussivu
5.2	Kysymysryhmän luominen
5.3	Kysymyksien muokkaaminen
5.4	Kyselyn esikatselu
6	Kottarainen-sovelluksen tietokantasuunnitelma
6.1	Tietokannan rakennekaavio
6.2	Tietoa varastoivat taulut
6.3	Viitetaulut
6.4	Määritystaulut
6.5	Metatietotaulut
7	Ohjelmakoodin kommentointi ja nimeämiskäytännöt
8	Testausperiaatteita
9	Yhteenveto
Lähteet

1	Johdanto
Kottarainen on Jyväskylän yliopiston tietotekniikan laitoksen kevään 2003 sovellusprojekti, joka toteuttaa WWW-pohjaisen kyselyjen laatimis-, hallinta- ja analysointisovelluksen Jyväskylän yliopiston käyttöön. Kyseisen Kottarainen-sovelluksen osia ovat kyselyiden luominen WWW-ympäristöön, vastausten hallinta sekä tulosten muodostaminen ja esittäminen.
Kottarainen-sovellus tulee toimimaan yhtenä moduulina jo olemassa olevaa Korppi-nimistä opetushallintajärjestelmää. Tämän järjestelmän edeltäjä, Kurki, toteutettiin opiskelijaprojektina vuonna 1998. Sitä ovat seuranneet projektit, Kotka, Korppi, Halko, Kolibri, Koppelo ja Kiuru. 
Kevään 2003 Kottarainen-ryhmään kuuluvat tietotekniikan opiskelijat Sampsa Lintunen, Tiina Pöyhönen, Teemu Vähä-Ruka ja Timo Ylönen. Tilaajana toimivat Jyväskylän yliopiston organisaatioista avoin yliopisto edustajanaan Eija Ihanainen, hallinto edustajanaan Mauno Väisänen, opetuksen laadunkehittämishanke OPLAA! edustajanaan Jari Rantamäki sekä virtuaaliyliopisto-hanke, jota edustaa Antti Auer. Kottarainen-projektin vastaavana ohjaajana toimii Jukka-Pekka Santanen sekä teknisinä ohjaajina Jussi Mäkinen ja Vesa Lappalainen.
Tämä dokumentti on suunnitelma toteutettavalle sovellukselle ja sitä tullaan tarkentamaan sovelluksen loppuraportiksi projektin aikana. Dokumentti määrittää toteutettavan sovelluksen tavoitteita, ominaisuuksia ja toimintoja sekä käyttöliittymän ja muiden sovelluksen osien toteutusta. Lisäksi dokumentissa esitellään käytettäviä tekniikoita. Projektin taustoja, tavoitteita ja resursseja kuvataan tarkemmin Projektisuunnitelmassa. Sovellukselta vaadittavat ominaisuudet on esitetty Vaatimusmäärittelyssä.
Lukuun 2 on kerätty projektissa ja sen dokumenteissa käytettäviä termejä. Luku 3 käsittelee sovellukselle asetettuja tavoitteita ja sovelluksen ominaisuuksia. Luvussa 4 käsitellään Kottarainen-projektin palvelinratkaisuja ja valotetaan projektissa käytössä olevia sovellusympäristöjä. Luku 5 esittelee tuotettavan sovelluksen käyttöliittymänäkymiä. Luku 6 kuvaa tietokannan rakennetta sekä etenkin Kotka-kantaan tulevia muutoksia ja lisäyksiä. Luku 7 käsittelee ohjelmakoodin kommentointia ja luvussa 8 kerrotaan testauksen pääperiaatteista.
2	Termistöä
Luvussa on selvennetty Kottarainen-projektissa käytettävää termistöä. Kottarainen-projektin aiheeseen ja Korppi-järjestelmään liittyviä termejä ovat seuraavat: 
Benchmarking	on arviointitapa, jossa useampi organisaatio suorittaa matriisimuotoisen laadunarviointikyselyn ja vertailee saamiaan tuloksia keskenään.
Kohde	on tässä dokumentissa käytetty lyhenne, jolla tarkoitetaan kysymystä, kysymysryhmää ja kyselyä yhdessä.
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 kyselyjä, kysymysryhmiä tai yksittäisiä kysymyksiä.
Kysymysryhmä	käsittää yhden tai useampia samaan aihepiiriin liittyviä kysymyksiä.
Kysymyssarja	on kysymyspankkiin saataville sijoitettu kysely.
Looginen ryhmittely on kysymysten ryhmittely analysointia varten asiasisällön mukaan.
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	(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.
IMS-standardi	on Global Learning Consortiumin määrittely kysymysten esittämiselle XML-muodossa.
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 Java Server Pages on ohjelmointikieli, jossa HTML-koodin sekaan on 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.
SSL-salaus	on eräs Internetissä käytössä oleva salausmenetelmä.
TomCat	on ilmainen servletti- ja JSP-moottori.
XML	on rakenteisten dokumenttien määrittely- ja kuvauskieli.
3	Sovelluksen tavoitteet, ominaisuudet ja toiminnot
Kottarainen-sovelluksesta toteutetaan tilaajien ja Jyväskylän yliopiston käyttöön helppokäyttöinen sovellus kyselyiden laatimiseen, suorittamiseen, hallintaan ja analysointiin. Kyselyn teko tapahtuu WWW:ssä selaimella ja kysely tulee heti valmistuttuaan näkyviin palvelimelle. Jonkun vastattua kyselyyn, vastaukset tallentuvat tietokantaan ja tulevat myös näkyviin selaimelle raporttina.
3.1	Kyselyiden luomisen toiminnalliset vaatimukset
Kysymysten, kysymysryhmien ja kyselyiden (myöhemmin näihin viitataan kohteina) luomisen käyttöliittymä toteutetaan mahdollisimman helppokäyttöiseksi. Kyselyn luoja voi valita kysymyksiä, kysymysryhmiä tai kysymyssarjoja kysymyspankista ja muokata niistä itselleen sopivan kyselyn. Kyselyn laatija voi myös tehdä lisää omia kysymyksiä. Laaditut kyselyt voidaan asettaa kaikkien kyselyjen laatijoiden nähtäväksi kysymyspankkiin kysymyssarjoiksi tai pitää saatavilla vain itsellään.
Kyselyä laatiessa voi koko ajan tarkastella, miltä syntyvä kysely näyttää. Kysymyksiä, kysymysryhmiä ja kysymyssarjoja voi helposti lisätä, poistaa tai siirtää mihin tahansa kohtaan kyselyä. Kysymykset voivat muodostaa loogisesti erilaisia kokonaisuuksia kuin visuaalisesti. Näin voidaan pitää kysymysten laatimisvaiheessa kysymykset lajiteltuna loogisesti oikeisiin ryhmiin ja toisaalta sijoitella ne visuaalisesti erilleen loogisista yhteyksistään. Tällä saavutetaan etua esimerkiksi, jos on odotettavissa, että kysymykset vaikuttavat toistensa vastauksiin.
Kun kysely on valmis, se talletetaan palvelimelle ja on nähtävissä ja täytettävissä Kottarainen-sovelluksessa tietyn, laatijan määrittelemän, ajanjakson.
3.2	Kysymyspankki
Kaikilla Korppi-järjestelmän käyttäjillä, joilla on oikeus laatia kyselyitä, on myös oikeus ottaa kohteita kysymyspankista ja tallentaa tekemänsä kohteet sinne esimerkiksi sihteerin hyväksyminä. 
Kysymykset, kysymysryhmät ja kysymyssarjat tallennetaan kysymyspankkiin niin, että niissä säilyy tiettyjä metatietoja, kuten tekijä, luontipäivämäärä ja tarkoitus sekä kurssikyselyiden tapauksessa kurssin nimi. 
Kohteita voidaan hakea kysymyspankista kysymyksessä olevan sanan tai tekijän, päivämäärän sekä muiden kohteeseen liittyvien metatietojen perusteella. Jos kysymys on liitetty nimenomaan kurssikyselyyn, voidaan se hakea myös kurssin nimen perusteella.
Laatija voi halutessaan julkaista kysymyspankkiin tallentamansa kohteet. Julkaisuun käytetään erilaisia julkaisuasteita, joiden perusteella määritellään kuka saa ottaa niitä käyttöönsä (kysely voi olla käytettävissä esimerkiksi organisaation sisällä). Julkaisuasteen valitessaan laatija antaa samalla käyttöoikeudet luomiinsa kohteisiin. Pankkiin julkaistuja kohteita ei voi muokata, vaan muokkaaminen luo kohteesta uuden ilmentymän.
3.3	Vastausten tallentamisen toiminnalliset vaatimukset
Kyselyjen vastaukset tallennetaan Kotka-tietokantaan. Olemassa olevaa tietokantaa laajennetaan ja muutetaan Kottarainen-sovelluksen tarpeiden mukaan. Tätä kuvataan tarkemmin luvussa 6. 
Vastaukset tallennetaan tietokantaan niin, että niissä säilyy tieto kyselystä ja ajanhetkestä. Näin voidaan vertailla saatuja tuloksia esimerkiksi eri vuosien välillä. Lisäksi vastaukset on mahdollista tallentaa liittäen niihin tieto vastaajasta, tai siten, ettei vastaajaa tiedetä (anonyymikyselyt). On myös mahdollista, että vastaajasta tallennetaan ainoastaan joitakin kyselylle oleellisia metatietoja, kuten opintojen aloitusvuosi tai sukupuoli, mutta ei hänen henkilöllisyyttään.
Tallentamisessa otetaan huomioon tietojen jatkokäytön vaatimukset (kuten vastausten tarkempi analysointi) joita kuvataan tarkemmin Vaatimusmäärittelyssä.
3.4	Tulosten esittämisen toiminnalliset vaatimukset
Kyselyiden tulokset tullaan esittämään numeerisista ja luokitteluasteikollisista vastauksista laskettavina yksinkertaisina tunnuslukuina WWW-selaimella. Tuloksia voidaan havainnollistaa numeerisesti muun muassa keskiarvoina ja jakaumina, sekä myös graafisesti. Toteutettavia graafisia esitysmuotoja ovat pylväskaaviot ja jakaumat.
Avoimet kysymykset kasataan kysymyksittäin yhteen kokonaisuuksiksi. Vastausten käsittelijä voi halutessaan kommentoida ja muokata tuloksia ja vastauksia. Muokkaukset tulevat näkyviin tulossivulle. 
Edellisen lisäksi vastauksista voidaan muodostaa tiedosto muun muassa  analysointityökalu SPSS:n ymmärtämään formaattiin. Tällöin käyttäjillä on mahdollisuus tehdä tiedoilla myös monimutkaisempiakin tilastollisia analyysejä.
3.5	Aikataulun salliessa toteutettavia toiminnallisia vaatimuksia
Aikataulun salliessa toteutetaan kysymystyypit IMS-standardin mukaisessa XML-formaatissa. Tällöin ne ovat siirrettävissä erilaisiin ympäristöihin, kuten esimerkiksi OPTIMA-oppimisympäristöön. Myös tulosten tallentaminen XML-muodossa on alemman prioriteetin vaatimuksia.
Jos aikaa jää, toteutetaan mahdollisuus Jari Rantamäen ja Antti Auerin esittelemän matriisimuotoisen kyselyn luomiseen sekä myös näillä kyselyillä saadun palautteen esityttäminen matriisimuodossa. 
3.6	Jatkokehitykseen jääviä toimintoja
Aikataulun tiukkuudesta ja projektin jäsenten työtuntien rajallisuudesta johtuen kaikkien ideoita ja vaatimuksia ei pystytä toteuttamaan tämän projektin puitteissa. Jatkokehitykseen jää muun muassa tarkempien analyysien tuottaminen saadusta palautteesta. Tämä pyritään ottamaan huomioon tiedon tallentamisessa, jotta jatkokehitys tulisi olemaan mahdollisimman kivutonta.
Tulosten teko ja visualisointityökalujen toteutus jäävät toivottaviksi tai myöhemmin toteutettaviksi vaatimuksiksi. Kyselyn käyttäjä- ja käyttöoikeuksien hallinta jää myös ainakin osin jatkokehityksen hoidettavaksi. Toteutusvaiheen aikataulu käy ilmi Projektisuunnitelmasta.
4	Toteutustekniikat- ja työkalut
Luvussa kuvataan Kottarainen-sovelluksen toteuttamiseen käytettäviä työkaluja ja ohjelmointiympäristöjä. Ryhmällä on ohjelmointityökaluna käytössään NetBeans 3.4.1. Käyttöjärjestelminä kahdella projektin koneista on Windows 2000 ja kahdella RedHat Linux 7.3.
4.1	Palvelinratkaisut
Kotka-projektin valitsemaa palvelinratkaisua tullaan käyttämään myös Kottarainen-sovelluksessa, koska Kottarainen tulee hyvin pitkälti toimimaan yhdessä Korppi-opetushallintajärjestelmän kanssa, jossa Kotka-tietokanta on käytössä. Kuvassa 1 esitetään Kottarainen-sovelluksen suhde muihin olemassa oleviin järjestelmiin.

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 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. 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-projektin tavoitteena on tuottaa yleiskäyttöisiä ja hyvin kommentoituja Java-papuja, joita järjestelmän jatkokehittäjät voivat hyödyntää.
4.4	Tietokanta
Kottarainen-projekti tulee käyttämään Kotka-tietokantaa toteutettavan sovelluksen tietokannan pohjana. Vanha tietokanta ei aivan sellaisenaan taivu Kottarainen-sovelluksen tarpeisiin, joten lisäyksiä tarvitaan sekä uusien taulujen että kenttien osalta. Näitä on kuvattu tarkemmin luvussa 10. Tietokannanhallintajärjestelmänä Kotka-kannassa on ollut PostgreSQL, joten Kottarainen-sovelluskin käyttää sitä.
PostgreSQL on vuonna 1986 alkunsa saanut avoimen lähdekoodin relaatiotietokannan hallintaohjelmisto, joka on käytössä Kotka-tietokannassa. Koska Kottarainen-sovelluksessa päätettiin käyttää Kotka-tietokantaa, sekin tulee käyttämään kyseistä ohjelmistoa.
4.5	Apache TomCat
Apache on HTTP-palvelin, joka toimittaa JSP-sivupyynnöt TomCatille ja palauttaa selaimelle sen pyyntöjä koskevat HTML-dokumentit. Sen avulla on mahdollista käyttää SSL-salattua yhteyttä tietojen välittämiseen. Korppi-järjestelmän HTTP-palvelimena on Apache, joten Kottarainen-projekti tulee myös käyttämään tätä palvelinohjelmistoa. 
Apache Sofware Foundationin TomCat on ilmainen palvelin joka ajaa JSP-sivujen toiminnallisuutta ja kääntää ne sellaiseen muotoon, että ne voidaan selaimella esittää kuten tavalliset HTML-sivut. Tarkemmin ilmaistuna se on palvelinsovelmasäiliö, johon on sisällytetty mukaan myös WWW-palvelimen toiminnallisuus. Kottarainen-projektissa TomCatia käytetään kuitenkin vain JSP-sivujen ja servlettien käsittelemiseen.
5	Käyttöliittymä
Luvussa kuvataan Kottarainen-sovelluksen käyttöliittymän ulkoasua.
Korppi-järjestelmän navigointipalkkiin lisätään Kyselyiden hallinta -linkki, josta avautuu näkymä Kottarainen-sovelluksen aloitussivulle.
5.1	Kyselyn luomisen aloitussivu
Kuvassa 3 on näkymä kyselyn laatimisen aloitussivusta, johon on täytettävä kyselyyn liitettävät yleiset tiedot. Käyttäjä ei pääse luomaan varsinaista kyselyä, mikäli kyseisiä tietoja ei ole täytetty. 
Hae valmis kysymysryhmä -painikkeesta pääsee noutamaan kysymyspankissa valmiina olevia kohteita.
Luo kysymysryhmä -painikkeesta laatija pääsee tekemään kysymysryhmää.
Näytä lisäominaisuudet -linkistä saa esiin tavallisesti piilossa olevat lisäominaisuudet, kuten kyselyn käyttöoikeusasetukset. Sivusta on olemassa laajennettu näkymä, joka edellä mainittua painiketta painamalla tulee kyselyn laatijalle. Lisäominaisuudet saa piilotettua laajennetusta näkymästä linkistä Piilota lisäominaisuudet.

Kuva 3: Kyselyn luomisen aloitussivu.
5.2	Kysymysryhmän luominen
Kysymysryhmän luominen alkaa kuvan 4 esittämässä näkymässä. Laatija voi mennä hakemaan kohteita kysymyspankista painamalla Hae valmis kysymysryhmä -painiketta. 
Laatija voi myös aloittaa luomaan uutta ryhmää täyttämällä ryhmälle otsikkotiedot sekä valitsemalla alustavasti kysymysten lukumäärän.
Kysymysryhmän laatimisessa on myös laajennettu sivu. Kyseisiin lisäominaisuuksin voi muun muassa määrittää kysymysten visuaalisen järjestyksen kyselylomakkeelle. Näkymän saa esiin klikkaamalla Näytä lisäominaisuudet -painiketta.

Kuva 4: Kysymysryhmän luominen.
5.3	Kysymyksien muokkaaminen
Kysymyksien muokkaaminen tapahtuu kuvan 5 esittämällä sivulla. Ryhmään kuuluu niin monta kysymystä kuin laatija on edellisellä sivulla valinnut luotavaksi, mutta ryhmään saa haettua pankista lisää kysymyksiä tai luotua itse uusia. Kysymyksiä saa myös helposti poistettua ryhmästä valitsemalla poistettavat kysymykset ja painalla painiketta Poista merkityt.
Kysymysryhmän laatimisessa on myös laajennettu sivu. Kyseisiin lisäominaisuuksin voi muun muassa määrittää kysymysten visuaalisen järjestyksen kyselylomakkeelle. Näkymän saa esiin klikkaamalla Näytä lisäominaisuudet -painiketta.
Kun kysymysryhmälle on luotu otsikko ja kysymyksille valittu tyypit, pongahtaa laatijalle näkyviin kuvan 6 laajempi kyselyn laadintanäkymä. Laajempi näkymä tarkoittaa sitä, että käyttäjä pääsee määrittämään esimerkiksi alasvetovalikkojen vastausvaihtoehtotekstejä.

Kuva 5: Kysymyksien laadinnan käyttöliittymänäkymä.

Kuva 6: Kysymysten laadinnan laajennettu näkymä.
5.4	
Kyselyn esikatselu
Laatija pääsee koska tahansa kyselyä, kysymysryhmää tai kysymystä luodessaan tarkastelemaan kyseisen kohteen näkymää vastaajan näkökulmasta valitsemalla Lomakkeen esikatselu -linkin. Kuva 7 esittää esikatselunäkymää.

Kuva 7: Kyselyn esikatselu.
6	Kottarainen-sovelluksen tietokantasuunnitelma
Kotka-tietokantaan tehtiin Kottarainen-sovellusta varten kokonaan oma osio, koska olemassa oleva rakenne ei soveltunut kaikkien haluttujen ominaisuuksien toteuttamiseen. 
Tässä luvussa esitellään sovellusta varten luodut uudet tietokantataulut ja tietokannan rakennekaavio. Tietokannan ER-kaavio ja tarkennetut kuvaukset löytyvät tietokantaraportista.
6.1	
Tietokannan rakennekaavio
Tietokannan rakennekaaviosta (kuva8) käy ilmi projektia varten luodut uudet taulut ja niiden sisältämät kentät.

Kuva 1: Tietokannan rakennekaavio
6.2	
Tietoa varastoivat taulut
Nimi	questionnaire	
Tarkoitus	Sisältää kyselyn perustiedot.	
Avainkenttä	questionnaireid	
Viiteavaimet	bankgroupid	Osoittaa tauluun questionbankgroup. Viitteen arvo kertoo kyselyn ryhmittelyn kysymyspankissa, tai sen ettei se näy pankissa ollenkaan.	
	bankuserightid	Osoittaa tuluun question_bankuseright. Viitteen arvo kertoo kyselyn kopiointioikeuden kysymyspankista.	
	personid	Osoittaa tauluun person. Viitten arvo kertoo, kuka on luonut kyselyn (kyselyn omistaja).	

Nimi	question	
Tarkoitus	Sisältää yksittäisen kysymyksen perustiedot. Käyttöliittymätasolla kysymys on teksti, joka esittää kysyttävän asian	
Avainkenttä	questionid	
Viiteavaimet	questiontypeid	Osoittaa tauluun questiontype. Viitteen arvo kertoo kysymystyypin.	
	bankgroupid	Osoittaa tauluun questionbankgroup. Viitteen arvo kertoo kysymyksen ryhmittelyn kysymyspankissa, tai sen ettei se näy pankissa ollenkaan.	
	bankuserightid	Osoittaa tuluun question_bankuseright. Viitteen arvo kertoo kysymyksen kopiointioikeuden kysymyspankista.	
	personid	Osoittaa tauluun person. Viitten arvo kertoo, kuka on luonut kysymyksen (kysymyksen omistaja).	

Nimi	questiongroup	
Tarkoitus	Sisältää kysymysten ryhmittelytiedot. Taulun rakenne on rekursiivinen, joten alkiot muodostavat puurakenteen, jossa kysymysryhmät voivat sijaita toistensa sisällä. Huomioitava seikka on, että kysymysryhmän sisällä voi olla sekä kysymyksiä että muita kysymysryhmiä	
Avainkenttä	questiongroupid	
Viiteavaimet	parentid	Osoittaa saman taulun questiongroupid-kenttään. Mikäli kentällä ei ole arvo (null), kysymysryhmä on suoraan kyselyn alainen kysymysryhmä. Muutoin arvo kertoo kysymysryhmän isäryhmän.	
	bankgroupid	Osoittaa tauluun questionbankgroup. Viitteen arvo kertoo kysymysryhmän ryhmittelyn kysymyspankissa, tai sen ettei se näy pankissa ollenkaan.	
	bankuserightid	Osoittaa tuluun question_bankuseright. Viitteen arvo kertoo kysymysryhmän kopiointioikeuden kysymyspankista.	
	personid	Osoittaa tauluun person. Viitten arvo kertoo, kuka on luonut kyselymysryhmän (kysymysryhmän omistaja).	

Nimi	questionfield	
Tarkoitus	Sisältää kysymyksen kenttään/kenttiin liittyvät tiedot. Käyttöliittymätasolla kenttä edustaa html-komponenttia (radiopainike,valintaruutu,tekstirivi, tekstialue, valintalistan alkio).	
Avainkenttä	questionfieldid	
Viiteavaimet	questionid	Osoittaa tauluun question. Kertoo mihin kysymykseen kenttä liittyy.	

Nimi	questionresult	
Tarkoitus	Vastaus tiettyyn kenttään. Huomioitavaa on, että esimerkiksi radiopainikekysymyksen kohdalla vastaus koskee yksittäistä radiopainiketta, ei kysymystä.	
Avainkenttä	questionresultid	
Viiteavaimet	questionfieldid	Osoittaa tauluun questionfield ja kertoo mihin kenttään vastaus liittyy.	
	personid	Osoittaa tauluun person. Viitten arvo kertoo kenelle vastaus on osoitettu.	
	markerid	Osoittaa tauluun person. Viitteen arvo kertoo kuka vastauksen on antanut.	

6.3	
Viitetaulut
Nimi	questionnaire_group	
Tarkoitus	Yhdistää kyselyn tiettyyn käyttäjäryhmään. Taulussa määritellään myös toiminto, joka ryhmälle kyseiseen kyselyyn annetaan.	
Avainkenttä	questionnaireid, usergroupid, questionnaireactionid	
Viiteavaimet	questionnaireid	Osoittaa tauluun questionnaire ja kertoo mihin kyselyyn viitataan.	
	usergroupid	Osoittaa tauluun usergroup ja kertoo mille ryhmälle toiminto-oikeus annettaan.	
	questionnaireactionid	Osoittaa tauluun questionnarieaction ja kertoo mikä oikeus ryhmälle annetaan.	

Nimi	questionnaire_question	
Tarkoitus	Yhdistää kysymyksen kyselyyn/kyselyihin. Taulussa kerrotaan myös mihin kysymysrymään kysymys kuuluu.	
Avainkenttä	questionnaireid, questionid	
Viiteavaimet	questionnaireid	Osoittaa tauluun questionnaire ja kertoo mihin kyselyyn kysymykset liitetään.	
	questionid	Osoittaa tauluun question ja kertoo mikä kysymys kyselyyn liitetään.	
	questiongroupid	Osoittaa tauluun questiongroup ja kertoo mihin kysymysryhmään kysymys liittyy. Mikäli kentän arvo on tyhjä (null) kysymys liittyy suoraan kyselyyn.	

6.4	
Määritystaulut
Nimi	questionnaireaction	
Tarkoitus	Sisältää eri toiminnot, joita kyselylle voidaan suorittaa. Toimintoja ovat luonti, muokkaus, vastaus, tulosten luonti ja katselu.	
Avainkenttä	questionnaireactionid	

Nimi	questionstatus	
Tarkoitus	Sisältää määrittelyt kyselyn osien mahdollisisista tiloista. Eri tiloja voi olla piilotettu, auki ja luku.	
Avainkenttä	questionstatusid	

Nimi	questiontype	
Tarkoitus	Sisältää kysymyksille mahdolliset tyypit. Näitä ovat tekstirivi, tekstialue, monivalinta, radiopainike ja alasveto.	
Avainkenttä	questiontypeid	

Nimi	question_bankgroup	
Tarkoitus	Sisältää ryhmittelyt, joita kysymyspankissa voi eri kohteille olla. Sisältää myös alkion salattu, jolloin kohde ei ole muiden saatavilla.	
Avainkenttä	bankgroupid	

Nimi	question_bankuseright	
Tarkoitus	Sisältää määrittelyt oikeuksille, joilla kohde on mahdollista uudelleenkäyttää. Eri oikeuksia on viite, viite lukuoikeuksin , kopio ja kopio vastauksin.	
Avainkenttä	bankuserightid	
6.5	
Metatietotaulut
Metatietotaulurakenne on tehty määrittelemään eri kohteiden ominaisuuksia. Tarkoituksena on, että ominaisuuksia voi lisätä jo valmiiseen sovellukseen. Rakenne on sellainen, että kohteeseen liitetyn tiedon typpi ilmaistaan viitteellä, jolloin uuden tyypin lisääminen ei aiheuta muutoksia tietokannan rakenteeseen.

Nimi	question_parametertype	
Tarkoitus	Sisältää määritykset eri metatietotyypeille. Tyyppejä voi lisätä valmiin sovelluksen julkaisun jälkeen.	
Avainkenttä	parametertypeid	

Nimi	questionnaire_parameter	
Tarkoitus	Yhdistää metatiedon kyselyyn. Alkio sisältää tiedon metatiedon tyypistä sekä tiedon varsinaisen sisällön	
Avainkenttä	questionnaireid, parameterid	
Viiteavaimet	questionnaireid	Osoittaa tauluun questionnaire ja kertoo mihin kyselyyn metatieto liitetään.	
	parameterid	Osoittaa tauluun question_parametertype ja kertoo minkä tyyppinen metatieto on kyseessä.	

Nimi	question_parameter	
Tarkoitus	Yhdistää metatiedon kysymykseen. Alkio sisältää tiedon metatiedon tyypistä sekä tiedon varsinaisen sisällön	
Avainkenttä	questionid, parameterid	
Viiteavaimet	questionid	Osoittaa tauluun question ja kertoo mihin kysymykseen metatieto liitetään.	
	parameterid	Osoittaa tauluun question_parametertype ja kertoo minkä tyyppinen metatieto on kyseessä.	

Nimi	questiongroup_parameter	
Tarkoitus	Yhdistää metatiedon kysymysryhmään. Alkio sisältää tiedon metatiedon tyypistä sekä tiedon varsinaisen sisällön	
Avainkenttä	questiongroupid, parameterid	
Viiteavaimet	questiongroupid	Osoittaa tauluun questiongroup ja kertoo mihin kysymysryhmään metatieto liitetään.	
	parameterid	Osoittaa tauluun question_parametertype ja kertoo minkä tyyppinen metatieto on kyseessä.	

Nimi	questionresult_parameter	
Tarkoitus	Yhdistää metatiedon vastaukseen. Alkio sisältää tiedon metatiedon tyypistä sekä tiedon varsinaisen sisällön	
Avainkenttä	questionresultid, parameterid	
Viiteavaimet	questionresultid	Osoittaa tauluun questionresult ja kertoo mihin vastaukseen metatieto liitetään.	
	parameterid	Osoittaa tauluun question_parametertype ja kertoo minkä tyyppinen metatieto on kyseessä.	
7	Ohjelmakoodin kommentointi ja nimeämiskäytännöt
Ohjelmakoodin kommentoinnissa käytetään yhtenäisyyden vuoksi samantyylistä ratkaisua kuin aiemmat Korppi-järjestelmää kehittäneet projektit ovat käyttäneet. 
Seuraavassa on esimerkki kommenttilohkosta sekä luokan ja funktioiden kommentoinnista.

/********************************************************************
*               PAGE DESCRIPTION
*********************************************************************
*
*               NAME:           kommentointi.jsp
*               LANGUAGE:       jsp
*               DATE:           31.3.2003
*               PURPOSE:        Demostrates commenting..
*               AUTHOR:         Tiina Pöyhönen, Jyväskylän yliopisto
*
*********************************************************************
*               COPYRIGHT (C) KOTTARAINEN-PROJEKTIRYHMÄ
*               Limited rights granted. Please refer to license
*********************************************************************
 
*********************************************************************
*               UPDATES
*********************************************************************
*
*   30.3.2003 Initial release
*   31.3.2003 Added something.. (Tiina Pöyhönen)
*
********************************************************************/

   /** Function does this and that...
     * @param param1 is parameter which is given to function
     * @param param2 is second parameter given to function
     * @throws SomeException which is some kind of an exception
     * @return Return value
     */

public String ThisAndThat(int param1, param2) throws SomeException {
	if (param1 != param2) {
	   throw new SomeException("Some kind of exception..");
	}
	else {
	  //do this and that..	
	}
	return value;
   }

/********************************************************************
*               COPYRIGHT (C) KOTTARAINEN-PROJEKTIRYHMÄ
*               Limited rights granted. Please refer to license
********************************************************************/

8	Testausperiaatteita
Testausta suoritetaan koko ajan sovellusta kehitettäessä niin, että jokainen sovelluksen komponentti on toimiva ennen yhdistämistä muihin osiin. Sovelluksen osien valmistuttua ne yhdistetään yksi kerrallaan isommaksi kokonaisuudeksi. Tällöin pyritään löytämään kaikki mahdolliset ongelmakohdat sovelluksessa sehä testaamaan ja korjaamaan toiminta.
Sovellus pyritään testaamaan toimivaksi kaikilla Kottarainen-ryhmällä käytössä olevilla selaimilla sekä Windows- että Linux-ympäristössä. Käytössä olevia selaimia Linuxissa ovat Opera 6.1, Netscape Communicator 4.79 ja Mozilla 1.0.1. Windowsissa puolestaan on käytössä Netscape Navigator 7.01, Internet Explorer 6.0, Opera 7.03 ja Mozilla 1.3.
Kottarainen-projektin osalta tärkein toteutettava osa sovelluksesta on helppokäyttöinen kyselynlaadintaosio, joten sen osion käyttöliittymän prototyyppi pyritään saamaan ajoissa valmiiksi ja testattavaksi. Protyypistä pyydetään palautetta tilaajilta ja tulevilta käyttäjiltä jo ennen sovelluksen valmistumista, jotta kaikkien mielipide käytettävyydestä saadaan varmasti huomioitua. 
Testaukseen osallistuvat ryhmän jäsenten lisäksi ainakin tilaajien edustajat ja ohjaajat. Toivottavaa olisi, että ainakin käyttöliittymään saataisiin mielipiteitä myös ihmisiltä, jotka eivät ole ottaneet osaa sovelluksen suunnitteluun projektin kuluessa. Näin saataisiin tuoreita mielipiteitä ja ehkä havaittaisiin ongelmakohdat, joille sovelluksen kehittämiseen osallistuneet eivät havaitse.
9	Yhteenveto
Kottarainen-projektiryhmä toteuttaa WWW-pohjaisen kyselyjen laatimis-, hallinta- ja analysointisovelluksen Jyväskylän yliopiston käyttöön. Sovelluksen osia ovat kyselyiden luominen WWW-ympäristöön, kyselyyn vastaaminen, vastausten hallinta sekä tulosten muodostaminen ja esittäminen.
Tässä dokumentissa kuvataan Kottarainen-sovellukselle asetetut tavoitteet sekä toimintojen ja ominaisuuksien priorisointi. Suunnitelmassa kuvataan projektissa käytettäviä työkaluja sekä sovellusympäristöjä. Lisäksi dokumentissa on kuvattuna sovelluksen tietokanta ja käyttöliittymä.
Lähteet 
[1] Hillebrand Minna, Silván Markus, Vanhanen Antti ja Ylitalo Marko, ”Koppelo-projektin projektikansio”, Jyväskylän yliopisto, tietotekniikan laitos, 2002.
[2] Hilpinen Toni, Koivuniemi Marko, Mäkinen Jussi ja Nurminen Miika, ”Kiuru-projektin projektikansio”, Jyväskylän yliopisto, tietotekniikan laitos 2002.
[3] Kyppö Jorma ja Vesterholm Mika, ”Java-ohjelmointi”, Talentum Media Oy, 2001.
[4] Antti Auerin, Eija Ihanaisen ja Jari Rantamäen toimittamat esimerkit heidän tarpeistaan.
[5] Sähköpostikeskustelu Harri Tuomen kanssa, liittyen Tomcat:in tekniseen toimintaan, 13.3.2003.