# 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

- **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

### Č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.

### 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.

### 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

### Model sestave aplikacije
Prototipni modeli projektov s ponovno uporabo.

### Zgodnji model načrta

### Model ponovne uporabe
Upoštevamo izvorno kodo, ki se ponovno uporabi.
- ponovna uporaba s pristopom črne škatle - izvorna koda se ne spreminja.

- ponovna uporaba s pristopom bele škatle - izvorna koda se spremenim, obseg je število novih vrstic

### Model po zasnovani arhitekturi

### Trajanje projekta
Uporabimo koledarski čas

# 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

Težava je prilagodljivost spremembam.
### Inkrementalni razvoj

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

## Procesne aktivnosti
### Proces zajema zahtev

Specifikacija programske opreme
proces zajema zahtev je sestavljen iz:
- zajem in analiza zahtev
- specifikacija zahtev
- vrednotenje zahtev
### Načrtovanje in implementacija programske opreme

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.

Testiranje sistema

Stopnje testiranja

- testiranje komponent
- testiranje sistema
- testiranje stranke
Faze testiranja v načrtno usmerjenem procesu razvoja programske opreme

### Evolucija programske opreme

## 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

### Inkrementalna oz postopna dostava
- inkrementalni razvoj
- inkrementalna dostava
Slabosti so da zahteve niso podrobno opredeljene.

## Izboljšanje procesa izdelave
### Pristopi k izboljšanju
- pristop zrelosti procesa
- agilni pristopi

### 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

- 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

## 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

### 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

### 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

### Skupinsko delo v scrumu
Scrum master organizira dnevne sestanke in sledi backlogu. Vsakodnevni sestanki za vse, da vejo kaj se dogaja.
### Porazdeljen scrum

## 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

### 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

### IBM-ova agilnost pri modelu prilagajanja

### 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

### 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

## Proces zajema zahtev
- **Pridobivanje zahtev**
- **Specifikacija zahtev**
- **Vrednotenje zahtev**
- **Upravljanje zahtev**

## 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**

### Odkrivanje zahtev
zbiranje informacij o podobnih sistemih in uporabniških in sistemskih zahtev.
**Anketiranje**
- **zaprti intervju**
- **Odprti intervju**
**Etnografija**
- opazovanje ljudi

**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

### 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

### 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