520 likes | 642 Views
010758002 Ohjelmistotuotanto - Suunnittelu. Kevät 2005 Jani Vaara LTY/Tite. Sisältö. Ohjelmistojen suunnittelusta Suunnittelun tavoitteet ja yleisiä periaatteita Arkkitehtuurisuunnittelusta Ohjelmistojen toteutusfilosofiasta Suunnittelun dokumentoinnista Uudelleenkäytöstä.
E N D
010758002 Ohjelmistotuotanto- Suunnittelu Kevät 2005 Jani Vaara LTY/Tite
Sisältö • Ohjelmistojen suunnittelusta • Suunnittelun tavoitteet ja yleisiä periaatteita • Arkkitehtuurisuunnittelusta • Ohjelmistojen toteutusfilosofiasta • Suunnittelun dokumentoinnista • Uudelleenkäytöstä
Yleistä suunnittelusta • Tarkoituksena muuntaa asiakkaan tarpeiden mukaan tehty määrittely tekniselle kielelle – järjestelmän toteutuksen kuvaukseksi • Vastaa kysymykseen: miten järjestelmä toteutetaan? • Jaetaan kahteen osaan: • arkkitehtuurisuunnittelu ja • moduulisuunnittelu
Määrittelystä suunnitteluun Määrittely Tuote asiakkaan kannalta Arkkitehtuurisuunnittelu Jako moduuleiksi, rajapintojen määrittely Moduulisuunnittelu Moduulien suunnittelu ja toteutus
Määrittelystä toteutukseen 1/2 Määrittelystä suunnittelun kautta toteutukseen edetessä näkökulma muuttuu toteutustekniseksi. Järjestelmää ositetaan kunnes jokainen osa on riittänän pieni kuvattavaksi ohjelmistotason välineillä.
Määrittelystä toteutukseen 2/2 • Arkkitehtuurisuunnittelussa järjestelmä jaetaan moduuleihin ja moduulien rajapinnat määritellään. • Moduulisuunnittelussa suunnitellaan kunkin moduulin sisäinen rakenne. • Tasoja voi olla useampia, tarkoituksen on hienontaa järjestelmä niin pieniin osiin, että osat voidaan antaa yksittäisten suunnittelijoiden tehtäväksi.
Suunnittelu ohjelmistokehityksessä Esitutkimus Asetetaan asiakasvaatimukset: mitä asiakas haluaa? Miksi ohjelmisto tulisi tehdä? Analysoidaan asiakasvaatimukset: mitä voidaan toteuttaa? Johdetaan ohjelmistovaatimukset: mitä projektissa tehdään? Määrittely Suunnitellaan, kuinka määrittelyssä kuvatut vaatimukset toteutetaan. (Arkkitehtuurisuunnittelu, moduulisuunnittelu) Suunnittelu Toteutetaan suunniteltu. Toteutus Integrointi: yhdistetään toteutetut osat niin, että niistä saadaan yksi toimiva kokonaisuus. Testaus: etsitään ohjelmiston virheitä ja korjataan ne. Integrointi ja testaus Käyttöönotto: toimitaan ohjelmisto asiakkaalle Ylläpito: ratkotaan asiakkaan ongelmia, korjataan virheitä, muutetaan tarvittaessa ohjelmistoa uusia vaatimuksia vastaavaksi. Käyttöönotto ja ylläpito
Ohjelmistosuunnittelun tavoitteet • Suunnittelulle asetettava keskeinen tavoite on varsin usein asiakkaan kokema laatu. • Asiakkaan kokema laatu on usean osatekijän summa. • Osatekijät esimerkiksi: • Kustannukset • Tuotteen laatu • Tuotteen valmistuminen aikataulussa
Yleisiä periaatteita yksinkertaisuus ja suoraviivaisuus Laadun osatekijöitä osittaminen ja lokaalisuus tehokkuus abstraktioiden hyödyntäminen virheettömyys toteutusfilosofia(t) luotettavuus käytettävyys ylläpidettavyys siirrettävyys uudelleenkäytettävyys ymmärrettävyys muunnettavuus toteutettavuus testattavuus toteutusvälineitä moduulirakenne abstraktit tietotyypit asiakkaan kokema laatu luokat oikea tuote oikeaan aikaan oikeaan hintaan Periaatteista ja toteutusvälineistä laatuun
Suunnittelun laatutavoitteita • Suunnittelun laatutavoitteisiin vaikuttavia ohjelmiston ominaisuuksia on paljon (esim. luettavuus, tehokkuus, käytettävyys, uudelleenkäyttö, -käytettävyys, ylläpidettävyys, siirrettävyys...) • Usein nämä tavoitteet ovat keskenään ristiriitaisia ja eri tilanteissa eri tavoitteille annetaan eri arvoja. • Yleispätevien tavotteiden antaminen lähes mahdotonta.
Arkkitehtuurisuunnittelu • Järjestelmän tai komponentin arkkitehtuuri on rakenne tai järjestelmärakenne, joka käsittää ohjelmistokomponentit, näiden komponenttien ulkoisesti näkyvät ominaisuudet sekä niiden suhteet toisiinsa. • Arkkitehtuurisuunnittelu on pääasiassa osien välisten työnjaon ja rajapintojen suunnittelua.
Arkkitehtuurisuunnittelu • Modulaarinen suunnittelu pyrkii minimoimaan yksittäiseen moduuliin sisälle tehtävän muutoksen vaikutukset muihin moduuleihin. • muutosten tekeminen helpottuu. • projektin osat voidaan toteuttaa toisistaan mahdollisimman riippumattomasti. • uudelleenkäytettävyys paranee.
Arkkitehtuurisuunnittelu • Arkkitehtuurisuunnittelussa kiinnitetään järjestelmän arkkitehtuuriin kuuluvat valinnat • järjestelmän kerrokset • jako alijärjestelmiksi, komponenteiksi • korkean tason suunnittelumallit • arkkitehtuurityylit (asiakas-palvelin jne.) • ohjelmistojen sijoittelu laitteistoihin • prosessit ja niiden kommunikointi • tiedon talletusratkaisut • tietoturva • jne.
Arkkitehtuurisuunnittelu • Arkkitehtuurisuunnittelussa tehdyt huonot ratkaisut kostautuvat myöhemmin korkeina toteutus- ja ylläpitokustannuksina. -> Ohjelmistojen keskeisiksi laatutekijöiksi nousee ymmärrettävyys ja muunneltavuus. • Mikäli arkkitehtuurisuunnittelu on tehty hyvin, yksittäinen huono moduuli on tavallisesti helppo korvata paremmalla.
Hyvä arkkitehtuurisuunnittelu... • parantaa osapuolten kommunikaatiota Ohjelmistoarkkitehtuuri esittää yleistä korkean tason abstraktiota järjestelmästä ja lähes kaikki osapuolet voivat käyttää sitä yhteisen ymmärtämisen perustana, yksimielisyyden muodostamiseen ja keskinäiseen kommunikaatioon. • auttaa aikaisissa suunnittelupäätöksissä Ohjelmiston arkkitehtuuri esittää ilmentymää järjestelmän suunnittelupäätöksistä ja nämä päätökset tulevat vaikuttamaan kehitystyöhön, käyttöönottoon ja ylläpitoon. • toimii siirrettävänä järjestelmän abstraktiona Ohjelmiston arkkitehtuuri muodostaa suhteellisen pienen, selkeän mallin siitä miten järjestelmä on rakennettu ja miten sen komponentit toimivat yhdessä. Tälläinen malli on siirrettävissä järjestelmien välillä, se esittää suuren mittakaavan uudelleenkäyttöä.
Arkkitehtuurisuunnittelun prosessisuosituksia • Arkkitehtuurin tulee olla yhden arkkitehdin tai nimetyn arkkitehdin vetäjän arkkitehtiryhmän suunnittelema. • Arkkitehdillä tulee olla selkeät ja priorisoidut järjestelmän tekniset vaatimukset, jotka arkkitehtuurin tulee täyttää. • Arkkitehtuurin tulee olla hyvin dokumentoitu käyttäen sellaisia sovittuja kuvaustapoja , joita kaikki osapuolet ymmärtävät.
Arkkitehtuurisuunnittelun prosessisuosituksia • Arkkitehtuuria tulee jatkuvasti kierrättää kaikilla osapuolilla, joiden tulee aktiivisesti osallistua arkkitehtuurin katselmointiin. • Arkkitehtuuria tulee analysoida sopivilla mitattavilla suureilla ja laadulliset ominaisuudet virallisesti katselmoida ennenkuin siihen on liian myöhäistä tehdä muutoksia.
Arkkitehtuurisuunnittelun prosessisuosituksia • Arkkitehtuurin tulee johtaa itsensä toteutukseen muodostamalla järjestelmästä ”luurankomallin”. • Arkkitehtuurin tulee määritellä erityinen (ja pieni) joukko resurssiongelmia suunnittelu ohjeistuksineen.
Arkkitehtuurisuunnittelun rakenteelliset ohjeet • Arkkitehtuurin tulee esitellä hyvin määritellyt moduulit, joiden toiminnalisuus ja rajapinnat on määritelty. • Moduulien tulee noudattaa riippumattomuutta, jotta niistä vastaavat toteutusryhmät voisivat toimia riittävän itsenäisesti. • Moduulien kapselointi takaa sen että koko järjestelmää ei tarvitse välttämättä muuttaa, jos jokin sen toimintaympäristössä muuttuu.
Arkkitehtuurisuunnittelun rakenteelliset ohjeet • Arkkitehtuuri ei koskaan saisi olla riippuvainen tietyn kaupallisen tuotteen tai työkalun versiosta. • Moduulit, jotka tuottavat dataa tulee erottaa moduuleista, jotka käyttävät dataa.Tästä seuraa parempi muunneltavuus koska muutokset vaikuttavat yleensä joko datan tuottamiseen tai käyttöön.
Arkkitehtuurisuunnittelun rakenteelliset ohjeet • Rinnakkaisprosessi järjestelmissä arkkitehtuurin tulee esitellä hyvin määritellyt prosessit, jotka eivät välttämättä noudata moduulirakennetta. • Jokainen prosessi tulee suunnitella siten että sen osoitus jollekkin prosessorille voidaan vaihtaa jopa ajonaikaisesti. • Arkkitehtuurin tulee esitellä pieni joukko yksinkertaisia toimintamalleja. Järjestelmän tulee tehdä samat asiat joka paikassa samalla tavalla. • lisää ymmärrettävyyttä ja parantaa muunneltavuutta • käsitteellinen yhtenäisyys lisääntyy
Miksi suunnittelu on vaikeaa? • Suunnittelun ratkaisut ja tietotekniikka muuttuvat nopeasti • Se mitä opetan tänään on 3 vuoden päästä vanhaa. • Tietokoneiden kapasiteetti laajenee kovaa vauhtia. • Käsiteltävät ongelmat muuttuvat koko ajan monimutkaisemmiksi.
Arkkitehtuurisuunnittelun tavoitteet • Suunnittelun tavoitteita: • selkeys ja ymmärrettävyys • tehokkuus • luotettavuus • ylläpidettävyys • uudelleenkäytettävyys ja siirrettävyys • Ratkaisut tavoitteiden saavuttamiseksi: • paikallisuus • hierarkkisuus • modulaarisuus • rajapintojen tiiviys • tiedon kätkeminen
Viime kädessä... • arkkitehtuurisuunnittelun tarkoitus on ihmiselle hankalan monimutkaisuuden hallinta. • Ohjelmistot ovat monimutkaisia -> yksinkertaisesti toteutettavien osien toteuttaminen vaatii ohjelmistojen osittamista keskenään riippumattomiin moduuleihin.
Suunnittelun yleisiä periaatteita • yksinkertaisuus ja suoraviivaisuus • osittaminen ja lokaalisuus • abstraktioiden hyödyntäminen • yhdenmukainen toteutusfilosofia eli arkkitehtuurityyli
Yksinkertaisuus ja suoraviivaisuus • On kaksi tapaa rakentaa ohjelmistoja • Suunnitteluratkaisut ovat niin suoraviivaisia ja ymmärrettäviä, että virheettömyys on ilmeistä • Suunnitteluratkaisut ovat niin mutkikkaita, että virheet eivät ole ilmeisiä • Kolme hyvää periaatetta: • KISS: Keep It Simple, Stupid • Design for errors • Design for change • Ja erityisesti reaaliaikajärjestelmissä • Design for testing • Ja ehkä se kaikkein tärkein periaate: • Say it once and only once
Osittaminen • rakenteellisen monimutkaisuuden hallinta • osittaminen rinnakkaisiin osiin • moduulit toteuttavat osan kokonaisuudesta • hierarkkinen osittaminen • alemman tason moduulit ”palvelevat” ylemmän tason moduuleita
Lokaalisuus • Osittamisen suunnittelua siten, että suunnittelu-päätökset kapseloidaan mahdollisimman hyvin osien sisään • Edut: • muutosten tekeminen helpottuu • ohjelmiston yksittäisten osien toteutus ja testaus erikseen • mahdollistaa osan irrottamisen kokonaisuudesta ja uudelleenkäytön toisessa yhteydessä • Moduulin sisäisen toteutuksen lokalisointi
Abstraktioiden hyödyntäminen • Abstraktio • malli, joka kuvaa esittämästään asiasta oleellisen • Epäoleellinen voidaan jättää pois ja tarpeettomat yksityiskohdat koteloidaan (encapsulate) abstraktion sisälle • Informaation kätkeminen (information hiding) • Abstraktiosta näkyy käyttäjälle rajapinta (interface), sen sisään koteloitu toteutus on abstraktion käyttäjälle tuntematon -> ymmärrettävyys & muunneltavuus • Käyttötarkoituksina korkeamman tason abstraktion luominen alemman tason abstraktiosta, erilaisuuden kätkeminen, suunnitteluratkaisun piilottaminen
Abstraktioiden vastineet • Vastine ohjelmistoa ympäröivässä maailmassa, esimerkiksi ”auto” tai ”kissa”. • ominaisuudet ja toiminnot helppo määritellä. • Ei vastinetta todellisuudessa. • Usein toteutusta helpottavia peruskomponentteja, esim. merkkijonojen käsittely tai sanomajonot. • Määrittely usein työlästä ja vaatii usein useiden vaihtoehtojen kokeilua
Toteutusfilosofia (arkkitehtuurityyli) • Yhdenmukaiset toteutusperiaatteet, joilla järjestelmän piirteet toteutetaan. • Toteutusfilosofia kiteyttää periaatteet ja rakenteet, joiden ajatellaan pysyvän muuttumattomana koko ohjelmiston elinkaaren ajan. • Arkkitehtuurisuunnittelu tuleekin ymmärtää laajemmin kuin pelkkinä moduuleina ja niiden välisinä yhteyksinä.
Lisää toteutusfilosofiasta • Antaa kehittäjälle mallin siitä, miten uusi ominaisuus toteutetaan järjestelmään. • Antaa ylläpitäjälle tietoa, minkä tapaista ratkaisua on etsittävä ja mihin muutokset on kohdistettava. • Hyvälle arkkitehtuurille on ominaista, että jos jotain asiaa ei tiedä, se on arvattavissa toteutusfilosofian perusteella. • Antaa yleisen mallin, jonka mukaan järjestelmän avainabstraktioita yhdistellään.
Esimerkki käyttöjärjestelmän toteutusfilosofioista proseduuriorientoitunut KJ prosessiorientoitunut KJ
Moduulien toteuttaminen • Yksi moduuli kuvaa yhden abstraktion tai koostuu joukosta yhteenkuuluvia aliohjelmia • Useimmiten moduulijako vastaa ohjelman jakoa tiedostoiksi • Moduulien kuvauksessa rajapinnan kuvaus erotettava sisäisestä toteutuksesta • kieleen liittyvä esitystapa • sopimus toteutuskäytännöstä
Rajapintojen suunnittelu ja dokumentointi • rajapinta: sopimus toteuttajan ja käyttäjän välillä • modulien sisäinen kiinteys mahdollisimman suuri helpottaa ylläpitoa • loogisesti yhteenkuuluvat asiat samassa modulissa • modulien väliset kytkennät mahdollisimman pieniä helpottaa ylläpitoa • modulien väliset riippuvuudet • rajapintojen kapeus ja löyhyys (välitetään vain ne tiedot, jotka on tarpeen)
Suunnittelun eteneminen • Tehtäviä: • Mietitään ratkaisun yleiset periaatteet (toteutusfilosofia, arkkitehtuurityyli) • Suunnitellaan modulirakenne • Määritellään, mitä tietoa modulit sisältävät • Suunnitellaan modulien rajapinnat • Määritellään modulien näkyvyys: mitä muita moduleja moduli tarvitsee toiminnassaan • Testataan ratkaisua tutkimalla millaisia kutsusekvenssejä ohjelman toiminnot aiheuttavat modulien sisällä (esim. SA menetelmän tapahtumalistana, UML käyttötapauksina) • Suunnitellaan modulien sisäinen toteutus • Varmistetaan kriittisimpien toteutusratkaisujen toimivuus esimerkiksi prototyypillä • Suunnittelun dokumentointi Iteroiden ja rinnakkain
Teknisen määrittelyn sisältörunko Lähde: standardista IEEE1016 vapaasti mukailtu
Suunnitteluesimerkki • Ohjelmisto muodostaa tekstitiedostosta hakusanaston • Hakusanasto sisältää dokumentissa esiintyneet sanat aakkosjärjestyksessä • Jokaisesta sanasta tulostetaan sen esiintymisrivit tiedostossa • Hakusanasto on muotoa: akku 4 akussa 5,10 alku 1,7 ...
Tapahtuma- sekvenssikaavio sanaston muodostamisesta
Esimerkkiohjelman modulien näkyvyys Hakusanasto Tiedosto Sanasto Sana UML-komponenttikaavio
CASE-välineet • edustavälineet (upper-CASE, front-end) • määrittely ja suunnitteluvaiheiden apuvälineet • taustavälineet(lower-CASE, back-end) • toteutusvaiheen apuvälineet, esim. kääntäjät, sovelluskehittimet • IPSE (Integrated Project Support Environment) • kaikki ohjelmistoprojektiin liittyvät työkalut integroitu yhtenäiseksi työvälineeksi
Uudelleenkäytettävyys ja uudelleenkäyttö • 60 – 80% kaikesta tehtävästä ohjelmistosta on tehty jo aikaisemmin, osa siitä jopa samassa organisaatiossa • yleiskäyttöiset komponentit • käyttöliittymäkirjastot, matematiikkakirjastot, tietorakennekirjastot • sovellusaluekohtaiset komponentit • esim. televerkon hallintaan liittyvät • sovelluskohtaiset komponentit • sovelluksen oma käyttöliittymäkirjasto • sovelluskehykset (frameworks) • joukko toisiinsa liittyviä komponentteja
Uudelleen- käyttö tuotanto- prosessissa
Uudelleenkäytön edut • Tuottavuus kasvaa koska ohjelmaa ei tarvitse tehdä kokonaan uudelleen. • Monesti koeteltu komponentti on todennäköisesti virheetön. • Uudelleen käytetettävillä käyttölittymillä saadaan käyttöliittymän eri osat yhdenkumaiseksi sekä ulkonäön että toiminnan osalta.