---
# System prepended metadata

title: P1 - Uvod v programsko inženirstvo

---

# 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

