FRI:UNI:Vodenje projektov:Programsko inženirstvo
Iz E-študij, proste zakladnice študentskega znanja
Vsebina |
Programsko inženirstvo
- Izraz se prvič pojavi 1968
Kaj je cilj programskega inžinirstva?
- Uporabna in kvalitetna programska oprema
- Veliko več kot le rezultat programiranja
- programski sistemski produkt zahteva 10x več dela kot program za enkratno uporabo
- ustrezno testirtan, dokumentiran in povezljiv v širšo celoto
- enostavno vzdrževanje in uporaba
- Gradnja velikih sistemov
- Kompleksnost
- Večje probleme razdelimo na manjše
- Ločnice med problemi morajo biti jasne
- Programski moduli
- Učinkovitost
- stroški, čas razvoja
- Projektni način dela
- Omogoča skrbno načrtovanje in organizacijo dela
Razvojni cikel
Tri faze:
- Definiranje: ugotavljanje nalog, vključitev v širše okolje
- Razvoj: izdelava produkta
- Spremembe: traja ves čas uporabe, vzdrževanje
Aktivnosti v razvoju prog. opreme
- Analiza zahtev prog. opreme: popolno razumevanje nalog in lastnosti, vse zahteve je potrebno skrbno dokumentirati in se o njih pogovoriti z naročnikom
- Načrtovanje: taka predstavitev prog. opreme, da njene značilnosti lahko ocenimo še preden se začne kodiranje
- Kodiranje: ob popolnem načrtu mehanske narave
- Testiranje: se mora izvajati ves čas razvoja; prej ko odkrijemo napako, lažje in ceneje jo odpravimo; testiramo vsak modul posebej, med integracijo po vsakem dodanem modulu, sistemska testiranja
- Vzdrževanje: odpravljanje napak in spreminjanje zunanjih okoliščin, v katerih sistem deluje
Razvojni modeli programske opreme
- Klasični razvojni cikel
- najstarejši, standarden postopek razvoja tehničnih izdelkov
- Nujno, da so zahteve nedvoumno definirane na začetku (vračanje na prejšnje faze ni možno)
- V praksi imajo projekti le redko popolnoma skevenčno naravo
- Bistvene pomankljivosti se lahko pokažejo šele na koncu
- Naočnik mora biti potrpežljiv, saj je rezultat viden šele na koncu
- Primeren za rutinske projekte in takrat ko ima razvojna skupina že dovolj izkušenj
- Razvoj z uporabo prototipov
- Najprej naredimo enega ali več prototipov
- Ni smiselno narediti več popolnoma funkcionalnih izdelkov in jih nato zavreči
- Prototip mora biti hitro in poceni narejen:
- S pomočjo razvojnih orodij (jeziki 4. generacije)
- V prototip implementiramo le nekatere funkcije, drugi izpustimo ali jih simuliramo
- Uporabimo podoben, že obstoječ produkt in opozorimo na razlike, ki jih pričakujemo
- Primerno, ko zahteve niso jasno določene
- Dve fazi: izdelava in testiranje prototipa in izdelava produkta
- Lahko se lotimo tudi strategije, ko prototip v nekja iteracijah preide v končni produkt
- Pri razvoju s prototipom moramo upoštevati:
- Vnaprej se dogovorimo o vlogi prototipa; največkrat gre le za mehanizem za specifikacijo zahetv; lahko se zgodi, da naročnik razume prototip kot že skoraj dokončan izdelek
- Kompromisi, ki smo jih primorani (zaradi cene, časa) sprejeti pri izdelavi prototipa (prog. jezik, neoptimizirana koda, orodja za generacijo kode)
- Izdelavo in ocenjevanje prototipov je potrebno načrtovati in kontrolirati; smiselno je omejiti število prototipov
- Razvoj s 4. generacijo programskih jezikov
- aplikacijski generatorji, avtomatično generiranje kode
- Ta orodja so zelo specifično omejena
- Programiranje ni bistveno lažje
- Čas za analizo in načrtovanje ni bistveno krajši
- Koda je počasna
- Kakšno manjkajočo funkcijo lahko napišemo v jeziku 3. generacije; mešanje ni dobro zaradi vzdrževanja
- Postopni razvoj programske opreme
- Funkcionalnost produkta se postopoma širi, med koraki razvoja se produkt že redno uporablja
- Oprema postopoma raste in se prilagaja uporabnikovim zahtevam
- Uporabnik je prisiljen, da funkcije razporedi po pomembnosti
- Spiralni razvoj programske opreme
- Vsak vzdrževalni poseg je projekt v malem
- Več ciklov, vsak ima vsebuje faze analize, načrtovanja, kodiranja in testiranja
- Vsebuje vse ostale metode
- Vsaka napaka ali sprememba povzroči nov obhod spirale
Zakon stalnih sprememb: Sistem je smiselno vzdževati toliko časa, dokler ga ni ekonomsko bolj upravičeno nadomestiti s povsem novim sistemom.
Zakon naraščajoče kompleksnosti: Zaradi sprememb se programskim sistemom slabša struktura in zato postajajo vse bolj kompleksni. Za preprečevanje pretirane kompleksnosti je potrebno dodatno delo. Če zanemarimo vzdrževanje, se to sicer ne pozna takoj, dolgoročno pa ogrozi tudi nadaljno rast.
Zakon evolucije programske opreme: Rast globalnih sistemskih atributov je kratkoročno sicer lahko zelo hitra, dolgoročno pa se regulira in je skoraj linearna. Obdobju hitre rasti nujno sledi obdobje, ko je potrebno kodo rekonstruirati, ažurirati dokumentacijo, ...
Kakšna je razvojna stopnja programskega inžinirstva?
- še ni znanost
- poleg formalnih teoretičnih znanj uporablja številna manj formalizirana znanja (vodenje in organiziranje razvojne skupine, ocenjevanje potrebnega časa, ...)
- Ta znanja prav tako pomembna
- Še ni enotne metodologije
- Prog. inž. je še vedno nekje vmes med obrtniškim in industrijskim načinom izdelave
- Če ista skupina ni zadložena za vzdrževanje in razvoj, ni dovolj motivirana za razvoj programske opreme, ki jo je preprosto vzdrževati