Ohjelmistotuotanto, s

Samankaltaiset tiedostot
Ohjelmistotuotanto, s2001 2/10/2003

Ohjelmiston suunnittelu

Ohjelmistojen mallintaminen Ohjelmistoarkkitehtuuri Harri Laine 1

Suunnitteluvaihe prosessissa

Ohjelmistojen suunnittelu

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmistojen mallintaminen Tietovuokaaviot Harri Laine 1

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

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

Ohjelmistojen mallintaminen kertausta Harri Laine 1

13/20: Kierrätys kannattaa koodaamisessakin

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

Ohjelmistojen mallinnus (OMa) - Johdatus ohjelmistotuotantoon Harri Laine 1

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

Tietokanta (database)

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Uudelleenkäytön jako kahteen

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Kontrollipolkujen määrä

Ohjelmistotuotanto, s

Luokka- ja oliokaaviot

Ohjelmiston toteutussuunnitelma

Tietojärjestelmän osat

UML:n yleiskatsaus. UML:n osat:

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

TOIMINNALLINEN MÄÄRITTELY MS

Yhteenveto. Menettelytavat

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

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

2. Ohjelmistotuotantoprosessi

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2008

Ohjelmistojen mallintaminen, mallintaminen ja UML

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

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

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

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

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

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

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

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

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

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

5. Järjestelmämallit. Mallinnus

Ohjelmistojen mallintaminen, kesä 2010

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

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

käyttötapaukset mod. testaus

Ohjelmistotuotanto s

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

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

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

Ohjelmoinnin perusteet Y Python

Lähestymistavat - toiminnallinen

Ohjelmistojen mallintaminen

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Laadunvarmistustekniikat

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2007

UML- mallinnus: Tilakaavio

Pertti Pennanen DOKUMENTTI 1 (5) EDUPOLI ICTPro

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

Rinnakkaisuuden hyväksikäyttö peleissä. Paula Kemppi

ohjelman arkkitehtuurista.

6. Suunnittelu. Suunnittelun tulos

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

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

1.3 Katsaus ohjelmistotuotannon kehittymiseen

HELIA 1 (8) Outi Virkki Tietokantasuunnittelu

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

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

Ohjelmistotuotanto, suunnittelu Syksy Suunnittelu. Suunnittelun tulos. Suunnitteluprosessin työvaiheet. Suunnitteluprosessi.

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

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

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

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

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

Suunnittelun tulos. 6. Suunnittelu. Suunnitteluprosessin työvaiheet. Suunnitteluprosessi. 6.1 Arkkitehtuurisuunnittelu.

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ö

Kertaus: yleistys-erikoistus ja perintä

Ohjelmistotekniikan menetelmät, UML

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

Ohjelmistojen mallintaminen, kesä 2009

A TIETORAKENTEET JA ALGORITMIT

Mitä on periytyminen?

Arkkitehtuurin dokumentointi O A

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

Toimilohkojen turvallisuus tulevaisuudessa

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

Testaustyökalut. Luento 11 Antti-Pekka Tuovinen. Faculty of Science Department of Computer Science

Ohjelmistoarkkitehtuurit

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

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

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

Olioiden yhteistyön mallintaminen

Transkriptio:

Ohjelmistotuotanto : asiakaslähtöisten vaatimusten muuntaminen teknisiä mahdollisuuksia tehokkaasti hyödyntäväksi ratkaisuksi luova prosessi Pääkohteet: ohjelmiston yleisrakenne ja toimintaperiaatteet tietorakenteet (ulkoiset, sisäiset) algoritmit, toiminnot käyttöliittymä 1 Harri Laine 2 n tuloksena on tekninen malli järjestelmästä, joka aiotaan tehdä. Kaksi hallinnollista kokonaisuutta: yleis- 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 yksityiskohtainen suunnittelu (detailed design / program design / module design) kunkin komponentin sisäinen rakenne algoritmit rakenneosien yhteistyö dokumentti syntyy usein vastaavasti kahdessa vaiheessa: yleissuunnitelma komponenttisuunnitelmat Harri Laine 3 Harri Laine 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 komponenttien väliset suhteet. Luokkakaaviot, olioiden yhteistyö, arkkitehtuurimallit, kehykset Harri Laine 5 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 tunnistetuihin komponentteihin Harri Laine 6 Harri Laine 1

Kruchten P.,B.: The 4+1 View Model of Architecture, IEEE Software, Nov 1995, pp 42-50. Arkkitehtuuria on on syytä tarkastella eri näkökulmista Logical view Scenarios Development view Logical view (looginen rakenne, sisältömalli) esittää järjestelmän loogiset pääosat esim. tärkeimmät luokat ja niiden väliset yhteydet, staattiset rakenteet, liittymät yhteistoiminta tavoitteena on kuvan välittäminen sisällöstä kokonaisuutena tekniikkoina: luokkakaavio, oliokaavio, yhteistyökaaviot, tiedonkulku Process view Physical view Harri Laine 7 Harri Laine 8 Process view (toiminnan organisointi) esittää kontrollin kulun järjestelmässä, kuvaa prossessit, taskit, 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 ja yhteistyökaavioilla Development view (ohjelmarakenne, toteutusnäkökulma) ohjelma komponenttien paketointi ja jako tiedostoihin ohjelmistotekninen rakenne Minkälaisiksi kokonaisuuksiksi ohjelmisto pilkotaan? kirjastot komponentit kehykset kokoamiseen pakkaukset ja alijärjestelmät millä perusteilla kootaan (kerrokset, ) osien yhteenliittyminen voidaan kuvata luokka- ja oliokaavioilla tai moduulirakenteena Harri Laine 9 Harri Laine 10 Physical view (laitteistosijoittelu, hajautus) ohjelmiston sijoittelu verkkoon, laitteistoon Ohjelmiston ja prosessien sijoittelu UML:ssä tarjolla erillinen kaavio Sijoiteltavia: prosessit - prosessisijoittelu ohjelmat - ohjelmasijoittelu esim. WWW-sovelluksissa komponentti (esim java-appletti) voi olla sijoitettu palvelimelle, mutta ajetaan työasemassa Scenarios (skenaariot, käyttönäkökulma) Tyypillisen käytön esimerkkitapauksia kytkennät erityisesti sisältömalliin ja prosessimalliin yhteistyökaaviot keskeisiä Harri Laine 11 Harri Laine 12 Harri Laine 2

on jakamista ja osien kytkemistä on jakamista ja osien kytkemistä ssa kokonaisuus jaetaan osiin Jakamisella pyritään saavuttamaan: toiminnallinen itsenäisyys helpompi tehdä, testata ja ylläpitää työnjako ohjelmistoprojektissa järjestelmän toiminnassa käsiteltävyys sopiva tarkkuustaso sopiva laajuus Jakamisessa ei ole yksikäsitteistä "parasta" ratkaisua Jako perustuu johonkin näkökulmaan, jonka mukaan tietyt palvelut ja tiedot kuuluvat samaan kokonaisuuteen. jakoperustana 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 Harri Laine 13 Harri Laine 14 Kerrostus 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. tietoliikenne OSImalli) kerrokset perustuvat eri käsiteistöihin siirrettävyys saadaan aikaan kirjoittamalla jonkin kerroksen koodi uudelleen suljetussa kerrosarkkitehtuurissa vain edellisen tason palvelut ovat käytettävissä parempi ylläpidettävyys avoimessa kerrosarkkitehtuurissa kaikkien alempien tasojen palvelut ovat käytettävissä huonompi ylläpidettävyys parempi joustavuus esimerkki kerrostuksesta: käyttöliittymäkerros looginen toiminta - kerros laitteiston/järjestelmän eristäminen rajapinnan taakse JDBC API kätkee tkhj:n Harri Laine 15 Harri Laine 16 Kerrostus Kerrostus Alempi kerros tarjoaa palveluja ylemmän kerroksen käyttöön kerroksen 3 palvelut kerroksen 2 palvelut tieto-abstraktiot tietokantojen peruskäsitteitä näkymät - looginen taso - fyysinen taso abstraktit tietotyypit - oliot tietokannan piilotus esim EJB-komponenttien taakse kerroksen 1 palvelut Harri Laine 17 Harri Laine 18 Harri Laine 3

Pilkkominen Pilkkominen Pilkkominen = toiminnallinen osiinjako ilmenee puhtaimmillaan asteittain tarkentuvassa suunnittelussa (top down) Asteittain voi tarkentaa sekä toimintaa että tietoa 1. Selvitä ongelman olennaiset osat. 2. Hahmota ainakin yksi mahdollinen ratkaisu mielellään useita ratkaisuja simuloi keskeiset tilanteet valitse yksinkertaisin ratkaisu, ellei ole erityisiä syitä valita toisin 3. Kuvaa järjestelmä hierarkkisesti tarkentaen ylhäältä alaspäin kuvausmenetelmä sovelluksen mukaan 4.Muodosta vastaava rakennekaavio 5. Kuvaa kunkin tarkennustason oliot Harri Laine 19 Harri Laine 20 Pilkkominen Pilkkominen juopottele sakkolappu mene viinakauppaan mene porttikongiin sammu nimi osoite henkilötunnus raha osta kossu juo katuosoite eurot korkkaa irvistele laula postiosoite sentit ota 1. ryyppy juo loput särje pullo Harri Laine 21 Harri Laine 22 Pilkkominen - hierarkia valokopiokone alustus kopiointi erikoistilanteet virheet... ilmoitukset paperi loppu tukos... Harri Laine 23 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. Harri Laine 24 Harri Laine 4

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 pitää pitää kiinni jo suunnittelun aikana eikä pelkästään korjata suunnitelmaa lopussa. Yleiset suunnitteluperiaatteet Suunnitelmaa pitää arvioida suunnittelun aikana. Näin vähennetään suunnittelussa esiintyviä virheitä. Esim. formaalit tekniset arvioinnit sopivat erittäin hyvin tähän tarkoitukseen. Ylemmän abstraktiotason puutteet ja virheet pitää käsitellä ennen alemmalle abstraktiotasolle siirtymistä. Harri Laine 25 Harri Laine 26 Ohjelmarakenteita Ohjelmarakenteita spagettikoodi strukturoitu tietorak. ohjelma Ohjelmointikikkoja, data ja koodi jäsentymätöntä Harri Laine 27 asteittain tarkennettu tieto ja toiminta rakenteinen ohjelmointi Harri Laine 28 Ohjelmarakenteita oliokeskeinen Ohjelmarakenteita oliokeskeinen modulaarisuus abstraktit tietotyypit datan ja koodin pakkaaminen tiedon piilottaminen, rajapinnat olio-ohjelmointikielet raviolikoodi? Harri Laine 29 Harri Laine 30 Harri Laine 5

Eri kriteerejä Modulaarisuus ominaisuuksia joihin on syytä kiinnittää huomiota: modulaarisuus Ohjelmisto on jaettu erillisiin nimettyihin (usein erikseen käännettäviin) osiin - moduuleihin kiinteys (cohesion) kytkentä (coupling) tiedon kätkeminen (information hiding) ylläpidettävyys (maintainability) 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 Harri Laine 31 Harri Laine 32 - kiinteys Modulaarisuus Effort(p+q) > Effort(p) + Effort(q) moduulin koko Kiinteys (cohesion) (toiminnallinen) moduuli on kiinteä, jos sen kaikki osat palvelevat yhtä ainoaa tehtävää, ts. moduuli toteuttaa yhden selkeän toiminnallisen kokonaisuuden Moduulien määrän kasvaessa liittymien toteutuskustannukset kasvavat, joten jatkuva pilkkominen pienemmiksi moduuleiksi ei poista kaikkia kustannuksia. moduuli ei ole kiinteä,jos se sisältää heikosti toisiinsa liittyviä osia kiinteys parantaa moduulin ylläpidettävyyttä ja lisää mahdollisuuksia uuskäyttöön Suositeltu moduulikoko noin 30 riviä. kerralla hahmotettavissa Harri Laine 33 Harri Laine 34 - kiinteys - kytkentä kiinteyden asteet huonosta hyvään: moduulissa on satunnaisesti yhdistettyjä osia moduuliin on koottu loogisesti samantyyppisiä tehtäviä (esim. tulostukset) moduuliin on koottu samaan aikaan tarvittavia osia moduuliin on koottu kontrollin etenemisjärjestyksessä peräkkäisiä osia moduulin on koottu yhteisiä tietorakenteita käyttäviä operaatioita (olio) 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 moduulin osat muokkaavat toistensa tuloksia toisen tuote on toisen syöte toimintakokonaisuuteen perustuva yhdistäminen jokainen osa tarpeen moduulin vastuulla olevan toimintakokonaisuuden kannalta Harri Laine 35 Harri Laine 36 Harri Laine 6

- kytkentä Kytkentä heikosta vahvaan: Tiedon kätkeminen (information hiding) 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 moduulia ajatellaan mustana laatikkona vain liittymät näkyvät ulospäin: syötteet ohjaustiedon välittäminen parametreina tulosteet moduulin sisältämien toimintojen määrittely yhteiskäyttöiset ulkoiset laitteet yhteiskäyttöinen tietorakenne sisäisten rakenteiden hyväksikäyttö ulos eivät näy: moduulin sisäiset tietorakenteet toimintojen toteutustapa toteutus, testaus ja ylläpito paikallista suojaus tehostuu Harri Laine 37 Harri Laine 38 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. Muita jaossa vaikuttavia asioita liittymien pitäisi olla mahdollisimman yksinkertaisia, ei rakenteista tietoa moduulirakenteeseen syvyyttä leveyden kustannuksella 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 kannattaa etsiä yleiskäyttöisiä moduuleita Harri Laine 39 Harri Laine 40 Moduulihierarkia - kutsuriippuvuus Moduulihierarkia - kutsuriippuvuus Moduulihierarkian suunnittelu Relaatio A uses B on voimassa, mikäli moduulille A määritelty tehtävä vaatii moduulin B käyttämistä. Relaation uses tuottama riippuvuusverkko on kehätön => x fan_out(x)=4 verkko muodostaa moduulien (puumaisen) hierarkian Tavoitteena on kehätön verkko Esim: a uses b, b uses c, a uses c, d uses c leveys 7 a taso 2 y fan_in(y)=3 syvyys 5 b c d taso 1 taso 0 Harri Laine 41 Harri Laine 42 Harri Laine 7

Moduulihierarkia - kutsuriippuvuus Moduulihierarkia - kutsuriippuvuus jokainen taso koostuu moduulien osajoukosta, joka voidaan toteuttaa, suorittaa ja testata erikseen inkrementaalisesti: taso 0 taso 1 taso 2 testausjärjestys Kehäkytkennöistä pitäisi päästä eroon esim jakamalla kehällisesti riippuvat moduulit kahteen osaan A1 A B B1 kehäkytkentä A2 B2 Harri Laine 43 Harri Laine 44 Harri Laine 8