Koskinen, J., Sakkinen, M. & Paakki, J.
(2001). Ohjelmistotekniikka (234 s.). Tietojenkäsittelytieteen
julkaisuja, Opetusmonisteita OM-10. Jyväskylän yliopisto,
Tietojenkäsittelytieteiden laitos (jakelu: CopyShop, MaA).
SISÄLLYSLUETTELO
|
1 |
JOHDANTO |
7 |
|
1.1 |
Historiallinen kehitys |
7 |
|
1.2 |
Yleiset myytit |
10 |
|
1.2.1 |
Johdon myyttejä |
10 |
|
1.2.2 |
Asiakkaan myyttejä |
10 |
|
1.2.3 |
Ohjelmistoammattilaisen myyttejä |
10 |
|
1.3 |
Keskeiset ongelmat |
11 |
|
1.4 |
Keskeiset tuottavuus- ja riskitekijät |
13 |
|
1.5 |
Ohjelmistojen luokittelua |
15 |
|
1.5.1 |
Kehittämisen vaativuus |
15 |
|
1.5.2 |
Ohjelmistotyypit |
16 |
|
1.5.2.1 |
Systeemi (eli varus) ohjelmistot |
17 |
|
1.5.2.2 |
Tosiaika- eli reaaliaikaohjelmistot |
17 |
|
1.5.2.3 |
Tieteelliset ohjelmistot |
17 |
|
1.5.2.4 |
Hallinnolliset ohjelmistot |
17 |
|
1.5.2.5 |
Sulautetut ohjelmistot |
17 |
|
1.5.2.6 |
Henkilökohtaiset ohjelmistot |
18 |
|
1.5.2.7 |
Asiantuntijajärjestelmät |
18 |
|
1.5.3 |
Tehtävätyypit |
18 |
|
1.5.4 |
Sovellusalue |
18 |
|
2 |
OLEELLISET ONGELMAT JA EDISTYSASKELEET |
21 |
|
2.1 |
Oleellisia vaikeuksia |
21 |
|
2.1.1 |
Monimutkaisuus |
21 |
|
2.1.2 |
Yhteensopivuus, mukautuvuus |
21 |
|
2.1.3 |
Muuttuvuus |
22 |
|
2.1.4 |
Näkymättömyys |
22 |
|
2.2 |
Edistysaskeleita |
22 |
|
2.2.1 |
Korkean tason kielet |
22 |
|
2.2.2 |
Osituskäyttö |
22 |
|
2.2.3 |
Yhtenäiset ohjelmointiympäristöt |
23 |
|
2.3 |
Toivottuja ”taikaluoteja” |
23 |
|
2.3.1 |
Ada ja muu korkean tason kielten kehitys |
23 |
|
2.3.2 |
Olio-ohjelmointi |
23 |
|
2.3.3 |
Tekoäly ja asiantuntijajärjestelmät |
23 |
|
2.3.4 |
”Automaattinen” ohjelmointi |
24 |
|
2.3.5 |
Graafinen ohjelmointi |
24 |
|
2.3.6 |
Ohjelmien formaali todentaminen |
24 |
|
2.3.7 |
Ympäristöt ja työkalut |
25 |
|
2.3.8 |
Työasemat |
25 |
|
2.3.9 |
Oleellisten tehtävien tukeen keskittyminen |
25 |
|
2.3.10 |
Ostaminen ja ulkoistaminen |
25 |
|
2.3.11 |
Vaatimusten tarkentaminen ja nopea protoilu |
26 |
|
2.3.12 |
Vähittäinen kehittäminen |
26 |
|
2.3.13 |
”Suurten suunnittelijoiden” kouluttaminen |
26 |
|
3 |
OHJELMISTOTUOTANNON MALLIT |
27 |
|
3.1 |
Vesiputousmalli |
27 |
|
3.2 |
Prototyyppimalli |
29 |
|
3.3 |
Inkrementaalinen malli |
30 |
|
3.4 |
Spiraalimalli |
30 |
|
3.4.1 |
Spiraalimallin standardilomake |
31 |
|
3.5 |
Muita malleja |
32 |
|
3.5.1 |
”B-malli” |
32 |
|
3.5.2 |
Rekursiivis-rinnakkainen malli |
32 |
|
3.5.3 |
Asiantuntijajärjestelmien kehittämisen vaihejakomalli |
33 |
|
3.5.4 |
Vaihtoehtoisia luokittelutapoja |
33 |
|
4 |
MALLINNUS-, KUVAUS- JA
SPESIFIOINTITAVAT |
34 |
|
4.1 |
Informaalit ja puoliformaalit menetelmät |
35 |
|
4.1.1 |
Rakenteiset menetelmät |
35 |
|
4.1.2 |
Oliomenetelmät ja oliolähestymistapa |
35 |
|
4.1.2.1 |
Oliolähestymistavan keskeiset periaatteet |
36 |
|
4.1.2.2 |
UML (Unified Modeling
Language) |
38 |
|
4.2 |
Formaalit menetelmät |
53 |
|
4.2.1 |
Esi- ja jälkiehdot |
53 |
|
4.2.2 |
Logiikka ja mallit |
53 |
|
4.2.3 |
Reaktiiviset spesifikaatiot |
54 |
|
5 |
ANALYYSI |
55 |
|
5.1 |
Ohjelmisto tietojärjestelmän osana |
55 |
|
5.2 |
Vaatimusanalyysi |
56 |
|
5.2.1 |
Vaatimusanalyysin vaiheet |
57 |
|
5.2.1.1 |
Yleinen tapaus |
57 |
|
5.2.1.2 |
Oliokeskeinen tapaus |
57 |
|
5.2.2 |
Vaatimusdokumentin rakenne |
57 |
|
5.2.3 |
Vaatimusanalyysin ongelmat |
58 |
|
5.2.4 |
Haastattelutekniikat |
59 |
|
5.2.4.1 |
Alustus |
59 |
|
5.2.4.2 |
Vaatimusmäärittelyn luonnostelu |
59 |
|
5.2.4.3 |
Vaatimusmäärittelyn katselmointi |
60 |
|
6 |
SUUNNITTELU |
61 |
|
6.1 |
Suunnitteludokumentti |
61 |
|
6.2 |
Suunnitteluprosessin luonne |
62 |
|
6.2.1 |
“Viisasten kiven”
etsintä |
63 |
|
6.2.2 |
Suunnitteluprosessin idealisoitu luonne |
63 |
|
6.2.3 |
Ideaalisen prosessin kuvauksen hyödyllisyys |
63 |
|
6.2.4 |
Kehitysprosessin kuvauksen osat |
63 |
|
6.2.5 |
Rationaalisen suunnitteluprosessin luonne |
63 |
|
6.2.6 |
Dokumenttien merkitys rationaalisessa suunnitteluprosessissa |
64 |
|
6.2.7 |
Ideaalisen prosessin teeskentelemisen merkitys |
65 |
|
6.3 |
Järjestelmän yleisrakenteen suunnittelu |
65 |
|
6.4 |
Moduulien suunnittelu |
66 |
|
6.4.1 |
Tiedon piilottaminen |
68 |
|
6.4.2 |
Kiinteys |
68 |
|
6.4.3 |
Kytkentä |
68 |
|
6.5 |
Tietorakenteiden suunnittelu |
69 |
|
6.6 |
Algoritmien suunnittelu |
70 |
|
6.6.1 |
Vuokaavio |
71 |
|
6.6.2 |
Ohjelmansuunnittelukieli ja pseudokoodi |
71 |
|
6.6.3 |
Nassi-Shneiderman-kaavio |
72 |
|
6.6.4 |
Päätöstaulu |
72 |
|
6.7. |
Oliosuunnittelu |
73 |
|
6.7.1 |
Luokkien suunnittelu |
73 |
|
6.7.1.1 |
Mallien yhdistäminen operaatioiden löytämiseksi |
73 |
|
6.7.1.2 |
Algoritmien suunnittelu operaatioiden toteuttamiseksi |
74 |
|
6.7.1.3 |
Tiedonsaantipolkujen optimointi |
74 |
|
6.7.1.4 |
Ohjelmakontrollin toteutus |
74 |
|
6.7.1.5 |
Perinnän tehostaminen |
74 |
|
6.7.1.6 |
Assosiaatioiden suunnittelu |
75 |
|
6.7.1.7 |
Olioiden toteutus arvoina |
75 |
|
6.7.1.8 |
Moduulien valinta |
76 |
|
6.8 |
Spekulatiivinen suunnittelu |
77 |
|
6.9 |
Käyttöliittymien suunnittelu |
77 |
|
6.9.1 |
Yleisiä suunnitteluperiaatteita |
78 |
|
6.9.2 |
Syntaktis-semanttinen malli |
79 |
|
6.9.3 |
Vuorovaikutustyylit |
79 |
|
6.9.3.1 |
Valikkopohjainen tyyli |
80 |
|
6.9.3.2 |
Lomakepohjainen tyyli |
80 |
|
6.9.3.3 |
Komentokieli |
81 |
|
6.9.3.4 |
Suorakäsittely |
82 |
|
6.9.3.5 |
Luonnollinen kieli |
83 |
|
6.9.4 |
Graafisten liittymien standardointi |
83 |
|
6.9.5 |
Näyttöjen suunnittelu |
85 |
|
7 |
TOTEUTUS |
87 |
|
7.1 |
Ohjelmointikielet |
87 |
|
7.1.1 |
Ohjelmointikielen valinta |
87 |
|
7.1.2 |
Ohjelmointikielten luokittelua |
88 |
|
7.1.2.1 |
Imperatiiviset kielet |
89 |
|
7.1.2.2 |
Rakenteiset kielet |
89 |
|
7.1.2.3 |
Modulaariset kielet |
89 |
|
7.1.2.4 |
Oliokielet |
89 |
|
7.1.2.5 |
Funktionaaliset ja deklaratiiviset kielet |
89 |
|
7.1.2.6 |
Logiikkakielet |
90 |
|
7.1.2.7 |
Rinnakkaiset kielet |
90 |
|
7.1.2.8 |
Ortogonaalisia kielten ominaisuuksia |
91 |
|
7.2 |
Olio-ohjelmointi |
91 |
|
7.2.1 |
Oliokielten eroja |
92 |
|
7.2.1.1 |
C++ |
92 |
|
7.2.1.2 |
Java |
93 |
|
7.2.1.3 |
Smalltalk |
93 |
|
7.2.1.4 |
Muita oliosuuntautuneita kieliä |
93 |
|
7.2.2 |
Olio-ohjelmoinnin periaatteita |
94 |
|
7.2.2.1 |
Luokkien määrittely |
94 |
|
7.2.2.2 |
Olioiden luominen ja tuhoaminen |
95 |
|
7.2.2.3 |
Operaattorien kuormitus |
96 |
|
7.2.2.4 |
Monimuotoisuus eli polymorfismi |
98 |
|
7.2.2.5 |
Perintä |
99 |
|
7.2.2.6 |
Assosiaatiot ja koosteet |
101 |
|
7.2.2.7 |
Tiedon piilotus |
101 |
|
7.2.2.8 |
Geneerisyys ja luokkamallit |
101 |
|
7.3 |
Oliomallin (OMT) toteuttaminen |
102 |
|
7.3.1 |
Toteutusvaihtoehdot |
102 |
|
7.3.1.1 |
Oliosuuntautuneen kielen käyttö |
102 |
|
7.3.1.2 |
Yleisen ohjelmointikielen käyttö |
103 |
|
7.3.1.3 |
Olio- tai relaatiotietokantajärjestelmän käyttö |
103 |
|
7.3.2 |
OMT-suunnittelumallin toteuttaminen C++:lla tai Javalla |
103 |
|
7.3.2.1 |
Oliomallin perusasiat |
103 |
|
7.3.2.2 |
Assosiaatiot |
104 |
|
7.3.2.3 |
Koosteet |
106 |
|
7.3.2.4 |
Periytyminen |
107 |
|
7.3.2.5 |
Dynaamisuus |
107 |
|
8 |
TESTAUS |
109 |
|
8.1 |
Testausstrategia |
110 |
|
8.2 |
Sisäinen testaus |
111 |
|
8.2.1 |
Silmukoiden testaus |
114 |
|
8.2.2 |
Oliokeskeisten ohjelmien testauksen erityispiirteitä |
114 |
|
8.3 |
Ulkoinen testaus |
114 |
|
8.4 |
Virheenjäljitys |
116 |
|
9 |
YLLÄPITO JA
TUOTTEENHALLINTA
|
118
|
|
9.1 |
Ylläpidon luonne ja merkitys |
118 |
|
9.1.1 |
Ylläpidon ongelmat |
119 |
|
9.1.1.1 |
Tutkimukselliset ongelmat |
119 |
|
9.1.1.2 |
Asenteelliset ja tekniset ongelmat |
120 |
|
9.1.2 |
Ylläpidon periaatteita |
121 |
|
9.1.3 |
Ylläpidon geneeriset osatehtävät |
122 |
|
9.1.3.1 |
Ohjelmamuutokset |
122 |
|
9.1.3.2 |
Vaikutusanalyysi |
123 |
|
9.1.4 |
Ylläpitäjän tietotarpeet |
123 |
|
9.1.5 |
Ehkäisevä ylläpito |
124 |
|
9.1.6 |
Korjaavan ylläpidon erityispiirteet |
125 |
|
9.1.6.1 |
Yleiset ongelmien aiheuttajat |
125 |
|
9.1.6.2 |
Ongelmien yksityiskohtaiset syyt |
125 |
|
9.1.6.3 |
Ongelmien ratkaisumenetelmät |
126 |
|
9.1.6.4 |
Ongelmalliset ohjelmointikielen rakenteet |
126 |
|
9.1.6.5 |
Vuosi 2000 –ongelma (Y2K) |
127 |
|
9.1.7 |
Ohjelmien lukeminen, tulkitseminen ja ymmärtäminen |
128 |
|
9.1.7.1 |
Ymmärtämismallit |
129 |
|
9.1.8 |
Ylläpidettävyys |
131 |
|
9.1.8.1 |
Vaikuttavat tekijät |
131 |
|
9.1.8.2 |
Laatutekijät |
132 |
|
9.1.8.3. |
Metriikat |
132 |
|
9.1.9 |
Ylläpidon kustannukset |
133 |
|
9.1.10 |
Yleisiä neuvoja ylläpidon tueksi |
134 |
|
9.2 |
Ylläpidon tuen tekniikat |
135 |
|
9.2.1 |
Tietokyselyt |
136 |
|
9.2.2 |
Ohjelmien visualisointi |
137 |
|
9.2.3 |
Ohjelmien viipalointi |
140 |
|
9.2.3.1 |
Taaksepäin viipalointi |
142 |
|
9.2.3.2 |
Eteenpäin viipalointi |
144 |
|
9.2.3.3 |
Interproseduraalinen viipalointi |
145 |
|
9.2.4 |
Systemaattinen korjaava ylläpito |
146 |
|
9.3 |
Tuotteenhallinta ja konfiguraationhallinta |
149 |
|
10 |
OHJELMISTOTYÖN TUKIVÄLINEET (CASE) |
153 |
|
10.1 |
CASE-järjestelmien
luokitteluja |
154 |
|
10.1.1 |
Analyysin ja suunnittelun työkalupaketit |
157 |
|
10.1.2 |
Ohjelmoinnin työkalupaketit |
158 |
|
10.1.3 |
Testauksen työkalupaketit |
159 |
|
10.1.4 |
Meta-CASE työkalupaketit |
161 |
|
10.1.5 |
Laajat integroidut CASE-ympäristöt |
161 |
|
10.1.5.1 |
PCTE (Portable Common Tool Environment) |
162 |
|
10.2 |
Integraation lajit |
163 |
|
10.2.1 |
Alustaintegraatio |
163 |
|
10.2.2 |
Tietointegraatio |
163 |
|
10.2.3 |
Esitysmuotointegraatio |
164 |
|
10.2.4 |
Kontrolli-integraatio |
164 |
|
10.2.5 |
Prosessi-integraatio |
165 |
|
10.3 |
CASE-järjestelmien elinkaari |
165 |
|
11 |
LAADUNVARMISTUS |
167 |
|
11.1 |
CMM (Capability Maturity Model) |
168 |
|
11.2 |
SPICE (Software Process Improvement and Capability dEtermination) |
171 |
|
11.3 |
Tarkastukset |
173 |
|
12 |
LUOTETTAVUUS |
177 |
|
12.1 |
Ohjelmointikielten rakenteet |
177 |
|
12.2 |
Vikasietoisuus |
180 |
|
12.2.1 |
Poikkeustenkäsittely |
180 |
|
12.2.2 |
Defensiivinen ohjelmointi |
182 |
|
12.2.3 |
Virheestä toipuminen |
183 |
|
13 |
UUDELLEENKÄYTTÖ |
185 |
|
13.1 |
Edellytykset, ongelmat
ja keinot |
186 |
|
13.2 |
Uudelleenkäytettävän ohjelmiston kehittäminen |
187 |
|
13.3 |
Uudelleenkäytettävän ohjelmiston hyödyntäminen |
188 |
|
13.4 |
Siirrettävyys ja standardit |
190 |
|
13.4.1 |
Standardit |
191 |
|
13.5 |
Uudelleenkäytön oliomekanismit |
191 |
|
13.5.1 |
Muuntava uudelleenkäyttö |
191 |
|
13.5.2 |
Kokoava uudelleenkäyttö |
192 |
|
13.6 |
Suunnittelumallit |
192 |
|
13.6.1 |
Luontimallit |
193 |
|
13.7 |
Sovelluskehykset |
194 |
|
13.7.1 |
Sovelluskehysten suunnittelu |
196 |
|
14 |
OHJELMISTOMITTARIT |
198 |
|
14.1 |
Ohjelmiston koon arviointi (FPA; Function Point Analysis) |
199 |
|
14.2 |
Projektin kustannusten
ja työmäärän arviointi |
202 |
|
14.2.1 |
Ositustekniikat |
203 |
|
14.2.2 |
Empiiriset estimointimallit |
204 |
|
14.2.2.1 |
COCOMO (Constructive Cost Model) |
204 |
|
14.2.2.2 |
Putnamin malli |
208 |
|
KIRJALLISUUTTA |
209 |
|
|
HAKEMISTO |
221 |
|
Updated:
10th Jan. 2001 by Jussi Koskinen.