Ohjelmistoarkkitehtuurit, syksy

Samankaltaiset tiedostot
Arkkitehtuurityylejä ja suunnittelutaktiikoita

Arkkitehtuurityylejä ja suunnittelutaktiikoita

Sytyke ry:n laivaseminaari Software Technology Transfer Pekka Forselius

ITK130 Ohjelmistojen luonne

ISO/IEC sarja (SQUARE)

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit

9. Ohjelmistoarkkitehtuurien arviointi

Ohjelmistoarkkitehtuurien arviointi

Ohjelmistoarkkitehtuurit

Kevät Ohjelmistoarkkitehtuurit 2014

Yleiskuvaus - LVpalvelukerroksen. laadulliset vaatimukset Jari Kokko & Vesa Mettovaara LUVAT JA VALVONTA -KÄRKIHANKE

ohjelman arkkitehtuurista.

Kevät 2016 Arkkitehtuurin arviointi, ATAM. Ohjelmistoarkkitehtuurit 2016

Ohjelmistojen suunnittelu

Laatukustannukset. Laadun hallinta. Laadun kustannuksista

Laadun hallinta. Laatukustannukset. Laadun kustannuksista. Sami Kollanus TJTA330 Ohjelmistotuotanto

Laadun hallinta. Laatukustannukset. Sami Kollanus TJTA330 Ohjelmistotuotanto

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k

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

LUKU 5: SUUNNITTELU. Suunnitteluun liittyviä käsitteitä:

13/20: Kierrätys kannattaa koodaamisessakin

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

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

Arkkitehtuurien tutkimus Outi Räihä. OHJ-3200 Ohjelmistoarkkitehtuurit. Darwin-projekti. Johdanto

Koodimalli Code Model

7. Ohjelmistoarkkitehtuurien arviointi

Järjestelmäarkkitehtuuri (TK081702) Hajautettu tietokanta. Hajautuksen hyötyjä

SUD SUD. Haasteet. Haasteet Esimerkki riskilähtöisestä arkkitehtuurityöstä ja mallinnuksesta. Esimerkkitapauksen rajaukset ja oletukset

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Opetusteknologian standardoinnin tilanne. Antti Auer

Ohjelmistoarkkitehtuurin suunnittelu

Ohjelmistojen testaus

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

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Algoritmit 1. Luento 3 Ti Timo Männikkö

Ohjelmistoarkkitehtuurit Kevät 2016 Johdantoa

Avoimen lähdekoodin ohjelmistot julkisessa hallinnossa

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

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

Tietojärjestelmän osat

UML:n yleiskatsaus. UML:n osat:

Toiminnallinen turvallisuus

TIE Ohjelmistojen suunnittelu

Ohjelmistoarkkitehtuurit, syksy

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Palveluperustaiset arkkitehtuurityylit

SEPA - Design Patterns

HELIA 1 (19) Outi Virkki Käyttöliittymät ja ohjelman suunnittelu

The administrative process of a cluster. Santtu Rantanen Valvoja: Prof. Jorma Jormakka

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

12. Kehysarkkitehtuurit

Harjoitustehtävät viikolle 42

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

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

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

Ohjelmistojen mallintaminen, mallintaminen ja UML

Tietokanta (database)

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

Ohjelmistotuotanto, s /27/2003

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2008

Liite 1: ServiceMix skenaariot ja PoC tulokset 1. Palvelun kehittäjän näkökulma

Ohjelmistoarkkitehtuurit, syksy

Testaus käsite. Sekalaista testausasiaa. Testauksen käsitteestä. Kattavuusmitat. Jos ajatellaan, että testaus = V&V, voidaan erottaa:

ALKUSANAT... 4 ALKUSANAT E-KIRJA VERSIOON... 5 SISÄLLYSLUETTELO... 6

Navigointi- ja taktiikkaohjelmistot. X Sail Racing Team Christer Baggström

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

Toimilohkojen turvallisuus tulevaisuudessa

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Rinnakkaistietokoneet luento S

Avoimen ja yhteisen rajapinnan hallintasuunnitelma v.1.4

Algoritmit 1. Luento 1 Ti Timo Männikkö

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Ilkeät ongelmat moniammatillista johtamista monikulttuurisessa ympäristössä. Lape Pippuri, Verkostojohtamisen seminaari

Arkkitehtuurin dokumentointi O A

OA:n kanoninen malli I

12. Monimuotoisuus 12.1

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

Tietorakenteet ja algoritmit - syksy

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

Suunnitteluvaihe prosessissa

Lyhyt oppimäärä mistä tietojen salauksessa on oikeasti kyse? Risto Hakala, Kyberturvallisuuskeskus, Viestintävirasto

OA:n kanoninen malli II

7 Sulautettujen järjestelmien suunnittelumallit. OhAr Marko Leppänen

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2007

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

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

$$$ Raha ratkaisee. $$$ Raha ratkaisee. Ohjelmistotuote. Ohjelmistotekniikan määritelmä

Ohjelmistoarkkitehtuurit, syksy

Väylät. Prosessorin tie ulkomaailmaan Pienissä järjestelmissä vain yksi väylä. Osoite, data ja ohjaussignaalit Prosessori ainoa herra (master)

Luento 12. Jouni Lappalainen, Ilkka Tervonen, additions & editions by Antti Juustila

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

Muusta kuin vesisioista

Pitkäaikaissäilytyksen toiminta ja ylläpito

Projektinhallinta: kustannusarvio

Juha Taina, Marko Salmenkivi ja Kjell Lemström,

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

Transkriptio:

Ohjelmistoarkkitehtuurit 27.9.2012 1 Ohjelmistoja kehitettäessä toiminnallisuuden suunnittelu saa usein kaikkein keskeisimmän osan Järjestelmän arkkitehtuurin kannalta suoraan toiminnallisuuteen liittyvät seikat ovat kuitenkin toisarvoisia Jos toiminnallisuus olisi ainoa järjestelmälle asetettava vaatimus, koko järjestelmä voisi olla yksi monoliittinen komponentti vailla minkäänlaista sisäistä rakennetta Järjestelmälle asetettavat laatuvaatimukset edellyttävät järjestelmältä (esimerkiksi) rakenteellisuutta 27.9.2012 2 Onnistunut arkkitehtuuri on edellytys järjestelmän keskeisten laatuvaatimusten saavuttamiseksi Pelkät arkkitehtuuritason ratkaisut eivät kuitenkaan takaa laatuvaatimusten täyttymistä Myös yksityiskohdat ja toteutustapa vaikuttavat, mutta eivät voi parantaa huonoa arkkitehtuuriratkaisua Onnistuneen järjestelmän edellytyksenä on sekä kokonaisuuden (~ arkkitehtuuri) että yksityiskohtien (~ toteutus) laadun varmistaminen 27.9.2012 3 Harri Laine 1

Laatuattribuutit riippuvat toisistaan Esimerkiksi millä tahansa muulla laatuattribuutilla on yleensä negatiivinen vaikutus suorituskykyyn (vrt. esim. muokattavuus, turvallisuus, saatavuus, ) Ei voida keskittyä laatuattribuutteihin yksittäin, vaan kokonaisuus ratkaisee 27.9.2012 4 Laatuattribuutteja accessibility, accountability, accuracy, adaptability, administrability, affordability, auditability, autonomy, availability, credibility, process capabilities, compatibility, composability, configurability, correctness, customizability, degradability, determinability, demonstrability, dependability, deployability, distributability, durability, efficiency, evolvability, extensibility, failure transparency, fault-tolerance, fidelity, flexibility, installability, Integrity, interchangeability, interoperability, learnability, maintainability, mobility, modularity,nomadicity, operability. orthogonality, portability, precision, predictability. provability. recoverability, relevance, reliability, repeatability, reproducibility, resilience, responsiveness, reusability, robustness, safety, scalability, seamlessness, self-sustainability, serviceability, securability, simplicity, stability, standards compliance, survivability, sustainability, tailorability, testability, timeliness, traceability, ubiquity, understandability, upgradability, usability (Wikipedia) 27.9.2012 5 Tehokkuus (Efficiency) Tehokkuus on ominaisuus, joka heijastaa ohjelmiston kykyä suoriutua suorituskykyvaatimuksista minimoimalla suoritusaikaisten resurssien käytön Resurssien käytön taloudellisuus 27.9.2012 6 Harri Laine 2

Tehokkuuden edistäminen arkkitehtuuritasolla Pieniä komponentteja Yksi tehtävä, ylimäärän välttäminen Yksinkertaiset ja kompaktit rajapinnat Monimutkaiset rajapinnat voivat aiheuttaa tehokkuushäviöitä esim. konversiotarpeiden takia Liian yksinkertaisetkin voivat aiheuttaa tehokkuushäviötä esim. konversiotarpeiden takia 27.9.2012 7 Useita rajapintoja samaan toiminnallisuuteen tehokkaampaa kuin sovittimien käyttö 27.9.2012 8 Data- ja prosessointikomponentit erillään Data ja metadata erillään (pienentää kuormaa) Tehokkuuden edistäminen arkkitehtuuritasolla (konnektorit) Valitse liitäntätavat huolellisesti Yhteistyön hoitamistapa vaikuttaa oleellisesti Tiedota vain asianosaisille Suosi asynkronisia kytkentöjä vältä odotusta 27.9.2012 9 Harri Laine 3

Käytä harkiten hajautuksen näkymättömyyttä Tunnista etäkohteet ja paikalliset kohteet 27.9.2012 10 Tehokkuuden edistäminen arkkitehtuuritasolla (konfiguraatio) Pidä runsaasti vuorovaikutuksessa olevat komponentit lähellä toisiaan Paikallinen data vs etädata Paikallinen palvelu vs. etäpalvelu Kerrosrakenteessa naapurikerros vs kaukainen kerros -> matala kerrosrakenne Kaukaiset lähelle (cache, prefetch) huom. ristiriita ylimäärän välttämisen kanssa Valitse liitäntätapojen käyttötilanteet huolellisesti Milloin ja missä Selvitä arkkitehtonisen tyylin tai ratkaisumallin soveltuvuus käyttötilanteeseeen 27.9.2012 11 Bass et al (1) ovat määritelleet taktiikkoja laatuominaisuuksien saavuttamiseen Tarkastellaan esimerkkeinä suorituskykyä ja ylläpidettävyyttä (http://etutorials.org/programming/software+architecture+in+practice,+second+edition/ Part+Two+Creating+an+Architecture/Chapter+5.+Achieving+Qualities/ 27.9.2012 12 Harri Laine 4

Suorituskykytaktiikoita Suorituskykytaktiikoiden tavoitteena on tuottaa on tuottaa vastauksen johonkin tapahtumaan tietyn aikarajan puitteissa Vastausaika riippuu 1. resurssien käytöstä 2. odotusajasta kilpailu resursseista resurssin saatavuus riippuvuus muusta toiminnasta Resurssitarpeeseen vaikuttavat taktiikat laskennan tehostaminen (algoritmi, välitulosten käsittely) yleisrasitteen vähentäminen (esim. etäkutsut paikallisiksi) tapahtumamäärän vähentäminen tapahtumien vastaanoton kontrollointi käsittelyajan rajoittaminen jonojen koon rajoittaminen 27.9.2012 13 Suorituskykytaktiikoita Resurssien hallintataktiikat Rinnakkaisuuden lisääminen Toiminnan / datan monistaminen Resurssien lisääminen Resurssien allokointitaktiikat jono prioriteettijono dynaaminen prioriteettijono staattinen allokointi 27.9.2012 14 Muunneltavuustaktiikat (modifiability tactics) Ohjelmiston muunneltavuutta mitataan laskemalla aikaa ja kustannuksia, jotka kuluvat ohjelmistomuutosten toteuttamiseen, testaamiseen ja käyttöönottoon Muunneltavuutta lähellä olevia tekijöitä: adaptability, evolvability, maintainability Muunneltavuustaktiikat voidaan jakaa kolmeen ryhmään Muutosten lokalisointiin perustuvat taktiikat Heijastusvaikutusten (ripple effect) estämiseen perustuvat taktiikat Sidonnan viivästämiseen perustuvat taktiikat 27.9.2012 15 Harri Laine 5

Muunneltavuustaktiikat, muutosten lokalisointi Tavoitteena rajoittaa odotettavissa olevien muutosten vaikutus mahdollisimman pieneen joukkoon komponentteja Määrätään komponenttien vastuut siten, että odotettavissa olevat muutokset koskevat rajattua joukkoa komponentteja Lokalisointitaktiikkoja: Komponentin vastuiden semanttinen yhtenäisyys (semantic coherence) Vastuut hoidettavissa ilman laajaa ulkopuolista kommunikointia Yleiskäyttöisten palvelujen eristäminen omiin moduuleihin Odotettavissa oleviin muutoksiin varautuminen Yleistäminen Erikoistaminen parametrien kautta parametrien tulkinta Vaihtoehtojen rajoittaminen 27.9.2012 16 Ohjelmamuutoksen heijastusvaikutukset (ripple effects) tarkoittavat muutoksia, jotka täytyy tehdä moduuleihin, joita varsinainen muutos ei suoraan koske Jos moduulia A muutetaan, niin moduulia B joudutaan muuttamaan vain siksi, että A:ta on muutettu ei siksi että B:n ominaisuuksia on ollut tarve muuttaa Tämä heijastusvaikutus johtuu siitä, että B:n toteutuksessa on jokin riippuvuus A:n toteutukseen 27.9.2012 17 Moduulien välisiä riippuvuustyyppejä: Syntaktinen (muotoa koskeva) riippuvuus koskien dataa tai palveluja Yhteinen formaatti datalle, palveluiden kutsumuodot Semanttinen (merkitystä koskeva)riippuvuus koskien dataa tai palveluja Datan/palvelun käyttäjän on tulkittava merkitys samoin kuin tuottajan Järjestysriippuvuus koskien dataa tai kontrollia Datan saapuminen tietyssä järjestyksessä Palveluiden suorittaminen tietyssä järjestyksessä, esim. A.n pitää olla suorittanut palvelu A1 ennen kuin B voi suorittaa palvelun B1 Rajapinnan identiteetti tunnettava Nimi tai kahva ( handle ) oltava tiedossa käännös ja suoritusaikana 27.9.2012 18 Harri Laine 6

Moduulien välisiä riippuvuustyyppejä Suoritusaikainen sijainti tunnettava Esim. IP-osoitteen tietäminen Datan tai palvelun laatutaso tunnettava esim. tarkkuus (onko sentit mukana?) Komponentin olemassaolon edellyttäminen Ei voida luoda dynaamisesti Moduulin käyttämien resurssien tunteminen 27.9.2012 19 Semanttisiin riippuvuuksiin perustuvia heijastusvaikutuksia on yleisesti ottaen vaikea estää Voi olla epätarkoituksenmukaista tarjota kaikille käyttäjille semantiikaltaan täsmälleen samanlaista rajapintaa ja käyttäytymistä kuin ennen muutoksia Vanhan implementaation muuttamiseen on yleensä painavia syitä Kahta erillistä implementaatiota voidaan joutua ylläpitämään siirtymäkauden ajan (vanhaa uuden rinnalla) Seuraavassa esitetyistä taktiikoista mikään ei välttämättä estä semanttisiin riippuvuuksiin perustuvia heijastusvaikutuksia 27.9.2012 20 Tiedon piilotus (Information hiding) Vanhin tekniikka muutosten propagoitumisen estämiseksi Jaetaan komponentin vastuut pieniin osiin piilotetaan ne osat, joiden ei tarvitse näkyä ulospäin Jos muutos koskee piilotettua osaa, vaikutukset ulospäin ovat rajoitettuja Liittyy odotettavissa oleviin muutoksiin varautumiseen Muuttuvien ominaisuuksien piilottaminen on moduulijaon yhtenä pääperiaatteena 27.9.2012 21 Harri Laine 7

Olemassa olevien rajapintojen säilytys (Maintain existing interfaces) Jos B riippuu A:n tarjoaman rajapinnan nimestä tai kutsumuodoista, rajapinnan ja syntaksin säilyttäminen tarkoittaa, ettei B:tä tarvitse muuttaa A:n päivityksen yhteydessä Ei välttämättä auta, jos riippuvuudet ovat semanttisia tai palveluiden/datan laatutasoon tai resurssien käyttöön liittyviä Huom! Yleisesti rajapinnan erottaminen toteutuksesta parantaa rajapintojen vakautta Käyttäjä riippuu vain rajapinnan (abstraktista) määrittelystä, eikä rajapinnan mistään nimenomaisesta toteutuksesta 27.9.2012 22 Olemassa olevien rajapintojen säilytys tehtävissä Rajapintoja lisäämällä Monet ohjelmointikielet sallivat useita rajapintoja yhdelle ohjelmayksikölle Uudet palvelut voidaan julkaista uuden rajapinnan kautta, jolloin vain niitä käyttäjiä tarvitsee muuttaa, jotka haluavat uusia palveluja käyttää Sovitinta (adapter) käyttämällä Lisätään sovitin A:n ja niiden käyttäjien välille joita ei haluta muuttaa Sovitin tarjoaa vanhan rajapinnan käyttäen itse A:n uutta rajapintaa Käyttämällä edustajaoliota (proxy) tynkäimplementaationa (stub) 27.9.2012 23 Kommunikaatioväylien rajoittaminen Rajoitetaan niiden moduulien määrää, joiden kanssa tietty moduuli käyttää samaa dataa Rajoitetaan niiden moduulien määrää, jotka tuottavat tietyn moduulin käyttämää dataa tai jotka käyttävät sen tuottamaa dataa Tämä vähentää datan tuotto- ja käyttösuhteista aiheutuvia heijastusvaikutuksia Voi vaikuttaa vastuiden allokointiin moduuleille Vaarana tehtävien kasaantuminen joillekin moduuleille 27.9.2012 24 Harri Laine 8

Välittäjän käyttö Jos B:n riippuvuus A:sta ei ole semanttista tyyppiä, on aina mahdollista lisätä välittäjä B:n ja A:n väliin Välittäjä piilottaa riippuvuuden konkreettisen ilmentymän ja tarjoaa B:lle muuttumattoman näkymän A:han Välittäjä vastuulla on vain riippuvuuden hallinta, ei mitään muuta Välittäjän käyttö on mielekästä varsinkin, jos B:n tapaisia käyttäjiä on useita tai riippuvuus on monessa kohdassa B:n toteutuksessa A:n implementaation muuttuessa vain välittäjää tarvitsee muuttaa 27.9.2012 25 Välittäjän käyttö Eri tyyppiset välittäjät hoitavat erilaisia riippuvuuksia: Nimipalvelin mahdollistaa A:n fyysisen sijainnin (osoitteen) muuttamisen ilman vaikutuksia B:hen B käyttää A:n nimipalvelimelle tallettamaa nimeä pyytäessään nimipalvelimelta A:n osoitetta Resurssimanageri on välittäjä, joka on vastuussa resurssien allokoinnista järjestelmässä Resurssimanageri pyrkii täyttämään kaikkien käyttäjien tarpeet mahdollisuuksien mukaan jakamalla resursseja joidenkin ennalta määrättyjen politiikoiden ja sääntöjen mukaan 27.9.2012 26 Muunneltavuustaktiikat, sidonnan viivästäminen Edellä kuvatut taktiikat pyrkivät vähentämään muutosten kustannuksia pienentämällä muutettavien moduulien määrää Niistä ei kuitenkaan ole hyötyä, jos halutaan lisätä ohjelmiston muunneltavuutta koskien moduulien käyttöönottotapaa ja aikaa tai halutaan mahdollistaa muiden kuin kehittäjien tekemän muutokset Sidonnan viivästäminen tukee molempia tavoitteita Nopeuttaa käyttöönottoa: järjestelmää ei tarvitse ajaa alas (ja käynnistää uudelleen) Vaatii lisäinfrastruktuuria kasvattaa kustannuksia 27.9.2012 27 Harri Laine 9

Muunneltavuustaktiikat, sidonnan viivästäminen Ajonaikainen rekisteröinti (runtime registration) mahdollistaa plugand-play operaatiot. Rekisteröinti aiheuttaa lisäkustannuksia. Tuottaja/kuluttaja rekisteröinti voidaan tehdä ajoaikaisesti tai latauksen yhteydessä. Konfigurointitiedostoissa voidaan säädellä käynnistyksen yhteydessä tehtäviä sidontoja ja parametreja. Polymorphismi mahdollistaa metodikutsujen myöhäisen sidonnan. Komponentin korvaus mahdollistaa latausaikaisen sidonnan. Protokollien noudattaminen mahdollistaa prosessien ajonaikaisen sidonnan. 27.9.2012 28 Yksinkertaisuuden (simlicity) voidaan katsoa olevan laatutekijä, joka liittyy osatekijänä moneen muuhun laatutekijään kuten muunneltavuuteen, ylläpidettävyyteen, ymmärrettävyyteen, jne Vastakohtana kompleksisuus: Complexity is a software system s a property that is directly proportional to the size of the system, number of its constituent elements, their internal structure, and the number and nature of their interdependencies 27.9.2012 29 Kompleksisuuden vähentäminen Eri tehtävät eri komponenteille (Separate concerns into different components) Kuitenkin ohjelmisto, jossa on enemmän komponentteja on kompleksisempi kuin ohjelmisto, jossa on vähemmän komponentteja Komponenttien määrää merkittävämpi kompleksisuustekijä on eri tyyppisten komponenttien määrä Komponentin tyyppi pitää tulkita laveasti: rakenne, käyttäytyminen, kehittäjäorganisaatio, API, tekniikka aiheuttavat erityyppisyyttä. Esimerkiksi monia eri tekniikoita käyttävä ohjelmisto on kompleksisempi kuin yhteen tekniikkaan perustuva. Komponenttien määrän vähentäminen ei välttämättä vähennä ohjelmiston kompleksisuutta, jos se johtaa yksittäisten komponenttien suurempaan kompleksisuuteen. Kaikki on suhteellista Toiminnallisuus komponentteihin vuorovaikutus konnektoreihin Komponentit semanttisesti yhtenäisiksi Valmiskomponenttien käyttö voi monimutkaistaa ohjelmistoa - tiedostettava Laskentakomponentit erikseen tietoformaattimuunnoksista 27.9.2012 30 Harri Laine 10

Kompleksisuuden vähentäminen Konnektorit eksplisiittisesti näkyville Konnektoreihin vain vuorovaikutustehtäviä Eri vuorovaikutustehtävät eri konnektoreille Rajoita vuorovaikutustapoja ja määriä Jälleen vuorovaikutusmekanismien määrä on merkittävä kompleksisuutta lisäävä tekijä Yksinkertaiset vuorovaikutusmekanismit ellei ole hyvää syytä käyttää monimutkaisempia Tarpeettomien riippuvuuksien eliminointi Eksplisiittiset riippuvuudet Hierarkkinen osiin jako 27.9.2012 31 Harri Laine 11