Arkkitehtuurin mallintaminen

Samankaltaiset tiedostot
Arkkitehtuurin mallintaminen

Oppimistavoitteet. Arkkitehtuurin mallintaminen. Malleista ja niiden käytöstä. Malleista ja niiden käytöstä. Kommutatiivinen kaavio 22.9.

Ohjelmistoarkkitehtuurin suunnittelu

Ohjelmistojen suunnittelu

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

Ohjelmistojen mallintaminen, mallintaminen ja UML

Koodimalli Code Model

OA:n kanoninen malli II

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

Oppimistavoitteet. Suunnittelumalli Design Model. Suunnittelumalli. Suunnittelumalli. Suunnittelumalli SUUNNITTELUMALLI.

2 Ohjelmistoarkkitehtuurien kuvaus

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

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

TOIMINNALLINEN MÄÄRITTELY MS

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Tietojärjestelmän osat

OA:n kanoninen malli I

Ohjelmistojen mallintaminen

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Ohjelmistojen mallintaminen, kurssikoe esimerkkivastauksia

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Uudelleenkäytön jako kahteen

Ohjelmistotekniikan menetelmät, kesä 2008

UML- mallinnus: Tilakaavio

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

OA:n kanoninen malli III

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistotekniikan menetelmät, kevät 2008

Ohjelmistojen mallintaminen, kesä 2009

Simulation and modeling for quality and reliability (valmiin työn esittely) Aleksi Seppänen

Ohjelmistoarkkitehtuurit. Syksy 2010

Ohjelmistoarkkitehtuurit. Kevät

UML:n yleiskatsaus. UML:n osat:

Yhteentoimivuusalusta: Miten saadaan ihmiset ja koneet ymmärtämään toisiaan paremmin?

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

Suunnitteluvaihe prosessissa

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Harjoitustehtävät ja ratkaisut viikolle 48

JHS 179 ICT-palvelujen kehittäminen: Kokonaisarkkitehtuurin kehittäminen Liite 2 Arkkitehtuurikehyksen kuvaus

Ohjelmistoarkkitehtuurit Kevät käytäntöjä

Ohjelmistojen mallintaminen, kesä 2010

Luokka- ja oliokaaviot

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

Mallinnus. 5. Järjestelmämallit. Abstraktiot. Mallinnuksen etuja. Arkkitehtuurimalli. Yhteysmallit. Ohjelmistotuotanto, järjestelmämallit Kevät 2005

Sovellusalue- ja suunnittelumallit Domain Model, Design Model

Korkeakoulujen yhteentoimivuusmalli

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

UML-kielen formalisointi Object-Z:lla

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

HELIA 1 (20) Outi Virkki Tiedonhallinta

Ohjelmistoarkkitehtuurit. Syksy 2008

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

3. Käsiteanalyysi ja käsitekaavio

Ohjelmistojen mallintaminen, kertausta

Oppimistavoitematriisi

Ohjelmistoarkkitehtuuri

5. Järjestelmämallit. Mallinnus

Oppimistavoitteet. Koodimalli Code Model. Näkymätyypit. Näkymätyypit Yksi arkkitehtuuri monta näkymää NÄKYMÄTYYPIT

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

TIEDONHALLINTA - SYKSY Luento 7. Pasi Ranne /10/17 Helsinki Metropolia University of Applied Sciences

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Palvelusuuntautunut ohjelmistotuotanto Laskuharjoitus 1: Ryhmätöiden alustaminen Toni Ruokolainen,

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Projektisuunnitelma. Projektin tavoitteet

Algoritmit 1. Luento 10 Ke Timo Männikkö

Oppimistavoitteet. Sovellusaluemalli Domain Model. Esimerkkiohjelmisto Yinzer 1. Sovellusaluemallin käyttö. Sovellusaluemallin käyttö 24.9.

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Arkkitehtuuri. Ylätason sovellusarkkitehtuuri

Oppimistavoitteet. Ohjelmistoarkkitehtuurin suunnittelu. Referenssejä L. Bass, P. Clements, R. Kazman: I. Mistrik, A. W. Brown, M. Ali Babar 8.9.

Ohjelmistoarkkitehtuurin suunnittelu

Oppimistavoitematriisi

Ohjelmiston toteutussuunnitelma

Dynaaminen analyysi I

13/20: Kierrätys kannattaa koodaamisessakin

Oleelliset vaikeudet OT:ssa 1/2

Algoritmit 1. Luento 10 Ke Timo Männikkö

Tietokantojen suunnittelu, relaatiokantojen perusteita

Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi

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

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

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

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Harjoitustyön testaus. Juha Taina

Ohjelmoinnin perusteet Y Python

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto

Algoritmit 1. Luento 3 Ti Timo Männikkö

HELIA 1 (11) Outi Virkki Tiedonhallinta

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

Tietokannan suunnittelu

ohjelman arkkitehtuurista.

Ohjelmistoarkkitehtuurit. Syksy 2007

Luento 3 Tietokannan tietosisällön suunnittelu

T Ohjelmistojen määrittely- ja suunnittelumenetelmät Harjoitustyöraportti TNT - Tarkistetaan Ne Tentit Analyysimalli

Ohjelmistotekniikan menetelmät, UML

ITSLEARNING RAPORTOINTI JA ANALYTIIKKA. Johda tiedolla

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Transkriptio:

Arkkitehtuurin mallintaminen Luento 6 19.9.2013 581385 Ohjelmistoarkkitehtuurit 1 Oppimistavoitteet Miksi ja milloin ohjelmistoarkkitehtuurista kannattaa laatia malleja? Ohjelmistoarkkitehtuurin kanoninen malli 19.9.2013 581385 Ohjelmistoarkkitehtuurit 2 1

MIKSI MALLEJA? 19.9.2013 581385 Ohjelmistoarkkitehtuurit 3 1 Malli = Malleista ja niiden käytöstä esine, kuva, kuvio, kaava tms., jonka mukaan tehdään jtak t. josta havainnoidaan jtak. [ ] Erik. [ ] b. jtak kuviona, kaaviona tm. havainnollistava esitys. Molekyylin kolmiulotteinen malli. Atomiytimen malli. Väestön kehitystä kuvaava matemaattinen malli. [ ] 1 MOT Sanakirja 19.9.2013 581385 Ohjelmistoarkkitehtuurit 4 2

Malleista ja niiden käytöstä Yksinkertaiset ongelmat voidaan ratkaista suoraan (ratkaisu on ilmeinen) Monimutkaiset reaalimaailman ongelmat vaativat asian kuvaamista abstraktina mallina (joka pelkistää ongelman ytimen) ja sen ratkaisemista ensin mallissa, minkä jälkeen ratkaisu siirretään reaalimaailman implementaatioksi Esimerkiksi matemaattisten mallien käyttö rakenteiden lujuuslaskennassa jne. http://en.wikipedia.org/wiki/costa_concordia_disaste r#salvage 19.9.2013 581385 Ohjelmistoarkkitehtuurit 5 Kommutatiivinen kaavio Abstrakti ongelma Abstrakti ratkaisu Reaalimaailman ongelma Reaalimaailman ratkaisu 19.9.2013 581385 Ohjelmistoarkkitehtuurit 6 3

Mallien käyttö Ongelman laajuus ja monimutkaisuus vaatii abstrahointia On nähtävä metsä puilta Yksittäistä luokkaa, moduulia tai suunnittelumallin ilmentymää laajempien kokonaisuuksien hahmottaminen ja niiden roolin ymmärtäminen Suuren ohjelmiston koodin lukeminen rivi riviltä sen arkkitehtuurin ymmärtämiseksi on käytännössä mahdotonta 19.9.2013 581385 Ohjelmistoarkkitehtuurit 7 Mallien käyttö Abstraktiot pelkistävät ongelmia ja tarjoavat mahdollisuuden kehittää työkaluja Oikein laadittu abstraktio vangitsee reaalimaailman ongelman oleelliset piirteet, jotka vaikuttavat hyväksyttävän ratkaisun muodostamiseen Abstraktiin malliin voidaan käyttää erityisiä työkaluja ongelmien ratkaisemiseksi Esim moduulien/luokkien uudelleensijoittelu kirjastoihin/pakkauksiin haitallisiksi havaittujen riippuvuuksien karsimiseksi ja heijastusvaikutusten vähentämiseksi 19.9.2013 581385 Ohjelmistoarkkitehtuurit 8 4

Mallien käyttö Mallit helpottavat päätelmien tekemistä järjestelmän ominaisuuksista Malli auttaa päättämään, mitkä yksityiskohdat ja suunnittelupäätökset ovat tärkeitä laatuominaisuuksien ja niiden toteutumisen arvioinnin kannalta Malli voi olla luonnosmainen ja/tai pelkästään analysoijan mielessä 19.9.2013 581385 Ohjelmistoarkkitehtuurit 9 Web-palvelimen malliluonnos Asiakkaan yksi web-sivun pyyntö voi aiheuttaa monia tietokantahakuja Client(s) Server(s) Database(s) Asiakkaan kokema viive pyyntöön vastaamisessa = Viestinvälitykseen kuluva aika + palvelimen pyynnön prosessointiaika + (tietokantahakuun kuluva aika x hakujen lukumäärä) 19.9.2013 581385 Ohjelmistoarkkitehtuurit 10 5

Web-palvelimen malliluonnos Kun edellisen mallin suoritusajoille annetaan arviot (esim. 10 + 10 + n x 25ms), niin mallin perusteella on helppo nähdä, että tietokantakyselyihin kuluva aika dominoi asiakkaan kokemaa viivettä Normalisoitu, hierarkinen tietokanta vs. normalisoimaton flat tietomalli Tietokantahakujen määrässä voi olla kertaluokan ero Malli jättää monia yksityiskohtia huomiotta (cache:t, pyyntöjen jonotus), mutta tällaisenaankin se on hyödyllinen analyysin kannalta 19.9.2013 581385 Ohjelmistoarkkitehtuurit 11 Mallien käyttö Mallit karsivat ongelman ratkaisussa käsiteltäviä yksityiskohtia Malli valikoi ongelman ratkaisemisen kannalta oleelliset asiat ja jättää muut pois Malli on aina jossain mielessä epätäydellinen, mutta reaalimaailman täydellinen malli olisi liian suuri ja hankala käsiteltäväksi ja käsitettäväksi Mallit tehostavat päätelmien ja arviointien tekemistä Suunnittelija voi keskittyä vai pieneen joukkoon suunnittelupäätöksiä/yksityiskohtia kerrallaan (=työmuisti ja kognitio) Käsitteellinen tai konkreettinen malli auttaa suhteuttamaan ratkaisun eri yksityiskohtia toisiinsa ja havaitsemaan ja analysoimaan niiden välisiä riippuvuuksia ja rajoitteita 19.9.2013 581385 Ohjelmistoarkkitehtuurit 12 6

Mallien käyttö Kysy ensin mitä haluat tietää ja laadi malli vasta sitten Ei malleja mallinnuksen vuoksi Samasta asiasta voidaan laatia erilaisia malleja eri käyttötarkoituksiin (suorituskyky, turvallisuus, riippuvuuksien hallinta jne.) Arkkitehtuurityössä malleista on hyötyä ja ne ovat usein jopa välttämättömiä, mutta konkreettisia malleja pitäisi laativa vain todelliseen tarpeeseen, ei varmuuden vuoksi 19.9.2013 581385 Ohjelmistoarkkitehtuurit 13 OHJELMISTOARKKITEHTUURIN KANONINEN MALLI 19.9.2013 581385 Ohjelmistoarkkitehtuurit 14 7

Ohjelmistoarkkitehtuurin mallintaminen Fairbanks esittää kanonisen mallin ohjelmistoarkkitehtuurin mallintamiselle Kanoninen malli Määrittelee minkälaisia asioita ohjelmistoarkkitehtuurimallin pitäisi yleisesti ottaen kuvata, eli se on metamalli tai mallinnusstandardi Kattaa koko ratkaisun sovellusalueen käsitteistä kooditasolle asti 19.9.2013 581385 Ohjelmistoarkkitehtuurit 15 Ohjelmistoarkkitehtuurin mallintaminen Kanoninen malli antaa myös käsitteellisen kehyksen (conceptual model) ohjelmistoarkkitehtuurille Kehys tukee OA:n suunnittelua ohjaamalla suunnittelutyötä tietynlaisten kysymysten ja rakenteiden pohtimiseen Ohjaa jakamaan ohjelmistoa koskevien faktojen käsittelyn sopivalle abstraktiotasolle Ei ole kuitenkaan tarkoitus, että jokaisesta ohjelmistoprojektista laaditaan kanonisen mallin mukainen kattava kuvaus Projektit valikoivat todellisen tarpeen mukaan, mitä osia arkkitehtuurista mallinnetaan kanonisen mallin sääntöjä noudattaen 19.9.2013 581385 Ohjelmistoarkkitehtuurit 16 8

Ohjelmistoarkkitehtuurin mallintaminen Harhakäsityksiä Jokaisen projektin pitää dokumentoida arkkitehtuurinsa: väärin. Arkkitehtuurimalleja ja dokumentteja kannattaa laatia vain kun ne auttavat pienentämään (projekti- ja tuote-) riskejä Arkkitehtuurin dokumentaation pitää olla aina kattava: väärin. Mallinnuksen pitäisi kohdistua riskipitoisimpiin ratkaisun osa-alueisiin (laatuominaisuuksiin). Laaja dokumentaatiokin saattaa joskus olla tarpeen, esimerkiksi erityisen kommunikointitarpeen tyydyttämiseksi 19.9.2013 581385 Ohjelmistoarkkitehtuurit 17 Ohjelmistoarkkitehtuurin mallintaminen Suunnittelun pitäisi aina edellyttää koodausta: väärin. Projektin aikaisessa vaiheessa tehty ratkaisun osittainen toteutus ja prototypointi voivat auttaa tunnistamaan hankalimmat ongelmat. 19.9.2013 581385 Ohjelmistoarkkitehtuurit 18 9

Kanonisen mallin perusideat Kanonisen mallin mukainen arkkitehtuurimalli (jatkossa a-malli) jakautuu kolmeen osamalliin 1. Sovellusaluemalli (domain model) 2. Suunnittelumalli (design model) 3. Koodimalli (code model) Sovellusaluemalli on abstraktein ja koodimalli konkreettisin (lähimpänä toteutusta) Vastaavuus- ja tarkennussuhteet (designation and refinement) kytkevät osamallit toisiinsa 19.9.2013 581385 Ohjelmistoarkkitehtuurit 19 Kanoninen mallin perusideat Osamallit voivat periaatteessa olla hyvin laajoja, mutta näkymillä (view) voidaan suodattaa ja poimia esiin vain tietyn näkökulman kannalta mielenkiintoisia faktoja Käytännössä a-mallin fyysinen ilmentymä (kaaviokokoelma, dokumentti) koostuu aina tietyin perustein valituista näkymistä Täydellinen malli voi olla olemassa vain suunnittelijoiden mielissä 19.9.2013 581385 Ohjelmistoarkkitehtuurit 20 10

Kanoninen mallin perusideat Malli jakaa erilaiset faktat toteutettavasta ohjelmistosta omiin osamalleihinsa Laskutusjakso on 30 vuorokautta Ladatut fonttiresurssit pitää aina eksplisiittisesti vapauttaa Asiakkaan osoite on talletettu varchar(80) tyyppiseen kenttään Auttaa pitämään erityyppiset asiat erillään helpottaen niitten ymmärtämistä ja käsittelemistä 19.9.2013 581385 Ohjelmistoarkkitehtuurit 21 Sovellusaluemalli Ilmaisee reaalimaailman eli ongelma-alueen tosiasioita, jotka ovat relevantteja toteutettavan ohjelmiston kannalta (~ käsitteet jotka esiintyvät toiminnallisissa vaatimuksissa) Ilmiöt ja oliot Niiden keskinäiset suhteet Miten yllämainitut kehittyvät ja muuttuvat ajan kuluessa Näihin tosiasioihin on suhtauduttava annettuina; niitä ei voi muuttaa tai tulkita toisin (esim. viikossa on aina seitsemän päivää) 19.9.2013 581385 Ohjelmistoarkkitehtuurit 22 11

Suunnittelumalli Ohjelmistototeutuksen (SUD, System Under Design) suunnittelu taas on täysin ohjelmistoprojektin käsissä Suunnittelumalli on osajoukko kaikista ohjelmiston suunnittelupäätöksistä Osa päätöksistä jää avoimiksi ja koodimallissa ratkaistaviksi Se koostuu rekursiivisesti sisäkkäisistä rajapinta- (boundary) ja sisärakennemalleista Rajapintamalli kuvaa elementin julkisen rajapinnan muuhun ohjelmistoon Sisärakennemalli kuvaa elementin yksityisen sisäisen suunnittelun 19.9.2013 581385 Ohjelmistoarkkitehtuurit 23 Koodimalli Koodimalli on toteutetun ohjelmiston lähdekoodi tai jokin muu toteutuskoodin kanssa ekvivalentti malli Voidaan tuottaa käänteistekniikalla (reverseengineering, code-to-uml) Siinä missä suunnittelumalli jättää joitain suunnittelupäätöksiä avoimiksi, koodimalli on riittävän täydellinen suoritettavaksi tietokoneessa 19.9.2013 581385 Ohjelmistoarkkitehtuurit 24 12

Fairbanks G.: Just Enough Software Architecture, pp. 116 19.9.2013 581385 Ohjelmistoarkkitehtuurit 25 Vastaavuussuhde Vastaavuussuhde linkittää kahden eri mallin samanlaiset oliot toisiinsa Sovellusaluemallin käsitteillä ja ilmiöillä on oltava vastinparinsa suunnittelumallissa Vastaavuussuhdetta ei välttämättä määritellä eksplisiittisesti (listaamalla vastaavuuksia, mapping), mutta se on voitava aina validoida Vastaavuuden rikkoutuminen johtaa yleensä ohjelmistovikoihin, jotka näyttäytyvät vääränä käyttäytymisenä testauksessa Vastaavuus ei välttämättä ole 100% oikein toimivassakaan ohjelmistossa, koska suunnittelussa voidaan tarkoituksella tehdä yksinkertaistuksia sovellusalueen tietotyyppeihin 19.9.2013 581385 Ohjelmistoarkkitehtuurit 26 13

Vastaavuussuhde Fairbanks G.: Just Enough Software Architecture, pp. 117 19.9.2013 581385 Ohjelmistoarkkitehtuurit 27 Tarkennussuhde Tarkennus kytkee toisiinsa saman olion vähän yksityiskohtia sisältävän (low-detail) mallin ja yksityiskohtaisen (high-detail) mallin Sitä käytetään kytkemään rajapintamalli sisärakennemalliin, joka siis kuvaa elementin julkisen rajapinnan toteutuksen (suunnittelun tasolla) Tarkennusta voidaan käyttää myös hierarkisesti jakamaan jokin kokonaisuus osiinsa 19.9.2013 581385 Ohjelmistoarkkitehtuurit 28 14

Tarkennussuhde Tarkennusta käytetään myös linkittämään suunnittelumalli koodimalliin Suunnittelumallin rakenteelliset elementit kuvautuvat yleensä suoraan koodimallin elementteihin Moduuli suunnittelussa vastaa pakkausta koodissa Komponentti suunnittelussa vastaa joukkoa luokkia koodissa Mutta on kuitenkin joukko suunnittelumallin elementtejä, joilla ei ole suoraa vastinetta koodissa Invariantit, rajoitteet, arkkitehtuurityylit ja ratkaisumallit Koodissa voi pyrkiä noudattamaan niitä, mutta niitä ei voi suoraan ilmaista ohjelmointikielen rakentein 19.9.2013 581385 Ohjelmistoarkkitehtuurit 29 Tarkennussuhde Fairbanks G.: Just Enough Software Architecture, pp. 118 19.9.2013 581385 Ohjelmistoarkkitehtuurit 30 15

Näkymät Sovellusalue-, suunnittelu- ja koodimallit ovat täynnä yksityiskohtia (ainakin käsitteellisessä mielessä), joita on hankalaa pitää edes mielessään yhtä aikaa saati dokumentoida eksplisiittisesti Näkymä eli projektio suodattaa mallista osajoukon yksityiskohtia jotakin tiettyä näkökulmaa (viewpoint) tai tarvetta varten 19.9.2013 581385 Ohjelmistoarkkitehtuurit 31 Näkymät Esimerkiksi kaupungin maa-alue ja sen rakennukset, tiet ym. muodostavat mallin Opaskartta auttaa asukasta löytämään tietyn katuosoitteen kaupungista Reittiopas kertoo julkisten liikennevälineiden reitit kaupungissa Rakentajat ja kaavoittajat tarvitsevat taas aivan erilaisia tietoja omiin karttoihinsa 19.9.2013 581385 Ohjelmistoarkkitehtuurit 32 16

Näkymät Eri näkymät samaan Master -malliin eivät saisi olla keskenään ristiriitaisia Jos jokin sovellusaluemallin toiminnallinen skenaario viittaa johonkin oliotyyppiin, tyypin pitäisi olla kuvattuna myös mallin tietomallissa Master mallia ei välttämättä koskaan täydellisenä dokumentoida, joten on tärkeää muuten huolehtia, että kaikilla projektiin osallistuvilla on sama master malli mielessään 19.9.2013 581385 Ohjelmistoarkkitehtuurit 33 Master model Fairbanks G.: Just Enough Software Architecture, pp. 119 19.9.2013 581385 Ohjelmistoarkkitehtuurit 34 17

UML UML 2.0 versioon on lisätty tukea arkkitehtuurien mallinnukselle Kieli on laaja ja sen semantiikka ei ole kovin hyvin määritelty, mutta sille on melko laaja hyväksyntä ja hyvä työkalutuki Kurssilla ja kurssikirjassa käytetään UML 2.0:aa mallien visualisointiin 19.9.2013 581385 Ohjelmistoarkkitehtuurit 35 18