OLIOKESKEINEN TIETOJÄRJESTELMIEN KEHITTÄMINEN Versio 10.10.2006



Samankaltaiset tiedostot
Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

ITKA111 OLIOSUUNTAUTUNUT ANALYYSI JA SUUNNITTELU

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistotekniikan menetelmät, UML

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Ohjelmistojen suunnittelu

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

Perusarkkitehtuurin ja vuorovaikutuksen mallintamisen perusteita.

Ohjelmistotekniikka - Luento 2

Toiminnot eli käyttäytyminen. Tieto eli rakenteelliset ominaisuudet

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

UML- mallinnus: Tilakaavio

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

1. Olio-ohjelmointi 1.1

Ohjelmistotekniikka - Luento 2 Jouni Lappalainen

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

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

UML-kielen formalisointi Object-Z:lla

UML - unified modeling language

UML:n yleiskatsaus. UML:n osat:

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

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

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

Luokka- ja oliokaaviot

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Ohjelmistotekniikan menetelmät, käyttötapauksiin perustuva vaatimusmäärittely

HELIA 1 (14) Outi Virkki Käyttöliittymät ja ohjlmiston suunnittelu

Kertaus: yleistys-erikoistus ja perintä

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

812341A Olio-ohjelmointi, I Johdanto

Käyttötapausanalyysi ja testaus tsoft

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

Ohjelmistojen mallintaminen

Analyysi on tulkkaamista

Ohjelmistojen mallintaminen, mallinnustekniikat käytännössä

Olio-ohjelmointi Johdanto olio-ohjelmointiin

Integrointi. Ohjelmistotekniikka kevät 2003

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

Ohjelmistotekniikan menetelmät, kesä 2008

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmistojen mallintaminen. Luento 2, pe 5.11.

Unified Process (UP)

Ohjelmistojen mallintaminen, kesä 2010

Ohjelmistojen mallintaminen, kesä 2009

2. Olio-ohjelmoinnin perusteita 2.1

TOIMINNALLINEN MÄÄRITTELY MS

13/20: Kierrätys kannattaa koodaamisessakin

Ohjelmiston toteutussuunnitelma

Testaaminen ohjelmiston kehitysprosessin aikana

19/20: Ikkuna olio-ohjelmoinnin maailmaan

Luokkakaavion laatiminen

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

Järjestelmäarkkitehtuuri (TK081702) Yritysarkkitehtuuri. Muutostarpeet

Tietojärjestelmän osat

Arkkitehtuuripankki. Mallintamisen metamalli ja notaatiot

Muutamia peruskäsitteitä

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

Mitä on periytyminen?

Suunnitteluvaihe prosessissa

Harjoitustehtävät ja ratkaisut viikolle 48

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustainen ohjelmistokehitys

Uudelleenkäytön jako kahteen

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistotekniikan menetelmät, kevät 2008

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmistojen mallintaminen Ohjelmiston suunnittelu Model driven development Harri Laine 1

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2

Olioperustaisuus (object oriented)

ohjelman arkkitehtuurista.

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustaisuus (object oriented)

Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita.

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Sisällys. Ratkaisumallien historia. Ratkaisumalli. Ratkaisumalli [2] Esimerkki: Composite [2] Esimerkki: Composite. Jaakko Vuolasto 25.1.

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

Ohjelmistojen mallintaminen Olioperustainen ohjelmistomalli Harri Laine 1

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Johtamisen haaste kokonaisarkkitehtuuri menestyksen mahdollistajako?

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmistojen mallintaminen. Luento 8,

Unified Modeling Language

Käyttötapausten mallintaminen

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Lomalista-sovelluksen määrittely

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

UCOT-Sovellusprojekti. Testausraportti

Ohjelmistojen mallintaminen, Johdatus ohjelmistotuotantoon

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Ohjelmointitekniikka lyhyesti Survival Kit 1 Evtek KA ELINKAARIMALLEISTA

Opistojohtaminen muutoksessa hanke. Kansanopiston kehittämissuunnitelma. Tiivistelmä kehittämissuunnitelman laatimisen tukiaineistoista

Transkriptio:

1 OLIOKESKEINEN TIETOJÄRJESTELMIEN KEHITTÄMINEN Versio 10.10.2006 Mauri Leppänen ja Timo Käkölä Tietojenkäsittelytieteiden laitos Jyväskylän yliopisto Syksy 2006

2 Tervetuloa opiskelemaan oliokeskeistä tietojärjestelmien kehittämistä! Tätä monistetta ei ole tarkoitettu varsinaiseksi itseopiskelumateriaaliksi vaan luentojen tukimateriaaliksi. Luennoilla käsitellään useita luentomonisteessa kuvattuja esimerkkejä, joiden merkitys avautuu helpoiten seuraamalla luentoja. Esimerkit ovat yksinkertaistettuja eivätkä ne näin voi olla kovin kattavia tai huomioida kaikkia poikkeustilanteita. Opiskelijan onkin hyvä perehtyä esimerkkeihin kriittisesti etukäteen. Luennoilla tuodaan esille esimerkkeihin liittyviä rajoituksia ja lisäesimerkkejä, jotka syventävät opiskelijan teoreettista ymmärrystä huomattavasti. Kurssin suoritukseen kuuluu olennaisena osana harjoitustyö, jonka tekemisen kautta tämä teoriatieto muuttuu kokemukselliseksi tietotaidoksi. Oliokeskeistä tietojärjestelmien kehittämistä ei voi opiskella kirjasta lukemalla vaan learning-by-doing - menetelmällä. Kannattaa siis panostaa teoriatiedon opiskeluun ja sen käytännön soveltamiseen. Myös taustatiedot auttavat. Tämän kurssin suorittamista edesauttavat mm. Ohjelmointi 1-, Ohjelmointi 2-, ja Tietojärjestelmien kehittäminen-kursseilla hankkimasi osaaminen. Käytännössä kaikista kurssilla käsiteltävistä asioista löytyy lisätietoa internetistä. Erityisen suositeltavaa on käyttää Wikipediaa, joka tyypillisesti tarjoaa ytimekkäät, kattavat, ja ajantasaiset kuvaukset esimerkiksi kurssilla käsiteltävistä englanninkielisistä termeistä (http://en.wikipedia.org/). Luennoilla perehdymme aluksi yleisellä tasolla tietojärjestelmien kehittämiseen (liite 4), minkä jälkeen aloitamme perehtymisen oliokeskeiseen kehitystyöhön tämän monisteen 1. luvusta alkaen. Moniste koostuu kolmesta pääosasta: oliolähestymistavan ja oliomenetelmän kuvauksesta sekä joistakin oliolähestymistavan erillisaiheista. Oliomenetelmäosuuden pohjana on UML, jota on joiltakin kohdin laajennettu OMTja OMT++- menetelmien osuuksilla. Tämä luentomonisteen 1. version on kehittänyt ja kirjoittanut Mauri Leppänen vuosituhannen vaihteessa. Timo Käkölä on keväällä ja syksyllä 2006 kehittänyt monisteen sisältöä ja kieliasua edelleen, jotta ne paremmin heijastavat alan kehitystä. Pekka Makkonen on kirjoittanut liitteen 4. Työtä luentomonisteen kehittämisen suhteen riittää edelleen paljon, joten kommentit ovat enemmän kuin tervetulleita. Opiskelijat voivat halutessaan osallistua edelleen kehittämiseen esimerkiksi pienten kehitysprojektien kautta. Antoisaa kurssia! Timo Käkölä

3 1. OLIOLÄHESTYMISTAPA Oliolähestymistapa (eli oliokeskeisyys 1 ) tarkoittaa kehittämis- ja ohjelmointiparadigmaa, jonka mukaan todellisuus nähdään joukkona toisiinsa vuorovaikutuksessa olevia olioita (Koskimies, 1995). Kuva 1.1. havainnollistaa oliolähestymistavan maailmankuvaa. Muita paradigmoja ohjelmoinnin puolella ovat proseduraalinen, funktionaalinen ja logiikkaohjelmointi. Tietojärjestelmien kehittämisessä tunnistetaan seuraavia paradigmoja: tietokeskeinen, toimintokeskeinen, protoilu ja osallistuva tietojärjestelmän suunnittelu. Seuraavaksi pyritään tarkentamaan kuvaa oliolähestymistavasta luomalla silmäys sen historiaan, määrittelemällä sen keskeiset käsitteet ja periaatteet sekä rinnastamalla sitä perinteiseen tietojärjestelmien kehittämiseen. 1.1. Historiaa Seuraavat viitteet oliolähestymistavan historiasta voidaan kirjata (vrt. Berard, 1993): 1963: Sutherlandin Sketchpad (object-oriented graphics). 1966: Simula (Dahl, Nygaard) (object-oriented programming language). 1972: Smalltalk (Kay, Xerox); object-oriented -termiä käytetään. 1980: Boochin menetelmä : object-oriented design. 1980-luvun alkupuoli: oliopohjaisia laitteistoarkkitehtuureja: iapx 432 (Intel) ja Rekursiv; Parnas julkaisi ohjelmistoperheistä (program families) ja hänen ajatuksiaan otettiin laajasti käyttöön tietoliikenneteollisuudessa. 1980-luvun puolivälistä alkaen: kehitettiin uusia olio-ohjelmointikieliä, kuten Objective-C, C++, Self, Beta, Eiffel, Flavors, Trellis/Owl, Oberon-2. 1980-luvun puolivälissä ensimmäiset kaupalliset oliotietokannat tulivat markkinoille ja useita konferenssisarjoja (esimerkiksi OOPSLA, ECOOP) käynnistettiin. 1980-luvun lopussa kehitettiin menetelmiä, jotka kattavat myös analyysin: OOA, OORA, OOSE. 1990-luvulla: object-oriented domain analysis, olio-ohjelmistojen testaus ja metriikat, oliopohjaiset CASE-välineet. 1998: OMG (Object Management Group) hyväksyi UML:n (Unified Modeling Language) standardiksi; useita UML-perusteisia kirjoja, menetelmiä ja CASEvälineitä julkaistiin. 2005: UML versio 1.4.2 julkaistiin ja hyväksyttiin kansainväliseksi ISO 19501 standardiksi. UML 2.0 julkaistiin. 1 Olioterminologia on vielä vakiintumaton. Tässä yhteydessä näkee käytettävän myös termejä oliosuuntautunut, oliokeskeinen ja oliopohjainen lähestymistapa. Englanninkielessä vastaavat termit ovat object-oriented, object-centered ja object-based. Edellä mainituille käsitteille on joskus määritelty eksplisiittisesti käsitteellisiä eroja. Tässä niihin ei oteta kantaa.

4 Kuva 1.1. Oliolähestymistapa ja olioiden vuorovaikutus Oliolähestymistapa on levinnyt ohjelmointikielistä ohjelmointiin, tietojärjestelmien analyysiin ja suunnitteluun, liiketoiminnan (prosessien) analyysiin ja suunnitteluun, ja jopa strategiseen suunnitteluun. 1.2. Peruskäsitteitä Oliolähestymistapa määrittyy seuraavilla peruskäsitteillä ja -periaatteilla. Olio on rajattavissa ja yksilöitävissä oleva asia tai käsite, joka on merkityksellinen käsillä olevan tarkastelun kannalta ja kattaa sekä rakenteen (tilan) että käyttäytymisen. 2 Siitä voidaan käyttää myös nimitystä olioilmentymä (object instance). Se voi olla esimerkiksi: liiketoimintaolio (business object, application-domain object), joka vastaa liiketoiminnan käsitettä tai asiaa; esim. Matti Mainio, Markkinointiosasto. tekninen olio (computer-domain object), joka on toteutettavan järjestelmän tekninen komponentti; esim. tietty Ikkuna, Painike tai Anturi, ohjausolio (control object), jonka vastuulla on ohjata ja koordinoida muiden olioiden toimintaa. 2 "A discrete entity with a well-defined boundary and identity that encapsulates state and behavior" (UML, 1999)

5 (Olio)luokka (Kuva 1.1) kuvaa joukkoa, joka muodostuu rakenteeltaan ja käyttäytymiseltään (lyh. ominaisuuksiltaan) samanlaisista olioista. Se on eräänlainen malli tai muotti. Työntekijä ja Osasto Kuvassa 1.1 ovat tyypillisiä luokkia. Olioiden luokittelun perustana käytetään näkemystä niiden todellisesta luonteesta eikä pelkästään niiden ilmituotuja ominaisuuksia (vrt. Lato ja Hevonen). Olioluokat muodostavat hierarkian, jossa on yliluokka (esim. Henkilö) ja sen aliluokkia (esim. Sihteeri ja Sorvari; Työntekijä, Ohjelmoija). Attribuutti kuvaa luokkaan kuuluvien olioiden rakenteellista ominaisuutta (esim. Henkilön nimi, ikä ja paino). Attribuuttiarvo yksilöi ominaisuuden (esim. Ville, 30, 75). Arvoilla ei ole identiteettiä (vrt. 30) toisin kuin olioilla. Operaatio on olion käyttäytymisen aikaansaama toimenpiteen määritys (esim. laskekust(), haetunnit()). Se voidaan ymmärtää myös määritykseksi palvelusta, jonka olio tarjoaa. Luokan olioilla on samat operaatiot. Joskus sama operaatio voidaan kohdistaa eri luokkiin kuuluviin olioihin (vrt. monimuotoisuus, polymorfismi). Metodi on luokan olioihin sovitettu operaation toteutus (esim. tulosta). Operaatioon voi liittyä parametreja (esim. muutapalkka(muutos)). Viesti (message) voidaan ymmärtää palvelupyynnöksi. Sen vastaanottaminen saa aikaan olion aktivoitumisen ja viestissä mainitun operaation (tarkemmin metodin) toteuttamisen. Viesti voi kantaa mukanaan arvoja parametreina. Oliot siis kommunikoivat keskenään lähettämällä viestejä toisilleen. Assosiaatio on kahden tai useamman luokan välinen rakenteellinen suhde (esim. Töissä assosiaatio Työntekijän ja Osaston välillä). 1.3. Perusperiaatteita Abstrahointi (abstraction) periaatteen mukaan nostetaan esille ongelman kannalta relevantit piirteet ja jätetään huomiotta epärelevantit tarkastelukohteen yksinkertaistamiseksi ja kuvaamisen, analysoinnin ja suunnittelun suorittamiseksi ilman häiritseviä yksityiskohtia (esim. olio vs. olioluokka, aliluokka vs. yliluokka). Tietoabstrahoinnilla erotetaan luokan ulkoinen liittymä eli rajapinta (interface) sisäisestä toteutuksesta (implementation). Identiteetti (identity) periaatteen mukaan oliot ovat yksikäsitteisesti tunnistettavissa muiden kuin ominaisuuksiensa (rakenteensa tai käyttäytymisensä) avulla (vrt. relaationaalinen käsitys). Identiteettiä on verrattu käsitteelliseen "kahvaan" (handle, UML), jonka avulla muut oliot voivat tunnistaa olion ja lähettää sille viestejä. Kapselointi (encapsulation) periaatteen mukaan kootaan yhteen toisiinsa liittyvät asiat eli olion (tieto)rakenne ja käyttäytyminen (operaatiot). Tiedon suojaus (information hiding) (Kuva 1.2, Bennett ym. 1999, s. 73) periaatteen mukaan tietyt (yksityiskohtaiset) piirteet oliosta salataan sellaisilta olioilta, joiden ei

6 kuulu niitä tuntea, määrittelemällä olioille rajapintoja, joihin toiset oliot voivat viitata. Rajapinnan takana oleviin yksityiskohtiin (implementation) ei ole muilla pääsyä. Kuva 1.2. Kapselointi: oliota ympäröivät suojaavat kerrokset Periytyminen (inheritance) on periaate, jonka mukaan aliluokat perivät yliluokkansa ominaisuudet, jolloin aliluokkien olioilla on samantapainen rakenne ja käyttäytyminen kuin vastaavan yliluokan olioilla. Aliluokille voidaan toki määritellä lisäominaisuuksia, jotka eivät kuitenkaan saa olla täysin ristiriidassa perittyjen ominaisuuksien kanssa (Kuva 1.3). Moniperinnässä (multiple inheritance) aliluokalla on useampia yliluokkia, joilta se voi periä ominaisuuksia (esim. Asunto, Laiva Asuntolaiva). Huonosti käytettynä moniperintä johtaa luokkahierarkian rämettymiseen. 3 Kuva 1.3. Periytyminen Monimuotoisuus (polymorphism, overriding) periaatteen mukaan tietty operaatio (loogisella tasolla) voidaan toteuttaa eri tavoin (metodein) eri luokissa ja niiden olioissa riippuen luokan (ja olioiden) yksityiskohtaisesta luonteesta tai rakenteesta (esim. Luo operaation toteuttamiseksi voidaan määritellä erilainen metodi Tiedoston, Kuvakkeen ja Ikkunan yhteyteen; tai laskepalkka toteutetaan eri tavalla riippuen siitä, onko kysymyksessä kuukausi-, viikko- tai tuntipalkalla oleva Henkilö). 3 Käytännön tietojärjestelmätyössä moniperintää on kritisoitu voimakkaasti. Erityisesti seuraavan kaltainen käyttötapa on tyrmätty. Halutaan luokka A, jolla on luokkien B ja C käyttäytyminen. Toteutetaan A määrittelemällä se B:n ja C:n aliluokaksi. Tuloksena spagettia (vrt. Jakobson,1992)

7 Dynaaminen sidonta (dynamic binding) periaatteen mukaan vasta ajoaikana päätetään siitä metodista, joka kutsutaan toteutettavaksi. Jakaminen (sharing) periaatteen mukaan olioiden samanlaiset ominaisuudet kuvataan kootusti yhdessä paikassa, yleensä oliojoukon määrittelevässä olioluokassa. Periaate johtaa lyhyempiin kuvauksiin ja tukee luokkien uudelleen käyttöä (reuse). Kyseiset periaatteet on otettu huomioon ja toteutettu eri tavoin eri menetelmissä ja kielissä. Ei ole olemassa yhtenäistä käsitystä oliolähestymistavasta (vrt. erot ohjelmoinnin, oliokantojen ja oliosuunnittelun käsityksissä; Eckert, Golder, 1994). 1.4. Olioteknologia Olioteknologialla tarkoitetaan niitä kieliä, ohjelmistoja ja arkkitehtuureja, joita on kehitetty tukemaan oliolähestymistavan mukaista analyysia, suunnittelua ja toteutusta: Arkkitehtuureja ja standardeja: Open Distributed Processing (ODP) Common Object Request Broker Architecture (CORBA), DCOM Object Management Architecture (OMA) Service-Oriented Architecture (SOA) Component Object Model (COM) Yhdistelmädokumentit (OLE, OpenDoc) ODMG-93, ODMG-97, ODMG 3.0 Oliokieliä: C++, Smalltalk, Eiffel, CLOS (the Common Lisp Object System), Beta, Modula- 3, Oberon-2, Java, Perl, C#, J# UML 2.0 Oliomenetelmiä: OOA/OOD (Coad, Yourdon, 1991), OOSE (Jacobson ym., 1992), OOAD (Martin, Odell, 1992), OMT (Rumbaugh ym., 1991), OOSA (Shlaer, Mellor, 1992), DOOS (Wirfs-Brock ym., 1990), Booch, 1991, SOOA (Putkonen, 1994), UML (Booch, Jacobson, Rumbaugh, 1997, 1999), OPEN (Graham et al., 1997) CASE-välineitä: Prosa, Excelerator II, Progress OO4GL Ipsys Toolbuilder, Object Management Workbench, OMTool, Paradigm Plus, Rational Rose, SelectOMT, Teamwork, Westmount MetaEdit+ Oliokannan hallintajärjestelmiä: Gemstone, ONTOS, ObjectStore, Objectivity, Itasca, Poet, Open ODB, Versant Oliorelaatiokannan hallintajärjestelmiä:oracle10, SQL Server, Omniscience 1.5. Järjestelmäarkkitehtuuri Oliokeskeinen järjestelmäarkkitehtuuri eriyttää erityyppiset luokat eri tasoille. Tyypillisessä kolmitasoisessa (3-tier) arkkitehtuurissa (Kuva 1.4, Bennett ym, s. 262) järjestelmän käyttöliittymän muodostamat luokat muodostavat oman tasonsa (presen-

8 tation), pysyväisluonteisista tiedoista huoltapitävät luokat oman tasonsa (data base) ja liiketoimintalogiikasta vastaavat luokat oman tasonsa (business logic). Kuvassa 1.5 on annettu yksityiskohtaisempi esimerkki 3-tasoisesta arkkitehtuurista. Kuva 4.13 havainnollistaa sitä, millaisena osa ko. järjestelmää (pankkiautomaatti-järjestelmä) näkyy luokkamäärityksinä. Kuva 1.4. Kolmitasoarkkitehtuuri Kuva 1.5. Esimerkki kolmitasoarkkitehtuurista MVC (Model-View-Controller)-arkkitehtuurimalli on paljon käytetty kolmitasoinen malli. Model-osa kuvaa ohjelmiston ydintä sisältäen ohjelmiston luokat suhteineen ja toimintoineen. View esittää käyttöliittymän. Controller toimii rajapintana ohjelmiston ja käyttöliittymän välillä. Controller voi esimerkiksi tehdä muunnoksia, toteuttaa tallennuksia, luoda ohjelmiston olioita ja käsitellä niitä. Mallia käsitellään luvussa 4. Web-pohjaisissa järjestelmissä käytetään nykyisin n-tasoista arkkitehtuuria, jossa n (>3) tarkoittaa tasojen määrä ja verkkoa (network). Kuvissa 1.6-1.8 on havainnollistettu sitä, miten monista verkon toisiinsa kytkemistä osista järjestelmä voidaan koostaa. Oliokeskeisyys omalta osaltaan edesauttaa ko. osien yhteentoimimista (interoperability). Kuvassa 1.8 esitetään Java Platform, Enterprise Edition (Java EE, aikaisemmalta nimeltään J2EE), joka on hajautettujen monikerrosarkkitehtuuriin perustuvien Javaohjelmointikielellä toteutettavien sovellusten kehittämistä ja suorittamista tukeva ohjelmointialusta. Java EE:n mukaiset sovellukset kehitetään pääosin modulaarisia, sovelluspalvelimella suoritettavia komponentteja hyödyntäen. Sovelluskehittäjät voivat kehittää tehokkaasti skaalautuvia ja monilla alustoilla toimivia yrityssovelluksia, jotka integroituvat perinteisiin tietojärjestelmiin saumattomasti, ja keskittyä

9 ensisijaisesti liiketoimintalogiikan ymmärtämiseen, kuvaamiseen, ja toteuttamiseen sovelluspalvelimen tarjotessa palvelut transaktioiden hallintaan, tietoturvaan, komponenttien hallintaan ja muihin matalamman tason tehtäviin. Ohjelmointialusta ja sen määrittävä spesifikaatio kehittyvät jatkuvasti eri intressiryhmien verkostomaisena yhteistyönä (Java Community Process). Sen toteuttava lähdekoodi on verkostolta julkisesti ja ilmaiseksi saatavissa. Spesifikaatio muodostaa samalla epävirallisen standardin, jonka mukaisesti intressiryhmien on toimittava voidakseen määrittää tuotteensa ja palvelunsa Java EE yhteensopiviksi. Service-Oriented Architecture (SOA)-käsite (Kuvat 1.9 ja 1.10) kuvaa n-tasoista tietojärjestelmäarkkitehtuuria, joka auttaa organisaatioita jakamaan liiketoimintalogiikan ja -tiedon useiden sovellusten (application) välillä. Sovellukset voidaan luoda nopeasti ja joustavasti hyödyntäen löyhästi kytkettyjä mutta yhteensopivia web-palveluita, jotka ovat riippumattomia niiden toteuttamiseen käytetyistä ohjelmointikielistä ja alustoista (tai käyttöjärjestelmistä). Sovellus voi esimerkiksi hyödyntää samanaikaisesti palveluita, jotka on toteutettu C#-kielellä.Net-alustalla, ja palveluita, jotka on toteutettu Java-kielellä Java Platform, Enterprise Edition (Java EE)-alustalla. Eri alustoilla toimivat sovellukset voivat myös käyttää toistensa palveluita vapaasti, mikä edesauttaa palveluiden ja ne toteuttavien ohjelmistojen uudelleenkäyttöä. Kuva 1.6. Esimerkki internet-arkkitehtuurista ja teknisistä vaihtoehdoista Kuva 1.7. Esimerkki internet-arkkitehtuurista ja teknisistä vaihtoehdoista

10 Kuva 1.8. Java Platform, Enterprise Edition (Java EE) (Sun Microsystems, Inc.). Kuva 1.9. Service-Oriented Architecture (SOA) on arkkitehtuurimalli, jonka avulla liiketoimintaprosessien tarvitsemat tietojärjestelmäpalvelut voidaan toteuttaa joustavasti yhdistelemällä yhteensopivia ohjelmistokomponentteja palvelukokonaisuuksiksi, jotka ovat riippumattomia ko. komponenttien teknisestä toteutusympäristöstä. 1.6. Etuja ja ongelmia Oliolähestymistavan todellisia tai väitettyjä etuja ovat, että tapa: vastaa ihmisen luonnollista hahmotus- ja ajattelutapaa tukee kehittämistyötä myös uusilla sovellusalueilla (tosiaikasovellukset, CAD/CAM, animaatio, simulointi, teollisuustuotannon järjestelmät) helpottaa kokonaisuuden jakamista yhteensopiviksi osiksi (interoperability), jotka edustavat sovellusmaailman olioita pakottaa tarkastelemaan yhtä aikaa tietoja ja niiden käsittelyä olioina olioluokat tarjoavat luonnollisen lähtökohdan ohjelmiston toteutukselle takaa aidosti oliopohjaiset toteutukset (vrt. C++, CLOS, oliokannat) helpottaa jäljitettävyyttä (traceability) eli tietyn ratkaisun syiden ja seurausten selvittämistä helpottaa uudelleenkäytettävien (reusable) ohjelmaosien tuottamista, ja helpottaa ohjelmistojen laajentamista ja ylläpitoa.

11 Vaikeuksia oliolähestymistavan soveltamisessa: suurimman hyödyn saamiseksi lähestymistapaa on sovellettava laajassa mitassa ( to reduce a need of deobjectification and objectification ) rakenteisen lähestymistavan perinteen painolasti (osaaminen, aiemmat sovellukset (legacy systems), dokumentit, menetelmät, kehitysympäristöt, tottumukset) vaarana liian aikainen keskittyminen koodiin ja sen tuottamiseen eikä sitä edeltävään analyysiin ja suunnitteluun, käsitteiden vakiintumattomuus vaihtoehtoisten menetelmien kirjo (vaikkakin UML:n aseman vahvistuminen helpottaa tilannetta) kehittymättömät organisointimuodot. 1.7. Oliomenetelmät verrattuna rakenteisiin menetelmiin Menetelmällä tarkoitetaan tässä yhteydessä (deskriptiivistä ja preskriptiivistä) kuvausta organisatoristen ja teknisten muutosten suorittamisesta organisaation tietojenkäsittelyssä tehokkaasti ja laadukkaasti. Menetelmä rakentuu suuresta määrästä erilaisia osia 4, joita yhdistävät yleiset filosofiset ja paradigmaattiset olettamukset sekä määritellyt lähestymistavat. Henderson-Sellersiä (1995) mukaillen voidaan erottaa seuraavat menetelmän osat: täydellinen vaihejakomalli sovellettu prosessimalli (waterfall, prototyping, spiral, fountain, pinball) toiminnot koko elinkaaren osalta toimintojen ajalliset suhteet keskenään johdonmukaiset käsitteet ja mallit kokoelma sääntöjä ja ohjeita vaadittujen tulosten kuvaus eli mitä tulee tuottaa ja milloin (check points) mukailtava notaatio metriikat sekä laatua, standardeja, ja testausstrategioita koskevia ohjeita ohjeita projektin hallintaan ohjeita luokkakirjaston hallintaan ja uudelleenkäyttöön roolikuvaukset Menetelmää noudattamalla voidaan kehittämistyö saada määrämuotoisemmaksi ja toistettavaksi ja kokemukset aiemmista hankkeista voidaan saattaa näkyviksi ja hyödyntää uudistetun menetelmän muodossa luotettavammin ja tehokkaammin. Lähestymistapojensa mukaan menetelmät voidaan ryhmitellä: kehittämisprosessin mukaan: vaihejakoon (life cycle) perustuvat, protoiluun perustuvat, ja evolutionaariset (esim. oppimisprosessimalli, dialogiprosessimalli (Lyytinen, 1987)) menetelmät 4 Berard (1995) on esittänyt jäsennyksen menetelmän sisällöstä: käsitteet, notaatiot, prosessit, tuotteet, roolit, periaatteet ja heuristiikat, edellytykset ja soveltamisohjeet (pragmatiikka). Edelleen hän kytkee menetelmän yhteyteen koulutuksen ja tietokonetuen.

12 ensisijaisen mallintamiskohteen mukaan: toimintokeskeiset, tietokeskeiset, suorittajakeskeiset menetelmät osallistumisvastuun mukaan: atk-asiantuntemukseen perustuvat ja käyttäjäkeskeiset (participative design approaches, end-user computing) menetelmät määrämuotoisuuden mukaan: formaalit, ei-formaalit menetelmät. Oliolähestymistavan näkökulmasta tietojärjestelmien kehittämismenetelmät voidaan karkeasti jakaa kahteen ryhmään (Jacobson, 1992, Coleman ym. 1995 s. 6): rakenteista kehittämistä tukevat menetelmät (esim. SDM, SSADM, SA/SD,SADT); perustuvat joko toimintojen ja tietovirtojen mallintamiseen (toimintoperusteiset) tai käsiteltävän tiedon sisällön ja rakenteen mallintamiseen (tietoperusteiset) toiminnot edustavat aktiivista, tieto passiivista puolta tekevät eron analyysin, suunnittelun, ja toteutuksen välillä oliopohjaista kehittämistä tukevat menetelmät (esim. OMT, OOA, OOD, OOSE, Fusion, UML, OPEN); perustuvat olioiden mallintamiseen, joissa yhdistyvät sekä tieto että toiminnot sisältävät seuraavia perustehtäviä: olioluokkien tunnistaminen, olioluokkien organisointi rakenteeksi, olioiden vuorovaikutuksen kuvaaminen, olioluokkien operaatioiden kuvaaminen, olioluokkien sisäisen rakenteen kuvaaminen ero analyysin, suunnittelun ja toteutuksen välillä hämärtynyt (Martin, Odell, 1992). Vakiintuneemman käsityksen mukaan oliomenetelmät voidaan jakaa kahteen luokkaan (Berard, 1993, Berard, 1995): revolutionaariset menetelmät: perustuvat suuressa määrin olio-ohjelmointikielten käsitteisiin ja rakenteisiin (C++, Smalltalk) korostavat monimuotoisuutta, periytymistä, ja tiedon suojausta käyttävät abstrakteja luokkia, parametrisoituja luokkia ja/tai metaluokkia, tarkastelevat kehittämistyön alusta alkaen järjestelmää yhtenäisenä kokoelmana toisiinsa kiinteästi liittyneitä olioita, tekevät selvän eron luokan ja olioilmentymän välillä; luokilla on operaatioita mm. ilmentymien luomiseen ja tuhoamiseen; oliot voivat olla aktiiveja esim. Booch, 1991, Berard, 1993, Wirfs-Brock ym., 1990 evolutionaariset menetelmät: käyttävät graafisia kuvaustekniikkoja, joista monet tunnetaan myös rakenteisissa menetelmissä (esim. tietovirtakaaviot, ER-mallit) käsittelevät olioita ikään kuin ne olisivat tietoa mallintavat olioita tiedonmallintamisperiaatteilla (vrt. normalisointi) pitävät olioita staattisina ja tiedon suojausta toisarvoisena kytkevät oliot kiinteästi tietovaraston käsitteeseen

13 esim. Rumbaugh (1991), Shlaer, Mellor (1988), Martin, Odell (1995), Fusion (Coleman ym., 1995), Embly, Kurtz (1992). Oliomenetelmiä on luokiteltu myös sukupolvien mukaan: 1. sukupolven menetelmiä: Booch (1991), OMT (Rumbaugh ym,., 1991), OOA/OOD (Coad, Yourdon, 1991), OOS, SOMA, OOSE. 2. sukupolven menetelmiä: Fusion (Coleman ym.), Mainstream (Yourdon ym.), UM (Unified Method, Booch, Rumbaugh, 1996). 3. sukupolven menetelmiä: UML 2.0 (Unified Modeling Language, Booch, Jacobson, Rumbaugh, 2005; Unified Modeling Process, Jacobson, Booch, Rumbaugh, 1999), OPEN (Objectoriented Process, Environment and Notation, Graham, Henderson-Sellers, Younessi, 1997). 1990-luvun alkupuoli oli voimakasta uusien oliomenetelmien esiinmarssia. 90-luvun puolivälissä alkoi kehitysvaihe, joka jätti jäljelle vain muutamia varteenotettavia menetelmiä. Tunnettujen menetelmien valikoiman suppenemiseen vaikuttivat fuusiot ja liittoutumien syntyminen (metamallintamisen tuella): kolmas osapuoli kokoaa uuden menetelmän muiden osista; esim. Fusion (Coleman ym., 1995) menetelmän kehittäjien yhteenliittymät; esim. UML (Booch, Jacobson, Rumbaugh, 1999) laaja liittoutuma: OPEN (Graham, Henderson-Sellers, Younessi, 1997) Käytettyjen menetelmien määrä on vähentynyt erityisesti siksi, että tietojärjestelmiä ja ohjelmistotuotteita kehitetään nykyään yhä verkostoituneemmassa globaalissa ympäristössä, jossa järjestelmäintegraattorit tuottavat asiakkailleen entistä kokonaisvaltaisempia, modulaarisempia, ja ketterämpiä ratkaisuja ja niiden partnerit ja alihankkijat suunnittelevat ja/tai toteuttavat järjestelmien osia ympäri maailmaa 5. Sekä ratkaisuja että niiden toteuttamiseen tarvittavia menetelmiä ja välineitä säätelevät myös yhä monimutkaisemmat ja lukuisammat sisäiset ja ulkoiset normit. Verkostoitunut järjestelmäkehitys onkin erittäin vaikeaa, mikäli eri toimijat käyttävät eri menetelmiä ja työkaluja. Menetelmien kansainvälisen standardoinnin merkitys korostuu ja yksittäisten menetelmän kehittäjien rooli vähenee tulevaisuudessa entisestään. Työkalujen on nojattava entistä enemmän avoimiin standardoituihin rajapintoihin, jotta menetelmien edellyttämän tiedon välitys, varastointi, ja käsittely työkalujen välillä helpottuu ja voidaan rakentaa integroituja kehitysympäristöjä tietojärjestelmien ja tuotteiden hallitsemiseen läpi niiden elinkaarien. 5 Katso esimerkiksi: Salo, A., & Käkölä, T. (2005). Groupware Support for Requirements Management in New Product Development. Journal of Organizational Computing and Electronic Commerce, 15(4), 253-284. USA. Käkölä, T. et al (2006). A Framework for ICT-Supported International Outsourcing of Software Production Process and Management. International Journal of Cases in Electronic Commerce, 2. USA.

14 1.8. Lopuksi Olioajattelun hyötyjen on todettu kertyvän sitä varmemmin, mitä perusteellisemmin ja laaja-alaisemmin ajattelu on onnistuttu viemään läpi koko organisaatiossa, paremmin opitaan ymmärtämään oliolähestymistavan perusajatus (vrt. oppimiskäyrä), useammin päästään uudelleen käyttämään aiemmin määriteltyjä olioluokkia myöhemmissä projekteissa. Olioajattelun optimaalinen hyödyntäminen ohjelmisto- ja järjestelmäliiketoiminnassa edellyttääkin strategista muutosta yritysten toiminnassa. Hyödyntäminen edellyttää systemaattisia ja pitkäjänteisiä investointeja, joten ohjelmisto- ja järjestelmäpohjaisia palveluita tarjoavien yritysten on mahdollisuuksien mukaan siirryttävä projektiliiketoiminnasta kohti tuoteorientoitunutta liiketoimintamallia ja mahdollisimman tarkoin määriteltävä tuotteidensa ja palveluidensa ominaisuudet ja niiden kehittyminen useiden vuosien ajanjaksolla, jotta oliopohjainen tuotekehitys voidaan ohjata toiminnan, asiakashyötyjen, ja kassavirtojen kannalta kriittisille alueille. Näin olioluokkien kehittämiseen tehtyjä panostuksia päästään hyödyntämään vuosien aikana kokonaisten tuoteperheiden ja lukuisien tuotevarianttien tuottamisessa ja myymisessä 6. Kuva 1.10. Esimerkki integroidusta työkaluperheestä, jonka avulla voidaan muodostaa SOA-tietojärjestelmäarkkitehtuuri liiketoimintaprosessien ja tietojärjestelmien kokonaisvaltaisen suorittamisen ja kehittämisen tukemiseksi: kehittämisprojektisal- 6 Tätä tutkimusaluetta käsittelee huomattavasti syvällisemmin esimerkiksi: Käkölä, T. & Dueñas, J.C. (Eds.) (2006). Software Product Lines: Research Issues in Engineering and Management. Springer, Heidelberg, Germany.

15 kun projektien riski-, kustannus-, ja tuottoanalyysit; liiketoimintastrategian linkittäminen liiketoiminnan tavoitteisiin ja vaatimuksiin; vaatimusten linkittäminen malleihin nykyisistä ja tavoitelluista liiketoimintaprosesseista sekä mittareiden luominen prosessien suorittamisen tehokkuuden ja vaikuttavuuden seuraamiseksi; ohjelmistosovellusten vaatimusten ja käyttötapausten määritteleminen ja sovellusten tarjoamien palveluiden mallintaminen, toteuttaminen, ja testaaminen; palveluiden konfigurointi ja integrointi prosessien tarvitsemiksi palvelukokonaisuuksiksi liiketoimintaprosessien suorituskielen (esimerkiksi BPEL) avulla; ja liiketoimintaprosessien suoritus, suorituskyvyn mittaaminen ja raportointi kehityskohteiden havaitsemiseksi.

16 2. UML-, OMT-, ja OMT++-MENETELMÄT: yleiskuvaukset 1980-luvun loppupuolella ja 1990-luvun alussa julkaistiin kymmeniä oliomenetelmiä. Myöhemmin joukosta alkoi erottua muutamia kaupallisesti menestyviä menetelmiä, kuten OMT (Rumbaugh ym, 1991). OMT:n suosiota on selitetty muiden muassa sillä, että sitä käsittelevässä kirjassa kuvattiin havainnollisesti ja selkeästi vaihejako ja se sisälsi joitakin rakenteisen lähestymistavan puolella tutuksi tulleita malleja. Konvergenssi menetelmien joukossa jatkui 1990-luvun loppupuolella; UML syntyi kolmen merkittävän menetelmän kehittäjän ("three amigos": Booch, Rumbaugh ja Jacobson) toimesta. UML:stä julkaistiin alkuvaiheessa vain mallinnuskieli. Myöhemmin on esitetty myös prosessikuvaus (Jacobson ym, 1999), mutta se ei ole yhtä (pedagogisesti) suoraviivainen kuin OMT. UML on edelleen aktiivisesti kehityksen alla ja syksyllä 2006 käytössä on jo versio 2.0. Tällä kurssilla pyritään esittelemään yhtenäinen oliomenetelmä. Sen pohjana käytetään UML-notaatioa ja OMT:n perusprosessia. Nokian joissakin yksiköissään käyttämästä OMT++-menetelmästä on otettu erityisesti käyttöliittymän suunnittelua koskevia osuuksia. Tästä syystä tässä luvussa käydään läpi kunkin kolmen menetelmän perusrakenne, UML-menetelmää painottaen. 2.1. UML-menetelmä OMT (Object Modeling Technique) (Rumbaugh ym, 1991) kattaa analyysin, suunnittelun ja osan toteutusta. Sen kehittivät General Electric Research and Development Center:issä James Rumbaugh, Michael Blaha, William Premerlani, Frederich Eddy, ja William Lorenson pääosin 1980-luvun lopulla. Vuosien 1994-95 vaihteessa Rumbaugh siirtyi Grady Boochin Rational-yritykseen ja vuonna 1996 heidän joukkoonsa liittyi myös Jacobson. Unified Method versio 0.8 (Marraskuu 1995) ja UML (Unified Modeling Language, syyskuu 1996) julkaistiin standardoinnin pohjaksi. Marraskuussa 1997 OMG (Object Management Group) hyväksyi UML 1.1:n standardiksi. Vuonna 2005 OMG julkaisi nykyisen version UML 2.0. UML-prosessi (Jacobson ym, 1999) voidaan jakaa kolmen tekijän mukaan seuraavasti (Kuva 2.1): 1. Tehtäväkokonaisuudet (disciplines): Liiketoimintaprosessien mallinnus auttaa jäsentämään kehityksen kohteena olevan prosessin nykytilan ja priorisoimaan kehityskohteet. Vaatimusten määritys (requirements engineering) kerää, kokoaa ja määrittää toiminnalliset ja ei-toiminnalliset vaatimukset järjestelmälle. Analyysi (analysis) tarkentaa ja jäsentelee edellä koottuja vaatimuksia, jotta voidaan muodostaa ymmärrettävä, kattava ja ylläpidettävä kuvaus järjestelmästä (MITÄ järjestelmän tulee tehdä?). Suunnittelu (design) tarkentaa ja edelleen työstää tuotettua analyysimallia siten, että pystytään vastaamaan kysymykseen "MITEN järjestelmä vaatimukset tyydyttää?".

17 Toteutus (implementation) toteuttaa suunnittelun tuottamat kuvaukset (suunnittelumalli) käyttäen komponentteja, ohjelmointikieliä, tietokanta-teknologiaa yms. Testaus (test) varmistaa jokaisen toteutetun osan toimivan vaatimusten mukaisella tavalla. Kuva 2.1. Tehtäväkokonaisuudet suoritetaan iteratiivisesti vaiheissa 2. Vaiheet: Aloitusvaihe (inception): kiinnitetään ja rajataan liiketoiminta-alue ja perusprosessit (liiketoiminnan mallintaminen), määritetään kriittiset menetystekijät ja riskit, hahmotellaan perusarkkitehtuuri, arvioidaan resurssitarve ja tehdään projektisuunnitelma, tehdään mahdollisesti prototyyppi, lopuksi päätetään, kannattaako kehittämistä jatkaa. Tarkentamisvaihe (elaboration): analysoidaan ongelma-alue, määritetään vaatimukset, tarkennetaan perusarkkitehtuuria, priorisoidaan järjestelmäosia, tehdään yksityiskohtaisempi projektisuunnitelma. Konstruointivaihe (construction): Toteutetaan ja testataan suunnitellut ratkaisut Käytetään mahdollisuuksien mukaan alpha-versiota itse laadun parantamiseksi Luovutusvaihe (transition): luovutetaan järjestelmä ensin beta-versiona ja myöhemmin tuotanto-versiona käyttäjien käyttöön, tehdään välttämättömät korjaus- ja ylläpitotehtävät,

18 tehdään päätös projektin päättämisestä, kootaan kokemukset ja korjataan niiden mukaisesti prosessimallia. 3. Iteraatiot (iterations): Kunkin vaiheen sisällä voi olla useampia iteraatiokierroksia, joiden aikana vaatimuksia, kuvauksia, suunnitelmia, ja toteutuksia tarkennetaan ja tarpeen mukaan muutetaan. Iteraatioiden tarve on tapauskohtainen. Kuva 2.2 näyttää, millä painoilla mallit esiintyvät eri vaiheissa (hypoteettisessa projektissa). Luovutusvaiheessa malleihin tehdään enää pieniä tarkennuksia käyttäjien työn helpottamiseksi. Kehittämisen kulun konkretisoimiseksi voidaan esittää myös ne mallit, joita eri yhteyksissä tuotetaan (Kuva 2.3, Jacobson ym, 1999 p. 10; Kuvat 2.4 ja 2.5): Liiketoimintakäyttötapausmalli (business use case model) kuvaa liiketoimintaa tekevät aktorit ja heidän tavoitteensa liiketoimintaprosessien suorittamisen ja ohjaamisen näkökulmista sekä prosessit ja niiden tuottamat palvelut asiakkaille. Yhteen malliin voi liittyä useita käyttötapausmalleja, joista kukin kuvaa yhden järjestelmän (sovelluksen) toimintaa. Käyttötapausmalli (use case model) kuvaa järjestelmän käyttäjät ja käyttötapaukset (so. toiminnot, joita järjestelmän tuella voidaan suorittaa), Analyysimalli (analysis model) tarkentaa käyttötapausmallia niin järjestelmän rakenteen (luokkakaavio, class diagram) kuin käyttäytymisenkin (sekvenssikaavio, sequence diagram; yhteistoimintakaavio, collaboration diagram) osalta, Suunnittelumalli (design model) kuvaa järjestelmän teknisen rakenteen ja toiminnan, Sijoitusmalli (deployment model) kuvaa järjestelmän solmut (laitteet) ja järjestelmän ohjelmistokomponenttien sijoittamisen niihin, Toteutusmalli (implementation model) kuvaa järjestelmän ohjelmistokomponentit ja niiden sisällön olioluokkina, Testimalli (test model) kuvaa testaukset ja niiden suhteet käyttötapauksiin. Yksityiskohtaisimmillaan prosessia voidaan havainnollistaa kuvan 2.6 (Jacobson ym. 1999 p. 324) tavoin, jolloin osoitetaan myös roolihenkilöiden vastuut eri tehtäväkokonaisuuksien/kuvausten avulla.

19 Kuva 2.3. Kuusi mallityyppiä Unified Process-menetelmässä. Tyyppien välillä on riippuvuuksia, joista esimerkkinä esitetään Use Case-mallien liittyminen muihin mallityyppeihin. Kuva 2.4. Jäljitettävyys eri mallien välillä Unified Process-menetelmässä kokonaisvaltaisen SOA-arkkitehtuurin luomiseksi ja ylläpitämiseksi.

20 Kuva 2.5. UML näkymät ja kaaviot Kuva 2.6. Työntekijöiden roolit on kuvattu vasemmalla ja oikealla pystysarakkeella. Kullekin työroolille määritellään oma uimarata, johon määritellyistä tehtävistä roolin haltija on vastuussa. Työnkulut kuvataan pallukoilla. Esimerkiksi komponenttisuunnittelija analysoi luokkia ja paketteja analyysikokonaisuudessa, suunnittelee luokkia ja osajärjestelmiä suunnittelukokonaisuudessa, toteuttaa luokkia ja osajärjestelmiä toteutuskokonaisuudessa, ja tekee yksikkötestausta testauskokonaisuudessa.

21 2.2. OMT-menetelmä (Rumbaugh ym., 1991) OMT-menetelmän vaihejako koostuu seuraavista vaiheista (Kuva 2.7): Analyysi: MITÄ järjestelmän pitäisi tehdä? luodaan kuvaus rakenteista, toiminnoista ja toimintaympäristöstä keskitytään ongelma-alueeseen ollaan riippumattomia toteutusympäristöstä peruskäyttäjiltä edellytetään aktiivista osanottoa lopputuloksena: ongelman kuvaus luokkakaavio ja tietohakemisto tilakaaviot ja sekvenssikaaviot, tietovirtakaaviot Järjestelmän suunnittelu: arkkitehtuurin suunnittelua järjestelmän ositus osajärjestelmiksi luokkakirjastojen käyttö rajoitteet toteutukselle lopputuloksena: järjestelmän arkkitehtuuri ja ositus osajärjestelmiksi Oliosuunnittelu: MITEN kukin osajärjestelmä toteutetaan? sidotaan toteutusympäristön välineisiin suunnittelumalli rakennetaan lisäämällä analyysimalliin yksityiskohtia: tietorakenteiden ja algoritmien valinta teknisten eli toteutusolioiden (käyttöliittymät, etc.) käyttöönotto lopputuloksena: tarkennetut luokkakaaviot tarkennetut dynaamiset mallit tarkennetut funktionaaliset mallit Toteutus luokkien toteutus ohjelmointikielellä usein suoraviivaista koodirunkojen generointia oliomalleista keskitytään yhteen luokkaan kerrallaan rajapintamäärittelyt tulevat oliomallista lopputuloksena: luokkamääritykset (olioperustainen toteutus) ohjelmat, kaaviomääritykset (ei-olioperustainen toteutus).

22 Kuva 2.7. OMT-menetelmän vaihejako Mallit yhdessä kattavat järjestelmän piirteet kokonaisuudessaan. Mallien välillä on monenlaisia yhteyksiä. Esimerkiksi oliomallissa esitetään kunkin luokan yhteydessä operaatiot. Dynaamisessa mallissa esitetään, miten oliot reagoivat vastaanottaessaan viestejä. Funktionaalisessa mallissa osoitetaan, miten ko. operaatiot muodostavat prosesseja, joka vaikuttavat järjestelmän tietojenkäsittelyyn. Kukin malli tarkentuu edettäessä analyysista suunnittelun kautta toteutusvaiheeseen. Ehdottomia määrityksiä sille, mitkä piirteet otetaan malleista käyttöön missäkin vaiheessa, ei ole esitetty. Menetelmä sisältää siis tilannekohtaista liikkumavaraa eli se on kontingentti menetelmä. Kuvissa 2.8 a, b, ja c on esitetty kuvauksia pankkiautomaattijärjestelmästä staattisesta, dynaamisesta ja funktionaalisesta näkökulmasta (käyttötapausmalli on lisätty alkuperäiseen OMT-menetelmään nähden). Kuva 2.8a. OMT-menetelmän luokkakaavio sekä käyttötapausmalli

23 Kuva 2.8b. OMT-menetelmän tilakaavio ja sekvenssikaavio Kuva 2.8c. OMT-menetelmän tietovirtakaavio 2.3. OMT++ -menetelmä OMT++ on Nokian joissakin yksiköissä käytössä oleva oliomenetelmä. Se perustuu kolmeen tunnettuun oliomenetelmään: OMT (Rumbaugh ym., 1991) OOSE (Jacobson, 1992) Fusion (Coleman, 1994) OMT++:n rakenne on muodostettu kahden rinnakkaisen polun, staattisen mallintamisen ja dynaamisen (functional) mallintamisen varaan (Kuva 2.9, Jaaksi, 1997, 32). Polkujen lähtökohtana on vaatimusten kerääminen ja päätepisteenä

24 testaaminen. Kuvassa on esitetty, millaisia kehittämistehtäviä poluilla suoritetaan ja millaisin vaihein. Enemmän vaiheita korostava esitys OMT++:n rakenteesta on kuvassa 2.10. Siitä nähdään menetelmän iteratiivinen luonne: oliomallintaminen ja käyttäytymisen mallintaminen tuottavat tarkentuvia kuvauksia vaihe vaiheelta. Seuraavassa on luettelo kunkin vaiheen päätuotoksista: vaatimusten keruu: käyttötapaukset ja tekstikuvaukset määrittely (analysis): määrittelyoliomalli operaatiolista käyttöliittymäkuvaus suunnittelu: suunnitteluoliomalli toimintokuvaukset ohjelmointi: koodi esim. C++:lla 2.4. Oliomenetelmä tällä kurssilla Seuraavissa luvuissa esitellään oliokeskeisen tietojärjestelmien kehittämisprosessia pääosin UML-menetelmän mukaisesti. Koska UML jättää käyttöliittymän suunnittelun hyvin vähäiselle huomiolle, laajennetaan siltä osin tarkastelua OMT++:n ja Bennettin ym (1999) mukaisesti. OMT-menetelmäkirjasta on tekstiin sisällytetty esimerkki pankkiautomaattijärjestelmästä. Kunkin vaiheen yhteydessä määritellään keskeiset käsitteet, esitellään mallit notaatioineen sekä kuvataan askeleet. Päävaiheet ovat (Kuva 2.11): 1. Vaatimusten määritys 2. Analyysi 3. Suunnittelu 4. Toteutus Kuva 2.9. Staattinen ja dynaaminen mallintaminen OMT++-menetelmässä

25 Kuvat 2.10 ja 2.11. OMT++-menetelmän vaiheet ja tämän kurssin oliomenetelmän prosessimalli

26 3. VAATIMUSTEN MÄÄRITYS Vaatimusten määrittämisen (requirements engineering) tarkoituksena on tuottaa kattava ja johdonmukainen kuvaus kehitettävän tietojärjestelmän toiminnallisista (functional) ja ei-toiminnallisista (non-functional) ominaisuuksista. Viimeksi mainittu sisältää myös käytettävyys- (usability) vaatimuksia. Määrityksen tulee olla kuvaus tarpeista, ei ratkaisuista. Toteutukseen viitataan vain epäsuorasti (ehdottomat suorituskykyvaatimukset, laitteistoalusta, sovellettavat standardit, tulevaisuuden laajennustarpeet yms). Seuraavassa kerrotaan lyhyesti vaatimusten määritysstrategioista, -menetelmistä ja eräästä keskeisimmästä tekniikasta. Perusasiat vaatimusten määrittämisestä oletetaan jo tunnetuiksi. 3.1. Määritysstrategiat ja -tulokset Tietojärjestelmien kehittämisen olennaisimpana tavoitteena on etsiä ratkaisuja todellisiin ongelmiin ja sellaisia ratkaisuja, joita todella halutaan. Käytännössä pidetään liian usein itsestään selvänä, että käyttäjiltä saadaan helposti heti aluksi täsmälliset ja lopulliset ongelma- ja tavoitelistat suunnittelun pohjaksi. Kysymys on kuitenkin huomattavasti monimutkaisemmasta ja hankalammasta asiasta. Määrittelytyö edellyttää monipuolista kokemusta oikean psykologisen, organisatorisen ja poliittisen lähestymistavan valitsemiseksi kulloiseenkin tilanteeseen. Erityisen tärkeää on löytää kaikki järjestelmän keskeiset käyttäjä- ja muut intressiryhmät, joiden vaatimukset on huomioitava, sekä asiantuntevat edustajat näistä ryhmistä ja saada nämä ryhmät ja niiden edustajat sitoutumaan määrittelytyöhön koko järjestelmän kehittämisprojektin aikana. Näin järjestelmiä voidaan kehittää asiakasohjautuvasti suunnittelijoiden ja käyttäjäryhmien välisissä oppimisprosesseissa. Davisin and Olsonin (1985) mukaisesti voidaan erottaa neljä päästrategiaa vaatimusten määrittelylle: 1. Kyseleminen Perustuu olettamukseen, että käyttäjät pystyvät jäsentämään ongelmakentän ja ilmaisemaan tarpeensa. Soveltuu tilanteisiin, joissa on suhteellisen stabiili järjestelmä ja jäsentynyt ongelmakenttä. 2. Nykyisestä tietojärjestelmästä päättely Tarkoituksena on ottaa oppia ratkaisuista, joita on tehty aiemmin ko. sovellusalueella. Lähtökohtana voi toimia korvattava järjestelmä, samantapainen järjestelmä muualla, sovelluspaketti, käsikirjat tms. Soveltuu tilanteisiin, joissa on vakiintuneet toiminnot ja ympäristö. 3. Hyväksikäyttävän järjestelmän piirteiden selvittäminen Tarkoituksena on hyödyntävän järjestelmän piirteiden selvittämisen kautta rajata ja jäsentää ongelmakenttää, johon vaatimukset voidaan sitten johdonmukaisesti johtaen "ankkuroida".

27 Soveltuu tilanteisiin, joissa hyväksikäyttävä järjestelmä on muutosaltis eikä ole olemassa aikaisempaa ratkaisua. 4. Kokeilujen myötä (vrt. protoilu) vähitellen löytäminen Tarkoituksena on tuottaa jo alkuvaiheessa jotain konkreettista, jonka avulla käyttäjät voivat määrittää luotettavammin vaatimuksiaan. Soveltuu tilanteisiin, joissa käyttäjiltä ja/tai suunnittelijoilta puuttuu riittävä kokemus vaatimusmäärittelystä ja kohdealueesta ja käyttäjien tarpeet ovat muutosalttiita. Strategian valinta suoritetaan neljällä askeleella (Kuva 3.1 Davis, Olson, 1985), jotka alkavat hyväksikäyttävään järjestelmään, kehitettävään järjestelmään, käyttäjiin ja kehittäjiin liittyvien epävarmuustekijöiden tunnistamisella ja arvioinnilla ja etenevät kokonaisepävarmuuden johtamiseen. Strategian valinta ohjaa sopivan määritysmenetelmän valintaan. Käyttäjien rooli on ehdottoman tärkeä vaatimusten määrittelyn kaikissa strategioissa ja menetelmissä. UML-menetelmässä on esitetty yksinkertainen jäsennys vaatimusmäärittelylle ja sen tuotoksille (Jacobson ym. 1999, s. 117): Toiminto listaa harkinnan alaiset vaatimukset kartuta ymmärrystä järjestelmän ympäristöstä (so. hyväksikäyttävästä järjestelmästä), Määritä toiminnalliset vaatimukset Määritä ei-toiminnalliset vaatimukset Tuotos piirrelistat (feature lists) Liiketoimintamalli / kohdemaailman malli (domain model) Käyttötapausmalli Täydentävät vaatimukset (eivät ole käyttötapauskohtaisia) Vaatimusmäärittely UML-menetelmässä on tehtäväkokonaisuus, joka ulottuu vaihejaon mukaan konstruointivaiheeseen saakka. Vaatimusmäärittelyn tuloksena saaduille vaatimuksille on IEEE:n toimesta kehitetty seuraavat laatukriteerit: Oikeita: vaatimukset vastaavat käyttäjien todellisia toiveita, Yksiselitteisiä (unambiguous): vaatimukset on ilmaistu tavalla, joka ei jätä tulkinnan varaa, Kattavia: sisältävät kaikki tarpeelliset vaatimukset Johdonmukaisia (consistent): vaatimusten välillä ei ole ristiriitoja, Luokiteltuja (ranked): vaatimukset on luokiteltu: esim. pakolliset, valinnaiset, pohdinnanalaiset, mahdollisesti muuttuvat, Todennettavia (verifiable): vaatimuksen toteutumisen testaamiseksi tulee voida tehdä testitapaus, Muutettavia (modifiable): vaatimusten joukkoon on helppo lisätä uusia vaatimuksia, Jäljitettäviä (traceable): vaatimuksista käsin voidaan paikantaa vastaavat suunnittelu- ja toteutusosat ja päinvastoin.

28 Kuva 3.1. Neljä strategiaa vaatimusten määrittelylle 3.2. Käyttötapaukset Ivar Jacobsonin ym. (1992) esittämästä käyttötapausten (use cases) kuvaamisesta on tullut hyvin suosittu tekniikka, jolla voidaan edesauttaa järjestelmän rajaamista, toiminnallista jäsentämistä, ja vaatimusten systemaattista määrittämistä. Tämä tekniikka on osana kaikissa uusimmissa oliomenetelmissä, myös UML:ssä. Seuraavassa kuvataan sen pohjana olevan mallin käsitteet ja käyttö UML:n mukaisesti. Käyttötapauksella (use case) tarkoitetaan toimintosarjaa, jota järjestelmä toteuttaa käyttäjien (aktorien) tarpeiden tyydyttämiseksi (Booch et al., 1999). Pääperiaatteena on, että yhden käyttötapauksen tulisi muodostaa looginen kokonaisuus, jolla on selvä lähtökohta ja merkityksellinen lopputulos. Lähtökohtana eli herätteenä on tapahtuma tai tarve, joka käynnistää käyttötapauksen. Käyttötapausmalli koostuu käyttötapauskaaviosta sekä käyttötapauskuvauksista. Malli kuvaa aktorit, järjestelmän tarjoamat palvelut sekä yhteydet aktorien ja järjestelmän välillä, lyhyesti tavan käyttää järjestelmää. Käyttötapauskaaviota (use case diagram) (Kuva 3.2, Booch ym, 1999, s. 227) käytetään kuvaamaan järjestelmän tarkoitusta, rajausta, toimintoja ja käyttäjiä. Se toimii lähtökohtana analyysimallin laadinnalle ja kuvaa yleisellä tasolla ne tavat ja tilanteet, joita järjestelmä tukee, toimivat aktorit (actors) ja sen, mitkä aktorit missäkin käyttötilanteissa ovat osallisina viestien lähettäjinä, vastaanottajina, tai muulla tavalla toimijoina.

29 Kuva 3.2. Laskutus- ja maksatus-järjestelmän käyttötapauskaavio liiketoimintatapaukselle Myynti: Tilauksesta toimitukseen. Initiator-rooli kuvaa sitä, kuka tapauksen suorittamisen aloittaa. Semantiikka: Aktori on eräänlainen rooli, jossa käyttäjät (esim. operaattori, tietokannan hoitaja, peruskäyttäjä), laitteet (esim. tulostin) tai toiset järjestelmät (kirjanpitojärjestelmä) toimivat ollessaan yhteydessä järjestelmään. Kommunikointisuhde aktorin ja käyttötapauksen välillä osoittaa järjestelmän kytkennän ympäristöön, Yleistyssuhde käyttötapausten välillä: esimerkiksi käyttäjän tunnistaminen (validate user) voi tapahtua joko salasanan (Check password) tai silmän verkkokalvon skannaamisen (Retinal scan) avulla; merkitys on samantapainen kuin myöhemmin käsiteltävässä luokkien välisessä yleistyssuhteessa. Sisältymissuhde (include) käyttötapausten välillä: tarkoittaa, että toinen käyttötapaus (supplier) voi sisältyä toiseen käyttötapaukseen (client) viimeksi mainitun kontrollissa ja päättämässä tilanteessa. Esimerkiksi tilauksen tekeminen edellyttää aina käyttäjän tunnistamisen. Laajennossuhde (extend) käyttötapausten välillä tarkoittaa, että toinen käyttötapaus laajentaa toisen toiminta-alaa. Esimerkiksi tilausten tekemisessä noudatetaan normaalia toimintapaa, paitsi kiireellisten tilausten tekemisen

30 (poikkeustapaus) yhteydessä, jossa sovelletaan normaalin toimintatavan lisäksi erityistoimintoja. Edelleen laskun maksamisessa joudutaan joskus suorittamaan lisäksi tilinylitysmaksu (Kuva 3.3 Jacobson ym, 1999, 146). Kuva 3.3. Yleistys-, sisältymis-, ja laajennossuhteet Notaatio: Käyttötapaus: ellipsi, jonka sisällä on käyttötapauksen nimi, Aktori: tikku-ukko, Kommunikointisuhde: yhtenäinen viiva Yleistyssuhde: yhtenäisellä viivalla piirretty nuoli, jonka pää osoittaa yleistämisen suuntaan, Sisältymissuhde: katkoviivalla piirretty nuoli, jonka pää osoittaa sitä käyttötapausta, joka sisällytetään. Nuolen yhteydessä käytetään lisäksi merkintää <<include>> Laajennossuhde: katkoviivalla piirretty nuoli, jonka nuolenpää osoittaa sitä käyttötapausta, jota laajennetaan. Nuolen yhteydessä käytetään lisäksi merkintää <<extend>>. Kaavio on tarkoitettu antamaan yleiskuva järjestelmästä. Sen ilmaisuvoima ei riitä kuitenkaan yksityiskohtien kuvaamiseen. Tästä syystä jokainen käyttötapaus esitetään lisäksi tekstimuotoisella käyttötapauskuvauksella (use case description). Kuvassa 3.4 on annettu esimerkki kuvauksen rakenteesta. Kuvassa 3.5 (Jacobson ym, 1999 s. 143) on esitetty yksinkertainen työnkulku käyttötapausten mallintamiseksi. Siinä esitetään suoritettaviksi seuraavat askeleet: 1. Etsi aktorit ja käyttötapaukset: Hahmottele rajausta. Tunnista aktorit, jotka kommunikoivat "ilman välikäsiä" järjestelmän kanssa. Tunnista ja hahmottele pääkäyttötapaukset tekemällä skenaarioita tyypillisistä tapauksista.

31 Kuvaa järjestelmä käyttötapauskaaviona. Täydennä kaaviota tekstikuvauksilla. Laadi sanastoa keskeisistä asioista. 2. Priorisoi käyttötapaukset tärkeysjärjestykseen, jos niitä kaikkia ei ole resursseja tai tarvetta toteuttaa kerralla. 3. Tarkenna kuvauksia käyttötapauksista Tarkenna käyttötapausten sisäistä ja välistä rakennetta; aloitus- ja lopetuskohdat, vaihto-ehtoiset etenemispolut, poikkeustapaukset, jne. Piirrä tilakaavio edellä suunniteltujen tilojen ja tilasiirtymien selventämiseksi. Kuva 3.4. Esimerkki käyttötapauskuvauksesta

32 Kuva 3.5. Työnkulku käyttötapausten mallintamiseksi 4. Rakenna prototyyppi käyttöliittymien konkretisoimiseksi Järjestelmän toiminnan ymmärtämiseksi ja parempien/tarkempien vaatimusten esille saamiseksi on usein tarpeen rakentaa kevyt prototyyppi, joka simuloi lähinnä esityskerrosta (vrt. Kuva 1.4.). 5. Määritä käyttötapausten välille rakenteelliset suhteet: Ota käyttöön käyttötapauksia koskevat yleistys-, laajennos-, ja sisältymissuhteet. Huomattakoon, että neljäs askel UML-menetelmässä on tarkoitus suorittaa vasta seuraavaan vaiheen aikana. Tarkkuustaso yksittäisille käyttötapauksille tulee valita tilanteen mukaan. Käyttötapaus ei voi olla kuitenkaan liian pieni (vrt. käyttötapaus on toimintojen sarja) eikä liian laaja (jotta kuvaus pysyy hallinnassa). Keskikokoisessa järjestelmässä on muutamia kymmeniä ja isoimmissa järjestelmissä jopa satoja käyttötapauksia. Käyttötapaukset antavat järjestelmän ulkoisen kuvan (miltä järjestelmä näyttää käyttäjän näkökulmasta). Järjestelmän sisäinen rakenne (esim. osajärjestelmäjako) voi olla aivan toisenlainen. Käyttötapauskaavio ja -kuvaukset toimivat konkreettisena perustana toiminnallisten vaatimusten määrittämiselle. Kullekin käyttötapauksille erikseen tai niille yhteisesti voidaan lisäksi määritellä ei-toiminnallisia vaatimuksia (esim. tietojen tarkkuus- ja luotettavuustaso, turvallisuus, toimintahäiriöttömyys, käyttäjäystävällisyys, ja siirrettävyys). Vaatimusmäärityksiä tarkennetaan analyysin kuluessa ja myöhemmin myös muissa vaiheissa.

33 4. ANALYYSI Analyysivaihe ei esiinny tämännimisenä vaiheena UML:ssa (vaan tehtäväkokonaisuutena). Tässä esityksessä analyysivaiheeseen on sisällytetty seuraavat tehtävät: Staattinen mallintaminen (oliomallintaminen OMT:ssa, domain modeling UML:ssa), jonka pääasiallisena tuloksena saadaan alustava luokkakaavio. Arkkitehtuurin mallintaminen, jossa hahmotellaan järjestelmän perusarkkitehtuuri. Dynaaminen mallintaminen, jossa vuorovaikutuskaavioiden (sekvenssikaaviot ja yhteistoimintakaaviot) sekä tilakaavioiden avulla tarkennetaan järjestelmän käyttäytymistä. Käyttöliittymän suunnittelu (OMT++:n mukaan), jossa dialogikaavioiden ja näyttömallien avulla hahmotellaan käyttöliittymien rakennetta ja toimintaa. 4.1. Staattinen mallintaminen eli oliomallintaminen (Object modeling) tarkoituksena on rakentaa ymmärrettävä kuvaus niistä rakenteellisista ilmiöistä, joita vaatimusmäärittelyt koskevat lähtökohtina toimivat vaatimusmäärittelyt, käyttötapausmalli sekä sovellusaluetta ja sen ympäristöä koskeva asiantuntemus, tuloksena luokkakaavio + tietohakemisto Seuraavassa määritellään ensin luokkakaavion peruskäsitteet, rakenteet ja notaatio UML:n mukaan ja sen jälkeen esitetään lyhyt kuvaus mallintamisaskeleista. 4.1.1. Luokkakaavio: peruskäsitteitä Staattisessa mallintamisessa voidaan käyttää kahdenlaisia malleja: oliokaavioita ja luokkakaavioita. Oliokaaviot (object diagrams) kuvaavat yksittäisiä olioita ja niiden välisiä rakenteellisia suhteita. Näitä käytetään lähinnä monimutkaisten rakenteiden havainnollistamiseen. Varsinainen analyysi ja suunnittelu tapahtuvat luokkakaavioilla. Luokkakaavio (class diagram) kuvaa olioluokat ja niiden väliset suhteet. Luokkakaaviota voidaan pitää eräänlaisena kaavana tai mallina, joka määrittää, millaiset oliokaavat ovat mahdollisia. Kaaviot rakentuvat seuraavista käsitteistä: olio, luokka, attribuutti, operaatio, assosiaatio, linkki, kardinaalisuus, rooli, kooste, kompositio, ja yleistys. Osaa näistä on jo luvussa 1 käsitelty. Seuraavassa määritellään käsitteet ja esitetään luokkakaavion notaatio UML:n mukaisesti (joidenkin osalta myös OMT:n mukaisesti). Notaatiot on esitetty tiivistetysti myös liitteessä 1. Olio on rajattavissa ja yksilöitävissä oleva asia tai käsite, joka on merkityksellinen käsillä olevan tarkastelun kannalta ja joka kattaa sekä rakenteen (tilan) että käyttäytymisen.