Sisällys
"Projektin kunniakas päättäminen on vähintään yhtä tärkeää kuin sen innokas aloittaminen ja onnekas läpivienti." Lainaus on Helsingin yliopiston Tietojenkäsittelytieteen laitoksen Ohjelmistotuotantoprojektin kotisivulta. Tässä dokumentissa luodaan jälkiviisas katsaus Tahko-ryhmän projektiin.
Projektin tavoitteena oli suunnitella ja toteuttaa tarjouskonfiguraattori, jolla voidaan tietokannassa olevien tuote-, asiakas- ja myyjätietojen pohjalta muodostaa tarjouksia esimerkiksi PDF- ja HTML-muodossa. Tuotetietojen tuli olla hierarkisesti järjestetty, niin että tuotteilla voi olla riippuvuussuhteita toisiinsa. Tietokannan käsittelytyökalujen toteutus ei kuulunut projektin piiriin. Sovelluksella tuli pystyä myös tallettamaan luodut tarjoukset tietokantaan. Sovelluksen tuli olla mahdollisimman geneerinen, esimerkiksi sen käyttöliittymä ja tarjouksen muoto määriteltiin XML-kielellä ja ne olivat näin ollen helposti muokattavissa tarpeiden mukaan. Sovellusta tulisivat käyttämään lähinnä myyjät ja sen tuli soveltua kannettavissa tietokoneissa käytettäväksi.
Sovelluksesta pyrittiin tekemään mahdollisimman toimiva ja sitä tuli pystyä tarvittaessa myöhemmin myös laajentamaan.
Tässä luvussa perehdytään projektin kulkuun vaiheittain.
Projekti pysyi aikataulussaan hyvin toteutusvaiheeseen asti. Järjestelmätestauksen aloittaminen venyi huomattavasti eteenpäin toteutusvaiheessa ilmenneiden odottamattomien ongelmien vuoksi (ks. kappale 3.5: Toteutus).
Testausvaiheen viivästymistä helpotti kuitenkin se, että huolimatta toteutusvaiheen viivästymisestä osa projektin jäsenistä vapautui toteutuksesta aikaisemmin tekemään järjestelmätestauksen testaussuunnitelmaa.
Projektin valmisteluvaiheessa jaettiin puheenjohtajuuden, varapuheenjohtajuuden, dokumentoinnin, kokouspöytäkirjojen kirjoittamisen ensisijaiset vastuut. Tästä jaosta lisää on kappaleessa 4.2: Työnjako.
Valmisteluvaiheessa päätettiin myös käyttää dokumentointitekniikkana Docbook-standardin mukaisilla XSL-tyylitiedostoilla luettaviksi dokumenteiksi muunnettavia XML-tiedostoja. Tähän perehtyminen ja sopivien välineiden asentaminen vaati alkuvaiheessa jonkin verran työtä.
Projektin määrittelyvaihe aloitettiin syyskuun toisella viikolla, ja se kesti kaksi viikkoa. Määrittelyvaiheessa käytiin keskusteluja asiakkaan edustajan, Tex Härmeen, kanssa. Asiakkaalle lähetettiin myös lopullinen vaatimusdokumentti hyväksymistä varten. Määrittelydokumentti saatiin sisällöltään valmiiksi 25.11.
Määrittelyvaihe pysyi kohtuullisen hyvin aikataulussa. Asiakkaalle hyväksyttäväksi vaatimusodokumentti lähetettiin, kun suunnitteluvaihe oli jo alkanut. Käytännössä nämä kaksi vaihetta menivät siis osittain hieman päällekkäin.
Suunnitteluvaihe alkoi heti määrittelydokumentin valmistumisen jälkeen. Suunnittelun osuutta projektissa olisi voinut jonkin verran lisätä - koska suunnittelua ei ollut tehty täysin aukottomasti, suunnittelullisiin kysymyksiin jouduttiin paneutumaan vielä toteutusvaiheessa. Tämä oli kuitenkin välttämätöntä tässä aikataulussa; koska tekniikka vaati perehtymistä ja etenkin XSL-muunnosten ja jossakin määrin JSP:n toteutusmahdollisuuksista oli epätietoisuutta, suunnittelulliset näkemykset tarkentuivat vasta toteutusvaiheessa, jossa käytettyihin tekniikoihin päästiin perehtymään tarkemmin.
Toteutus alkoi tekniikoihin perehtymisellä. Ryhmän osaaminen oli jakaantunut siinä mielessä tasaisesti, että jokaisesta käytettävästä tekniikasta ryhmässä oli jollakin jonkin verran aiempaa kokemusta.
Kaikki osallistuivat toteutusvaiheen koodaamistyöhön. Päävastuun toteutuksesta kantoi Janne Savukoski, jolla oli myös eniten aikaisempaa kokemusta käytetyistä tekniikoista.
Toteutusvaihe venyi suunniteltua pidemmälle odottamattomien teknisten ongelmien vuoksi. Apachen Xalan XML-parseri ei toiminut yhteen tietojenkäsittelytieteen laitoksen Java-version kanssa, ja ongelman syyn selvittäminen kesti kauan. Lisäksi JDBC-yhteyden saaminen tietokantaan tuotti ylimääräistä työtä.
Toinen syy toteutusvaiheen venymiseen oli se, että aihepiiri oli uusi, ja järjestelmän, jonka logiikka on keskittynyt XSL-tiedostoihin, ohjelmointi modulaarisesti siten, että kaikille ryhmäläisille olisi riittänyt jatkuvasti toteutettavaa, osoittautui vaikeaksi. Ennen logiikkatiedostojen ohjelmointia JSP:llä ja Servleteillä toimivan järjestelmän toimimaansaaminen vaati ensin paljon työtä, johon tarvittiin nimenomaan Jannen asiantuntemusta. Tuotteen sisäiset rajapinnat ja niiden perusteella tehdyn työnjaon epäonnistuminen oli asia, joka hidasti huomattavasti toteutusvaihetta.
Kaikkea määriteltyä toiminnallisuutta ei ehditty toteuttaa; tarjouksen latausominaisuus jäi kokonaan toteuttamatta.
Testaussuunnitelman tekeminen aloitettiin limittäin toteutusvaiheen loppuosan kanssa. Järjestelmätestaus tehtiin suunnitelman perusteella. Yksikkötestit tehtiin JUnit-testikehystä apuna käyttäen siten, että jokaisen luokan rajapinta pyrittiin testaamaan mahdollisimman kattavasti.
Dokumentointi ei oikeastaan ollut erillinen työvaihe vaan jokaisen vaiheen tuotoksena syntyi jokin dokumentti. Projektin aikana tuotettiin seuraavat dokumentit:
Dokumenteista vastasi ensisijaisesti Piia Porvali, joka koosti dokumentit muun ryhmän tekstidokumentteina antamien osien perusteella tarvittavan muotoisiksi XML-dokumenteiksi, ja konvertoi ne luettavaan HTML-muotoon.
Dokumentointikäytäntö, jossa yksi henkilö vastasi tekstimuotoisten dokumenttien muuntamisesta XML-muotoon, teetti dokumenttivastaavalle paljon "turhaa" työtä. Tämä käytäntö verrattuna siihen, että kaikki olisivat kirjoittaneet dokumenttiosionsa suoraan XML-muotoon, oli perusteltua alkuvaiheessa, kun XML ja XSL-muunnokset eivät olleet vielä kaikille ryhmän jäsenille tuttuja. Se kuitenkin toi dokumenttivastaavalle paljon turhaa työtä, kun sisällöllisesti valmiit dokumentit piti vielä erikseen läpikäydä ja "tagittaa". Dokumentin ulkoasun määrääminen Docbook-tyylitiedostoilla mahdollistaa projektissa dokumentoinnin vastuun jakamisen tasaisemmin koko ryhmälle, koska dokumentointivastaavan sijaan tyylitiedosto vastaa dokumenttien yhdenmukaisuudesta.
Projekti onnistui sen vaativuuteen nähden kohtalaisen hyvin. Perusarkkitehtuuri osoittautui toimivaksi ja hyvin muokkautuvaksi, mikä onkin projektin jatkon kannalta tärkeää. Käyttöliittymän viimeistely ja loppusovelluksen yksityiskohdat jäivät projektissa toiselle sijalle. Helpon konfiguroitavuuden ansiosta asiakas pystyy tekemään näihin piirteisiin muutoksia kuitenkin itsekin, ja luonnollisesti asiakastaho tunteekin nämä yksityiskohdat paremmin itse.
Projektin testauspuoli jäi köykäiseksi etenkin yksikkötestien osalta; huomattiin liian myöhään virheitä, joiden korjaamiselle ei kuitenkaan riittänyt aikaa. Vaatimusdokumentissa kuvattuja ominaisuuksia ei ehditty myöskään kaikkia toteuttaa; tarjousten lataustoiminto jäi kesken.
Osaaminen ryhmän kesken oli tasaantunut melko hyvin tarvittavien osa-alueiden kesken. Toisaalta jokainen pääsi jakamaan tietouttaan joltakin alueelta muulle ryhmälle, toisaalta taas muu ryhmä oppi muista osa-alueista. Tällaisia osa-alueita, jotka tulivat tutuksi jossakin määrin koko ryhmälle, olivat XML, XSL-muunnokset, Docbook-standardi, JSP, Java Servletit ja JDBC. Lisäksi projekti opetti ryhmä- ja projektityöskentelytaitoja.
Projektista opittiin jälleen kerran myös se, kuinka tärkeää testaukselle on varata riittävästi aikaa. Ei riitä, että virheet löytyvät, niiden korjaukselle pitäisi myös olla testauksen yhteydessä aikaa.
Tässä luvussa käsitellään yleisiä projektiin liittyviä seikkoja kuten projektiryhmää ja käytettyjä menetelmiä.
Ryhmään kuului kuusi jäsentä: Heikki Hiltunen, Tero Kallio, Anu Leponiemi, Piia Porvali, Petri Savolainen ja Janne Savukoski. Ryhmähenki oli hyvä. Osaamisalueiden tasainen jakaantuminen helpotti ryhmän työskentelyä.
Projektisuunnitelmaa tehtäessä jo valmisteluvaiheessa päätettiin projektin alustavasta työnjaosta. Petri toimi puheenjohtajana, Tero oli varapuheenjohtajana, ja pääsikin heiluttamaan nuijaa parissa kokouksessa. Anu oli sihteeri ja vastuussa projektin kokouspöytäkirjoista. Piia oli dokumentointivastaava ja koosti ryhmän muiden jäsenten valmistelemista tekstidokumenteista lopulliset dokumentit. Heikille ja Jannelle ei tässä vaiheessa allokoitu projektin yleiseen huoltoon liittyviä tehtäviä. Kummastakin tuli kuitenkin etenkin toteutusvaiheessa tärkeä lenkki projektin onnistumisen kannalta.
Ryhmä piti yhteyttä ensisijaisesti sähköpostilla. Myös puhelimella soiteltiin silloin tällöin. Lisäksi asioista keskusteltiin jäsenten tavatessa ruokaillessa jne.
Varsinainen ohjelmointityö tehtiin Javalla. XML- ja XSL-tiedostojen ja Javan kehitystyökaluna käytettiin jokaisen mieltymyksen mukaista editoria, etupäässä Emacsia.
Java Servletien ajamiseen käytettiin Tomcat Standalone -asennusta. Tomcat käynnisttiin kehitysvaiheessa jokaisen työkoneella erikseen. Menetelmä toimi hyvin kehitystyön aikana lukuunottamatta lokitiedostojen lukittumista toisinaan päällekkäisten ajojen aikana.
Tietokantana toimi PostgreSQL, joka asennettiin kehitysvaiheessa Petrin tunnuksen alle, ja jota kutsuttiin erillisestä JDBC-palikasta. Periaatteessa myös muita JDBC-kantoja tuetaan, mutta vain PostgreSQL testattiin.
Versionhallintaan käytettiin CVS:aa. CVS toimi hyvin, osa osasi käyttää sitä jo ennestään ja muutkin ryhmän jäsenet oppivat käyttämään sitä nopeasti. CVS:n käytöstä oli vain hyvää sanottavaa.
Kokouksia pidettiin normaalisti kahdesti viikossa, tiistaisin ja perjantaisin. Anulla oli loka-marraskuun seminaari perjantaisin päällekkäin kokousajan kanssa, joten näistä kokouksista pöytäkirjoja ei tehty. Pöytäkirjoja ei ol säilynyt jälkipolville myöskään toteutusvaiheen kokouksista, koska kokouksia vähennettiin tällöin radikaalisti - katsottiin, että tärkeämpää projektin edistymiselle on toteuttaa kuin istua kokouksissa. Toteuttaessa ryhmä kommunikoi keskenään joka tapauksessa, ja ylimääräinen palavereissa istuminen olisi vain hidastanut. Projektipalaverien pöytäkirjat ovat tämän dokumentin liitteenä.
Tämän dokumentin liitteenä ovat projektin työtuntilistat. Listoista näkyy, mihin projektin työtehtävään tuntimäärä on käytetty. Tuntilistoista voi tulkita esimerkiksi sen, että testaukselle on jätetty äärimmäisen vähän aikaa. Testausajasta suurin osa kului testausdokumentin kirjoittamiseen.
Jokaiseen vaiheeseen on laskettu mukaan myös siitä tehty dokumentti. Muuta-kategoriaan on laskettu mm. kokousten esityslistojen ja pöytäkirjojen laadintaa ja mekaanista dokumenttien koostamista, joten Petrin, Anun ja Piian tuntilistat ovat siltä osin suuremmat.
Tässä luvussa lyhyesti asiakkaista ja projektin ohjaajista.
Projektiryhmä onnistui tavoitteessaan kohtalaisesti - perusarkkitehtuuri, konfiguroitavuus ja laajennettavuus onnistuivat yli odotusten. Erityisen hyvin täyttyi laajennettavuus-kriteeri - ohjelmistosta tuli erittäin hyvin erilaisiin tarpeisiin mukautuva XML-konfigurointitiedostojen ansiosta, jotka sisältävät koko sovelluksen "business-logiikan".
Parannettavaa kuitenkin jäi. Vaatimuksiin kuulunut tarjouksen lataamistoiminto jäi toteuttamatta. Myös ohjelman testaus jäi hyvin kevyeksi, eikä järjestelmätestauksessa löytyneitä bugeja ehditty korjata. Järjestelmän ulkoasu jäi myös hieman hiomattomaksi, mutta toisaalta asiakas muokkaa ulkoasun kuitenkin viime kädessä itse.