TEKNINEN MÄÄRITTELY. PROJEKTITYÖ Tik-76.115 Wclique



Samankaltaiset tiedostot
TEKNINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique

TOIMINNALLINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique

VAATIMUSMÄÄRITTELY. PROJEKTITYÖ Tik Wclique

VAATIMUSMÄÄRITTELY. PROJEKTITYÖ Tik Wclique

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

TOIMINNALLINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique

TOIMINNALLINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique

TEKNINEN MÄÄRITTELY Virtuaaliyhteisöjen muodostaminen Versio 1.0 (Luonnos 2)

TOIMINNALLINEN MÄÄRITTELY MS

TEKNINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique

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

KÄYTTÄJÄKOKEMUKSEN PERUSTEET, TIE-04100, SYKSY Käyttäjätutkimus ja käsitteellinen suunnittelu. Järjestelmän nimi. versio 1.0

Suunnitteluvaihe prosessissa

Ohjelmistojen suunnittelu

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmoinnin perusteet Y Python

Ohjelmiston toteutussuunnitelma

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Uudelleenkäytön jako kahteen

Määrittelydokumentti

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

WCLIQUE. Ohjelmistoprojekti. Testaussuunnitelma

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Hakemistojen sisällöt säilötään linkitetyille listalle.

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Ohjelmoinnin perusteet Y Python

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Ohjelmoinnin perusteet Y Python

GroupDesk Toiminnallinen määrittely

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Ohjelmoinnin perusteet Y Python

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

- painottamattoman graafin solmujen järjestäminen. - painotetun graafin solmujen järjestäminen

Ohjelmoinnin perusteet Y Python

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

Tietorakenteet ja algoritmit - syksy

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

TIEDONKULKU. PROJEKTITYÖ Tik Wclique

Osoitin ja viittaus C++:ssa

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

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

EMCS-järjestelmän sanomarajapinnan toiminnallinen kuvaus asiakkaille Meeri Nieminen

L models. Tekninen määrittely. Ryhmä Rajoitteiset

Taulukot. Jukka Harju, Jukka Juslin

Harjoitustyö: virtuaalikone

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

TIETOKANNAN SUUNNITTELU

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

TAMPEREEN TEKNILLINEN YLIOPISTO

Zeon PDF Driver Trial

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Ohjelmoinnin perusteet Y Python

Tietueet. Tietueiden määrittely

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

SOVELLUSALUEEN KUVAUS

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

TAMPEREEN TEKNILLINEN YLIOPISTO

Johdatus rakenteisiin dokumentteihin

ITKP102 Ohjelmointi 1 (6 op)

A TIETORAKENTEET JA ALGORITMIT

83450 Internetin verkkotekniikat, kevät 2002 Tutkielma <Aihe>

Ohjelmoinnin perusteet Y Python

Visual Case 2. Miika Kasnio (C9767)

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

1. Omat operaatiot 1.1

12. Näppäimistöltä lukeminen 12.1

T Testiraportti - järjestelmätestaus

C++11 lambdat: [](){} Matti Rintala

TIETORAKENTEET JA ALGORITMIT

WCLIQUE. Ohjelmistoprojekti. Testaussuunnitelma

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

13. Loogiset operaatiot 13.1

Ohjelmoinnin perusteet, syksy 2006

Tietotekniikan valintakoe

Kontrollipolkujen määrä

T Testiraportti - integraatiotestaus

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Sisältö. 2. Taulukot. Yleistä. Yleistä

Ohjelmoinnin peruskurssi Y1

811120P Diskreetit rakenteet

Poikkeustenkäsittely

Heuristisen arvioinnin muistilista - lyhyt versio

Dokumentin nimi LOGO:) Tampereen teknillinen yliopisto. Ryhmä XXX: Projektiryhmän nimi Projektin nimi

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

ohjelman arkkitehtuurista.

18. Abstraktit tietotyypit 18.1

Ohjelmoinnin perusteet Y Python

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Ohjelmiston testaus ja laatu. Testausmenetelmiä

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

Harjoitus 3 -- Ratkaisut

Transkriptio:

TEKNINEN MÄÄRITTELY PROJEKTITYÖ Tik-76.115

SISÄLLYSLUETTELO Sisällysluettelo... 2 Versiohistoria... 2 1. JOHDANTO... 3 1.1 Tarkoitus ja kattavuus... 3 1.2 Tuote ja ympäristö... 3 1.3 Määritelmät, merkintätavat ja lyhenteet... 3 1.4 Viitteet... 4 1.5 Yleiskatsaus dokumenttiin... 4 2. JÄRJESTELMÄN YLEISKUVAUS... 4 2.1 Sovellusalueen kuvaus... 4 2.2 Järjestelmän liittyminen ympäristöönsä... 5 2.3 Laitteistoympäristö(n kuvaus)... 5 2.4 Ohjelmistoympäristö(n kuvaus)... 5 2.5 Toteutuksen keskeiset reunaehdot... 5 2.6 Sopimukset ja standardit... 5 3. ARKKITEHTUURIN KUVAUS... 6 3.1 Ratkaisun "filosofia" (suunnitteluperiaatteet)... 7 3.2 Tietokanta-arkkitehtuuri... 7 3.3 Ohjelmistoarkkitehtuuri, moduulit ja prosessit... 7 4. MODUULI (JA PROSESSI) KUVAUKSET... 7 4.1 Kustakin moduulista (ja prosessista) kuvataan... 9 4.1.1 WC1... 15 4.1.2 Rajapinta... 15 4.1.3 Toteutus... 15 4.1.4 Virhekäsittely... 15 5. MUUT ERITYISET TEKNISET RATKAISUT... 15 6. HYLÄTYT RATKAISuVAIHTOEHDOT... 15 7. VIRHEKÄSITTELY... 15 VERSIOHISTORIA Versio Päivämäärä Laatija Kuvaus 1.0-1 14.1.2001 JDu Ensimmäinen versio.

TEKNINEN MÄÄRITTELY 3 (7) 1. JOHDANTO Tässä dokumentissa kerrotaan kuinka tekninen osuus projektityöstä on tehty. 1.1 Tarkoitus ja kattavuus 1.2 Tuote ja ympäristö Tekninen osuus pitää sisällään -ohjelman rakenteellisen selvityksen ja kuinka sen osat toimivat ja kommunikoivat eri moduulien kesken. Dokumentti on tarkoitettu projektin tekijöille sekä henkilöille jotka ovat kiinnostuneet ohjelman toiminnasta. Tuote joka tässä projektissa tehdään on -ohjelma, mikä toimii Unix ja Linux ympäristössä. 1.3 Määritelmät, merkintätavat ja lyhenteet : Projektityön kohde. Ohjelma jonka tarkoituksena on etsiä haluttuja ominaisuuksia annetuista graafeista. Ohjelma kirjoitetaan isolla jos ohjelmasta puhutaan yleisesti tai viitataan projektityön nimeen. Kun varsinainen ohjelma koodataan, puhutaan wcliquesta pienellä alkukirjaimella. Tällöin tarkoitetaan ohjelman käynnistystiedostoa. Graafi: Useissa yhteyksissä tarkastellaan joukkoa solmuja tai tiloja, joista joko on tai ei ole mahdollista siirtyä välittömästi toinen toisiinsa. Tyypillisiä esimerkkejä tällaisista ovat kartta, johon on merkitty kaupunkeja, sekä näiden väliset suorat liikenneyhteydet, tietokoneohjelman kulkua kuvaava vuokaavio ja sukupuut. Graafi, eli verkko G = ( V, E ) muodostuu äärellisistä joukoista V ja E, joista V on ns. solmujen joukko (solmuista käytetään myös joissain yhteyksissä nimityksiä kärki tai piste), ja E on sivujen joukko (käytössä myös nimitykset kaari ja haara). Algoritmi: Algoritmilla voidaan ratkaista olemassa olevasta graafista asioita, joista ollaan kiinnostuneita. Algoritmi jonka ympärille ohjelma rakennetaan on julkinen. Algoritmin toimintaa on kuvattu Internetissä seuraavissa dokumenteissa: "A Fast Algorithm for the Maximum Clique Problem" http://www.tcs.hut.fi/ ~ pat/paper1.ps "A New Algorithm for the Maximum-Weight Clique Problem" http://www.tcs.hut.fi/ ~ pat/paper2.ps Klikki: Klikki tarkoittaa yhteyttä usean solmun välillä Ansi c: Ohjelmointikieli, jolla ohjelma toteutetaan UML: "Unified Modeling Language" on ohjelmistotuotekehityksen standardikuvaamismenetelmä.

TEKNINEN MÄÄRITTELY 4 (7) 1.4 Viitteet [Vaat] [Toim] [Patrik1] Vaatimusmäärittely Toiminnallisen määrittelyn mallidokumentti Patrick Östergårdin toimittama ensimmäinen dokumentti algoritmeista. http://www.tcs.hut.fi/~pat/paper1.ps [Patrik2] Patrick Östergårdin toimittama toinen dokumentti algoritmeista. http://www.tcs.hut.fi/~pat/paper2.ps [Patrik3] vaatimuksista Patrick Östergårdin kirjoittama dokumentti wcliquen http://www.tcs.hut.fi/~pat/wclique.html 1.5 Yleiskatsaus dokumenttiin Johdanto osuudessa luodaan yleiskatsaus dokumenttiin. Siinä selvitetään termit, lyhenteet ja viitteet jotka auttavat lukijaa tutustumaan tähän dokumenttiin ja -ohjelmaan. Toinen luku tarkentaa ohjelmaa yleisellä tasolla. Jos lukija ei ole kiinnostunut pikkutarkasta ohjelman kuvauksesta, niin usein riittää tämän luvun lukeminen ohjelman idean ymmärtämiseksi. Arkkitehtuuri osuus kertoo tarvittavien tietokantojen osuudesta tähän projektiin. Työn luonteesta johtuen, tietokannat eivät ole suuressa merkityksessä tämän projektin missään suoritusvaiheessa. Neljännessä luvussa tarkennetaan toisessa luvussa esitettyjä ohjelman moduulien ominaisuuksia ja toimintoja. Luvut 5,6,7 eivät sisällä varsinaista hyötyinformaatioita ohjelman teknisen ratkaisun kannalta. Tämä siksi koska ohjelma ei sisällä mitään varsinaista käyttöliittymää. 2. JÄRJESTELMÄN YLEISKUVAUS Tavoitteena -ohjelmassa on koodata jo olemassa olevalle algoritmille toimiva ympäristö, jolloin algoritmin käyttö helpottuu ja algoritmille voidaan luoda uusia käyttötapoja. 2.1 Sovellusalueen kuvaus Sovellus toimii standardi Unix/Linux ympäristössä.

TEKNINEN MÄÄRITTELY 5 (7) 2.2 Järjestelmän liittyminen ympäristöönsä Ohjelma ei sisällä mitään liityntöjä ympäristöönsä. 2.3 Laitteistoympäristö(n kuvaus) Standardi Unix / Linux käyttöympäristö. 2.4 Ohjelmistoympäristö(n kuvaus) Ohjelma toimii Linux ympäristössä, käyttöjärjestelmänä RedHat 7.0 kernel versio 2.2.16. Kääntäjänä standardi C kääntäjä. 2.5 Toteutuksen keskeiset reunaehdot Vaatimusmäärittelyn ehdot pätevät. Ohjelma sisältää seuraavat ominaisuudet: Painottamattomien graafien vaatimukset: Painottamattoman maksimiklikin koko Yhden maksimiklikin laskeminen Kaikkien maksimiklikkien laskeminen Yhden klikin laskeminen kokoa S Kaikkien klikkien laskeminen kokoa S Yhden klikin laskeminen vähintään kokoa S Kaikkien klikkien laskeminen vähintään kokoa S Verticeitten järjestäminen Ensisijaiset "olisi hienoa" -ominaisuudet Klikkien laskenta annetulla vertexien määrällä ja Windows Painotettujen graafien vaatimukset Painotetun maksimiklikin koko Yhden maksimiklikin laskeminen Kaikkien maksimiklikkien laskeminen Yhden klikin laskeminen kokoa S Kaikkien klikkien laskeminen kokoa S Yhden klikin laskeminen vähintään kokoa S Kaikkien klikkien laskeminen vähintään kokoa S Eri syöteformaattien lukeminen Vertexien järjestely 2.6 Sopimukset ja standardit Standardit jota noudatetaan: Koodaus (Juha K) Sopimukset: Vaatimusmäärittely ja tekijänoikeus sopimus.

TEKNINEN MÄÄRITTELY 6 (7) 3. ARKKITEHTUURIN KUVAUS Alla oleva Kuva 1 esittää eri ohjelman rakenteen karkealla tasolla. Myöhemmissä luvuissa tätä tarkennetaan. Syöte Järjestäminen 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Tulostaminen Tuloste 1. Painottamattoman maksimiklikin koko 2. Yhden maksimiklikin laskeminen 3. Kaikkien maksimiklikkien laskeminen 4. Yhden klikin laskeminen kokoa S 5. Kaikkien klikkien laskeminen kokoa S 6. Yhden klikin laskeminen vähintään kokoa S 7. Kaikkien klikkien laskeminen vähintään kokoa S 8. Verticeitten järjestäminen 9. Klikkien laskenta annetulla vertexien määrällä 10. Painotetun maksimiklikin koko 11. Yhden maksimiklikin laskeminen 12. Kaikkien maksimiklikkien laskeminen 13. Yhden klikin laskeminen kokoa S 14. Kaikkien klikkien laskeminen kokoa S 15. Yhden klikin laskeminen vähintään kokoa S 16. Kaikkien klikkien laskeminen vähintään kokoa S Kuva 1. Ohjelman rakenne.

TEKNINEN MÄÄRITTELY 7 (7) 3.1 Ratkaisun "filosofia" (suunnitteluperiaatteet) - perinteinen tapa, ei olioita, mallinnus pseudokoodilla. - kussakin moduulissa paikalliset muuttujat, moduulien/funktioiden nimet kaikki alkavat wcxxx tai wc_xxx - c-kieli, asiakkaan vaatimus 3.2 Tietokanta-arkkitehtuuri syötetiedoston tarkka määrittely tulostiedostojen tarkka määrittely 3.3 Ohjelmistoarkkitehtuuri, moduulit ja prosessit Ohjelma sisältää kahdeksan erillistä moduulia jotka ovat (suluissa moduulin nimi): 1. Painottamattoman maksimiklikin koko (wc1) 2. Yhden maksimiklikin laskeminen (wc2) 3. Kaikkien maksimiklikkien laskeminen (wc3) 4. Yhden klikin laskeminen kokoa S (wc4) 5. Kaikkien klikkien laskeminen kokoa S (wc5) 6. Yhden klikin laskeminen vähintään kokoa S (wc6) 7. Kaikkien klikkien laskeminen vähintään kokoa S (wc7) 8. Verticeitten järjestäminen (wc8) 9. Klikkien laskenta annetulla vertexien määrällä (wc9) 10. Painotetun maksimiklikin koko (wc10) 11. Yhden maksimiklikin laskeminen (wc11) 12. Kaikkien maksimiklikkien laskeminen (wc12) 13. Yhden klikin laskeminen kokoa S (wc13) 14. Kaikkien klikkien laskeminen kokoa S (wc14) 15. Yhden klikin laskeminen vähintään kokoa S (wc15) 16. Kaikkien klikkien laskeminen vähintään kokoa S (wc16) 4. MODUULI (JA PROSESSI) KUVAUKSET Jokaista moduulia kutsutaan moduulin nimellä. Ohjelmakoodin rakenteessa ollaan huomioitu Kenneth Oksasen C-ohjelmointiopasta. Koodi-mallit sijoitetaan aluksi NT hakemistoon josta ne tarpeen mukaan voidaan myös jakaa Patrik Östergårdille.

TEKNINEN MÄÄRITTELY 8 (7) Aloitus Komentorivi: graafin syöte, kutsuttava funktio Tulkitse komentorivi 4 Jokin muu 1,2 tai 3 Etsi maksimiklikki 1 tai 2 3 Etsi yksi klikki / kaikki klikit kokoa S Lopetus Kommentteja: Tässä käsitelty tapaukset 1-4 (painottamaton). Ensimmäisessä moduulissa kutsutaan parametrilla annettua funktiota, joka esim. tulostaa klikin koon tai solmut. Toisessa moduulissa samoin. Lisäksi tutkitaan ehtoa, jonka perusteella päätettä, etsitäänkö vielä ensimmäisen löytyneen jälkeen loputkin. Tapaukset: 1. Painottoman maksimiklikin koko 2. Yhden maksimiklikin laskeminen 3. Kaikkien maksimiklikkien laskeminen 4. Yhden klikin laskeminen kokoa S

TEKNINEN MÄÄRITTELY 9 (7) Kuva 2. Painottamattomien graafien laskeminen 4.1 Kustakin moduulista (ja prosessista) kuvataan /**** UW etsii ei-painotetusta graafista YHDEN annetun kokoisen klikin *****/ /* huom.: kaikissa tapauksissa funktioiden niminä ovat new ja clique muutettava */ function clique(u; size) 1: if size = S then 2: talleta / funktio X 3: found = true 4: return 8: end if 9: while U!= 0; do 10: if size + U < S then 11: return 12: end if 13: i := min { j v j E U } 14: if size + c[i] < S then 15: return 16: end if 17: U := U & {v i } 18: clique (U & N(v i ); size + 1) 19: if found = true then 20: return 21: end if 22: end while 23: return function new

TEKNINEN MÄÄRITTELY 10 (7) 24: max := 0 25: for i := n downto 1 do 26: found := false 27: clique (S i & N(v i ); 1) 28: if found = true then 29: end 30:end if 31: c[i] :=max 32: end for 33: return

TEKNINEN MÄÄRITTELY 11 (7) /**** UW etsii ei-painotetusta graafista KAIKKI annetun kokoiset klikit *****/ /* huom.: kaikissa tapauksissa funktioiden niminä ovat new ja clique muutettava */ function clique(u; size) 1: if size >= S then 2: talleta / funktio X 3: return 8: end if 9: while U!= 0; do 10: if size + U < S then 11: return 12: end if 13: i := min { j v j E U } 14: if size + c[i] < S then 15: return 16: end if 17: U := U & {v i } 18: clique (U & N(v i ); size + 1) 19: if found = true then 20: return 21: end if 22: end while 23: return function new 24: max := 0 25: for i := n downto 1 do 26: found := false 27: clique (S i & N(v i ); 1)

TEKNINEN MÄÄRITTELY 12 (7) 28: if found = true then 29: end 30:end if 31: c[i] :=max 32: end for 33: return

TEKNINEN MÄÄRITTELY 13 (7) /**** UW etsii ei-painotetusta graafista KAIKKI VÄHINTÄÄN annetun kokoiset klikit *****/ /* huom.: kaikissa tapauksissa funktioiden niminä ovat new ja clique muutettava */ function clique(u; size) 1: if size >= S then 2: talleta / funktio X 8: end if 9: while U!= 0; do 10: if size + U < S then 11: return 12: end if 13: i := min { j v j E U } 14: if size + c[i] < S then 15: return 16: end if 17: U := U & {v i } 18: clique (U & N(v i ); size + 1) 19: if found = true then 20: return 21: end if 22: end while 23: return function new 24: max := 0 25: for i := n downto 1 do 26: found := false 27: clique (S i & N(v i ); 1) 28: if found = true then

TEKNINEN MÄÄRITTELY 14 (7) 29: end 30:end if 31: c[i] :=max 32: end for 33: return uw_maxclique uw_sclique uw_allsclique uw_nlessclique w_maxclique w_sclique w_allsclique w_nlessclique uw_max uw_s uw_alls uw_nless w_max w_s w_alls w_nless

TEKNINEN MÄÄRITTELY 15 (7) 4.1.1 WC1 4.1.2 Rajapinta 4.1.3 Toteutus Kutsu tapahtuu wc1 kutsulla. Moduuli sisältää algoritmin painottamattomalle klikille, josta lasketaan maksimiklikin koko. Järjestämis-rajapinta ja tulostamis-rajapinta. 4.1.4 Virhekäsittely Ei sisällä vieheenkäsittelyä. 5. MUUT ERITYISET TEKNISET RATKAISUT Tähän kommentteja Ossilta ja Juha L:ltä. 6. HYLÄTYT RATKAISUVAIHTOEHDOT Onko näitä? 7. VIRHEKÄSITTELY Virhekäsittelyt virhetilanteissa kutsutaan aina virhekäsittelijää, jolle annetaan virhekoodi parametrina esim. void errorhandler(int errno); virhenumerot listataan jossakin, ja listaa päivitetään voisi olla että moduulin 1 virheet ovat välillä 1000-1999, moduulin 2 välillä 2000-2999 jne. Liitä kuvaus joka tehty palaverin 5.12 pohjalta, tarkenna error handleriä.

TEKNINEN MÄÄRITTELY 16 (7) 1. JOHDANTO Antaa yleiskuvan suunnittelusta. 1.1 Tarkoitus ja kattavuus Dokumentin tarkoitus, miksi tehty ja mihin tarkoitukseen, kenelle (oman firman toteutusporukka vaiko alihankkija vai kuka) tarkoitettu. Mitä asioita dokumentissa kuvataan. Varsinkin jos lukija ei ole tottunut lukemaan suunitteludokumentteja. Suunnittelun kattavuus suhteessa määrittelyyn. Esimerkiksi jos tämä suunnittelu kattaa määrittelyn poislukien käyttöliittymä ja tietokanta. 1.2 Tuote ja ympäristö Tuotteen nimi, tarkoitus ja tavoitteet. Tuotteen toimintaympäristö yleisesti. 1.3 Määritelmät, merkintätavat ja lyhenteet Sanat ja käsitteet jotka eivät ole lukijalle (tilaaja/toimittaja) tuttuja tai joiden voidaan ajatella tuottavan sekaannuksia erikoisella käytöllään tai jotka eivät yleisesti ole tiedossa. Nämä kannattaa esittää aakkosjärjestyksessä. Esim. ASCII-merkistöstä ilmoitetaan onko se 7-bittinen (esim. ISO 10646) tai 8-bittinen (esim. ISO 8859-1). 1.4 Viitteet Viittaukset muihin lähteisiin (dokumentit, standardit, käsikirjat). Viitteen mukaan aakkosjärjestyksessä Ne dokumentit joihin on viitattu tai jotka liittyvät systeemiin tai sen rakentamiseen, mikäli tarpeen (nimi, versio, päiväys, mistä löydettävissä). Lisätietoja. Koodaustyyliohje merkittäisiin tähän. Se tämän järjestelmän määrittelydokumenttihan on tärkein lisätietojen ja selvennysten lähde. Mikäli suunnittelu ei kata koko määrittelyä tulee se mainita tässä (eli mitä muita suunnitteluvaiheen dokumentteja on olemassa, jos on; esim. jos käyttöliittymän tai tietokannan suunnittelu on irrotettu omiksi dokumenteikseen). Luettelo aakkosjärjestyksessä. 1.5 Yleiskatsaus dokumenttiin Rakenteen kuvaus; sisältö ja organisointi; mitä missäkin luvussa käsitellään, tärkeää varsinkin mikäli lukija ei ole tottunut lukemaan em. sisällysluettelon mukaisia määrittelyjä.

TEKNINEN MÄÄRITTELY 17 (7) Mikäli ensimmäinen luku on kokonaisuudessaan samalla sivulla kuin tämä kohta (1.6 yleiskatsaus) tai jos 1. luku on muutoin kovin lyhyt, ei sitä tarvitse tässä kohdassa (1.6 yleiskatsaus) mainita vaan voidaan aloittaa 2. luvun asioista. Tässä mainitaan kustakin luvusta hieman enemmän kuin mitä pelkkä sisällysluettelon selaaminen kertoo. 2. JÄRJESTELMÄN YLEISKUVAUS Tässä voidaan mainita ohje dokumentin ja koodin kommenttien sekä muuttujien ja funktioiden yms. kielisyydestä. 2.1 Sovellusalueen kuvaus Se laajempi kokonaisuus johon tuote tai järjestelmä liittyy. Esimerkiksi TTKK:n opintotoimiston salivarausjärjestelmä. 2.2 Järjestelmän liittyminen ympäristöönsä Mitä järjestelmä tässä ympäristössä tekee. Käyttääkö kuvattu järjestelmä muita ohjelmia tai järjestelmiä, eli onko jonkin suuremman systeemin osa. 2.3 Laitteistoympäristö(n kuvaus) Laitteistoympäristö jossa ohjelma toimii. Esimerkiksi mitä oheislaitteita tarvitaan, mitä keskusyksiköltä odotetaan, mitä laitteiden ominaisuuksia ohjelma hyödyntää, mitkä laitteiston ominaisuudet rajoittavat teknisiä ratkaisuja, liittymät muihin tietokoneisiin. 2.4 Ohjelmistoympäristö(n kuvaus) Ohjelmistoympäristö jossa ohjelma toimii. Esimerkiksi käyttöjärjestelmä, kääntäjä, muut apuvälineet, tietokantaohjelmisto, tietoliikenneohjelmisto, www-selain, littymät muihin ohjelmistoihin/sovelluksiin, muut laitteistossa yhtä aikaa ajettavat ohjelmat. Luonnollisesti tarkkoine versioineen. 2.5 Toteutuksen keskeiset reunaehdot Jos asiakas on asettanut ohjelmalle huomattavan tärkeitä ehtoja (tai sellaisia on muista syistä) jotka on syytä ottaa huomioon suunnitelussa niin ne mainitaan tässä. Esimerkiksi laitteisto, ohjelmisto, lait tai asetukset, vasteajat. 2.6 Sopimukset ja standardit Jos käytetään standardien ja/tai eri sopimusten mukaisia suunnittelumenetelmiä, kuvaustapoja, dokumentointimalleja tms. niin ne mainitaan tässä. Samoin valmisosien käyttö ja niiden nimeämissäännöt.

TEKNINEN MÄÄRITTELY 18 (7) Myös erilaiset direktiivit, viranomaismääräykset ja ohjeistot mainitaan tässä, mikäli ne vaikuttavat suunnitteluun. Siis tässä voi mainita nimeltä ja kohdassa 1.5 näkyy koko lähde tarkasti. 3. ARKKITEHTUURIN KUVAUS Suunnittelutavoitteet sekä perusteet valitulle arkkitehtuurille eli miksi juuri tällainen arkkitehtuuri. Tässä kuvataan ohjelmiston arkkitehtuuri yleisellä tasolla: ylimmänkäsitetason (abstraktiotason) moduulit ja niiden väliset liittymät. 3.1 Ratkaisun "filosofia" (suunnitteluperiaatteet) Suunnitteluperiaatteet eli "ratkaisun filosofia" alkaa valinnasta teettekö "perinteistä" rakenteellista suunnittelua (SD) vaiko oliosuunnittelua (OOD) vai jotakin muuta. Tuon valinta ratkaisee millaista ajattelutapaa (lähestymistapaa ongelmaan) käytätte jatkossa. Eli millä tavalla ryhmänne lähestyy ongelmaa ja ratkaisee sen, yleinen lyhyt selostus. Perustelut mukaan kaikkiin ratkaisuihin ja päätöksiin. Tärkeätä ovat myös yhtenäiset moduulien kutsutavat sekä yhtenäiset suunnitteluratkaisut eli perusteet moduulijaolle. RATKAISUN FILOSOFIA tarkoittaa mm. seuraavaa (ei suoraan koodaamaan vaan mietitäänpä hetki mitä tehdään ettei tehdä mitä vaan): olioita vai "perinteinen" rakenteinen tapa mikäli oliokeskeinen toteutus niin mikä mallinnusmenetelmä merkkipohjainen vai graafinen näyttö asiakas-palvelin-arkkitehtuuri vai "perinteinen" asiakas-palvelin työnjako globaalit vai lokaalit muuttujat valmis TKHJ vaiko oma tietokanta vai pelkkä tiedosto tietokanta: relaatiokanta vaiko jokin muu tietorakenteet (esim. linkitetty lista vaiko kiinteä taulukko) moduuli/lohkojako (esim. käyttöliittymä, tulostustoiminnot) yleiskäyttöiset komponentit (esim. KL, toolbar, tiedostojen-käsittely), jos sellaisia on kaikkien syötteiden tarkastus heti vaiko oma virhetarkistusmoduuli muistin käsittely (RAM, levymuisti, välimuisti,...) ohjelmointikieli (vasteaika/reaaliaikaisuus/rinnakkaisuusvaatimukset?) käyttöliittymä: 4GL vai näyttökehitin vai rutiinikirjasto. Modulaarinen ohjelma koostuu osista, jotka voidaan poistaa tai vaihtaa ja joita voidaan lisätä. Kiinnitetty ohjelmointikieli voidaan se mainita tässä (periaatteessa suunnittelu voi vieläkin olla ohjelmointikieliriippumaton). Perusteluna ei kelpaa "ainoa jota osaan". 3.2 Tietokanta-arkkitehtuuri

TEKNINEN MÄÄRITTELY 19 (7) Kuvataan tietokanta-arkkitehtuuri yleisellä tasolla. Esimerkiksi jako tiedostoihin tai tietokantoihin, tiedostojen/tietokantojen väliset liittymät, tiedostojen/tietokantojen organisointi, käytettävät tietokantaohjelmistot (jos on), suojaukset, toipuminen, varmistukset, huolto, ylläpito. Perustelut mukaan luonnollisesti. Tietokannat sekä niiden rakenne (eli esim. taulut eli relaatiokuvaukset (mikäli toteutus tehdään relaatiotietokannalla!)). Muutama sana tietokanta-arkkitehtuurista. Suunnitteludokumentissa (viimeistään) määrätään tietokannan rakenne. Määrittelydokumentin kolmosluvussahan jo määritettiin kentät pituuksineen. Nyt sitten tarkennetaan tietokannan rakenne selväksi. Mikäli käytetään valmista tietokannan hallintajärjestelmää (TKHJ, engl. DBMS), osaisi systeemin käyttäjä alustaa tietokannan eli luoda ne tietokannan taulut. Mikäli käytössä on relaatiomallin mukainen tietokanta, taululla voi ymmärtää yhtä relaatiota. Yksi tietokanta voi sisältää useita relaatioita. Tietokannan taulussa on tietenkin useita rivejä. Relaatiolla tarkoitetaan sarakkeita. Kahden sarakkeen taulu on pienin relaatio. Tietokannan rakentaminenhan on tasapainoilua tietokannan koon ja hakunopeuden välillä. Ratkaisu on aina kompromissi. Tietokantaratkaisu kuvataan yksityiskohtaisesti ellei sitä ole tehty jo määrittelyssä. tietokantaratkaisun yleiskuva, tiedostot ja niiden väliset liittymät tietokantaa käyttävät muut ohjelmistot tai järjestelmät tietokannan tukiohjelmisto (esim. varmistukset, toipuminen, testaus) kustakin tietokannasta tai tiedostosta rakenne/organisointi tietuekuvaus tietokuvaus tyyppi käsittely- tai laskentasäännöt suhteet muihin tietoihin suhteet muihin tiedostoihin tai tietokantoihin päivityskriteerit ja -tavat tilavaatimukset ylläpitonäkökohdat varmistusnäkökohdat suojausnäkökohdat. Tietokannan kenttien kuvaus tarkasti; kentän nimi tai tunniste kentän merkitys kentän pituus ja muoto sallitut arvot. 3.3 Ohjelmistoarkkitehtuuri, moduulit ja prosessit

TEKNINEN MÄÄRITTELY 20 (7) Tämä kohta on ehkäpä tärkein suunnitteludokumentin asia. Älkää ohittako tätä kevyesti. Satunnaiselle dokumentin lukijalle tämä kohta kuvaa parhaiten suunnitteluanne (tarkat moduulikuvaukset selviävät selkeästä koodistakin). Usein kirjataan yksityiskohdat pikkutarkasti ylös, mutta laajempaa ja tärkeämpää kokonaiskuvaa ei anneta. Ohjelmistojako osajärjestelmiin / ohjelmiin / proseseihin / moduuleihin / pakkauksiin / luokkiin sekä niiden väliset liittymät yleisellä tasolla. Perustelut käytettyyn jakoon tulee selvittää. Tähän ennnen moduulikuvauksia kannattaa oheistaa kaavio, joka selvittää moduulien keskinäiset suhteet, eli mikä kutsuu mitäkin. Moduuli- eli arkkitehtuurikaavio voidaan esittää tässä tai mieluummin luvun 4 alussa, ennen moduulikuvauksia. Suunnitteludokumentin luvun 4 alkuun kannattaa liittää jonkinlainen moduulikutsukaavio, josta selviävät yhdellä silmäyksellä ohjelman sisältämät moduulit ja niiden riippuvuussuhteet (kutsusuhteet, sisältyminen (moduuli voi koostua moduuleista)) toisistaan. Mikäli toteutus on suunniteltu tehtäväksi jollakin oliokielellä, luokkahierarkia on selventävä lisäkaavio. Oliotekniikoissa voidaan käyttää selventävinä kaavioina luokkakaaviota, periytymiskaaviota ja kutsukaaviota (käyttökaavio). Vaikka tuotteen voisikin tehdä yksi ohjelmoija, tulee työ silti jakaa moduuleihin (muutosten ja myöhemmän käytön varalta). Moduuleihin jakohan mahdollistaa rinnakkaisen toteutustyöskentelyn 4. MODUULI (JA PROSESSI) KUVAUKSET Se moduulikaavio voisi sijaita tässä kohtaa (mieluummin kuin kohdassa 3.3). Moduulikaavio helpottaa ohjelman rakenteen ja toiminnan hahmottamista, etenkin jos ohjelma koostuu useammista kymmenistä moduuleista tai luokista. Siitä nähdään mikä vaikuttaa mihinkin. Haluttaessa voidaan moduulikaavioon lisätä selventäviä tekstejä kutsunuolien lisäksi mutta se ei ole välttämätöntä. Tekstin luettavuutta voidaan parantaa erilaisilla korostus- ja tehostuskeinoilla. Esimerkiksi aliohjelmien/funktioiden nimien kirjoittaminen eri kirjasinmallilla tai tekstin lihavointi (bold) tai kursivointi (italic). Eri seikkojen nimeämiseen kannattaa kiinnittää huomiota jo nyt (~tyyliohje). Esimerkiski moduulien, luokkien, funktioiden ja muuttujien nimeämiskäytäntöön.

TEKNINEN MÄÄRITTELY 21 (7) Mikäli joitakin nimiä (komennon parametrit, muuttuja, tiedosto, hakemisto) on jo kiinnitetty, niin ne mainitaan perusteluineen. Jokaisesta moduulista kuvataan sen tehtävä, liittymät muihin osiin sekä toteutusnäkökohdat. Moduuleista/luokista/pakkauksista tms. erotellaan valmisosat, eli muualta sellaisenaan tai muokaten napatut osat. Nämä seikat voisi helposti kuvata esim. moduulikaaviossa erilaisilla korostuskeinoilla. Tekniset yksityiskohdat tulee selvittää koodausta varten tarvittavalla tasolla Hyvin tehdyn moduulin tunnusmerkkejä; toteutustapa ei näy ulkopuolelle suorittaa vain yhden tehtävän mahdollisimman vähän, ja löyhiä kytkentöjä toisiin moduuleihin tiedonvälitys vain parametreilla, ei globaalia dataa mahdollisimman vähän parametreja aina selitetään selvästi, mikäli kuitenkin joudutaan käyttämään globaalia dataa parametreina vain sellaista tietoa, jota moduuli käyttää yksinkertainen sisäinen rakenne yksinkertaiset loogiset lausekkeet haarautumiskohdissa moduuli mahtuu yhdelle tai enintään kahdelle sivulle kaikilla moduuleilla samannäköinen vakionimiö (alkumerkintä eli header) esittelyt on kommentoitu koodi on kommentoitu vähintään lohkoittain. Älä tee liian rajoittuneita tai yleisiä moduuleja. Moduuli on rajoittunut, jos se suorittaa tarpeettoman yksityiskohtaisen tehtävän käsittelee rajoittuneita arvoja tai tyyppejä toimii vain tiettynä aikana (vuosiluvut kahdella numerolla...). Liian rajoittunutta moduulia ei voida käyttää muualla. Moduuli on liian yleinen, jos tekee tarpeettoman laajan tehtävän käsittelee liian monia arvoja tai tyyppejä saa parametrinaan tiedon, joka ei muutu. Liian yleistä moduulia ei voida hyödyntää riittävästi. 4.1 Kustakin moduulista (ja prosessista) kuvataan Moduulikuvauksissa on hyvä käyttää jotakin yhtenäistä merkintätapaa, "TYYLIOHJETTA", esim. muuttujien ja funktioiden nimeämiskäytännöissä (suomi/englanti, iso/pieni AlkuKirjainKäytäntö, alaviivoja_vaiko_ei,... ) 4.1.1 Yleiskuvaus Nimi:

TEKNINEN MÄÄRITTELY 22 (7) Heti ensimmäiseksi kerrotaan moduulin nimi. "Standardimuotoiset"moduulien otsikot eli nimiöt (header). Malleja on paljon, eräs esimerkki on tämän tiedoston loppupuolella. Tyyppi: Tyyppi ilmoitetaan esim. pääohjelma, funktio, aliohjelma, pakkaus,luokka, prosessi. Yleinen kuvaus: Yleisesti mitä moduuli tekee. 4.1.2 Rajapinta Liittymät muihin moduuleihin. Joka moduulilla täytyy olla formaali rajapintamäärittely (black box- tyyliin). Kaikki rajapinnat ovat erittäin tärkeä alue, jo virhemahdollisuuksienkin takia. Luettelo ohjelmista, joita tämä ohjelma kutsuu (jos käyttää) tai jotka kutsuvat tätä (jos kutsuvat). parametrit nimi moodi (IN, OUT, INOUT) tyyppi tarkoitus mahdolliset arvot pakollisuus rajoitukset Esim. milloin moduuli on kutsuttavissa tai ajoitukset. 4.1.3 Toteutus Ohjeita moduulisuunnittelua ja toteutusta varten; tyypillisestitoimintaa on hahmoteltu pseudokoodilla tai hankalat kohdat jopaohjelmakoodilla. Tietorakenteet: Mikäli on tarpeen selostaa moduulin sisäisiä tietorakenteita. Algoritmit Mikäli on käytetty erikoisia ratkaisuja. Myös käytetyt vakioalgoritmit mainitaan (esim. quicksort). 4.1.4 Virhekäsittely Poikkeus- ja virhetilanteet Tärkeää on selvittää miten moduulin tulee reagoida erivirhetilanteisiin. Tässä kohtaa viimeistään

TEKNINEN MÄÄRITTELY 23 (7) määritelläänvirheilmoitustekstien tarkka sisältö ja sanamuoto (jollei ole jomäärittelyssä), sekä ohjelman toiminta virheen jälkeen. Myös havaitut/oletetut virhetilanteet kannattaa rehellisyyden jadokumentin käytettävyyden nimissä kirjata. Mm.testaussuunnitelmaatehtäisiin rinnan määrittelyn ja suunnittelun kanssa. Virhetilanteista selvitetään mihin tilanteisiin varaudutaan miten toimitaan, kun tilanne kohdataan miten virheestä ilmoitetaan käyttäjälle mistä tilanteista yritetään toipua ja miten kerätäänkö virhetilastoa. 5. MUUT ERITYISET TEKNISET RATKAISUT Esimerkiksi seuraavia asioita, mikä tarpeellista. suojaukset, turvallisuus varmistukset toipumiset ylläpidettävyys joustavuus siirrettävyys tai kannettavuus. 6. HYLÄTYT RATKAISVAIHTOEHDOT Ne mietityt mutta hylätyt ratkaisuvaihtoehdot kannattaa kirjataperusteluineen johonkin sopivaan lukuun tai kohtaan. Seuraavadokumentin lukija näkee, että tuotakin on mietitty. Samoinjos te itsesattumoisin lukisitte omaa dokumenttianne puolen vuoden päästä, ette varmaankaan muistaisi mitä asioita on sitä tehtäessä mietitty. 7. VIRHEKÄSITTELY Virheilmoitusten tekstit tulee kiinnittää viimeistään nyt suunnittelussa (parempi olisi miettiä ne jo määrittelyssä). yleiset virhekäsittelysäännöt yleiset moduulit virheiden käsittelemiseksi virheilmoitusten tunnistaminen virheilmoitusten tallettaminen (muistiin, levylle) virheilmoitusten ryhmittely (vakavuus, käyttäjän vaiko järjestelmän) virheilmoitustekstit.

TEKNINEN MÄÄRITTELY 24 (7) Toiminta epänormaaleissa tilanteissa kuuluisi jo määrittelyyn, mutta viimeistään suunnittelussa on asiaan otettava kantaa. Esim. miten järjestelmä käyttäytyy virtakatkoksissa? "Nouseeko itse pystyyn" vai "jääkö jumiin"? Kannattaa panostaa siihen virheilmoitusten yhtenäisyyteen! Käyttäjä näkee ohjelmasta vain sen ja arvioi ohjelman "hyvyyttä" paljolti käyttöliittymän perusteella.