SUUNNITTELU

Yleistä

Suunnittelun tuloksena saadaan kehykset ja menettelytavat työn toteutukselle. Tarkka ja yksityiskohtainen suunnittelu nopeuttaa toteutusta. Ilman hyvää suunnitelmaa toteutus tehdään helposti tehottomalla tavalla, esimerkiksi toteutuksen aikana kuluu turhaan aikaa jokaisen vaiheen uudelleensuunnitteluun. Suunnitelman avulla tiedetään koko ajan mitä pitää tehdä seuraavaksi ja miten.

Käytettävä suunnittelumenetelmä tai apuväline on kuvattava projektisuunnitelmassa. Menetelmän on johdettava suunnitelmaan, jossa on huomioitu modulaarisuus, testattavuus, ylläpidettävyys yms. laatukriteerit ja suunnitelma on tarkastettava.

Erilaisia suunittelumenetelmiä ja automatisoituja apuvälineitä on runsaasti. Seuraavassa annetaan joitakin esimerkkejä ja tarkastellaan luotettavuuden asettamia vaatimuksia.

Terminologiaa

Suunitteluperiaatteita

Suunnittelun kolme päälähestymistapaa ovat tietovirtakeskeinen suunnittelu, tietorakennekeskeinen suunnittelu ja oliokeskeinen suunnittelu. Lähestymistavoista on valittava kulloisestakin tilanteesta riippuen soveliain.

Tietovirtakeskeisessä suunnittelussa järjestelmän jaon osiinsa määräävät järjestelmän toiminnot (rakenteinen suunnittelu, askelittainen tarkentaminen).

Tietorakennekeskeisessä suunnittelussa järjestelmän jako osiinsa määräytyy käsiteltävien tietojen rakenteen avulla (Jacksonin rakenteinen ohjelmointi (JSP), Warnier-Orr menetelmä).

Oliokeskeisessä suunnittelussa järjestelmä nähdään joukkona olioita, joilla on omat operaationsa ja jotka lähettävät viestejä toisilleen (OMT, OOSE, UML). Oliokeskeistä suunnittelua ei pidä sotkea oliosuuntautuneeseen ohjelmointiin: oliokeskeistä suunnittelua voidaan käyttää riippumatta siitä, millä kielellä toteutus tehdään.

Hierarkkisuus

Hierarkkisuus on olennainen keino hallita monimutkaisuutta. Komponenttien liittyminen toisiinsa toteutetaan hierarkkisena rakenteena (Kuva 1), ja tällä rakenteella on seuraavia ominaisuuksia:

Abstraktiotasot
Kuva 1. Abstraktiotasot

Komponenttijaon ominaisuuksia

Kiinteys on komponentin (moduulin, olion) sisäinen ominaisuus. Kiinteys kuvaa sen, millä tavalla komponenttiin kuuluvat osat (funktiot, olion ominaisuudet ja operaatiot) liittyvät toisiinsa:

Komponentin kiinteyden pitäisi olla mahdollisimman suuri (ts. mahdollisimman ylhäällä yo. asteikolla).

Kytkentä on komponenttien välinen ominaisuus. Kytkentä kuvaa komponenttien keskinäistä riippuvuutta toisistaan:

Komponenttien kytkennän pitäisi olla mahdollisimman heikko (ts. mahdollisimman alhaalla yo. asteikolla). Lisäksi on pyrittävä siihen, että kukin komponentti on

Huonon jaon tunnusmerkkejä ovat esimerkiksi seuraavat:

Funktioiden ulkoinen suunnittelu

Käytettävän funktio- ja moduulijaon selvittyä suoritetaan funktioiden ulkoinen suunnittelu. Ulkoisessa suunnittelussa määritellään yksityiskohtaisesti ne asiat, jotka on tiedettävä funktiota kutsuttaessa (mutta ei mitään funktion sisäisiä asioita: ei toimintalogiikkaa, ei sisäisiä tietorakenteita). Suunnittelussa on pyrittävä yleistämään funktioiden toimintaa: parempi liikaa parametreja kuin liian vähän.

Tarpeetonta vakioiden käyttöä pyritään välttämään. Tarvittavat vakiot

Luotettavuuteen pyrkiminen

Testaamisen päätarkoitus on tuotteen hyväksyminen eikä sen korjaaminen. Virheet pitäisi siis löytää ja korjata jo ennen testausvaihetta. Tavoitteena tulee olla mahdollisimman virheetön tuote, johon käyttäjät ovat tyytyväisiä. Tätä tavoitetta voidaan saavuttaa käyttämällä sellaisia menetelmiä, jotka edistävät vaatimusmäärittelyä vastaavan suunnitelman ja suunnitelmaa vastaavien ohjelmien syntymistä. Tuotteen monimutkaisuus lisää virheiden todennäköisyyttä, joten monimutkaisuutta on pyrittävä minimoimaan ja hallitsemaan.

Kuitenkaan kaikkia virheitä ei pystytä välttämään, joten virheet on pyrittävä havaitsemaan esimerkiksi suunnitelmien ja ohjelmakoodien tarkastusten ja katselmusten avulla. Virheitä voidaan pyrkiä havaitsemaan myös erilaisten ohjelmistoon sijoitettavien "turhien" testien avulla.

Tarkastuksista ja katselmuksista huolimattakin ohjelmiin jää vielä virheitä. Ohjelman on siksi siedettävä virheitä, esimerkiksi virheen sattuessa ohjelma on lopetettava siististi. Virheen vaikutukset on pystyttävä korjaamaan, esimerkiksi virheen mahdollisesti tuhoamat tiedot on pystyttävä palauttamaan ennalleen.

Järjestelmä on rakennettava siten, että virheet havaitaan normaalin toiminnan yhteydessä. Eräs keino virheiden havaitsemiseksi on keskinäinen epäluulo, esimerkiksi

Käyttäjän tekemiä toimintoja on syytä epäillä, esimerkiksi kaikki syöttötiedot on tarkistettava. Muita käyttäjän tekemien toimintojen varmistuskeinoja ovat esimerkiksi tiedostojen päällekirjoittamisesta kieltäytyminen ja koneelta toiselle siirrettävien aineistojen numeroiminen.

Paitsi käyttäjää, myös käytettyjä tietovälineitä on syytä epäillä. Toimintojen oikeellisuutta voidaan varmistaa esimerkiksi erilaisten tarkistussummien avulla.

Virheitä voidaan pyrkiä havaitsemaan myös erillistoimintona esimerkiksi erillisen ohjelman avulla, joka ajetaan määräajoin tai on jatkuvasti aktiivisena pienellä prioriteetilla. Erillisellä ohjelmalla voidaan esimerkiksi tutkia tietorakenteiden (tai tietokannan) eheyttä tai muiden prosessien hengissäoloa. Erillinen ohjelma voi myös antaa järjestelmälle "valetapahtumia" ja seurata, että niiden käsittely menee oikein.

Havaittu virhe on välittömästi ilmoitettava ja virheestä toipuminen on järjestettävä mahdollisimman siistiksi.


Vain jäsenille: