• Ei tuloksia

5. TOTEUTUS

5.2 Käytetyt työkalut

Erilaisten yksinkertaisten sovellusten toteuttaminen onnistuu periaatteessa vaikkapa pel-kän tekstieditorin, komentorivin ja kääntäjän avulla, mutta toimivat työkalut tehostavat ja nopeuttavat työtä. Sovelluksen rakenteen ja toimintojen monimutkaistuessa hyvien työ-kalujen merkitys korostuu entisestään. Verkkokaupan toteutuksessa käytettyjen työkalu-jen valinnat perustuivat aiemmin tehtyihin teknologiavalintoihin ja toteuttajien aiempaan tietämykseen erilaisten työkalujen käytöstä.

5.2.1 Scala IDE

Ohjelmoinnin kannalta tärkein työkalu on jonkinlainen editori, jolla ohjelmakoodia muo-kataan, mutta ohjelmointiympäristöllä työskentelyä voidaan tehostaa erilaisten lisäomi-naisuuksien avulla. Scalan myötä ohjelmointiympäristön valinta kohdistui Scala IDE:een [23] ja käytännössä koko verkkokaupan kehitystyö tehtiin sitä käyttäen. Scala IDE on rakennettu Java-ohjelmoijille tutun Eclipse-ohjelmointiympäristön päälle siten, että mu-kaan on lisätty tuki Scala-kääntäjälle ja Scala-projekteille. Scala IDE:n voi ladata joko omana erillisenä pakettinaan tai Eclipsen päivitystenhallinnan kautta lisäosana. Ympäris-tön kehittäjätiimin jäseniin kuuluu myös Scalan ja Play Frameworkin kehittäjinä tunnetun Typesafen henkilökuntaa.

Kaiken kaikkiaan Scala IDE:n ominaisuudet ovat Eclipseä aiemmin käyttäneiden kan-nalta tuttuja ja intuitiivisia. Scala IDE:een on lisätty muun muassa Scalaa tukeva funkti-oiden nimien täydennys ja syntaksin korostus sekä velhotoiminnot luokkien ja olifunkti-oiden generointia varten [23]. Koodin kirjoittamisen kannalta käteviä ovat automaattisen muo-toilun ja sisennyksen aputoiminnot, jotka helpottavat rakenteen ylläpitämistä. Hankalam-pien ongelmatilanteiden selvittämisen kannalta on myös hyvä seikka, että ohjelmakoodin debuggaaminen onnistuu mukaan integroidulla Scala-debuggerilla. Scala IDE sisältää myös tuen Play Frameworkin reititystoiminnallisuudelle ja sivupohjakielelle, mikä hel-pottaa käyttöliittymän toteuttamista.

5.2.2 sbt

Sovelluksen kääntämistä helpottavat build-työkalut, joista Scalan kanssa suosituin on sbt [24]. Sbt tarjoaa suoraviivaiset keinot Scala-koodin kääntämiseen ja se integroituu myös Play Frameworkin kanssa. Kääntämisprosessin määrittely tehdään Scalalla kirjoitettujen sbt-tiedostojen ja Build.scala-tiedostojen kautta. Näihin Scala-ohjelmia muistuttaviin tie-dostoihin kirjataan tarvittavat kirjastot versioineen ja määritellään sovelluksen osat riip-puvuuksineen projekteina. Konfiguraationsa avulla sbt vastaa myös paketinhallinnasta.

Sbt sisältää oman komentokehotteensa, jonka kautta sitä käytetään [24]. Yhdellä yksin-kertaisella komennolla onnistuvat esimerkiksi sovelluksen käynnistäminen ajoon kehi-tysmoodissa, yksikkötestien ajaminen, projektikansioiden siivoaminen ja lisäosan avulla

Eclipsen ymmärtämien projektitiedostojen generointi. Myös sovelluksen paketointi jul-kaisua varten onnistuu kätevästi yhden komennon avulla. Käytännössä sbt osaa generoida esimerkiksi käyttöympäristöön siirtämisen kannalta kätevän zip-paketin, jonka sisältä löytyy Java-virtuaalikoneella ajettava pakettikokonaisuus ja myös kokonaisuuden käyn-nistämisen mahdollistava skriptitiedosto.

Verkkokaupan toteutuksessa sovellus jaettiin toimintojen mukaan kymmeneen erilaiseen sbt-projektiin, joista kaksi paketoivat muut ajettaviksi kokonaisuuksiksi. Yhden build-tiedoston käyttäminen mahdollisti kaikkien riippuvuuksien määrittelyn samassa paikassa.

Ulkoisia kirjastoja otettiin käyttöön sbt:n avulla reilu kaksikymmentä.

5.2.3 JIRA

Toteutettavien ominaisuuksien ja muutospyyntöjen hallinnan helpottamiseksi projektissa päätettiin käyttää JIRA-tehtävienhallintaohjelmistoa. JIRA [25] on Atlassianin kehittämä monipuolisia projektinhallintaominaisuuksia sisältävä sovellus, jonka avulla projektin to-teutuksen etenemiseen liittyvät seikat on yksinkertaista kerätä yhteen paikkaan. JIRA:ssa tehtävät voivat sisältää erilaisia tietoja kuvauksesta vastuuhenkilöön ja kommenteista työ-määräarvioon. Tehtäviin voi liittää myös tietoja sovelluksen versioihin liittyen ja JIRA:n integroiminen versionhallintaan tarjoaa mahdollisuuden bugien sekä muiden ongelmien tilan seuraamiseen. Projektin aikana JIRA:aan kirjattiin noin kaksisataa tehtävää ja sitä käytettiin myös apuna iteraatiopalavereissa, kun tarkasteltiin jo toteutettuja ja tulevia ominaisuuksia sekä projektin yleistä etenemistä.

Koska toteutus oli päätetty tehdä ketterien menetelmien mukaisesti, otettiin käyttöön JIRA:n Agile-lisäosa [26]. JIRA Agile parantaa ketterien projektien hallintaa uusien teh-tävienhallintanäkymien avulla. Projektin kaikki tehtävät näytetään suunnittelunäkymässä ryhmiteltynä iteraatiojaksoihin ja tehtäviin, jotka eivät vielä kuulu mihinkään jaksoon.

Samassa näkymässä näytetään myös tehtävien työmääräarviot, mikä on kätevää oikean tehtävämäärän valinnan kannalta. Tehtävien järjestys listalla vastaa niiden toteutuspriori-teettia, ylempänä olevat tehtävät ovat korkeammalla prioriteetilla. Kun haluttu iteraatio-jakso on määritelty, se voidaan käynnistää. Tämän jälkeen käytettävissä on työskentely-näkymä, jossa tehtävät on jaettu kolmeen palstaan niiden tilan mukaan. Tässä näkymässä tehtävien siirtäminen toteutukseen tai valmiiksi on suoraviivaista ja samalla näkymä ha-vainnollistaa kyseisen jakson tilanteen nopeasti.

5.2.4 Git

Verkkokauppaprojektin tuotosten taltioimiseen käytettiin Git-versionhallintaa [27], joka valikoitui käytettäväksi lähinnä aiempien projektien positiivisten kokemusten perusteella ja siksi, että valmis infrastruktuuri Gitin käyttöön oli jo olemassa. Git on alkujaan Linus Torvaldsin kehittämä hajautettu versionhallintajärjestelmä, joka mahdollistaa isojenkin projektien tehokkaan käsittelemisen. Gitissä muutokset siirretään työhakemistosta ensin

paikalliselle staging area -alueelle, josta ne puolestaan siirretään commit-toimenpiteellä palvelimelle. Tämän menettelyn myötä voidaan tarvittaessa siirtää vain palasia tiedos-toista, mikä on hyödyllistä monissa tilanteissa.

Kuva 5.1. Gitflow-toimintamalli [28].

Git soveltuu hyvin sovelluskehitykseen, jossa toteutetaan useita ominaisuuksia yhtä ai-kaa, sillä se tarjoaa nopeat työkalut versioiden haarautumiseen ja haarojen yhdistämiseen.

Toteutetun projektin tapauksessa Gitin käytössä hyödynnettiin kuvassa 5.1 kuvattua Git-flow-menetelmää [28]. Gitflow yhtenäistää Gitin käyttöä ja tarjoaa pohjan erilaisille toi-mintamalleille. Gitflow on toimintamalli, jossa versionhallintaan perustetaan ensin kaksi oletushaaraa, master ja develop. Master-haaran tilan tulee olla aina tuotantovalmis, kun taas develop-haara sisältää viimeisimmät kehitystulokset. Develop-haara yhdistetään jul-kaisun yhteydessä master-haaraan.

Näiden päähaarojen lisäksi käytetään ominaisuushaaroja, julkaisuhaaroja ja paikkaushaa-roja [28]. Ominaisuushaarat ovat develop-haarasta erillään kehitettyjä ominaisuuksien mukaan erotettuja kokonaisuuksia, jotka yhdistetään takaisin develop-haaraan niiden val-mistuttua. Julkaisuhaarat ovat julkaisun valmistelua ja ne sisältävät vain pieniä muutok-sia, joiden avulla kehitysversio julkaistaan viimeisteltäväksi. Valmistuttuaan julkaisuhaa-rat yhdistetään master-haaraan uutena versiona ja mahdolliset muutokset tuodaan deve-lop-haaraan jatkokehitystä varten. Paikkaushaarat lähtevät master-haarasta ja sisältävät korjauksia jo tuotantokäytössä olevaan sisältöön. Paikkaukset lisätään master-haaraan uu-den version luomien myötä ja myös develop-haaraan, jotta tuotantoversiot sisältävät jat-kossakin tehdyt korjaukset.