# P1 - Uvod v programsko inženirstvo Neuspešnost projektov izdelave - povečana kompleksnost - neuporaba metod programskega inženirstva ## Profesionalno programsko inženirstvo - Programsko inženirstvo - praksa - Računalniška znanost - teorija - Sistemsko inženirstvo - programsko inženirstvo je le del 60% so stroški razvoja, 40% stroški testiranja. ### Izdelki programske opreme - generični - prilagojeni ### Specifikacija izdelka Pri generičnih izdelkih specifikacijo določa **razvijalec**, pri prilagojenih pa **stranka**. ### Lastnosti kakovostne programske opreme - **vzdrževalnost** - **zagotovljivost in varnost** - **učinkovitost** - **sprejemljivost** ### Programsko inženirstvo Programsko inženirstvo je inženirska disciplina, ki se ukvarja z vidiki izdelave programske opreme. Pomembna je, ker za večino informacijskih rešitev večji del stroškov predstavljajo **stroški sprememb**, ko je že v uporabi. ### Aktivnosti izdelave programske opreme - **Specifikacija** - **Razvoj** - **vrednotenje** - **evolucija** ### Splošne težave - heterogenost - poslovne in družbene spremembe - varnost in zaupanje - obseg ### Vrste programske opreme - samostojne aplikacije - Interaktivne transakcijske aplikacije - vgrajeni krmilni sistemi - sistemi za paketno obdelavo - sistemi za zabavo - sistemi za modeliranje in simulacijo - sistemi za zbiranje podatkov - sistemi sistemov ### Spletno programsko inženirstvo - Svetovni splet je platforma za izvajanje aplikacij. - Ponovna uporaba je prevladujoč pristop. - Spletne sisteme razvijamo **inkrementalno** in z **agilnim pristopom**. - **Storitveno usmerjen razvoj** programske opreme razvija komponente, kot samostojne aplikacije. - Z AJAX in HTML5 se je izboljšala podpora **bogatim in naprednim uporabniškim vmesnikom**. ## Etika programskega inženirstva Inženirji morajo delovati **pošteno** in **etično odgovorno**. Načela - zaupnost - osnovna zmožnost oz kompetenca - pravice intelektualne lastnine - napačna raba računalniških virov ### **Etični kodeks ACM/IEEE** - **Javnost** - Programski inženirji morajo ravnati v skladu z javnim interesom. - **Naročnik in delodajalec** - Programski inženirji delujejo v interesu stranke in delodajalca ter v skladu z javnim interesom. - **Izdelek** - Programski inženirji morajo zagotoviti, da njihovi izdelki in s tem povezane spremembe ustrezajo najvišjim strokovnim standardom. - **Presoja** - Programski inženirji morajo v svoji strokovni presoji ohranjati integriteto in neodvisnost. - **Upravljanje** - Vodje razvoja programske opreme se morajo zavezati in spodbujati etični pristop k upravljanju razvoja in vzdrževanja programske opreme. - **Poklic** - Programski inženirji morajo skrbeti za razvoj integritete in ugled poklica v skladu z javnim interesom. - **Sodelavci** - Programski inženirji morajo biti pošteni in podpirati svoje sodelavce. - **Lastna osebnost** - Programski inženirji sodelujejo v vseživljenjskem učenju pri opravljanju svojega poklica in spodbujajo etični pristop k opravljanju poklica. # Projektno vodenje ### Kriteriji uspeha - dostavljeno v dogovorjenem času - v okviru proračuna - ustreza zahtevam stranke - vzdrževanje skladne in delujoče razvojne skupine ### Dejavniki, ki vplivajo na vodenje projektov - velikost podjetja - stranka - velikost programske opreme - vrsta programske opreme - organizacijska kultura - proces razvoja programske opreme ### Univerzalne aktivnosti upravljanja - pisanje projektnega predloga - načrtovanje projekta - upravljanje s tveganji - upravljanje z ljudmi - poročanje ## Upravljanje s tveganji ### Klasifikacija tveganj Glede na vrsto tveganja in na kaj vpliva. - projektno tveganje (izguba člana ekipe) - produktno tveganje (kupljena komponenta ne deluje) - poslovno tveganje (nov konkurenčen izdelek) ### Proces upravljanja s tveganji ![](https://i.imgur.com/7a1MaX4.png) - **določitev tveganj** - tehnološka tveganja - organizacijska tveganja - tveganja z ljudmi - tveganja z zahtevami - tveganja z ocenjevanjem - tveganja z orodji - **analiza tveganj** - ocenimo verjetnost (majhna, visoka) in resnost (resne, sprejemljive) - **načrtovanje tveganj** - strategija izogibanja tveganju - strategija zmanjševanja tveganja - krizni načrt - **spremljanje tveganj** - redno ocenjujemo posamezna tveganja ### Upravljanje z ljudmi Dejavniki: - doslednost - spoštovanje - vključitev - poštenost Motiviranje ljudi. Oblike motivacije: - osnovne potrebe - osebne potrebe - socialne potrebe Vrste osebnosti - usmerjeni k nalogam - usmerjeni k interakciji - samousmerjeni ljudje Skupinsko delo Dobra skupina je povezana in ima skupinski duh. Interakcije v skupini so ključne za uspeh. Učinkovitost skupine je odvisna od **Ljudi** v skupini, **organizacije** skupine ter **tehnične in vodstvene komunikacije**. Na učinkovitost komunikacije vplivajo: - velikost skupine - struktura skupine - sestava skupine - fizično delovno okolje # Načrtovanje projekta ### Faze načrtovanja - faza predloga - faza zagona projekta - med projektom ### Določanje cene programske opreme Dejavniki - pogodbeni pogoji - negotovost ocene stroškov - finančna situacija - tržna priložnost - spremenljivost zahtev Strategije oblikovanja cene: - znižanje cene za obdržanje zaposlenih ali dostop do novega tržnega območja - zvišanje cene ### Načrtno usmerjen razvoj Pristop, kjer je proces podrobno načrtovan. Prednosti so upoštevanje potencialnih težav že na začetku ### Projektni načrt Principi **W5HH** - Zakaj se sistem razvija - Kaj bo narejeno - Kdaj bo narejeno - Kdo je odgovoren za posamezno funkcijo - Kje se organizacijsko nahajajo - Kako bo delo opravljeno s tehničnega in upravljalskega vidika - Koliko sredstev je potrebnih Razdelki projektnega načrta - uvod - organizacija projekta - analiza tveganj - zahteve strojne in programske opreme - razčlenitev dela - časovni razpored projekta - mehanizmi spremljanja in poročanja ### Proces projektnega načrtovanja ![](https://i.imgur.com/JL1Oc51.png) ### Časovno načrtovanje projekta Projekt se razdeli v aktivnosti, ki se jih oceni čas in vire. Poiščemo odvisnosti in določimo aktivnosti, ki se lahko izvajajo vzporedno. ![](https://i.imgur.com/kXGs8jV.png) ### Predstavitev časovnega načrta - na podlagi koledarja - z omrežjem aktivnosti ### Projektne aktivnosti Osnovni elementi načrtovanja, ki imajo naslednje podatke: - trajanje - oceno napora - rok - določen rezultat **Mejniki** - točke v urniku, s katerimi ocenjujemo napredek **Rezultati** - delovni izdelki za naročnika ## Agilno načrtovanje Programska oprema je razvita in dostavljena v iteracijah. Faze agilnega načrtovanja - načrtovanje izdaje - načrtovanje mesece v naprej - načrtovanje iteracije - načrtovanje naslednjega inkrementa **Načrtovanje po pristopu scrum** ### Načrtovanje na podlagi uporabniških zgodb **Igra načrtovanja** pristop ekstremnega programiranja, ki temelji na uporabniških zgodbah. Zgodbam se določi ocene potrebnega časa in dodeljuje točke glede na napor. ![](https://i.imgur.com/gl6Sayi.png) ### Tehnike ocenjevanja - tehnike, ki temeljijo na izkušnjah - izkušnje vodje projekta na preteklih projektih - algoritmično načrtovanje stroškov - ```Napor = A * Obseg^b * M``` - A je konstanta odvisna od lokalnih praks - B je kompleksnost (1 - 1.5) - M upošteva procesne, proizvodnje in razvojne lastnosti ## COCOMO načrtovanje stroškov Empirični model, ki temelji na izkušnjah. ### Modeli COCOMO II model sestave aplikacije - številu aplikacijskih točk - sistemi razviti z dinamičnimi jeziki programiranja PB zgodnji model načrta temelji na funkcijskih - število funkcijskih točk - začetna ocena dela na podlagi zahtev in načrta model ponovne uporabe - število ponovno uporabljenih vrstic - delo potrebno za integracijo komponent model po zasnovani arhitekturi - število vrstic kode - ocena dela na podlagi specifikacij sistema ![](https://i.imgur.com/2yL0NrP.png) ### Model sestave aplikacije Prototipni modeli projektov s ponovno uporabo. ![](https://i.imgur.com/VAwJYIz.png) ### Zgodnji model načrta ![](https://i.imgur.com/USEWEmt.png) ### Model ponovne uporabe Upoštevamo izvorno kodo, ki se ponovno uporabi. - ponovna uporaba s pristopom črne škatle - izvorna koda se ne spreminja. ![](https://i.imgur.com/Akze9Yx.png) - ponovna uporaba s pristopom bele škatle - izvorna koda se spremenim, obseg je število novih vrstic ![](https://i.imgur.com/n0mLdyH.png) ### Model po zasnovani arhitekturi ![](https://i.imgur.com/YvsnrhJ.png) ### Trajanje projekta Uporabimo koledarski čas ![](https://i.imgur.com/eTKoIKC.png) # P3 Procesi izdelave programske opreme Procesi izdelave vključujejo - specifikacijo - načrt in implementacijo - vrednotenje - evolucijo ### Opisi procesov Opisi procesov lahko vključujejo - aktivnosti - zaporedje izvajanja - izdelke - vloge - pogoje in posledice ## Procesni modeli izdelave programske opreme ### Slapovni razvoj Faze - opredelitev zahtev - načrt sistema - razvoj in testiranje enot - integracija in testiranje sistema - delovanje in vzdrževanje ![](https://i.imgur.com/2M6YkkP.png) Težava je prilagodljivost spremembam. ### Inkrementalni razvoj ![](https://i.imgur.com/3DTbPK2.png) Prednosti - cenejše prilagajanje spremembam - lažje pridobivanje povratnih informacij - možna hitrejša dostava Slabosti - nepregleden postopek - manjša kakovost sistema ### Integracija in konfiguracija Temelji na ponovni uporabi pri integraciji v obstoječe sisteme. Vrste programske opreme za večkratno uporabo - Samostojni aplikacijski sistemi - Množica objektov v obliki paketa - Spletne storitve Faze programskega inženirstva s ponovno uporabo - specifikacija zahtev - iskanje in vrednotenje programske opreme - izboljšanje zahtev - konfiguracija in aplikacija sistema - prilagoditev in integracija komponent ![](https://i.imgur.com/8RTdmub.png) ## Procesne aktivnosti ### Proces zajema zahtev ![](https://i.imgur.com/GH1nGoy.png) Specifikacija programske opreme proces zajema zahtev je sestavljen iz: - zajem in analiza zahtev - specifikacija zahtev - vrednotenje zahtev ### Načrtovanje in implementacija programske opreme ![](https://i.imgur.com/Sr7ojb6.png) Aktivnosti načrtovanja - načrtovanje arhitekture - načrtovanje podatkovne baze - načrtovanje vmesnika - izbira in načrtovanje komponent Implementacija - programiranje - odstranjevanje napak ### Preverjanje in vrednotenje programske opreme Preverjanje in vrednotimo ali sistem gradimo pravilno. ![](https://i.imgur.com/c9vbkFp.png) Testiranje sistema ![](https://i.imgur.com/m1Lhm6P.png) Stopnje testiranja ![](https://i.imgur.com/vDWmZnk.png) - testiranje komponent - testiranje sistema - testiranje stranke Faze testiranja v načrtno usmerjenem procesu razvoja programske opreme ![](https://i.imgur.com/AwCIVvu.png) ### Evolucija programske opreme ![](https://i.imgur.com/fvbtcsu.png) ## Obvladovanje sprememb ### Zmanjšanje stroškov ponovne izdelave - predvidevanje sprememb - toleranca sprememb ### Obvladovanje spreminjajočih zahtev - prototipiranje sistema - postopna dostava ### Prototipiranje programske opreme Prototipiranje lahko delamo v več fazah - zajemanje zahtev - načrtovanje - testiranje Izboljšana uporabnost in kakovost. Razvoj prototipa ![](https://i.imgur.com/FAsQZRP.png) ### Inkrementalna oz postopna dostava - inkrementalni razvoj - inkrementalna dostava Slabosti so da zahteve niso podrobno opredeljene. ![](https://i.imgur.com/PSOt3kl.png) ## Izboljšanje procesa izdelave ### Pristopi k izboljšanju - pristop zrelosti procesa - agilni pristopi ![](https://i.imgur.com/Ftu1M9Q.png) ### Aktivnosti izboljšanja procesa - Merjenje procesa - Analiza procesa - Sprememba procesa ### Procesne metrike - čas potreben za zaključek dejavnosti procesa - viri potrebni za izvedbo procesa - število pojavitev določenega dogodka ### Zmožnosti zrelostne ravni ![](https://i.imgur.com/ocWurQn.png) - začetna raven - ponovljiva oz upravljana raven - opredeljena raven - količinsko upravljana raven - optimizirana raven # P4 - Agilni razvoj programske opreme Hiter razvoj je zelo pomemben za nestabilna okolja. Sistem se razvija kot zaporedje različic. Pogoste so dostave novih različic. Malo dokumentacije, osredotočanje na izvorno kodo. ### Načrtni vs. agilni ![](https://i.imgur.com/pcRsyOQ.png) ## Agilne metode - osredotočanje na kodo in ne na načrt - iterativni pristop k izdelavi programske opreme - za hitro zagotavljanje delujoče programske opreme ### Principi agilnih metod - sodelovanje stranke - postopna dostava - ljudje in ne procesi - spreminjanje zahtev - ohranjanje enostavnosti ## Tehnike agilnega razvoja ### Ekstremno programiranje Ekstremni pristop k iterativnemu razvoju - večkrat na dan - dostava strankam na 2 tedna - za vsako izgradnjo vse teste ### Cikel programske opreme ![](https://i.imgur.com/YNDFNgL.png) ### Dobre prakse ekstremnega programiranja - postopno oz inkrementalno načrtovanje - majhne izdaje - enostaven načrt - razvoj z vnaprejšnim testiranjem - preurejanje kode - programiranje v paru - skupinsko lastništvo - stalna integracija - trajnostni tempo - stalna prisotnost stranke ![](https://i.imgur.com/IXc1LwI.png) ### Vplivna praksa ekstremnega programiranja - uporaba uporabniških zgodb pri specifikaciji zahtev - preoblikovanje izvorne kode - Splošno znano je, da je spremembe pametno načrtovati v naprej. Ekstremno programiranje pa se ne strinja. - razvoj z vnaprejšnim testiranjem - testiramo po vsaki spremembi - programiranje v paru ## Agilno vodenje projektov Vloga vodje projekta je, da se programska oprema dostavi pravočasno in v okviru proračuna. ### Scrum Scrum se osredotoča na upravljanje iterativnega razvoja programske opreme. Sestavljen je iz - začetne faze - splošni cilji - vrsta ciklov sprintov - faza zaključka projekta ### Scrum sprint cikel ![](https://i.imgur.com/jyCTJCa.png) ### Skupinsko delo v scrumu Scrum master organizira dnevne sestanke in sledi backlogu. Vsakodnevni sestanki za vse, da vejo kaj se dogaja. ### Porazdeljen scrum ![](https://i.imgur.com/gggMbOa.png) ## Prilagajanje agilnih metod Agilne metode so uspešne v majhnih skupinah. - **prilagajanje navzgor** je uporaba na večjih projektih - **prilagajanje navzven** je uvajanje agilnih metod v veliko organizacijo ### Težave - neformalnost agilnega pristopa in opredelitev pogodbe - primerne za razvoj nove opreme, ne za vzdrževanje - samo za majhne skupine - malo dokumentacije za kasnejše vzdrževanje - spreminjajoča skupina ### Agilna načela in organizacijske prakse - vključenost naročnika - odprtost na spremembe - postopna dostava - ohranjanje enostavnosti - ljudje in ne proces ### Agilni in načrtno usmerjeni dejavniki ![](https://i.imgur.com/EzWgWa3.png) ### Sistemske težave - velikost razvijanega sistema - agilne primerne za manjše - tip razvijanega sistema - niso primerne za sisteme, ki potrebujejo podroben načrt - pričakovana življenska doba sistema - upoštevanje zunanjih predpisov ### Dejavniki v velikih sistemih ![](https://i.imgur.com/gsWE5DU.png) ### IBM-ova agilnost pri modelu prilagajanja ![](https://i.imgur.com/hr0v5rK.png) ### Scrum in vel razvojnih ekip - podvajanje vlog - arhitekti izdelkov - uskladitev izdaj - scrum scrumov # P5 - Zajem zahtev Opredelitev zahteve sega od **abstrakcijske opredelitve** do **podrobne matematične funkcionalne specifikacije**. Zahteve so lahko **osnova za pogodbo** in **ponudbo**. ### Vrste zahtev - **Uporabniška zahteva** - izjave v naravnem jeziku in diagrami namenjeni naročniku - **Sistemska zahteva** - strukturiran dokument ### Bralci različnih vrst zahtev ![](https://i.imgur.com/pYz6chT.png) ### Deležniki sistema **Deležnik** je posameznik ali organizacija vključena v projekt. ## Funkcionalne in nefunkcionalne zahteve - **Funkcionalne zahteve** - storitve, ki jih mora sistem zgotavljati - odvisne od programske opreme in vrste sistema - funkcionalne uporabniške zahteve - abstraktne trditve kaj naj sistem počne - zahteve morajo biti **natančno** opredeljene in nedvoumne - zahteve morajo biti **celovite** in **skladne**. - **Nefunkcionalne zahteve** - omejitve storitev sistema - določajo lastnosti sistema - vrste - zahteve izdelka - organizacijske zahteve - zunanje zahteve ### Metrike za določanje nefunkcionalnih zahtev - hitrost - transakcije na minuto / odzivni las - velikost - zaseden prostor - enostavnost uporabe - čas usposabljanja - zanesljivost - MTTF - robustnost - čas ponovnega zagona - prenosljivost - delež ukazov odvisnih od cilja ![](https://i.imgur.com/I12zGGh.png) ## Proces zajema zahtev - **Pridobivanje zahtev** - **Specifikacija zahtev** - **Vrednotenje zahtev** - **Upravljanje zahtev** ![](https://i.imgur.com/SIjpi2Y.png) ## Pridobivanje zahtev ### Težave - deležniki ne vejo in ne znajo povedati kaj želijo ### Proces pridobivanja - **Odkrivanje zahtev** - **Razvrstitev in organizacija zahtev** - **Določanje prioritet in pogajanja glede zahtev** - **Specifikacija zahtev v naslednjem krogu** ![](https://i.imgur.com/daOKwHq.png) ### Odkrivanje zahtev zbiranje informacij o podobnih sistemih in uporabniških in sistemskih zahtev. **Anketiranje** - **zaprti intervju** - **Odprti intervju** **Etnografija** - opazovanje ljudi ![](https://i.imgur.com/WAXw7g7.png) **Scenarij** je strukturirana oblika uporabniške zgodbe. - opis začetne situacije - opis nominalnega toka dogodkov - opis, kaj gre lahko narobe - informacije o ostalih sočasnih aktivnostih - opis končnega stanja ## Specifikacija zahtev ### Načini pisanja specifikacije sistemskih zahtev - naravni jezik - pomanjkanje jasnosti - zmedene zahteve - združevanje zahtev - strukturiran naravni jezik - na osnovi obrazca - tabelarična specifikacija - opisni načrtovani jezik - grafični zapis - matematične specifikacije ### Zahteve in načrt Zahteve morajo opredeliti kaj sistem počne, načrt mora opisati kako to počne. ### Dokument zahtev programske opreme ![](https://i.imgur.com/oeadSqh.png) ### Struktura dokumenta zahtev - predgovor - uvod - slovar - opredelitev uporabniških zahtev - arhitektura sistema - opredelitev sistemskih zahtev - modeli sistema - evolucija sistema - dodatki - kazalo ## Vrednotenje zahtev Stroški napak pri zahtevah so visoki. ### Preverjanje zahtev - veljavnost - skladnost - celovitost - realističnost - preverljivost ### Tehnike vrednotenja zahtev - Pregled zahtev - Prototipiranje - Generiranje testnih primerov ### Pregled zahtev - Preverljivost - Razumljivost - Sledljivost - Prilagodljivost ## Spremembe zahtev ### Razvoj zahtev ![](https://i.imgur.com/GgMmJ5q.png) ### Načrtovanje upravljanja zahtev - identifikacija zahtev - proces upravljanja sprememb - politike sledljivosti - podpora za orodja ### Proces upravljanja sprememb - analiza problema in specifikacija sprememb - analiza sprememb in stroškov - izvedba sprememb # V3 ## Tipi funkcionalnosti ### EI external input obrazec za prijavo ### EO external output priprava poročila ### EQ External Query izpis seznama ### ILF Internal Logical File podatkovna baza, RET ### EIF External Interface File ILF iz druge aplikacije, RET # TODO grafi extends in podobne puščice COCOMO II graf