---
# System prepended metadata

title: P1 Uvod v programsko inženirstvo

---

# P1 Uvod v programsko inženirstvo

Vloga programskega inženirstva je ključna ker:
* je ekonomija odvisna od programske opreme
* odhodki za programsko opremo predstavljajo znaten delež BDP


**Stroški programske opreme** so ponavadi večji od stroškov strojne opreme. Stroški vzdrževanja so višji od stroškov razvoja. Za sisteme z dolgo ževljensko dobo so lahko za nekaj faktorjev višji. Programsko inženirstvo se ukvarja s stroškovno učinkovito izdelavo programske opreme.

Projekti so neuspešni predvsem zaradi:
* Povečane kompleksnosti sitemov
* Neuporaba metod programskega inženirstva

### Profesionalno programsko inženirstvo

Kaj je programska oprema?

> Računalniški programi in povezana dokumentacija. Produkti programske opreme so lahko razviti za specifično stranko ali splošno za določen trg.

Kakšne so lastnosti kakovostne programske opreme?

> Kakovostna programska oprema mora uporabniku omogočati vse željene funkcionalne in nefunkcionalne zahteve ter mora biti vzdržljiva, zanesljiva in uporabna.

Kaj je programsko inženirstvo?

> Programsko inženirstvo je posebna disciplina inženirstva, ki se ukvarja z vsemi vidiki izdelave programske opreme.

Katere so ključne aktivnosti programskega inženirstva?

> Specifikacija, razvoj, vrednotenje in evolucija programske opreme.

Kakšna je razlika med programskim inženirstvom in računalniško znanostjo1?

> Računalniška znanost se osredotoča na teorijo in osnove, programsko inženirstvo pa na praktične vidike razvoja in dostave uporabne programske opreme.

Kakšna je razlika med programskim inženirstvom in sistemskim inženirstvom2?

> Sistemsko inženirstvo se ukvarja z vsemi vidiki izdelave računalniško podprtih sistemov, vključno s strojno in programsko opremo ter procesnim inženiringom3. Programsko inženirstvo je del tega bolj splošnega procesa.

Kaj so ključni izzivi programskega inženirstva?

> Spopadanje z naraščajočo raznolikostjo, zahtevami za zmanjšanje časa dostave in razvoja zanesljive programske opreme.

Kakšni so stroški programskega inženirstva?

> Približno 60% predstavljajo stroški razvoja in 40% stroški testiranja. Za programsko opremo po meri evolucijski stroški pogosto presegajo stroške razvoja.

Katere so najboljše tehnike in metode programskega inženirstva?

> Medtem ko je potrebno vse projekte izdelave programskih rešitev obvladovati in razvijati profesionalno, so za različne vrste sistemov primerne različne tehnike. Npr. pri razvoju računalniških iger je skoraj vedno smiselno uporabiti zaporedje prototipov, medtem ko varnostno kritični nadzorni sistem potrebuje celovito in podrobno analizirano specifikacijo. Tako je težko trditi, da je ena metoda boljša od druge.

Kako je svetovni splet vplival na programsko inženirstvo?

> Svetovni splet je vplival na razpoložljivost programskih storitev in na možnost razvoja visoko porazdeljenih storitveno usmerjenih sistemov. Razvoj spletnih informacijskih sistemov je prinesel pomemben napredek pri programskih jezikih in v ponovni uporabi programske opreme.

Kakpne so razlike med specifikacijami?
> Pri generičnih izdelkih je za specifikacijo, ki določa funkcionalnosti izdelka, odgovoren razvijalec.
>Pri prilagojenih izdelkih pa je odgovorna stranka, ki tudi sprejema odloćitve glede sprememb programske rešitve.

Ključne lastnosti kakovostne programske opreme
>* Vzdrževalnost: omogoča prilagajanje spremembam zahtev.
>* Zagotovljivost in varnost
>* Učinkovitost: vključuje odzivnost, čas obdelave zahtev, izkoriščenje pomnilnika...
>* Sprejemljivost: uporaba mora biti tazumljiva, uporabna in združljiva z ostalimi sistemi

Kakšne so splošne težave?
>* Heterogenost: združljivost z različnimi računalniki in mobilnimi napravami.
>* 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

### Etika programskega inženirstva

Poklicna odgovornost
>* Zaupnost
>* Osnovna zmožnost
>* Pravice intelektualne lastnine
>* Napačna raba računalniških virov

Načela etičnega kodeksa
>* **Javnost**: ravnati morajo v skladu z javnimi interesi
>* **Naročnik in delodajalec**: delujejo v skladu z njihovimi interesi
>* **Izdelek**: zagotoviti morajo da izdelki ustrzajo najvišjim strokovnim standardom
>* **Presoja**: v svoji strokovni presoji morajo ohranjati integriteto in neodvisnost
>* **Upravljanje**: zavezati se morajo in spodbujati etični pristop k uporavljanu razvoja in vzdrževanju
>* **Poklic**: skrbeti za razvoj integritete in ugled poklica
>* **Sodelavci**: morajo biti pošteni in podpirati svoje sodelavce
>* **lastna osebnost**: sodelujejo v vseživljenskem učenju in spodbujajo etični pristop k opravljanju poklica.

# P2 Projektno vodenje in načrtovanje projekta

Dejavniki, ki vplivajo na vodenje projekta:
* Velikost podjetja, manjša podjetja imajo manj stroškov z upravljanjem
* Stranka programske opreme, interna vs vladna lahko neformalna
* * Velikost programske opreme
* Vrsta programske opreme, kritični sistemi
* Organizacijska kultura, skupine vs posamezniki
* Procesi razvoja programske opreme, agilni pristop ima manjše stroške

Univerzalne aktivnosti upravljanja:
* Pisanje prjektnega predloga
* Načrtovanje projekta
* Upravljanje s tveganji
* Upravljanje z ljudmi
* Poročanje


### Upravljanje s tveganji

Dva vidika:
* Vrsta tveganja (tehnično, organizacijsko...)
* Na kaj vpliva

Glede na to razdelimo v skupine:
* projektno tveganje vpliva na časovni načrt ali vire
* produktno tveganje vpliva na kakovost ali zmogljivost
* poslovno tveganje vpliva na organizacijo

Proces upravljanja s tveganji je sestavljen iz:
* določitev tveganj: tehnoločka, organizacijska, povezana z ljudmi, zahtevami, ocenjevanjem in orodji.
* Analiza tveganj: ocenimo verjetnost in posledice
* Načrtovanje tveganj: razvijemo strategijo izogibanja, zmanjševanja in krizni načrt
* Spremljanje tveganj


### Upravljanje z ljudmi
Učinkovitost skupine je odvisna od:
* Ljudi v skupini
* Organizacije skupine
* Tehnične in vodstvene komunikacije

Na komunikacijo v skupini vpliva:
* Velikost skupine
* Struktura skupine, neformalna ima boljšo
* Sestava skupine, boljše z različnimi osebnostmi
* Fizično delovno okolje


## Načrtovanje projekta

### Uvod

Faze načrtovanja:
* v fazi predloga se ponudi pogodba za razvoj ali zagotovitev sistema programske opreme
* med fazo zagona projekta se pripravi načrt z določenimi viri na projektu
* med projektom, ko se načrt spreminja

Projektni načrt je treba z napredkom projekta in poznavanjem programske opreme ter njenega razvoja redno spreminjati. Načrt projekta, oceno stroškov in tveganja je treba redno pregledovati.

### Določanje cene

Dejavniki, ki vplivajo na ceno:
* Pogodbeni pogoji: stranka omogoči da razvijalec obdrži lastništvo kode
* Negotovost ocene stroškov
* Finančna situacija: včasih boljše manjši dobiček kot nič prometa
* Tržna priložnost: razširitev v nove sektorje, pridobivanje izkušenj
* Sprejemljivost zahtev: prvotno nižja cena, ki se spremeni zaradi sprememb zahtev

Strategije oblikovanja cene:
* Znižanje cene
    * pridobitev pogodbe omogoči obdražti zaposlene za vnaprej
    * za dostop do novega tržnega območja
* Zvišanje cene
    * če naročnik želi fiksno pogodbo


### Načrtno usmerjen razvoj

#### Projektni načrt
Pomoč s principom W5HH:
* WHY are we developing the system
* WHAT will be made
* WHEN will it be done
* WHO will be responsible for what part
* WHERE are the responsibilities organisationaly
* HOW will it be done
* HOW MUCH dows it cost

Ponavadi vključuje:
* Uvod
* Organizacija projekta
* Analiza tveganj
* Zahteve strojne in programske opreme
* Razčlenitev dela
* Časovni razpored projekta
* Mehanizmi spremljanja in poročanja


### Časovno načrtovanje projekta
Prikaz najpogosteje:
* Na podlagi koledarja
* Z omrežjem aktivnosti, ki prikažejo odvisnosti aktivnosti

Vsaka projektna aktivnost je opredeljena z:
* trajanjem v koledarskih dneh ali mesecih
* oceno napora, t.j. človek-dnevi ali človek-meseci
* rok, do kdaj naj bi bila zaključena
* določen rezultat

Mejniki so točke v urniku, na podlagi katerih lahko ocenimo napredek, npr. predaja sistema za testiranje.

Rezultati so delovni izdelki, ki se dostavijo naročniku, npr. dokument z zajetimi sistemskimi zahtevami.

### Agilno načrtovanje

Faze:
* Načrtovanje izdaje, bolj dolgoročno odločanje o funkcionalnostih, ki jih vključiti
* Načrtovanje iteracije, kratkoročno, inkrement, 2 do 4 tedne dela.

Pristopi:
* po pristopu Scrum, dnevni pregledi napredka in potencialnih težav
* igra načrtovanja originalno del ekstremnega programiranja, uporabniške zgodbe

### Tehnike ocenjevanja

Dve vrsti:
* Tehnike, ki temeljijo na izkušnjah, kjer ocena izhaja iz izkušenj vodje.
* Algoritmično načrtovanje stroškov, kjer se za izračun potrebnega dela uporabi formulo

#### Algoritmično načrtovanje stroškov

$Napor = A \times Obseg^B \times M$

Kjer je:
* A konstantni dejavnik odvisen od lokalnih organizacijskih praks in vrste razvite programske opreme
* Obseg je ocena obsega izvorne kode programske opreme ali funkcionalnosti
* B predstavlja kompleksnost, ponavadi med 1 in 1,5
* M je dejavnik, ki upošteva lastnosti kot so tanesljivost opreme in izkušnje razvojne skupine

### COCOMO

![](https://teaching.lavbic.net/TPO/2021-2022/assets/img/COCOMO_modeli_ocenjevanja.png)


#### Model sestave aplikacije

$Napor = \frac{NAP}{PROD} \times (1- \frac{\text{% ponovne uporabe}}{100})$

Kjer je:
* Napor je ocena v človek-mesecih
* NAP je skupno št. aplikacijskih točk
* PROD je produktivnost aplikacijskih točk

![](https://i.imgur.com/wgqkXVn.png)

#### Zgodnji model načrta

Original formula, kjer je:
* A = 2,94
* B med 1,1 in 1,24 glede na izvirnost, fleksibilnost, pristope obvladovanja tveganj in zrelost razvojnega proces
* Obseg je število vrstic kode/1000
* M=PERS×PREX×RCPX×RUSE×PDIF×SCED×FSIL, kjer množitelji odražajo sposobnost razvijalcev, nefunkcionalne zahteve, poznavanje razvojne platforme itd.
    * PERS - sposobnost razvijalcev,
    * PREX  - izkušenost razvijalcev,
    * RCPX - zanesljivost in kompleksnost izdelka,
    * RUSE - potrebna ponovna uporaba,
    * PDIF - zahtevnost platforme,
    * SCED - potreben časovni načrt,
    * FSIL - podporne možnosti ekipe


#### Model ponovne uporabe

Dve različici:
* Pristop črne škatle, kjer se izvorna koda ne spreminja $Napor = \frac{ASLOC}{ATPROD} \times \frac{AT}{100}$
    * ASLOC je število vrstic samodejno generirane izvorne kode
    * AT je delež samodejno generirane izvorne kode
    * ATPROD je produktivnost razvijalca
* Pristop bele škatle, kjer se izvorna koda spremeni $ESLOC = \frac{ASLOC}{AAM} \times \frac{1-AT}{100}$
    * AAM je ja faktor stroškov spreminjanja kode ipd.
    * Potem delo po $Napor = A \times ESLOC^B \times M$

#### Model po zasnovani arhitekturi

$Napor = A \times Obseg^B \times M$
Torej isto , sam več faktorejv za M, kot npr:
* atributi izdelka 
* računalniški atributi - strojne omejitve
* atributi osebja - upoštevanje izkušenj in zmožnosti ljudi
* atributi projekta - posebne lastnosti prjekta



### Trajanje projekta in osebje
Koledarski čas se lahko oceni z uporabo formule COCOMO II:

$TDEV=3×Napor^{0,33+0,2×(B−1,01)}$










# P3 Procesi izdelave programske opreme


Proces izdelave vključuje:
* Specifikacijo
* Načrt in implementacijo
* Vrednotenje
* Evolucijo

Ko opisujemo procese obišajno govorimo o aktivnostih v teh procesih in zaporedju izvajanja teh aktivnosti. Vključujejo lahko:
* Izdelke, ki so rezultati aktivnosti
* vloge, ki določajo odgovornosti uporabnikov
* pogoje in posledice

## Procesni modeli izdelave programske opreme

* Slapovni razvoj
* Inkrementalni razvoj
* Pristop integracije in konfiguracije

### Slapovni razvoj
Ločene faze:
* Opredelitev zahtev
* Načrt sistema
* razvoj in testiranje enot
* integracija in testiranje sistema
* delovanje in vzdrževanje

Težko se prilagajati spremembam.

### Inkrementalni razvoj

![](https://teaching.lavbic.net/TPO/2021-2022/assets/img/Inkrementalni_razvoj.png)

Prednosti:
* Stroški prilagajanja spremembam so manjši
* Lažje pridobiti povratno informacijo strank
* Možna hitrejša dostava

Slabosti:
* Postopek razvoja ni pregleden
* Kakovost strukture sistema se z inkrementi zmanjšuje


### Integracija in konfiguracija
Temelji na ponovni uporabi. Tipi:
* Samostojni aplikacijski sistemi
* Množica objektov v obliki paketa
* Spletne storitve

Glavni koraki pri inženirstvu s ponovno uporabo:
* Specifikacija zahtev
* iskanje in vrednostenje programske opreme
* izboljšanje zahtev
* konfiguracija aplikacijskega vmesnika
* prilagoditev oz razvoj novih komponent in integracija komponent


## Procesne aktivnosti

#### Specifikacija
Proces zajema zahtev je:
* Zajem in analiza zahtev
* Specifikacija zahtev
* Vrednotenje zahtev

#### Načrtovanje in implementacija
Aktivnosti načrtovanja:
* Načrtovanje arhitekture
* Načrtovanje podatkovne baze
* Načrtovanje vmesnika
* Izbira in načrtovanje komponent

Implementacija:
* Programiranje
* Odpravljanje napak

### Preverjanje in vrednostenje (V & V) programske opreme
Pokaže, ali je sistem skladen s specifikacijami in izpolnjuje zahteve naročnika sistema.
* Preverjanje - Ali sistem gradimo pravilno?
* Vrednotenje - Ali gradimo pravi sistem?

Najpogosteje to preverjamo s testiranjem:
* testiranje komponent
* testiranje sistema
* testiranje stranke
    * testiranje s podatki stranke, test ali ustreza stranki


## Obvladovanje sprememb

Zmanjševanje stroškov ponovne izdelave:
* Predvidevanje sprememb še preden se zahteva ponovna uporaba
* Toleranca do sprememb. Ponavadi razvoj v inkrementih. Lahko popraviš le en inkrement.

Obvladovanje spreminjajočih zahtev:
* Prototipiranje sistema. Predvidevanje sprememb.
* Postopna dostava, inkremente dostavimo stranki za feedback. Izogibanje spremembam in toleriranje sprememb.


### Prototipiranje
Prototipe lahko uporabimo v procesu:
* zajema zahtev
* načrtovanja
* testiranja

![](https://teaching.lavbic.net/TPO/2021-2022/assets/img/Proces_razvoja_prototipa.png)

Razvoj prototipa lahko temelji na opustitvi posameznih funkcionalnosti:
* mora se osredotočiti na slabo razumljene dele
* določenih delov ni treba vključiti
* fokus na funkcionalnih zahtevah

### Inkrementi

Inkrementalni razvoj:
* postopno razvijanje
* agilno
* stranka vrednoti

Inkrementalna dostava:
* Dostava inkrememnta stranki
* bolj realistično vrednotenje
* težko za nadomestne sisteme, če inkrement nima vseh funkcionalnosti

![](https://teaching.lavbic.net/TPO/2021-2022/assets/img/Inkrementalna_dostava.png)

## Izboljšanje procesa izdelave
Boljša kakovost produkta, manjši stroški ali pospešitev razvoja.
Pristopi:
* Pristop zrelosti procesa
    * Raven zrelosti procesa odraža mero, koliko se držijo dobre tehnične in upravljalske prakse
* Agilni pristopi imajo fokus na inkrementalnem razvoju

### Aktivnosti izboljšanja procesa
* Merjenje procesa, kjer se zbira kvantitativne podatkeo delih procesa
* Analiza procesa, kjer se ugotavlja ozka grla, razvoj procesnih modelov
* Sprememba procesa

### Procesne metrike:
* Čas, potreben za zaključitev dejavnosti
* Viri potrebni za izvedbo procesa ali aktivnosti
* Število pojavitev določenega dogodka

### Zmožnostno zrelostni model
ali CMM ima 5 ravni:
* začetna raven, ki je nenadzorovan proces
* ponovljiva oz. upravljana raven, kje rso določeni in uporabljeni postopki za upravljanje izdelkov
* opredeljena raven, uporabljeni postopki upravljanja procesov
* količinsko upravljana raven, uporabljene strategije upravljanja kakovosti
* optimizirana raven, uporabljene strategije za izboljšanje procesov




# V3 Funkcijske točke, random kratice

* Zunanji vhod (External Input, **EI**): elementarni proces, ki sprejme in obdela podatke iz zunanjega sveta (npr. podatke, ki jih vnese uporabnik).
    * Primer EI: obrazec za prijavo v sistem in pripadajoča krmilna logika.

* Notranja logična datoteka (Internal Logical File, **ILF**): logično zaključen skupek podatkov, ki jih vzdržujemo znotraj aplikacije. Notranja logična datoteka hrani podatke, ki jih uporablja eden ali več elementarnih procesov.

    * Primer ILF: podatkovna baza.

* Zunanja vmesniška datoteka (External Interface File, **EIF**): logično zaključen skupek podatkov, ki jih aplikacija sicer uporablja, vzdržuje pa jih zunanji svet.

    * EIF je vedno ILF v neki drugi aplikaciji.

* Zunanja poizvedba (External Query, **EQ**): elementarni proces, ki pripravi podatke za zunanji svet (npr. za uporabnika) na podlagi poizvedbe v ILF ali EIF.

    * Primer EQ: izpis seznama registriranih uporabnikov.

* Zunanji izhod (External Output, **EO**): elementarni proces, ki pripravi podatke za zunanji svet (npr. za uporabnika), pri čemer pa ne upoštevamo dostopa do ILF ali EIF. V to kategorijo spadajo ne trivialne obdelave podatkov.

    * Primer EO: priprava poročila o stanju projekta.


### Obseg in uteži

Ko identificiramo tipe določimo kvalitativni obseg;
* nizek L
* povprečen A
* visok H

To preslikamo v uteži to tabelci.


### Zunanji vhod (EI)

Določimo na podlagi **DET** (Data Element Types) in **FTR** (File Types References).
DET = skupno število vnosnih elementov (vnosnih polj, potrditvenih polj, spustnih menijev …), gumbov...

### ILF in EIF
Določimo na podlagi **DET** (Data Element Types) in **RET**.
DET = število unikatnih stolpcev v tabelah.
RET = število skupin podatkov (tabel)




# P4 Agilni razvoj

Hiter razvoj in dostava sta pogosto najšomembnejši zahtevi. Agilne metode razvijajo zaporedje različic, ki so minimalno dokumentirane in se osredotočijo na delujočo izvorno kodo.

![](https://teaching.lavbic.net/TPO/2021-2022/assets/img/Nacrtno_usmerjen_vs_agilni_razvoj.png)

## Agilne metode

Za njih velja:
* Pri razvoju fokus na kodi in ne na načrtu
* Temeljijo na iterativnem pristopu
* Namenjene so hitremu zagotavljanju delujoče programske opreme

### Principi agilnih metod
* Sodelovanje stranke
* Postopna dostava
* Ljudje in ne procesi
* Sprejemanje sprememb
* Ohranjanje enostavnosti

## Tehnike agilnega razvoja

### Ekstremno programiranje (XP)
Ekstrmni pristop k iterativnemu razvoju: več različic na dan. Inkremente se dostavi vsaka 2 tedna. Ob vsakem buildu potrebno iti čez vse teste.

#### Dobre prakse XP
* Inkrementalno načrtovanje. Zahteve zapišemo kot uporabniške zgodbe. Razvijalci jih razdelijo na razvojne naloge
* Majhne izdaje
* Enostaven načrt
* Razvoj z vnaprejšnjim testiranjem. Avtomatski testi
* Preurejanje kode. Always keep it simple.
* Programiranje v paru
* Skupinsko lastništvo. Pari delajo na vseh delih sistema.
* Stalna integracija
* Trajnostni tempo. Veliko nadur ni sprejemljivo
* Stalna prisotnost stranke. Predstavnik stranke vedno na voljo


#### Vplivne prakse XP

* Uporaba uporabniških ztgodb pri specifikaciji zahtev
* Preoblikovanje izvorne kode
* Razvoj z vnaprejšnjim testiranjem
* Programiranje v paru


## Agilno vodenje projektov

Glavna naloga vodje je pravočasnost in ostati v okviru proračuna.

### Scrum

Scrum je agilna metoda za upravljanje iterativnega razvoja in je sestavljen iz treh faz:
* Začetna faza je faza načrtovanja. Določitev ciljev in oblikovanje arhitekture.
* Vrsta ciklov sprinta, vsak cikel razvije inkrement
* Faza zaključka projekta, kjer se dopolni dokumentacijo, uporabniške priročnike, vrednostenje pridobljenih izkušenj

Terminologija scrum:
* razvojna skupina: samoorganizirana skupina razvijalcev, max 7.
* Potencialno dostavljiv inkrement izdelka: inkrement, ki je v končnem stanju, manjka le testiranje.
* Backlog izdelka: seznam opravil za razvijalce.
* lastnik izdelka: posameznik z nalogo identifikacije lastnosti in zahtev ter prednostne razvrstitve. Lahko stranka.
* Scrum: vsakodnevno srečanje, pregled napredka
* Scrum master: sledi procesu, vodi ekipo. Povezovanje z ostalimi deli podjetja
* Sprint: razvojna iteracija, 2 do 4 tedne
* hitrost: ocena koliko lahko naredijo v enem sprintu

![](https://teaching.lavbic.net/TPO/2021-2022/assets/img/Scrum_sprint_cikel.png)


## Prilagajanje agilnih metod

Prilagajanje navzgor se nanaša na uporabo agilnih metod za razvoj večjih sistemov.
Prilagajanje navzven se nanaša na uvedbo agilnih metod v veliko organizacijo.

### Agilno vzdrževanje
Problemi:
* Ponajkanje dokumentacije izdelka
* Vključenost naročnika v razvojnem procesu
* Ohranjanje kontinuitete razvojne skupine

### Sistemske težave
* kako velik je sistem, ki se razvija?
* kakšen tip sistema se razvija?
* kakšna je pričakovana življenska doba sistema?
* ali mora sistem upoštevati zunanje predpise?

### Ljudje in ekipa
* Kako dobriso načrtovalci, arhitekti in programerji v razvojni ekipi?
    * potrebna višja raven znanja
* Kako je organizirana razvojna skupina?
    * Če je porazdeljena se lahko zahteva projektna dokumentacija
* Katere podporne tehnologije so na voljo?
    * Če ni projektne dokumentacije je vizualizacija in analiza programa bistvena

### Scrum in več razvojnih ekip
* Podvajanje vlog,
    * Vsaka razvojna skupina ima lastnika izdelka za svojo delovno komponento in Scrum masterja.
* Arhitekti izdelkov,
    * Vsaka ekipa izbere arhitekta izdelka, ki sodelujejo pri oblikovanju in razvoju celotne sistemske arhitekture.
* Uskladitev izdaj,
    * Datumi izdaje izdelkov iz vsake razvojne skupine so usklajeni tako, da je izdelan delujoč in popoln sistem.
* Scrum Scrumov,
    * Obstajajo dnevni Scrumi Scrumov, kjer se srečujejo predstavniki vsake razvojne skupine, kjer razpravljajo o napredku in načrtovanju dela v prihodnje.










# P5 Zajem zahtev

## Uvod

Kaj je zahteva?
> Opredelitev zahteve sega od abstraktne opredelitve storitve do podrobne matematične funkcionalne specifikacije. To pa zato ker so zahteve lahko:
> * Osnova za ponudbo, zato mora biti odprto za različne interpretacije
> * Osnova za pogodbo, zato jih je treba natančno opredeliti.

Vrste zahtev:
* Uporabniška zahteva: naravni jezik in diagram storitev. Vsebina namenjena naročniku.
* Sistemska zahteva: strukturiran dokument, ki določa podrobne opise funkcij sistema, storitev in omejitev delovanja. Lahko del pogodbe.

**Deležnik** je posameznik ali organizacija, ki je vključen v projekt ali pa bo projekt nanj vplival.


## Funkcionalne in nefunkcionalne zahteve

Funkconalne zahteve kaj mora sistem delati in kako to počne.

Nefunkcionalne zahteve predstavljajo omejitve storitev ali funkcij. Predpisi, standardi...


### Nefunkcionalne zahteve
![](https://teaching.lavbic.net/TPO/2021-2022/assets/img/Vrste_nefunkcionalnih_zahtev.png)

* Zahteve izdelka določajo, obnašanje izdelka, npr. hitrost izvajanja, stopnja zanesljivosti..
* Organizacijske zahteve so posledica organizacijskih politik in postopkov
* Zunanje zahteve so npr. zakonodaja, interoperabilnost...

#### Metrike za določanje nefunkcionalnih zahtevnosti

* Hitrost
* Velikost
* Enostavnost uporabe
* Zanesljivost: povprečen čas do napake, verjetnost nerazpoložljivosti
* Robustnost: čas ponovnega zagona
* Prenosljivost: delež ukazov, odvisnih od cilja, število ciljnih sistemov


## Procesi zajema zahtev

* Pridobivanje zahtev
* Specifikacija zahtev
* Vrednotenje zahtev
* Upravljanje zahtev

## Pridobivanje zahtev

Stopnje pridobivanja zahtev vključujejo:
* Odkrivanje zahtev: od deležnikov pridobiš informacije
    * Zaprti intervjuji na podlagi vnaprej določenega seznama vprašanj
    * odprti intervjuji, kjer se z preučujejo odprta vprašanja
        * nasveti za učinkovito anketiranje: bodite odprti, pripravljeni prisluhniti. Pomagaj tako da začneš pogovor.
* Razvrstitev in organizacija zahtev: združevanje povezanih zahtev in organizacijo v skladne skupine
* Določanje prioritet in pogajanja glede zahtev: opredelitev prednostnih zahtev, reševanje sporov
* Specifikacija zahtev: dokumentacija, repeat the circle

#### Etnografija

![](https://teaching.lavbic.net/TPO/2021-2022/assets/img/Etnografija_in_izdelava_prototipov_za_analizo_zahtev.png)

#### Scenarij

Scenarij je strukturirana oblika uporabniške zgodbe in mora vsebovati:
* opis začetne situacije
* opis normalnega toka dogodkov
* opis, kje lahko gre kaj narobe
* informacije o ostalih sočasnih aktivnostih
* opis stanja, ko se scenarij zaključi


## Specifikacija zahtev

Zahteve morajo načeloma opredeliti kaj naj sistem počne, načrt pa mora opisati, kako naj to počne.

### V naravnem jeziku

naravni jezik dopolnjen z diagrami in tabelami. Problemi:
* pomanjkanje jasnosti
* Zmedene zahtebe
* Združevanje zahtev


### Strukturirana specifikacija
Standardni način zapisa. Včasih preveč strog.
Vsebuje:
* opredelitev funkcije
* opis vhodov in od kod prihajajo
* informacije o informacijah, ki so potrebne za izračun
* opis ukrepa, ki ga je treba izvesti
* pogoji
* stranski učinki

### Tabelarična specifikacija

Kot dodatek naravnemu jeziku.

### Primeri uporabe

UML diagrami.

### Dokument zahtev programske opreme

Uradna izjava o tem, kaj se zahteva od razvijalcev. To NI projektni dokument. Določiti mora kaj naj bi sistem delal, ne kako.

Struktura:
* Predgovor
* Uvod
* Slovar
* Opredelitev uporabniških zahtev
* Arhitektura sistema
* Opredelitev sistemskih zahtev
* Modeli sistema
* Evolucija sistema Dodatki
* Kazalo


## Vrednotenje zahtev

Dokazujemo, da zahteve določajo sistem, ki ga stranka želi. Stroški napak pri zahtevah so visoski.

Preverjamo:
* Veljavnost: ali zagotavlja funkcije ki zadostijo potrebe?
* Skladnost: ali obstajajo konflikti med zahtevami?
* Celovitost: ali je vključeno vse, kar stranka zahteva?
* Realističnost: ali se lahko izvede glede na proračun in tehnologijo?
* Preverljivost: ali lahko zahteve realno preverimo?


### Tehnike vrednotenja zahtev

* Pregled zahtev
    * Preverljivost - Ali je zahteva realno preverljiva?
    * Razumljivost - Ali je zahteva pravilno razumljena?
    * Sledljivost - Ali je poreklo zahteve jasno navedeno?
    * Prilagodljivost49 - Ali se lahko zahteva spremeni brez velikega vpliva na druge zahteve?
* Prototipiranje
* Generiranje testnih primerov


## Spremembe zahtev

Upravljanje zahtev je proces obvladovanja spreminjajpčih zahtev v procesu zajema zahtev in razvoja.

### Načrtovanje upravljanja zahtev
* Identifikacija zahtev
* Proces upravljanja sprememb je niz dejavnosti, ki ocenjujejo vpliv in stroške sprememb
* Politike sledljivosti določa razmerja med med posameznimi zahtevami in med zahtevami in načrtom sistema
* Podpora za orodja

#### Proces upravljanja sprememb

Koraki:
* Analiza problema in specifikacija sprememb
* Analiza sprememb in stroškov
* Izvedba sprememb


