Ohjelmistotuotanto
Suunnittelu

Kun asiakkaan kanssa on sovittu tuotteen sisältö ja saatu aikaan vaatimusmäärittely, voidaan siirtyä suunnitteluvaiheseen. Tässä vaiheessa on siis tarkoitus laatia suunnitelma, kuinka järjestelmä toteutetaan. Suunnitelma siis vastaa kysymykseen miten. Määrittelyvaiheessa on asiakkaan kanssa laadittu järjestelmän toiminnan kuvaus ja nyt tuo kuvaus pitäisi saada muutettua tekniseksi kuvaukseksi, jonka perusteella järjestelmää voidaan alkaa toteuttamaan.

Tekninen määrittely

Suunnitteluvaiheessa syntyvää dokumenttia kutsutaan tekniseksi määrittelyksi. Siinä missä toiminnallinen määrittely kuvaa mitä järjestelmän tulee tehdä asiakkaan näkökulmasta, tekninen määrittely kuvaa miten järjestelmä toteutetaan teknisesti.

Tekninen määrittely sisältää tyypillisesti:

  • Järjestelmän arkkitehtuuriratkaisut
  • Teknologiavalinnat (ohjelmointikielet, frameworkit, kirjastot)
  • Tietokantasuunnittelu (tietokantarakenne)
  • Käyttöliittymäsuunnittelu teknisellä tasolla
  • Rajapinnat (API:t) ja integraatiot muihin järjestelmiin
  • Moduulit ja komponentit sekä niiden väliset riippuvuudet
  • Tietoturvaratkaisut
  • Suorituskykyvaatimukset ja -ratkaisut

Suunnittelun tasot

Suunnitteluvaihe voidaan jakaa kahteen päätasoon:

  • Arkkitehtisuunnittelu (korkean tason suunnittelu)
  • Moduulisuunnittelu (yksityiskohtainen suunnittelu)

Suunnittelussa esiintyy kaksi termiä, jotka on hyvä erottaa toisistaan:

  • Moduuli on looginen ohjelmistoyksikkö, joka on erotettu muusta järjestelmästä selkeän rajapinnan taakse. Moduuli on suunnittelukäsite — se ei ota kantaa fyysiseen toteutukseen vaan kuvaa, miten järjestelmä on jaettu hallittaviin osiin.
  • Komponentti voidaan ymmärtää kahdella tasolla:
    • Järjestelmätasolla komponentti on fyysinen, käyttöönotettava yksikkö, kuten suoritettava ohjelma (EXE), kirjasto (DLL), REST API tai tietokanta. Tässä merkityksessä yksi EXE on yksi komponentti.
    • Arkkitehtuuritasolla yhden EXE:n sisältä voidaan tunnistaa useita loogisia komponentteja, esim. kirjautumisikkuna, nostoikkuna ja tietokantayhteys. UML-komponenttikaavio tukee tätä — komponentteja voidaan sijoittaa toistensa sisään.
Käytännössä EXE:n sisäinen rakenne kuvataan moduulisuunnittelussa luokkakaavioiden avulla, ja komponenttikaavio kuvaa järjestelmätason fyysisiä yksiköitä sekä niiden välisiä yhteyksiä ja rajapintoja.

Arkkitehtisuunnittelu

Arkkitehtisuunnittelussa järjestelmä jaetaan mahdollisimman itsenäisiin, toisistaan riippumattomiin osiin eli moduuleihin. Tässä vaiheessa päätetään järjestelmän kokonaisrakenne ja päätekniset ratkaisut.

Arkkitehtisuunnittelussa määritellään:

  • Järjestelmän kerrosarkkitehtuuri (esim. käyttöliittymä, sovelluslogiikka, tietokanta)
  • Komponenttien väliset rajapinnat ja kommunikaatio
  • Käytettävät arkkitehtuurimallit (esim. MVC, mikropalvelut, monoliitti)
  • Järjestelmän jakaminen alijärjestelmiin
  • Ulkoiset riippuvuudet ja integraatiot

Moduulisuunnittelu

Moduulisuunnittelussa kuvataan yksittäisten moduulien sisäinen rakenne yksityiskohtaisesti. Tämä on matalan tason suunnittelua, jossa määritellään esimerkiksi luokat, metodit, algoritmit ja tietorakenteet.

Moduulisuunnittelussa määritellään:

  • Luokkarakenne ja luokkien väliset suhteet
  • Metodien toiminta ja parametrit
  • Algoritmien toteutustapa
  • Käytettävät tietorakenteet
  • Virheenkäsittely

Tietokantasuunnittelu

Tietokantasuunnittelu on keskeinen osa teknistä määrittelyä. Se sisältää tietokannan rakenteen suunnittelun, joka tyypillisesti toteutetaan vaiheittain:

  1. Käsiteanalyysi - Tunnistetaan järjestelmän keskeiset käsitteet (entiteetit)
  2. Käsitemalli (ER-kaavio) - Kuvataan entiteetit ja niiden väliset suhteet
  3. Relaatiomalli - Muutetaan käsitemalli tietokantatauluiksi
  4. Normalisointi - Varmistetaan tietokannan rakenne optimaaliseksi
  5. Fyysinen suunnittelu - Päätetään indeksit, suorituskyvyn optimoinnit
Suunnitteluvaiheen UML-kaaviot

Suunnitteluvaiheessa käytetään UML-mallinnuskielen kaavioita teknisen rakenteen kuvaamiseen:

  • Käyttöönottokaavio (esimerkki)
    • Kaaviota käytetään kuvaamaan fyysinen järjestelmäarkkitehtuuri tietokanta- ja ohjelmistoarkkitehtuurin tasolla, sisältäen ohjelmakomponentit ja niiden väliset yhteydet ja rajapinnat
  • Komponenttikaavio (esimerkki)
    • Kaavion avulla kuvataan yksittäiset ohjelmistokomponentit, yhteenliittymät ja niiden väliset suhteet
  • Viestiyhteyskaavio (esimerkki)
    • Kuvataan komponenttien/olioiden välistä vuorovaikutusta ohjelmakoodin tasolla
  • Luokkakaavio (esimerkki)
    • Kuvataan luokat, rajapinnat ja niiden välisiä yhteyksiä ohjelmakoodin tasolla
  • Tilakaavio (esimerkki)
    • Kuvataan järjestelmän käyttäytyminen, käyttöliittymän toiminta sekä ohjelman tai komponenttien eri tilat ohjelmakoodin ja algoritmien tasolla
Suunnitteluperiaatteita

Hyvän suunnittelun periaatteita:

  • Modulaarisuus - Järjestelmä jaetaan itsenäisiin osiin
  • Abstrahointi - Piilotetaan toteutuksen yksityiskohdat
  • Kapselointi - Tiedon ja toimintojen ryhmittely yhteen
  • Korkea koheesio - Moduulin osat liittyvät tiiviisti toisiinsa
  • Matala kytkentä - Moduulit ovat mahdollisimman riippumattomia toisistaan
  • Uudelleenkäytettävyys - Komponentteja voidaan käyttää eri yhteyksissä



Toggle Menu