10 Kohti ketterää ohjelmistokehitystä

Samankaltaiset tiedostot
Lyhyt johdatus ketterään testaukseen

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Prosessiajattelu. Organisaation prosessikuvaus - CMMI. Prosessikuvaukset ja elinkaarimallit. Organisaation prosessien määritys CMMI käytänteet

Ohjelmistojen mallintaminen, mallintaminen ja UML

Prosessiajattelu. Prosessikuvaukset ja elinkaarimallit. Organisaation prosessikuvaus - CMMI. Sami Kollanus TJTA330 Ohjelmistotuotanto 3.4.

Ohjelmistojen suunnittelu

Tutkittua tietoa. Tutkittua tietoa 1

Ketterien periaatteiden merkitys projektityössä

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ville Isomöttönen. Agile. Jyväskylän Yliopisto Sivu 1 Tietotekniikan laitos

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Ohjelmistoprosessit ja ohjelmistojen laatu Ohjelmistoprosessit ja ohjelmistojen laatu (4op)

Ohjelmistojen mallintaminen, Johdatus ohjelmistotuotantoon

Uudelleenkäytön jako kahteen

Ohjelmistotuotanto vs. muut insinööritieteet. (Usein näennäinen) luotettavuus ja edullisuus

Ohjelmointitekniikka lyhyesti Survival Kit 1 Evtek KA ELINKAARIMALLEISTA

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Kurssin aihepiiri: ohjelmistotuotannon alkeita

Globaalisti Hajautettu Ohjelmistokehitys Mitä, Miksi & Miten? Maria Paasivaara

Ohjelmistotekniikka - Luento 2

Ohjelmistotekniikka - Luento 2 Jouni Lappalainen

OpenUP ohjelmistokehitysprosessi

Test-Driven Development

Scrum is Not Enough. Scrum ei riitä. Ari Tanninen & Marko Taipale. Nääsvillen oliopäivä 2009 Tampereen teknillinen yliopisto 9.12.

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

13/20: Kierrätys kannattaa koodaamisessakin

Kurssin hallinta -työväline

Hieman lisää malleista ja niiden hyödyntämisestä

Juha Taina, Marko Salmenkivi ja Kjell Lemström,

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3

Ohjelmistojen mallintaminen. Matti Luukkainen

1.3 Katsaus ohjelmistotuotannon kehittymiseen

Johdattelua, motivointia, eli missä ollaan ja kuinka siihen on tultu

Ohjelmistojen mallintaminen

Agile. Jyväskylän Yliopisto Sivu 1 Tietotekniikan laitos

7. Tuoterunkoarkkitehtuurit

Johdantoluento. Ohjelmien ylläpito

Ohjelmistojen mallintaminen, kurssikoe esimerkkivastauksia

Scrumjatkuvan palvelun DWprojektissa-case. Niina Mäkiranta & OP-scrum-tiimi Aureolis Oy

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2008

Harjoitustehtävät ja ratkaisut viikolle 48

Järjestelmäarkkitehtuuri (TK081702) Lähtökohta. Integroinnin tavoitteet

Ohjelmistoarkkitehtuurit, syksy

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

2. Ohjelmistotuotantoprosessi

Kokemuksia ohjelmistokehityksestä. Kai Kulju & Heikki Naski

Test-Driven Development

Ohjelmistotekniikka - Luento 3 Jouni Lappalainen

Onnistunut ohjelmistoprojekti

asapflow - Yksinkertaistetut työprosessit saumattomalla yhteydellä SharePointiin ja SAP-järjestelmään

Avoin lähdekoodi hankinnoissa Juha Yrjölä

17/20: Keittokirja IV

Oleelliset vaikeudet OT:ssa 1/2

10. Tuoterunkoarkkitehtuurit

Tapahtuipa Testaajalle...

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri. Järjestelmäarkkitehtuuri

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Tarjolla tänää: Ohjelmiston toteutuksesta. Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit. Testilähtöinen kehittäminen JOT2007. Uudelleenrakentaminen

Standardi IEC Ohjelmisto

Suomen avoimien tietojärjestelmien keskus COSS ry

Testausta vai määrittelyä? Hyväksymistestaus ja jatkuva integraatio ketterässä ohjelmistokehityksessä

Ketterät menetelmät ja julkinen hankinta

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi

PROJEKTINHALLINTA. Käyttäjälähtöinen suunnittelu

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Järjestelmäarkkitehtuuri (TK081702) Web Services. Web Services

Loppuraportti. Virtuaali-Frami, CAVE-ohjelmisto. Harri Mähönen projektiassistentti Seinäjoen ammattikorkeakoulu. Versio

3 Verkkopalveluarkkitehtuuri

Ohjelmistotekniikka - Luento 3

voimavaroja. Kehittämishankkeen koordinaattori tarvitsee aikaa hankkeen suunnitteluun ja kehittämistyön toteuttamiseen. Kehittämistyöhön osallistuvill

Projektityö

Tietojärjestelmän osat

Johdatus ohjelmistotuotantoon

Muutoksen hallinta rakenteisen projektissa. Kari Kovanen Development manager Etteplan Technical Information

Extreme Programming. Harri Lindberg. Tampereen yliopisto Tietojenkäsittelytieteiden laitos Tietojenkäsittelyoppi Pro gradu -tutkielma Joulukuu 2003.

Määrittelyvaihe. Projektinhallinta

Prosessikuvaukset ja elinkaarimallit

Yhteenvetoa, pieniä laajennuksia, tulevaisuuden haasteita

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2007

Ohjelmistoprosessit ja ohjelmistojen laatu kevät 2009

Avoimen lähdekoodin kehitysmallit

Ohjelmistoarkkitehtuurit. Syksy 2010

Enterprise SOA. Nyt. Systeemi-integraattorin näkökulma

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

KUNTIEN JA HUS:N ASIAKAS- JA POTILASTIETOJÄRJESTELMÄN HANKINTA

9 Edistynyt PHP-ohjelmointi

Prosessimalli. 2. Ohjelmistotuotantoprosessi. Prosessimallin vaihejako. Prosessimallien perustehtävät. Ohjelmiston suunnittelu. Vaatimusmäärittely

Ketterä vaatimustenhallinta

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Avoimen ja yhteisen rajapinnan hallintasuunnitelma v.1.4

Arkkitehtuuritietoisku. eli mitä aina olet halunnut tietää arkkitehtuureista, muttet ole uskaltanut kysyä

Kaupunginkanslian avoin ohjelmistokehitys, rajapintatyö, syksy kevät Projektitarpeen ja tavoitteiden kuvaus

TeliaSonera Identity and Access Management

Ohjelmistotuotteen hallinnasta

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Ohjelmistoarkkitehtuurit. Kevät

Projektityö

Transkriptio:

10 Kohti ketterää ohjelmistokehitystä Perinteinen ohjelmistokehitys perustuu vesiputousmalliin, jossa tavoitteena on ensisijaisesti projektin vieminen läpi tietyssä ajassa. Sovelluksen määrittelytyö tehdään yhteistyössä tilaajan kanssa. Määrittelytyön tulokset dokumentoidaan eli kirjataan tarkasti ylös paperille. Asiakkaan hyväksynnän jälkeen määrittely lyödään lukkoon ja aloitetaan sovelluksen teknisen toteutuksen suunnittelu. Suunnittelutyön tulokset dokumentoidaan ja lyödään lukkoon. Sovellus toteutetaan ja toiminnallisuus testataan. Valmis! Hyvältä kuulostaa, mikä vikana? Baskerville ja muut (2003) kuvaavat erityisesti Internetiin liittyvää ohjelmistokehitystä seuraavasti: sovellusten toteuttamiseen käytössä oleva aika on pienempi kuin koskaan aikaisemmin sovelluksille asetettavat vaatimukset muuttuvat nopeassa tahdissa sovelluksen laadun kriteerit poikkeavat perinteisestä ohjelmistokehityksestä tuotteen saaminen ajoissa (ensimmäisenä) markkinoille on kriittistä Siis: Internetiin liittyvä ohjelmistokehitys poikkeaa perinteisestä ohjelmistokehityksestä. MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 140

Perinteinen ohjelmistokehitys: vesiputousmalli Ohjelmistokehitys perustuu perinteisesti vesiputousmalliin. Vesiputousmallin keskeiset vaiheet ovat esitutkimus, määrittely, suunnittelu, toteutus ja testaus. Vesiputousmallissa vaiheet viedään läpi peräkkäin yhden kerran. Sovelluksen haluttu toiminnallisuus siis kiinnitetään ennen teknisen toteutuksen suunnittelun aloittamista. Asiakas on mukana pääasiassa esitutkimuksessa ja määrittelyssä. Vesiputousmalli soveltuu käyttöön sellaisissa projekteissa, joissa toteutetaan järeitä järjestelmiä, kehitystyö kestää pitkään (jopa vuosia), järjestelmän käyttöaika on pitkä (vuosia), käyttäjien tarpeet ovat tiedossa ja sovellusalue on vakaa. TTY:llä kehitetty HYTT-laatujärjestelmä on (pelkistetysti) vesiputousmallin mukainen elinkaarimalli, jota voidaan käyttää myös esimerkiksi astettaisen kehittämisen mallin ja EVO-mallin mukaisessa kehitystyössä. MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 141

Internet-nopeudella tapahtuva ohjelmistokehitys (1/2) Baskerville ja muut (2003) listaavat joukon Internet-nopeudella tapahtuvassa ohjelmistokehityksessä yleisesti käytössä olevia toimintatapoja: Rinnakkainen kehitystyö: versioita kehitetään rinnan eri työvaiheissa (suunnittelu, toteutus, laadunvarmistus) Versioiden tiivis julkaiseminen: työlääksi osoittautuneet ominaisuudet tuleviin versioihin,... Työvälineiden käyttäminen: Integrated Development Environment (IDE), sovelluskehykset, luokka- ja funktiokirjastot,... Tiivis yhteistyö asiakkaan kanssa: yksityiskohtaisen, kerralla tapahtuvan vaatimusmäärittelyn sijaan asiakas otetaan mukaan sovelluksen kehitystyöhön Vakaa sovellusarkkitehtuuri: arkkitehtuurin vakaus antaa enemmän tilaa sovelluksen ominaisuuksien muokkaamiseen ja dokumentaation supistamiseen Komponenttien uudelleenkäyttö: uudelleenkäytettävien komponenttien toteuttaminen ja etenkin hyödyntäminen Pääosa luetelluista toimintatavoista pätee myös perinteisessä ohjelmistokehityksessä MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 142

Internet-nopeudella tapahtuva ohjelmistokehitys (2/2) Osa yleisesti käytössä olevista toimintatavoista vaatii alustukseksi lyhyen moraalisaarnan: Toimintavat ovat yleisesti käytössä, niiden soveltamista ei tässä erikseen suositella Opettele säännöt kunnolla ennen niiden rikkomista. Ja ne loput toimintavat: Ylläpidon sivuuttaminen: sovellusten elinkaaren lyhyys voi johtaa siihen, että sovellusten toteuttamistyöhön haasteita aiheuttavan ylläpidettävyyden huomioimisen sijaan ylläpidettävyyteen tähtäävät toimenpiteet unohdetaan osittain tai kokonaan Toimintavan päivittäinen räätälöinti: kehitysprosessin säätäminen tilanteen mukaan, esimerkiksi työvaiheiden ohittaminen (jopa sovelluksen laadun heikkenemisen kustannuksella),... Internet-nopeus edellyttää uudenlaista toimintatapaa, kun sovelluskehitystä halutaan nopeudesta huolimatta tehdä hallitusti. Varteenotettavan vaihtoehdon tarjoavat ketterän ohjelmistokehityksen (Agile Software Development) menetelmät MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 143

Ketterä ohjelmistokehitys: taustaa Ketterät ohjelmistokehityksen menetelmät (Agile Software Development) pyrkivät vastaamaan kevyempien ja liukasliikkeisempien ohjelmistokehitysprosessien tarpeeseen, joita on erityisesti Internet-sovellusten ja mobiilisovellusten kehittäjillä agile ['ædʒaɪl] a, ketterä, notkealiikkeinen, ripeäliikkeinen, terävä-älyinen (kielikone.fi) the quality of being agile; readiness for motion; nimbleness, activity, dexterity in motion (Oxford English Dictionary) Ketterien ohjelmistokehityksen menetelmien soveltajista koostuva Agile Alliance (www.agilealliance.org) on julkaissut ketterän ohjelmistokehityksen julistuksen, joka sisältää seuraavat neljä kohtaa (agilemanifesto.org/): Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 144

Ketterä ohjelmistokehitys Abrahamsson ja muut (2002) esittävät ketterän ohjelmistokehityksen määritelmän, jonka mukaan seuraavat piirteet ovat tyypillisiä ketterille menetelmille: Inkrementaalinen kehitystyö: inkrementaalinen ~vaiheittain kasvava, pieniä muutoksia, uusien versioiden tiivis julkaiseminen Yhteistyö: tiivis kommunikaatio asiakkaan ja kehittäjien välillä sekä kehittäjillä keskenään koko kehitystyön ajan Suoraviivaisuus: ketterät menetelmät itsessään ovat yksinkertaisia, helposti opittavia ja muokattavia sekä hyvin ohjeistettuja Mukautuvuus: muutosten tekeminen tulee olla mahdollista missä kehitystyön vaiheessa tahansa Ketterät menetelmät eivät ole täysin uusi keksintö. Tärkein uusi tekijä on ihmisten huomioimiinen tärkeimpänä yksittäisenä projektin onnistumiseen vaikuttavana tekijänä. Myös toteutustyön tuottavuus ja ohjattavuus on nostettu entistä keskeisempään asemaan. Esimerkkejä menetelmistä: Extreme Programming, Scrum, Crystal family of methodologies, RUP, ASD ja DSDM. Agile Modeling tukee ketteriä menetelmiä. MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 145

Extreme Programming (XP) Kent Beckin 1990-luvun lopussa kehittämä Extreme Programming (XP) on käytetyin ketterän ohjelmistokehityksen menetelmä. XP-ohjelmoinnin keskeiset arvot ovat: Kommunikointi: asiakas ja tekijät tuntevat toisensa ja kommunikoivat jatkuvasti Yksinkertaisuus: sovellus toteuttamisessa käytetään yksinkertaisimpia mahdollisia ratkaisuja Palaute: sovellusalueen asiantuntija ohjaa kehitystyötä oikeaan suuntaan ja tekniset asiantuntijat informoivat tätä rajoitteista ja mahdollisuuksista Rohkeus: yksinkertainen suunnittelu, koodin uudelleenmuokkaaminen (refactoring), uusien ominaisuuksien vaatiminen XP-ohjelmointia voidaan hyödyntää projekteissa, joissa toteuttajaryhmät ovat pieniä tai keskikokoisia, käytössä on yhtenäinen tila (tai tiivis kommunikointi on muuten mahdolista), osallistujat hyväksyvät toimintatavan ja käytössä oleva tekniikka mahdollistaa toteutuksen jatkuvan muuttamisen tehokkaasti. Tekijöiden osaaminen on ratkaiseva tekijä onnistumisessa. MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 146

XP-ohjelmoinnin toimintatavat Abrahamsson ja muut (2002) luettelevat XP-ohjelmoinnille tyypillisiä toimintatapoja: Suunnittelupeli (Planning Game): toteuttaja ja asiakas, käyttäjätarinat Versioiden tiivis julkaiseminen: ~kuukausittain Metaforat: yhteinen kieli asiakkaan ja toteuttajien välille Yksinkertaisuus Testaaminen: yksikkötestit & toiminnalliset testit määritellään ennen toteutusta Koodin uudelleenmuokkaus (refactoring): toistuvien osien poistaminen,... Ohjelmointi pareittain: ehkä tutuin XP-piirre Koodin yhteisomistus: kaikki voivat muokata kaikkea koko ajan Jatkuva integrointi 40-tuntinen työviikko: intensiivinen työ vaatii riittävästi lepoa Yhdenmukaiset ohjelmointikäytännöt, osallistuva asiakas, avoin työtila ja tarkat, yhteisesti sovitut säännöt MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 147

Haaste: mallintaminen Toisen lähestymistavan ohjelmistojen toteutustyön tehostamiseen esittelevät mallintamiseen perustuvat menetelmät. Ketterät menetelmät ja mallintaminen eivät välttämättä ole vaihtoehtoisia keskenään Mallintamisessa monimutkaisen reaalimaailman ilmiön perusteella tuotetaan malli, joka kuvaa ilmiötä sovelluksen näkökulmasta riittävällä tarkkuudella. Mallintamisessa äärimmäisenä tavoitteena on se, että kaikki koodi tuotetaan korkeamman tason mallin perusteella. Yleisin väline mallintamiseen on Unified Modeling Language (UML). Kuva: Daniels, J./Brown, A. Mallintamiseen perustuvia lähestymistapoja ovat esimerkiksi UML-kieleen perustuva Model-Driven Architecture (http://www.omg.org/mda/) sekä Domain-Specific Modeling MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 148

Poiminta: ketterämpi rajapintadokumentaatio ja PHP XP-ohjelmoinnissa pyritään viimeiseen asti välttämään kaikkea ylimääräistä toimintaa, kuten esimerkiksi rajapintadokumenttien kirjoittamista. XP-projekteissa tiivis kommunikaatio korvaa suuren osan kirjallisesta dokumetaatiosta. Useissa tilanteisssa rajapintadokumentaatio on kuitenkin tarpeellinen. Ketterässä mallintamisessa (Agile Modelling) korostetaan mm. sitä, että sovelluksen dokumentoinnissa on pidettävä huolta siitä, ettei informaatiota kopioida useisiin paikkoihin. Esimerkiksi rajapintadokumentaatio voidaan tuottaa koodin sekaan kirjoitetuista määrämuotoisista kommenteista. JavaDoc on Java-kielestä tuttu väline rajapintadokumenttien tuottamiseen. PHPkielelle löytyy vastaava toteutus, PHPDoctor (phpdoctor.sourceforge.net/). Myös muita vaihtoehtoja on olemassa. Esimerkki määrämuotoisesta funktion esittelystä: /** * Palauttaa kieliversioidun merkkijonon tunnisteen perusteella. * Tieto käyttäjän kielestä luetaan istunnosta. * @param stringid Merkkijonon tunniste * @return Merkkijono käyttäjän kielellä */ function select_text( $stringid) { MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 149

Poiminta: asetustiedostot vs. koodin tuottaminen Sovellusten toteutustyötä voidaan tietyissä tapauksissa tehostaa koodin ohjelmallisella tuottamisella korkeamman tason kuvauksen perusteella. Tämä on keskeinen periaate mallintamiseen perustuvissa menetelmissä. Mallien esittämiseen voidaan käyttää esimerkiksi XML-kieltä. XML-muotoisia kuvauksia voidaan hyödyntää esimerkiksi seuraavilla tavoilla: 1. Sovellus lukee XML-kuvauksen ja toimii sen mukaisesti 2. Yleisestä XML-kuvauksesta tuotetaan sovelluskohtainen esitysmuoto, jota sovellus osaa lukea 3. XML-kuvauksen perusteella tuotetaan dynaamisesta toiminnallisuudesta vastaava ohjelmakoodi Koodin tuottaminen korkeamman tason kuvauksesta ei useinkaan ole ketterän ohjelmistokehityksen tarkoittama yksinkertaisin mahdollinen ratkaisu. Tietyissä käyttötarkoituksissa toimintaperiaatteen avulla voidaan kuitenkin automatisoida sovelluksen toteuttamiseen liittyviä rutiineja ja lisätä esimerkiksi sovelluksen ajonaikaista suorituskykyä. MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 150

Lopuksi Tässä esityksessä ohitettiin täysin erilaiset prototypoinnin menetelmät, joita käsitellään kattavasti esimerkiksi kirjassa Preece, J. Human-Computer Interaction, Addison- Wesley, Essex, UK. 1999. Suositeltavaa lukemista on myös Haikala, I., Märijärvi, J. Ohjelmistotuotanto, Satku, Helsinki, Suomi. 2002. Ketterä ohjelmistokehitys saattaa kuulostaa mielenkiintoiselta erityisesti siksi, että usein tylsäksi koettu dokumentointi on perinteistä ohjelmistokehitystä pienemmässä roolissa. Dokumentoinnin keveys on kuitenkin väärä peruste ketterien menetelmien valinnalle. Ketterässä ohjelmistokehityksessä korostuu osaaminen. Tekijätiimin on hallittava käytössä olevan ketterän menetelmän lisäksi yleiset ohjelmistojen suunnitteluun ja toteuttamiseen liittyvät teknologiat ja menetelmät, jotta toimintatapaa osataan yksinkertaistaa oikealla tavalla Ketterät menetelmät asettavat haasteen myös esimerkiksi sopimusten tekemiselle. Kun työn laajuutta ei voida määritellä toteutettavien ominaisuuksien ja toimintojen listalla, muuttuu määritteleminen hankalammaksi. Asiakas suostuu harvoin maksamaan sovelluksesta kulutettujen tuntien mukaan. Luottamus asiakkaan ja toteuttajan välillä korostuu. MATHM-57100 Hypermedian ohjelmointi (kevät 2006) 151