TIETOJENKÄSITTELYTIETEEN LAITOS Ohjelmistotuotantoprojekti 04.09.2006 Ilmoittautumisten profiloija (jatkoprojekti) Ilpo2 Ylläpitodokumentti 1.0 Hemminki Samuli Herranen Mikko Hinkkanen Tero Mäkelä Ari Piuva Tero Töyli Terhi
Ohjaaja Asiakas Sinerma Olli Taina Juha Tekninen yhteyshenkilö Taina Juha Vastuuhenkilö Verkamo Inkeri Versiohistoria Versio Päiväys Muutokset 0.1 28.08.2006 1. versio 0.2 29.08.2006 lisätty järjestelmätestausta 0.3 30.08.2006 lisäyksiä ja korjauksia 0.4 30.08.2006 korjaus 0.5 30.08.2006 lisätty toteuttamaton vaatimus, muokattu ulkomuotoa 0.6 01.09.2006 lisäyksiä ja korjauksia. 0.7 03.09.2006 korjattu monen opiskelijan siirtäminen 0.8 03.09.2006 muokattu ulkonäköä 1.0 04.09.2006 jäädytetty versio
Sisältö 1 Johdanto... 1 1.1 Termit ja määritelmät... 1 2 Asennusohje ja käynnistys... 4 3 Koodin ylläpito... 5 4 Testaus... 6 4.1 Järjestelmätestauksen aikana havaitut virheet... 6 5 Toteuttamatta jääneet vaatimukset... 7 5.1 Toteuttamattomat normaalintason vaatimukset... 7 5.2 Toteuttamattomat matalan tason vaatimukset... 8
1 Johdanto Ohjelmistotuotantoprojekti-kurssilla opiskelijat jaetaan pienryhmiin kurssille ilmoittautumisen yhteydessä annettujen taustatietojen ja ryhmätoiveiden mukaisesti. Tavoitteena ryhmäjaossa on muodostaa mahdollisimman tarkoituksenmukaisia, tasakokoisia ja täysiä ryhmiä ja toisaalta täyttää opiskelijoiden esittämiä toiveita mahdollisuuksien mukaan. Ohjelmistotuotantoprojekti-kurssilla samaan ryhmään on valittava eri tavoin suuntautuneita henkilöitä. Tällä hetkellä kurssin vastuuhenkilö tekee tämän jaottelun olemassa olevalla Ilpo-ohjelmalla. Tarkoitus on kehittää Ilpoohjelmaa versioon 2, joka helpottaa jaottelijan tehtävää entisestään. Ylläpitodokumentti esittää ohjelman jatkokehittämiselle oleellisen tiedon.. 1.1 Termit ja määritelmät AWT: Javan matalan tason käyttöliittymäkirjasto, johon korkeamman tason alustariippumaton Swing perustuu. Asetustiedosto: Ohjelman käyttöasetukset sisältävä tiedosto Dialogi: Vuorovaikutteinen käyttöliittymäelementti, jonka avulla käyttäjälle annetaan tai häneltä pyydetään tietoa. Heuristiikka: Heuristiikka tarkoittaa keksimistaitoa. Näin ollen, heuristinen algoritmi on sellainen, joka saamastaan syötteestään osaa "päätellä" halutun lopputuloksen. Algoritmin tuottama lopputulos ei välttämättä ole optimaalinen, mutta se on riittävän hyvä jonkin kriteerin perusteella arvioituna. Ilmo (http://ilmo.cs.helsinki.fi/): Kurssi-ilmoittautumisjärjestelmä opiskelijoille. Järjestelmä on tarkoitettu tietojenkäsittelytieteen laitoksen kursseille ilmoittautumiseen. Ilmolla ilmoittaudutaan myös matematiikan kursseille, mutta sillä ei ole tämän projektin kannalta juuri mitään merkitystä. Ilmoittautujatiedosto: Tiedosto, joka pitää sisällään tiedot kurssille ilmoittautuneista opiskelijoista ja heidän antamista vastauksistaan Ilmo-järjestelmän esittämiin kysymyksiin. Ilpo: Ilpo-ryhmän keväällä 2005 tuottama ja myöhemmin Juha Tainan muokkaama ohjelma kurssi-ilmoittautumisten profilointiin Ilpo2: Ilpon pohjalta kesällä 2006 kehitettävä jatkoprojekti. JAR (Java Archive file format): JAR:n avulla voidaan pakata useita tiedostoja yhteen JAR-tiedostoon. Tyypillisesti JAR-tiedosto sisältää luokkatiedostoja sekä sovelluksiin ja sovelmiin liittyviä lisäresursseja. Järjestyskriteeri: Järjestyskriteerit ovat Ilmo-lomakkeen yksittäisiä vastauksia: esimerkiksi suuntautumislinja, kieli tai esitiedot. Kalenteri: Graafinen käyttöliittymäkomponentti, joka ilmaisee Ohjelmistotuotantoprojekti-kurssin ryhmien tapaamisajat 1
Kovakoodaus: Arvojen upottaminen ohjelman lähdekoodiin Kurssi: Kurssi on opintojakson ilmentymä. Kurssi määritellään erikseen kyseessä olevalle periodille, lukukaudelle ja -vuodelle. Käyttäjä: Ilpolla ja Ilpo2:lla ryhmittelyä suorittava henkilö. Lukitus: Yhden opiskelijan kiinnittäminen pysyvästi tiettyyn ryhmään siten, että opiskelija ei näy enää muissa ryhmissä. Oodi (http://www.helsinki.fi/weboodi/): Opiskelun ja opetuksen tuen tietojärjestelmä. Oodista löytyvät muun muassa opiskelijoiden opintosuoritukset. Opintojakso: Opintojakso määrittelee opetettavalle aihepiirille nimen ja laajuuden sekä muut yleiset luentokerrasta riippumattomat tiedot. Opiskelija: Kurssille ilmoittautunut henkilö, jota sijoitetaan Ilpolla ryhmiin. Opiskelijanäkymä: Ohjelmaikkunan vasemmanpuoleisen osan yläosa, jossa opiskelijat esitetään valitun järjestelyperusteen mukaan ryhmiteltyinä. Opiskelijapallo: Opiskelijaa kuvaava ympyränmuotoinen graafinen elementti Parsiminen: (tässä yhteydessä) Arvojen lukeminen ohjelman syötetiedostosta Tässä dokumentissa prioriteetilla ilmaistaan vaatimusten tärkeyttä ja järjestystä jolla ne toteutetaan. Dokumentissa käytettävät prioriteetit ovat seuraavat: matala, normaali ja korkea. Ryhmittely (Ryhmiin jako): Opiskelijoiden jakaminen ryhmiin. Ryhmä: Kokonaisuus mihin Ilpo-ohjelmalla siirretään opiskelijoita. Ryhmässä on opiskelijoita ja henkilökunnan jäseniä. Ryhmälukitus: Ryhmän lukitseminen siten, että kaikki ryhmässä olevat opiskelijat eivät enää näy muissa ryhmissä. Ryhmänäkymä: Ohjelmaikkunan oikeanpuoleinen osa, jossa projektiryhmät esitetään. Sarjallistuvuus: Sarjallistuvan Java-luokan ilmentymä osaa kirjoittaa oman sisäisen tilansa muodossa, joka soveltuu esimerkiksi levylle tallentamista varten. Sisäinen tietorakenne: Oliorakenne, joka on pelkästään Ilpon ja Ilpo2:n sisäisessä käytössä ja mihin on tallennettu tietoja. 2
Säännöllinen lauseke: Tietyn syntaksin mukainen merkkijono, joka määrittelee joukon merkkijonoja. Tietyn säännöllisen lausekkeen määrittelemien merkkijonojen sanotaan vastaavan tätä säännöllistä lauseketta. Säännöllisiä lausekkeita voidaan käyttää esimerkiksi löytämään kaikki tiettyä säännöllistä lauseketta vastaavat merkkijonoesiintymät tekstistä. Swing: Javan korkeamman tason käyttöliittymäkomponentteja sisältävä pakkaus Tavallinen TKTL:n pöytäkone: Käyttöjärjestelmänä Linux graafisella ikkunointiympäristöllä, näyttö 1280x1024 resoluutiolla sekä vähintään 1.5 GHz suoritin ja vähintään 512Mt keskusmuistia. Tietonäkymä: Ohjelmaikkunan vasemmanpuoleisen osan alaosa, jossa esitetään tietoja esimerkiksi valituista opiskelijoista. Tilapalkki: Käyttöliittymän graafinen elementti, josta suoritetut työvaiheet käyvät ilmi. TKTL: Helsingin yliopiston Tietojenkäsittelytieteen laitos. Tulosryhmä: Järjestyskriteerin mukaisesti tehty järjestely jakaa opiskelijat tulosryhmiin. 3
2 Asennusohje ja käynnistys Ohjelma asennetaan antamalla käsky ant install Ddir=<asennushakemisto>. Asennuksen jälkeen ohjelma voidaan käynnistää komennoilla cd <asennushakemisto> bin/ilpo.sh Tarkemmin ohjelman käytöstä käyttöohjeissa. 4
3 Koodin ylläpito Tässä luvussa on lueteltu koodin kohtia tai toteutustapoja joissa ryhmäläisten mielestä on parantamisen varaa. Ryhmätoiveet on tallennettu kysymyksinä alkaen kysymysnumerosta 101, vaikka oikeasti kyseessä on yksi ainoa (vapaavastaus)kysymys. Lisäksi tuo arvo 101 on kovakoodattu ympäri koodia. Koodiin on myös kovakoodattu, että ryhmät saadaan opiskelijan ilmovastauksista kysymyksenä numero 1. Ohjelman luokat on sidottu hyvin tiukasti toisiinsa, joka osittain rikkoo MVCmallin. Monen sinänsä yleiskäyttöisen luokan yleiskäyttöisyys on tuhottu. Yhdenkään metodin kommenttina ei saisi olla jotakin tyyliin "tätä saadaan kutsua vain luokan x metodista y". Joidenkin luokkien konstruktoreilla on outoja sivuvaikutuksia, joiden kanssa on oltava tarkkana (esim. ristiviittausten luonti). Ohjelmassa on edelleen paljon kovakoodattuja vakioita, erityisesti käyttöliittymäkomponenttien koot. Näin ei pitäisi olla. Osa ohjelman asserteista on ilmeisesti turhia. Tämä ei ole vakavaa. SorttausPerusteRyhmiin-luokka on todella sekava. Sitä ei ole muutettu Ilpo2:n aikana. Myös monet muut käyttöliittymän luokat jäivät sekaviksi. Luokkien SiirtyvatKomponentit ja AsetustiedostoLukija ei tulisi tallentaa mitään tietoja staattisesti Koodiin on jätetty Todo ja Fixme kommentteja kohtiin, joita tekijät ovat pitäneet huomion arvoisina jatkoprojektille. 5
4 Testaus Yksikkötestauksen puute on ongelma. Yksikkötestaus päätettiin toteuttaa siten, että vain ryhmän luomat uudet luokat yksikkötestataan. Ilpon testauskoodia on muutettu siltä osin, että komento ant junit pystytään suorittamaan useimmissa laiteympäristöissä. Laitoksen koneissa tarvittavat jar tiedostoversiot eivät ole synkronissa, joten tämä ei toimi laitoksella. Tästä voisi huomauttaa Jaakkolalle ja kumppaneille. Toinen vaihtoehto olisi jakaa Ilpon mukana antia, joka ei olisi kovinkaan soveliasta. Alkuperäisen Ilpon testit olivat jo alun perin rikki, eikä Ilpo2 ryhmä ottanut työkseen niiden korjaamista. Alkuperäiset testit on nyt poistettu ja jäljellä ovat Heuristiikan ja AsetustiedostoLukijan JUnit-testit. Bugien korjaamisen yms. lokitustarpeeseen voitaisiin tulevaisuudessa ottaa käyttöön log4j:n, josta on ryhmän kokouksissa ollut keskustelua useaan otteeseen. 4.1 Järjestelmätestauksen aikana havaitut virheet Järjestelmätestauksen aikana löydetyt virheet on havaittu ja huomioitu, mutta ajan rajallisuuden vuoksi niiden korjaus on jätetty jatkoprojektille. Vaatimus 3.1.7 Usean opiskelija yhtäaikainen siirtäminen Toimii varauksella. Testattu seuraavasti: 1. Ilpon käynnistys 2. Perustettu uusi kurssi 3. Ladattu aiheet, oppilaat sekä oppilaiden suoritusotteet 4. Luotu kaksi tyhjää ryhmää 5. Valittu useita opiskelijoita opiskelijanäkymästä ja siirretty ne ryhmänäkymässä olevaan ryhmään 6. Valittu ryhmänäkymässä useita opiskelijapalloja ja siirretty ne opiskelijanäkymään Siirto opiskelijanäkymästä ryhmänäkymään toimii. Ryhmänäkymässä ryhmästä toiseen tai takaisin opiskelijanäkymään toimii odotetusti, mikäli opiskelijapalloja valitaan vain yhdestä ryhmästä. Valittaessa opiskelijapalloja useammasta ryhmästä ohjelma käyttäytyy odottamattomasti ja tämän ominaisuuden korjaaminen jätetään jatkoprojektille. 6
5 Toteuttamatta jääneet vaatimukset Tässä kappaleessa listataan Ilpo2 ryhmän toteuttamatta jääneet vaatimukset. Kaikki korkean tason vaatimukset on toteutettu ainakin osittain (ks. kappale 4). Normaalintason vaatimukset on lueteltu kappaleessa 5.1 ja matalantason vaatimukset kappaleessa 5.2. 5.1 Toteuttamattomat normaalintason vaatimukset Vaatimus 3.1.9 Ryhmien tietojen käsittelyn tulee olla mahdollista normaali Seuraavia ryhmän tietoja tulee pystyä tarkastelemaan/käsittelemään: ryhmän nimi, ryhmän aihe, ryhmän ohjaaja, ryhmän asiakas ja ryhmän kokoontumisajat. 3.3.3 Kalenteriosuuden tulee olla lisättävissä normaali Koodin tulee sisältää paikka ohjelmaan myöhemmin mahdollisesti lisättävälle kalenterille. 3.1.13 Opiskelijapallot tulee yksilöidä monivalinnassa normaali Opiskelijanäkymästä pitää pystyä valitsemaan useita opiskelijoita kerralla siten, että opiskelijapallot näkyvät korostettuina ja yksilöityinä ryhmänäkymässä. Kun useita opiskelijapalloja on valittuina, ovat opiskelijoiden tiedot näkyvillä tietonäkymässä. Nimen lisäksi tietonäkymässä tulee näkyä myös opiskelijan henkilötunnus. 7
5.2 Toteuttamattomat matalan tason vaatimukset Vaatimus 3.1.18 Ohjelman asetuksia on pystyttävä muuttamaan ohjelman sisältä matala Ohjelmassa on oltava dialogi, jolla ohjelman asetuksia voidaan muuttaa. Asetukset tallennetaan asetustiedostoon (kts. määrittelydokumentti vaatimus 3.1.3). 3.1.19 Ryhmätoiveita ja vastauksia tulee pystyä päivittämään matala Opiskelijan ryhmätoiveita ja vastauksia tulee pystyä muokkaamaan suoraan ohjelmasta. 3.1.20 Vapaamuotoista tekstiä tulee pystyä lisäämään projektiryhmiin matala Ohjelmistotuotantoprojektiryhmiin pitää voida lisätä vapaamuotoista tekstiä. 3.1.21 Ohjelman tulee tarjota kurssihistoria matala Ohjelman tulee tarjota käyttäjälle pikavalinnat, joista käyttäjä voi ladata korkeintaan viiden viimeksi käsitellyn kurssin joukosta haluamansa. 3.1.22 Ohjelman pitää sisältää kalenteri ryhmien kokoontumisajoista matala Ohjelmassa tulee olla kalenteri, josta näkyy valittuna olevan ryhmän kokoontumisajat. 8