Algoritmide ja programmide kavandamine

Tarkvaraprojekti etappe

Projektis kasutatavad meetodid ja vahendid ei pea tingimata olema objektorienteeritud, suuremate projektide korral sageli on.

Metoodika ja protsessi haldamine, standardid ja keel, tarkvaratugi (näit. RUP + UML + Rational Rose)

Vajaduste analüüs

Ülesande püstitamine  koostöös tellijaga. Tulemuseks konkreetne dokument (näiteks eelleping). Riskid. Keskenduda küsimusele "mis?", mitte "kuidas?".

Spetsifikatsiooni koostamine (suunatud tellijale)

Määratakse komponendid, objektid, seosed, andmevood, kitsendused, ... . Tulemuseks spetsifikatsioon (täpne kirjeldus) - skeemid, erinevad vaated.  Spetsifikatsiooni vorm sõltub kasutatavast meetodist - näit. UML. Lihtsamal juhul esitatakse pakutava lahenduse mitteformaalne kirjeldus.
Sel etapil võiks koostada kasutajajuhendi ja/või kasutajaliidese prototüübi , et hakataks tegema "õiget" asja. Dokumenteerimine peab toimuma pidevalt, mitte töö lõppedes.

Produkti/lahenduse kavandamine (suunatud tegijatele)

Küsimus "mis?" muutub nüüd küsimuseks "kuidas?".
Algoritmide ja andmestruktuuride valik, keerukusanalüüs, vajadusel verifitseerimine. Tulemuseks kõigi osiste (näit. moodulite ja liideste) täpsed kirjeldused.
Sõltuvalt kasutatavatest vahenditest võib see etapp olla rohkem või vähem formaliseeritud.

Teostamine

Vahendite valik ja kodeerimine, suhteliselt "odav" võrreldes muude etappidega.
Tulemuseks kavandatud produkti esialgne versioon.

Testimine

Testimine peab olema metoodiline ja põhjalik, kõik testid tuleb ette planeerida (enne kavandamisetappi). Testijad võiksid olla realiseerijatest eraldi. Tihti on testimine mitmel tasemel - moodulite testimine, kasutajaliideste ja kasutatavuse  (kasutuslikkuse) testimine, käideldavuse ja jõudluse testimine jne. jne.

Juurutamine

Projekti viimine tegelikku töökeskkonda, väljaõpe, dokumentatsiooni viimistlemine. Peab olema selge, kuidas lahendatakse edaspidi tekkida võivaid probleeme. Võib osutuda kriitiliseks, sest puudutab vahetult tellija poole inimesi.

Kavandamiseesmärgid (design goals)

Korrektsus

Laiemas mõttes: "korrektne" käitumine kõigi antud ainevallas ette tulla võivate sisendite korral.

Kitsamas mõttes: vastavus spetsifikatsioonile.

Efektiivsus

Ajaliste ja mahuliste piirangute arvestamine. Võib osutuda kriitiliseks näit. sardsüsteemides. Näit. suuremahuline järjestamisülesanne.

Usaldatavus

(reliability, tihedalt seotud terminiga robustness)

Käitumine ootamatute (spetsifitseerimata)  sisendite korral.  Ootuspärased ("mõistlikud") reaktsioonid eriolukordades. 

Kohandatavus, skaleeritavus

Platvormi (riistvara, tarkvara) või keskkonna muutumine. Skaleeritavuse korral näit. kasutajate arvu hüppeline suurenemine.

Taaskasutatavus

Võimalus sama "komponenti" kasutada mõnes muus kontekstis.

Kasutuslikkus

Kas tellija (kasutaja) on võimeline asja kasutama, kas tal on meeldiv seda teha.

Hooldatavus

Kuidas lahendatakse produkti kasutamisel tekkivaid probleeme.

Modulaarsus

Võimalus osi välja vahetada.

Avatus

Võimalus muuta ja edasi arendada.

Modelleerimisest

Koerakuut -> suvila -> koolimaja -> pilvelõhkuja

Ehitades pilvelõhkujat samade meetodite abil kui koerakuuti, on parimal juhul tulemuseks hiiglaslik koerakuut.


Modelleerimise eesmärk - loodava süsteemi parem mõistmine, s.h.:
  1. nii soovitava tulemuse kui ka hetkeseisu visualiseerimine
  2. struktuuri ja käitumise kirjeldamine
  3. lähtealus realiseerimiseks (mudeli valik mõjutab realisatsiooni)
  4. protsesside ja tehtud otsuste dokumenteerimine mudelit kasutades

Booch (Grady Booch), OOSE (Ivar Jacobson), OMT, OMT2 (James Rumbaugh), Fusion, ... -> UML - Unified Modeling Language (1994 Rational Software, 1998 OMG: UML 1.3, UML 2),

Modelleerida tuleb erinevaid aspekte, nii staatilisi (struktuur) kui ka dünaamilisi (käitumine).
Kasutusloovaade (use case view) - jälgitavad pretsedendid, tüüpsituatsioonid
Projekteerimisvaade (design view) - struktuur ja funktsionaalsus
Protsessivaade (process view) - protsessid, paralleelsus, sünkroniseerimine, lõimed, ...
Teostusvaade (implementation view) - versioonid, failid, ...
Levitusvaade (deployment view) - riistvara, võrgutopoloogia, serverid, ...

UML elemente

Olemid
struktuursed
klass (class)

liides (interface)

koostöö (collaboration) - rollide ja elementide koosmõju kirjeldus

kasutuslugu (use case) - teatava tegutseja (actor) poolt vaadeldav tegevuste järjekord

aktiivne klass (active class) - seotud juhtimisvooga (aktiivse klassi objektid osalevad protsesside või lõimede töös)

komponent (component) - süsteemi osa, mis realiseerib kokkulepitud liideseid ja mida saab välja vahetada

sõlm (node) - füüsilise süsteemi komponent (näit. server)
käitumuslikud
interaktsioon (interaction), näit. teate saatmine

automaat (state machine)
rühmitavad
pakett (package)
annoteerivad
märkus, kommentaar (note)

kitsendus (constraint)
Seosed
sõltuvus (dependency) - "a kasutab b" (b muutmine võib tuua kaasa a muutumise)

assotsiatsioon (association) - struktuurne seos objektide vahel (tavaliselt binaarne, aga võib olla n-aarne) ("a on olemuslikult seotud b-ga" või "a mängib b suhtes rolli x"). Assotsiatsiooniga saab siduda kordsuse (multiplicity):   1   0..1  0..*   1..*   n   m..n  
agregatsioon (aggregation) - seos "osa-tervik" ("a on osa b-st"), tugevamal juhul koostamine (composite aggregation) ("a on b koostisosa, millel on b-ga sama eluiga; kõik a kokku moodustavad b")

navigatsioon (navigation) - "a lubab (efektiivselt) leida b"
üldistus (generalization) - seos alamklassi ja ülemklassi vahel ("a on b erijuht")

realisatsioon (realization) - liidesega määratud "lepingu" täitmine ("a realiseerib b poolt määratud funktsioonid")
Skeemid
klassiskeem (class diagram) - staatiline struktuur

objektiskeem (object diagram) - staatiline vaade (konkreetsete) objektide kooslusele

kasutuslooskeem (use case diagram) - staatiline vaade käitumise modelleerimisele

interaktsiooniskeem (interaction diagram) - teadete saatmise aspekt
jadaskeem (sequence diagram) - sündmuste ajalise järgnevuse aspekt

koostööskeem (collaboration diagram) - teateid vahetavate objektide struktuurne kirjeldus
olekuskeem (statechart diagram) - dünaamiline vaade: olekud, sündmused, üleminekud
tegevusskeem (activity diagram) - juhtimisvoo kirjeldus
komponendiskeem (component diagram) - füüsilised aspektid, staatiline vaade

levitusskeem (deployment diagram) - komponentide paigutamine sõlmedesse (riistvara), staatiline vaade


Klassiskeemides kasutatavaid tähistusi




skeemielemendid








skeemielemendid





skeemielemendid





Näide



pisike näide






Jaanus Pöial, 2005