Ohjelmistotuotanto, s2001 2/10/2003

Samankaltaiset tiedostot
Ohjelmistotuotanto, s

Ohjelmiston suunnittelu

Ohjelmistojen mallintaminen Ohjelmistoarkkitehtuuri Harri Laine 1

Suunnitteluvaihe prosessissa

Ohjelmistojen suunnittelu

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Yhteenveto. Menettelytavat

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

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

UML:n yleiskatsaus. UML:n osat:

13/20: Kierrätys kannattaa koodaamisessakin

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

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

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen Tietovuokaaviot Harri Laine 1

Ohjelmistotekniikan menetelmät, UML

Ohjelmistojen mallintaminen, mallintaminen ja UML

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2008

2. Ohjelmistotuotantoprosessi

Kontrollipolkujen määrä

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2006 Tiedon mallinnus ja tietokannat. Harri Laine 1. Tietokanta.

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

Ohjelmistojen mallinnus, s2008 HY/TKTL, 28/10/2008. Harri Laine 1. Ohjelmisto

Ohjelmistotuotanto, s

Ohjelmistojen mallinnus (OMa) - Johdatus ohjelmistotuotantoon Harri Laine 1

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

Tietokanta (database)

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

Laaja-alainen, opiskelijalähtöinen ja projektiperusteinen opetussuunnitelma, case Monitori

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

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

Luokka- ja oliokaaviot

Ohjelmistotuotanto, prosessit Syksy Ohjelmistotuotantoprosessi. Prosessimalli. Prosessimallien perustehtävät. Prosessimallin vaihejako

UML - unified modeling language

OSAII: Käytännön rutiinit. Ohjelmiston suunnittelu

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ohjelmiston toteutussuunnitelma

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

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

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

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Arkkitehtuuripankki. Mallintamisen metamalli ja notaatiot

Tilakaaviot, sekvenssikaaviot (Haikala, Märijärvi ss , )

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2007

käyttötapaukset mod. testaus

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

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

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

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

Uudelleenkäytön jako kahteen

Ohjelmistojen mallintaminen, kesä 2010

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Unified Modeling Language

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

1.3 Katsaus ohjelmistotuotannon kehittymiseen

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Olioiden yhteistyön mallintaminen

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

Lähestymistavat - toiminnallinen

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

UML- mallinnus: Tilakaavio

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Määrittely- ja suunnittelumenetelmät

Mitä on periytyminen?

Tietojärjestelmän osat

A TIETORAKENTEET JA ALGORITMIT

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

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

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

Ohjelmistotuotanto s

TOIMINNALLINEN MÄÄRITTELY MS

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

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

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

5. Järjestelmämallit. Mallinnus

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

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

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

1. Olio-ohjelmointi 1.1

2 Ohjelmistoarkkitehtuurien kuvaus

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

Ohjelmiston testaus ja laatu. Testaustasot

Ohjelmiston vaatimusmäärittely. tietoteknisen järjestelmän osat

Tietokannan suunnittelu

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

Ylläpito. Ylläpito. Ylläpidon lajeja Ohjelmistotuotanto, syksy 1998 Ylläpito

ITK130 Ohjelmistoprosessi

Test-Driven Development

Ohjelmistotekniikan menetelmät

Laadunvarmistustekniikat

Ohjelmistotekniikka - Luento 2

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

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

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

Määrittelydokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Transkriptio:

Ohjelmistotuotanto Ohjelmistosuunnittelu 1 : asiakaslähtöisten vaatimusten muuntaminen teknisiä mahdollisuuksia tehokkaasti hyödyntäväksi ratkaisuksi luova, asiantuntemusta vaativa prosessi Pääkohteet: ohjelmiston yleisrakenne ja toimintaperiaatteet tietorakenteet (ulkoiset, sisäiset) algoritmit, toiminnot käyttöliittymä 1 Harri Laine, Jukka Paakki 2 n tuloksena on tekninen malli järjestelmästä, joka aiotaan tehdä Kaksi hallinnollista kokonaisuutta: yleissuunnittelu ja yksityiskohtainen suunnittelu yleissuunnittelu (product design / system design / preliminary design) järjestelmän kokonaisrakenne yhteiset tietorakenteet jako pääkomponentteihin (alijärjestelmät, moduulit) pääkomponenttien välisen kommunikoinnin periaatteet ohjelmistoarkkitehtuuri yksityiskohtainen suunnittelu (detailed design / program design / module design) kunkin komponentin sisäinen rakenne algoritmit rakenneosien yhteistyö dokumentti syntyy usein vastaavasti kahdessa vaiheessa: yleissuunnitelma (arkkitehtuuri) komponenttisuunnitelmat Harri Laine, Jukka Paakki 3 Harri Laine, Jukka Paakki 4 Tietosuunnittelu (data design) muuntaa tietosisältömallin tietorakenteiksi ulkoiset tietorakenteet (tietokantasuunnnittelu) tietokantakaaviot sisäiset tietorakenteet luokkakaaviot Arkkitehtuurisuunnittelu (architecture design) määrittelee ohjelmiston korkean tason komponentit ja niiden väliset suhteet luokkakaaviot, olioiden yhteistyökaaviot, arkkitehtuurimallit, kehykset Liittymäsuunnittelu (interface design) määrittelee, miten ohjelmiston ulkoiset liittymät toimivat käyttöliittymä laitteistoliittymät tietoliikenne Toimintosuunnittelu (procedural design) kuvaa yksityiskohtaisesti toiminnallisuden liittämisen arkkitehtuurisuunnitelmassa tunnistettuihin komponentteihin Harri Laine, Jukka Paakki 5 Harri Laine, Jukka Paakki 6 Harri Laine 1

P. Kruchten: The 4+1 View Model of Architecture, IEEE Software, Nov 1995, pp 42-50. Arkkitehtuuria on on syytä tarkastella eri näkökulmista Logical Scenarios Development Logical (looginen rakenne, sisältömalli) esittää järjestelmän loogiset pääosat alijärjestelmät, tärkeimmät luokat ja niiden väliset yhteydet staattiset rakenteet, liittymät yhteistoiminta osien välillä tavoitteena on kuvan välittäminen sisällöstä kokonaisuutena kuvaustekniikat: luokkakaavio, oliokaavio, yhteistyökaaviot, tietovirtakaaviot Process Physical Harri Laine, Jukka Paakki 7 Harri Laine, Jukka Paakki 8 Process (toiminnan organisointi) esittää kontrollin kulun järjestelmässä, kuvaa prossessit, säikeet, rinnakkaisuuden voidaan suhteuttaa sisältömalliin esimerkiksi määrittelemällä osajärjestelminä samasta osajärjestelmästä(prosessirakenteesta) voi olla useita instansseja (prosesseja) osajärjestelmien kytkennät ja yhteistyö voidaan kuvata esim. (luokkakaaviolla, oliokaavioilla,) yhteistyö- ja sekvenssikaavioilla, tietovirtakaavioilla Development (ohjelmarakenne, toteutusnäkökulma) ohjelmakomponenttien paketointi ja jako tiedostoihin ohjelmistotekninen rakenne minkälaisiksi kokonaisuuksiksi ohjelmisto pilkotaan? kirjastot komponentit kehykset millä perusteilla kootaan (kerrokset, ) osien yhteenliittyminen voidaan kuvata luokka-, olio- ja komponenttikaavioilla tai moduulirakenteena UML:ssä myös pakkauskaavio (package diagram) Harri Laine, Jukka Paakki 9 Harri Laine, Jukka Paakki 10 Physical (laitteistosijoittelu, hajautus) ohjelmiston sijoittelu verkkoon ja laitteistoon ohjelmiston ja prosessien sijoittelu UML:ssä tarjolla erillinen kaavio (deployment diagram) Sijoiteltavia: prosessit- prosessisijoittelu ohjelmat- ohjelmasijoittelu esim. WWW-sovelluksissa komponentti (esim. Java-sovelma) voi olla sijoitettu palvelimelle, mutta sitä suoritetaan työasemassa Scenarios (skenaariot, käyttönäkökulma) tyypillisen käytön esimerkkitapauksia kytkennät erityisesti sisältömalliin ja prosessimalliin yhteistyö- ja sekvenssikaaviot keskeisiä (UML: collaboration diagram, sequence diagram) Harri Laine, Jukka Paakki 11 Harri Laine, Jukka Paakki 12 Harri Laine 2

Ohjelmistoarkkitehtuuri: UML : osiin jakamista ja osien kytkemistä Logical TCP connection 0..1 Signature file Typed Text Pop3 Mail client Received IMAP Sent Windows RT platform Linux ssa kokonaisuus jaetaan osiin Jakamisella pyritään saavuttamaan: toiminnallinen itsenäisyys helpompi tehdä, testata ja ylläpitää työnjako ohjelmistoprojektissa Process :RT platform open ACK :TCP connection M: Typed R: Received S: Sent järjestelmän toiminnassa käsiteltävyys sopiva tarkkuustaso sopiva laajuus ok send Harri Laine, Jukka Paakki 13 Harri Laine, Jukka Paakki 14 : osiin jakamista ja osien kytkemistä Jakamisessa ei ole yksikäsitteistä "parasta" ratkaisua jako perustuu johonkin näkökulmaan, jonka mukaan tietyt palvelut ja tiedot kuuluvat samaan kokonaisuuteen jakoperusteena voi olla: käyttäjä, toiminto / tehtävä, laitteisto, toimipiste toiminnan kohde, ajoitus, jne. jako on yleensä monitasoinen, näkökulma voi vaihdella tasoittain ja olla eri osajärjestelmissä erilainen (vrt. 4+1 View Model ) Kerrostus n ositusperiaatteet: kerrostus (layering) pilkkominen (partitioning) Kerrostuksen perustana abstraktiotasot: toiminta-abstraktiot abstrakti kone -ajattelu ylemmän kerroksen palvelut tuotetaan alemman kerroksen palveluiden avulla (vrt. tietoliikenteen OSImalli) kerrokset perustuvat eri käsitteistöihin ylin kerros vastaa järjestelmän päätoimintoja ja käyttöliittymää, alin kerros usein fyysistä laitteistoa Harri Laine, Jukka Paakki 15 Harri Laine, Jukka Paakki 16 Kerrostus suljetussa kerrosarkkitehtuurissa vain välittömästi alemman tason palvelut käytettävissä parempi ylläpidettävyys avoimessa kerrosarkkitehtuurissa kaikkien alempien tasojen palvelut käytettävissä huonompi ylläpidettävyys parempi joustavuus esimerkki kerrostuksesta: 3. Käyttöliittymäkerros 2. Looginen toiminta kerros 1. Käyttöjärjestelmäkerros laitteiston/järjestelmän eristäminen rajapinnan taakse JDBC API kätkee tietokannan hallinnan Kerrostus Alempi kerros tarjoaa palveluja ylemmän kerroksen käyttöön, ylempi kerros kutsuu alempaa kerroksen 3 palvelut kerroksen 2 palvelut kerroksen 1 palvelut Harri Laine, Jukka Paakki 17 Harri Laine, Jukka Paakki 18 Harri Laine 3

Kerrostus Tieto-abstraktiot tietokantojen peruskäsitteitä näkymät - looginen taso - fyysinen taso abstraktit tietotyypit - oliot tietokannan piilotus esim EJB-komponenttien taakse Pilkkominen Pilkkominen = toiminnallinen tai tiedollinen osiinjako, ilmenee puhtaimmillaan asteittain tarkentuvassa suunnittelussa (top down) asteittain voi tarkentaa sekä toimintaa että tietoa esim. JSD, JSP (Jackson Structured Design, Jackson Structured Programming) Harri Laine, Jukka Paakki 19 Harri Laine, Jukka Paakki 20 Pilkkominen Pilkkominen: toiminta 1. Selvitä ongelman olennaiset osat. 2. Hahmota ainakin yksi mahdollinen ratkaisu mielellään useita ratkaisuja juopottele simuloi keskeiset tilanteet valitse yksinkertaisin ratkaisu, ellei ole erityisiä syitä valita toisin 3. Kuvaa järjestelmä hierarkkisesti tarkentaen ylhäältä alaspäin (suurempi kokonaisuus pienempi kokonaisuus) kuvausmenetelmä sovelluksen mukaan 4. Muodosta vastaava rakennekaavio 5. Kuvaa kunkin tarkennustason oliot mene viinakauppaan osta kossu korkkaa ota 1. ryyppy mene porttikongiin juo irvistele juo loput laula sammu särje pullo Harri Laine, Jukka Paakki 21 Harri Laine, Jukka Paakki 22 Pilkkominen: data Pilkkominen: toiminnallinen hierarkia sakkolappu valokopiokone nimi osoite henkilötunnus raha alustus kopiointi erikoistilanteet katuosoite eurot virheet... ilmoitukset postiosoite sentit paperi loppu tukos... Harri Laine, Jukka Paakki 23 Harri Laine, Jukka Paakki 24 Harri Laine 4

Yleiset suunnitteluperiaatteet prosessin pitää olla laajakatseista. Hyvä suunnittelija miettii myös vaihtoehtoisia toteutustapoja. Olemassaolevia komponentteja tulee käyttää hyväksi suunnittelussa. ssa pitää mahdollisuuksien rajoissa matkia ratkaistavan ongelma-alueen rakennetta. Suunnitelman pitää olla yhtenäinen ja hyvin integroitu. Yhtenäisyys tarkoittaa, että suunnitelma näyttää yhden ihmisen tuotteelta. Integrointi tarkoittaa, että komponenttien rajapinnat on suunniteltu huolellisesti. Yleiset suunnitteluperiaatteet Suunnittelman pitää tukea mahdollisia muutoksia. Myös poikkeustilanteisiin pitää varautua. Mahdollisen toipumisen pitää olla käyttäjäystävällistä. Jos toipuminen ei ole mahdollista, ohjelmiston tulee päättyä selkeästi ja antaa informatiivinen virheilmoitus. - ja toteutusvaiheet tulee erottaa selkeästi toisistaan. Suunnitelma on abstraktio toteutuksesta. Suunnitelman laadusta täytyy pitää kiinni jo suunnittelun aikana eikä pelkästään korjata suunnitelmaa lopussa. Harri Laine, Jukka Paakki 25 Harri Laine, Jukka Paakki 26 Yleiset suunnitteluperiaatteet Ohjelmarakenteita Suunnitelmaa pitää arvioida suunnittelun aikana. Näin vähennetään suunnittelussa esiintyviä virheitä. Esim. formaalit tekniset tarkastukset sopivat erittäin hyvin tähän tarkoitukseen. Ylemmän abstraktiotason puutteet ja virheet pitää käsitellä ennen alemmalle abstraktiotasolle siirtymistä. Yksinkertaisuus on valttia jatkolle. spagettikoodi ohjelma tietorak. ohjelmointikikkoja, data ja koodi jäsentymätöntä Harri Laine, Jukka Paakki 27 Harri Laine, Jukka Paakki 28 Ohjelmarakenteita Ohjelmarakenteita rakenteinen oliokeskeinen asteittain tarkennettu tieto ja toiminta rakenteinen ohjelmointi data ja koodi pakattuna rajapintojen taakse Harri Laine, Jukka Paakki 29 Harri Laine, Jukka Paakki 30 Harri Laine 5

Ohjelmarakenteita Oliokeskeinen modulaarisuus abstraktit tietotyypit datan ja koodin pakkaaminen tiedon piilottaminen, rajapinnat olio-ohjelmointikielet olioperustaiset suunnittelumenetelmät (esim. UML ja Rational Unified Process (RUP)) raviolikoodi? Hyvä ohjelmistorakenne Yleisiä ominaisuuksia, joihin on syytä kiinnittää huomiota: modulaarisuus (modularity) kiinteys (cohesion) kytkentä (coupling) tiedon kätkeminen (information hiding) muunneltavuus (modifiability) ylläpidettävyys (maintainability) Harri Laine, Jukka Paakki 31 Harri Laine, Jukka Paakki 32 Hyvä ohjelmistorakenne modulaarisuus Modulaarisuus: ohjelmisto on jaettu erillisiin nimettyihin (usein erikseen käännettäviin) osiin eli moduuleihin tietorakenteita yleensä yksityisiä, käyttöoperaatioiden kautta moduuli voi tarjota myös jaetun tietorakenteen operaatioita julkisia tai yksityisiä liittymä julkiset operaatiot, joita muut moduulit voivat kutsua Hyvä ohjelmistorakenne modulaarisuus Modulaarisuus: Effort(p+q) > Effort(p) + Effort(q) moduulin koko Moduulien määrän kasvaessa liittymien toteutuskustannukset kasvavat, joten jatkuva pilkkominen pienemmiksi moduuleiksi ei poista kaikkia kustannuksia Suositeltu moduulikoko noin 100-200 riviä koodia, yksittäiset operaatiot 20-30 riviä kerralla hahmotettavissa Harri Laine, Jukka Paakki 33 Harri Laine, Jukka Paakki 34 Hyvä ohjelmistorakenne kiinteys Hyvä ohjelmistorakenne kiinteys Kiinteys (cohesion) (toiminnallinen) moduuli on kiinteä, jos sen kaikki osat palvelevat yhtä ainoaa tehtävää, ts. moduuli toteuttaa yhden selkeän toiminnallisen kokonaisuuden moduuli ei ole kiinteä, jos se sisältää heikosti toisiinsa liittyviä osia kiinteys parantaa moduulin ylläpidettävyyttä ja lisää mahdollisuuksia uuskäyttöön Kiinteyden asteet huonosta hyvään: moduulissa on satunnaisesti yhdistettyjä osia moduuliin on koottu loogisesti samantyyppiset tehtävät(esim. tulostukset) moduuliin on koottu samaan aikaan tarvittavat osat (esim. alustukset) moduuliin on koottu kontrollin etenemisjärjestyksessä peräkkäisiä osia moduulin on koottu yhteisiä tietorakenteita käyttäviä operaatioita (olio) moduulin osat muokkaavat toistensa tuloksia: toisen tuote on toisen syöte toimintakokonaisuuteen perustuva yhdistäminen: jokainen osa omalta osaltaan tarpeen moduulin vastuulla olevan toimintakokonaisuuden kannalta Harri Laine, Jukka Paakki 35 Harri Laine, Jukka Paakki 36 Harri Laine 6

Hyvä ohjelmistorakenne kytkentä Kytkentä (coupling) kuvaa vuorovaikutuksia eri moduulien välillä löyhästi kytkettyjä moduuleja on helpompi ylläpitää, koska muutokset eivät vaikuta muihin moduuleihin kiinteästi kytketyillä on voimakkaita riippuvuuksia kytkös : yleensä moduulin jonkin operaation / metodin kutsu muita tyypillisiä kytköksiä: perintäsuhde, määrittelysuhde Hyvä ohjelmistorakenne kytkentä Kytkentä löyhästä vahvaan: ei vuorovaikutusta moduulien välillä käsiteltävän tiedon välittäminen yksittäisinä parametreina käsiteltävän tiedon välittäminen rakenteisina parametreina ohjaustiedon välittäminen parametreina yhteiskäyttöiset ulkoiset laitteet yhteiskäyttöinen tietorakenne toisten moduulien sisäisten rakenteiden hyväksikäyttö Harri Laine, Jukka Paakki 37 Harri Laine, Jukka Paakki 38 Hyvä ohjelmistorakenne tiedon piilotus Tiedon piilotus (information hiding) moduulia ajatellaan mustana laatikkona vain liittymät näkyvät ulospäin : syötteet tulosteet moduulin sisältämien toimintojen määrittely (kutsurajapinta) ulos eivät näy, eivät ulkopuolelta käytettävissä: moduulin sisäiset tietorakenteet toimintojen toteutustapa toteutus, testaus ja ylläpito paikallista suojausväärinkäyttöä vastaan tehostuu Harri Laine, Jukka Paakki 39 päätös Hyvä ohjelmistorakenne Muita jaossa vaikuttavia asioita: jakoa ei kannata jatkaa, jos liittymän koodi tulee pidemmäksi kuin toiminnan koodi (paitsi yleiskäyttöisten osalta) yhteiskäyttöisten osien eristäminen omiksi moduuleikseen lyhentää koodia ja helpottaa ylläpitoa työ ja päätöksenteko kannattaa erottaa eri moduuleihin, muutokset kohdistuvat yleensä vain jompaan kumpaan tässä yhteydessä on kuitenkin pyrittävä välttämään toimivaltarikkomuksia = tilanteita, joissa päätöksen vaikutusalue menee moduulin valvonta-alueen (= alaiset kutsurakenteessa) ulkopuolelle kannattaa etsiä yleiskäyttöisiä moduuleita hyödyntäminen toimivaltarikkomus Harri Laine, Jukka Paakki 40 Hyvä ohjelmistorakenne Muita jaossa vaikuttavia asioita: liittymien pitäisi olla mahdollisimman yksinkertaisia, ei rakenteista tietoa moduulirakenteeseen syvyyttä leveyden kustannuksella kuitenkin: luokkahierarkiassa syvää perintää vältettävä, koska se haittaa ymmärrettävyyttä ja ylläpidettävyyttä moduulin toiminnan tulee olla ennustettavissa ts. sisäinen tila ei saisi vaikuttaa (black box) moduuleilla pitäisi olla vain yksi sisäänmeno- ja yksi ulostulokohta (esim. määritelty kutsurajapinta) mittareita: fan_in (moduulia kutsuvien moduulien määrä), fan_out (moduulin kutsumien moduulien määrä), moduulihierarkian maksimisyvyys ja maksimileveys Harri Laine, Jukka Paakki 41 Moduulihierarkia kutsuriippuvuus x fan_out(x) = 4 leveys = 7 y syvyys = 5 fan_in(y) = 3 Harri Laine, Jukka Paakki 42 Harri Laine 7

Moduulihierarkia kutsuriippuvuus Moduulihierarkian suunnittelu: relaatio A uses B on voimassa, mikäli moduulille A määritelty tehtävä vaatii moduulin B käyttämistä (kutsumista) relaation uses tuottama riippuvuusverkko on kehätön => verkko muodostaa moduulien (puumaisen) hierarkian tavoitteena on kehätön verkko esim: a uses b, b uses c, a uses c, d uses c Moduulihierarkia kutsuriippuvuus nyt jokainen taso koostuu moduulien osajoukosta, joka voidaan toteuttaa, suorittaa ja testata erikseen inkrementaalisesti: taso 0 taso 1 taso 2 b a c d taso 2 taso 1 taso 0 testausjärjestys integrointitestauksessa Harri Laine, Jukka Paakki 43 Harri Laine, Jukka Paakki 44 Harri Laine 8