Razvoj programskih proizvoda · Dodaci

Dodaci

Rječnik, podsjetnici, šabloni, ispitni zadaci i izvori priča.

Materijale priredio Erkan Islamović

erkan.islamovic@eubd.edu.ba · erkan.islamovic@gmail.com

Šta učimo ovog semestra (1–5)

Dodaci prate sva predavanja: rječnik, podsjetnici, šabloni, ispitni zadaci i izvori priča.

Pred.Dio 1Dio 2Praksa
1Projekat i proizvod, trendovi, etikaInženjerski pristup, alati, automatizacijaRepozitorij i vizija proizvoda
2Modeli, uloge, planiranjeRizici, tim, kvalitet, poboljšanje procesaPlan izdanja, registar rizika
3Konceptualni model, UML, SOLIDPrototip, UX, specifikacija dizajnaWireframe i SDD
4IDE, organizacija koda, OOP, okviriPodaci, MVC/MVVM, čisti kod, refaktoringRefaktoring funkcije
5Git, pull request, CITestovi, CD, kontejneriGitHub Actions
DeliveryApp 2.0 · narudžba N-1001 · 24,50 €

Šta učimo ovog semestra (6–10)

Dodaci prate sva predavanja: rječnik, podsjetnici, šabloni, ispitni zadaci i izvori priča.

Pred.Dio 1Dio 2Praksa
6Klasifikacija, mjerljivostTaktike i redizajnMjerenje i keš
7Odluke, pogledi, stiloviTroslojna i čista arhitektura, predlošciADR i C4
8CBSE, odlike, interfejsiPrincipi, smjernice, provođenjePaket sa verzijom
9SaaS, SOA, IoT, proizvodne linijeAspekti, reaktivno programiranjeDekorator i tok događaja
10Vrijednost, troškovi, razvoj ili kupnja, TCOMetrike, procjena, NPV, povratNPV u Pythonu
DeliveryApp 2.0 · narudžba N-1001 · 24,50 €
Dodatak A · Dodaci

Dodatak A – Rječnik

Dodatak A – Rječnik

PojamZnačenjePoglavlje
ADRkratak zapis arhitekturalne odluke: kontekst, odluka, posljedice, alternative7
AOPaspektno orijentirano programiranje: presjecajuće brige na jednom mjestu9
Backloglista svega što treba napraviti, poredana po važnosti2
Bod pričerelativna mjera veličine posla2
Brooksov zakondodavanje ljudi zakašnjelom projektu čini ga još zakašnjelijim2
Brzina timabodovi završeni u jednom sprintu2
C4 modeldijagrami u četiri nivoa: kontekst, kontejneri, komponente, kod7
CBSErazvoj softvera sklapanjem komponenata8
Ciklomatska složenostbroj nezavisnih putanja kroz funkciju4, 10
CI / CDkontinuirana integracija / kontinuirana isporuka5
CMMImodel pet nivoa zrelosti procesa2
COCOMOBoehmov model procjene napora i trajanja10

Dodatak A – Rječnik

PojamZnačenjePoglavlje
Čista arhitekturapravila poslovanja u centru, zavisnosti samo prema unutra7
Dostupnostprocenat vremena u kojem sistem radi6
DORA metrikeučestalost isporuke, vrijeme izmjene, neuspjele izmjene, vrijeme oporavka5
Funkcijske tačkemjera veličine prema onome što softver radi za korisnika10
IaaS, PaaS, SaaSinfrastruktura, platforma i softver kao usluga9
IDEintegrisano razvojno okruženje1, 4
IoT / IoEinternet stvari / internet svega9
ISO/IEC 25010standard karakteristika kvaliteta softverskog proizvoda6
Kanarinacpostepeno puštanje nove verzije dijelu korisnika5
Kohezijakoliko dijelovi komponente pripadaju zajedno8
Kontejnerpaket programa sa svim zavisnostima5
Miris kodaznak u kodu koji upućuje na problem dizajna4

Dodatak A – Rječnik

PojamZnačenjePoglavlje
MVC / MVVMobrasci koji odvajaju prikaz od logike4
NFRnefunkcionalni zahtjev: kako sistem radi6
NPVneto sadašnja vrijednost10
ORMprevođenje objekata u redove tabela i obrnuto4
p95vrijednost ispod koje je 95 % mjerenja6
Period povratavrijeme za koje se ulaganje vrati10
Povezanostkoliko komponenta zavisi od drugih8
Prekidač kolazaštita koja privremeno prestaje zvati servis koji ne radi6
Prekidač funkcijeuključivanje i isključivanje funkcije podešavanjem5
Proizvodna linijaporodica proizvoda sa zajedničkim jezgrom i planiranom varijabilnošću9
Pull requestzahtjev za spajanje izmjena uz pregled5
Reaktivno programiranjerad s tokovima događaja na koje kod reaguje9

Dodatak A – Rječnik

PojamZnačenjePoglavlje
Refaktoringpromjena strukture koda bez promjene ponašanja4
Repozitorij (obrazac)objekat koji skriva bazu od logike7
SBOMspisak svih komponenata proizvoda8
Scenarij kvalitetamjerljiv NFR: izvor, podsticaj, okruženje, artefakt, odgovor, mjera6
SDDdokument specifikacije dizajna3
Semantička verzijaglavna.sporedna.zakrpa s tačnim značenjem8
SOAarhitektura sklopljena od servisa9
SOLIDpet principa objektno orijentiranog dizajna3
Tehnički dugbudući trošak lošijeg, bržeg rješenja4
TCOukupna cijena vlasništva10
Troslojna arhitekturaprezentacija, poslovna logika, podaci7
UXkorisničko iskustvo3

Dodatak A – Rječnik

PojamZnačenjePoglavlje
Višezakupnička uslugajedna instalacija za mnogo zakupaca s odvojenim podacima9
Dodatak B · Dodaci

Dodatak B – Podsjetnici

B.1 Mermaid i UML

classDiagram Narudzba "1" -- "1.." Stavka : sadrži Stavka "*" --> "1" Jelo : za

B.1 Mermaid i UML

DijagramPočetak blokaPoglavlje
klasniclassDiagram3
sekvencijalnisequenceDiagram3
stanjastateDiagram-v23 (PIS 7)
tok, C4, komponenteflowchart TB ili flowchart LR7, 8
Git granegitGraph5

Natpisi s razmacima, zagradama ili dvotačkom stavljaju se pod navodnike. Dijagram se uvijek provjeri iscrtavanjem (VS Code, GitHub ili mermaid.live).

B.2 Git u timu

NaredbaŠta radi
git switch -c ime-granenova grana i prelazak na nju
git statusšta je promijenjeno
git add fajlpriprema izmjene za commit
git commit -m "Dodaj tarifu za Grad B"zapis izmjene s porukom
git push -u origin ime-graneslanje grane na GitHub
git pullpreuzimanje tuđih izmjena
git switch mainpovratak na glavnu granu
git log --oneline --graphistorija kao graf

B.2 Git u timu

Tok rada (GitHub flow): grana → commit → push → pull request → pregled i CI → spajanje → brisanje grane.

B.3 Python i C# rame uz rame

IdejaPythonC#
objekat s podacima@dataclass(frozen=True) class Tarifa: ...record Tarifa(...)
svojstvo samo za čitanje@property def stanje(self): ...public string Stanje { get; private set; }
interfejsclass ServisMapa(Protocol): ...interface IServisMapa { ... }
greškaraise ValueError("…")throw new ArgumentException("…");
hvatanje grešketry: … except ValueError as e:try { … } catch (ArgumentException e) { … }
zaokruživanje navišemath.ceil(x)Math.Ceiling(x)
rječnik{"A": t1, "B": t2}new Dictionary<string, Tarifa> { ["A"] = t1 }
lista s filtrom[x for x in xs if x > 0]xs.Where(x => x > 0).ToList()
testpytest: def test_...(): assert ...xUnit: [Fact] public void ...() { Assert.Equal(...); }
paketpyproject.toml, PyPI, pip install.csproj, NuGet, dotnet add package
pokretanjepython fajl.pydotnet run Fajl.cs (.NET 10)

B.4 Formule iz knjige

FormulaZnačenjePrimjer DeliveryApp
broj sprintova = backlog / brzinaplan izdanja126 / 21 = 6
k = n(n − 1)/2kanali komunikacije6 ljudi → 15
prioritet = V × UrizikRZ-1: 4 × 4 = 16
zastoj = (1 − dostupnost) × 720 hdozvoljeni zastoj u 30 dana99,5 % → 3,6 h
E = 2,4 × KLOC^1,05; T = 2,5 × E^0,38osnovni COCOMO6,4 KLOC → 16,9 čm, 7,3 mj
NPV = −I + Σ P~t~/(1 + r)^tneto sadašnja vrijednost9.950 €
povrat = godine prije + nedostaje / priliv te godineperiod povrata2 + 12/18 = 2,67
Dodatak C · Dodaci

Dodatak C – Šabloni dokumenata

C.1 Vizija proizvoda

Za **(ciljna grupa)** koji **(potreba)**,
**(ime proizvoda)** je **(vrsta proizvoda)**
koji **(glavna korist)**.
Za razliku od **(alternativa)**, naš proizvod **(ključna razlika)**.

C.2 Registar rizika

| Oznaka | Rizik | V (1–5) | U (1–5) | V × U | Odgovor | Vlasnik | Pregled |
| --- | --- | --- | --- | --- | --- | --- | --- |
| RZ-1 | ... | | | | izbjeći / ublažiti / prenijeti / prihvatiti | | datum |

C.3 Dokument specifikacije dizajna (SDD)

# Dizajn: (naziv funkcije)
1. Svrha i obim (šta radi, šta ne radi)
2. Kontekst (ko koristi, na šta utiče)
3. Struktura (klasni dijagram)
4. Ponašanje (sekvencijalni dijagram, alternativni tokovi)
5. Sučelje (wireframe)
6. Podaci (nove tabele i polja)
7. Nefunkcionalni zahtjevi
8. Odluke i alternative
9. Otvorena pitanja

C.4 Scenarij kvaliteta

| Dio | Vrijednost |
| --- | --- |
| Izvor | |
| Podsticaj | |
| Okruženje | |
| Artefakt | |
| Odgovor | |
| Mjera | |

C.5 ADR

# ADR-00N: (naslov odluke)
Status: predloženo / prihvaćeno / zamijenjeno (ADR-…)
## Kontekst
## Odluka
## Posljedice (+ i −)
## Razmatrane alternative

C.6 Bilješke o izdanju (CHANGELOG)

## 2.1.0 – (datum)
### Dodano
- Tarifa za Grad D.
### Ispravljeno
- Poruka greške za adresu izvan zone.
Dodatak D · Dodaci

Dodatak D – Ispitni zadaci s rješenjima

Zadatak 1 (poglavlja 1–2).

Zadatak

Tim od 7 ljudi ima brzinu 20, 26, 24 i 22 boda; backlog ima 184 boda; sprint traje dvije sedmice. a) Koliko sprintova i sedmica treba? b) Koliko je kanala komunikacije? c) Šta biste rekli rukovodiocu koji predlaže da se tim u sredini projekta poveća na 12 ljudi?

Zadatak 1 (poglavlja 1–2). – rješenje

Rješenje (R)

a) Brzina (20 + 26 + 24 + 22) / 4 = 23; 184 / 23 = 8 sprintova = 16 sedmica. b) 7 × 6 / 2 = 21 kanal. c) Sa 12 ljudi kanala je 66, više od tri puta više; novi ljudi bi prvo učili, a stari ih podučavali (Brooksov zakon). Bolje je smanjiti obim, pomjeriti rok ili, ako se ljudi ipak dodaju, napraviti drugi tim sa svojim jasnim dijelom proizvoda.

Zadatak 2 (poglavlje 3).

Zadatak

Za funkciju „Ocijeni dostavu” (kupac nakon isporuke daje 1–5 zvjezdica i komentar) nacrtajte dopunu konceptualnog modela i navedite koji princip SOLID kaže da obavještenje restoranu o lošoj ocjeni ne ide u klasu Ocjena.

Zadatak 2 (poglavlje 3). – rješenje

Rješenje (R)

Novi pojam Ocjena (zvjezdice 1–5, komentar, datum), veza Narudzba "1" -- "0..1" Ocjena, i posredno Dostavljac "1" -- "*" Ocjena preko narudžbe. Princip jedne odgovornosti: Ocjena čuva pravila ocjene (npr. zvjezdice samo 1–5), a slanje obavještenja je odgovornost servisa obavještenja.

Zadatak 3 (poglavlje 4).

Zadatak

Navedite četiri mirisa koda u funkciji i prepišite je čisto:

def f(n, t):
    if t == 1:
        return n * 0.9
    if t == 2:
        return n * 0.8
    return n

Zadatak 3 (poglavlje 4). – rješenje

Rješenje (R)

Nejasno ime funkcije i parametara, magični brojevi (1, 2, 0.9, 0.8), grananje po tipu, decimalni broj za novac. Čisto: konstanta POPUSTI = {"STUDENT": 10, "VJERNI": 20} (procenti), funkcija iznos_s_popustom(iznos_centi, vrsta_kupca) koja vraća iznos_centi - round(iznos_centi * POPUSTI.get(vrsta_kupca, 0) / 100), i testovi za svaku vrstu kupca i nepoznatu vrstu.

Zadatak 4 (poglavlje 5).

Zadatak

Opišite put izmjene „Dodaj tarifu za Grad D” od grane do svih korisnika, koristeći pojmove: grana, commit, pull request, pregled, CI, linter, test, kontejner, kanarinac, povratak.

Zadatak 4 (poglavlje 5). – rješenje

Rješenje (R)

Programer napravi granu tarifa-grad-d, doda tarifu i testove granica, napravi commit i push, otvori pull request. CI pokrene linter i testove; kolega pregleda kod i odobri. Nakon spajanja CI napravi sliku kontejnera s novom verzijom, koja ide na test okruženje, pa kao kanarinac na 5 % korisnika uz praćenje grešaka, pa svima. Ako greške porastu, radi se povratak na prethodnu sliku.

Zadatak 5 (poglavlje 6).

Zadatak

Dostupnost je 99,8 % mjesečno (30 dana). a) Koliko je dozvoljeno zastoja? b) Prepišite „aplikacija mora biti brza i kad ima mnogo korisnika” kao scenarij kvaliteta. c) Predložite dvije taktike.

Zadatak 5 (poglavlje 6). – rješenje

Rješenje (R)

a) 0,002 × 720 h = 1,44 h ≈ 86 minuta. b) Izvor: kupci; podsticaj: 600 istovremenih korisnika pregleda jelovnike i naručuje; okruženje: normalan rad, 12–14 h; artefakt: DeliveryApp 2.0; odgovor: prikaz jelovnika i prijem narudžbe; mjera: p95 ≤ 2 s. c) Keš jelovnika i horizontalno skaliranje iza raspoređivača opterećenja (ili red poruka za obavještenja).

Zadatak 6 (poglavlje 7).

Zadatak

Napišite ADR za odluku da se modul izvještaja za udruženje napiše u C# (ASP.NET Core), iako je ostatak DeliveryApp u Pythonu.

Zadatak 6 (poglavlje 7). – rješenje

Rješenje (R)

Kontekst: izvještaje će održavati partnerska firma koja radi u .NET-u; Dino i Emir bolje znaju C#; modul samo čita podatke. Odluka: poseban modul u ASP.NET Core, čita bazu preko repozitorija samo za čitanje, ne mijenja podatke. Posljedice: + partner ga lako održava, + jasna granica; − dva jezika u proizvodu, dva CI posla, dvije vrste testova. Alternative: izvještaji u Pythonu (odbijeno zbog održavanja kod partnera); gotov alat za izvještaje (odbijeno zbog licence i pravila po gradu).

Zadatak 7 (poglavlje 8).

Zadatak

Komponenta deliveryapp-obavjestenja je u verziji 1.3.0. Odredite sljedeću verziju: a) dodan kanal „Viber”, stari rade; b) ispravljena greška zbog koje se SMS slao dva puta; c) funkcija posalji(telefon, tekst) zamijenjena sa posalji(poruka: Poruka). Za c) navedite šta moraju uraditi korisnici komponente.

Zadatak 7 (poglavlje 8). – rješenje

Rješenje (R)

a) 1.4.0; b) 1.3.1; c) 2.0.0 – korisnici moraju promijeniti sve pozive da prave objekat Poruka i ažurirati zavisnost na >=2,<3; poželjno je da 1.x još neko vrijeme dobija sigurnosne zakrpe.

Zadatak 8 (poglavlje 9).

Zadatak

Objasnite kako bi „Praćenje dostavljača uživo” koristilo IoT i reaktivno programiranje, i navedite dva sigurnosna zahtjeva.

Zadatak 8 (poglavlje 9). – rješenje

Rješenje (R)

Uređaj (mobitel ili torba) šalje lokaciju svakih nekoliko sekundi kroz mrežu u oblak; u oblaku lokacije čine tok događaja na koji se pretplaćuje aplikacija kupca, uz filter (samo dostavljač te narudžbe) i map (lokacija → tačka na mapi). Sigurnost: lokacija je lični podatak, vidi je samo kupac čija je narudžba na putu i samo dok je na putu; uređaj nema fabričku lozinku, komunicira šifrovano i samo s oblakom DeliveryApp.

Zadatak 9 (poglavlje 10).

Zadatak

Ulaganje 30.000 €, prilivi 10.000, 12.000, 14.000 i 14.000 €, stopa 10 %. Izračunajte NPV i period povrata i dajte preporuku.

Zadatak 9 (poglavlje 10). – rješenje

Rješenje (R)

Diskontovano: 9.091 + 9.917 + 10.518 + 9.562 = 39.088 €; NPV ≈ 9.088 € > 0, isplati se. Kumulativno: 10.000, 22.000, 36.000 – nakon dvije godine nedostaje 8.000 od 14.000, pa je povrat 2 + 8/14 ≈ 2,57 godina. Preporuka: prihvatiti, uz provjeru pesimističnog scenarija i kontrolnu tačku nakon prve godine.

Zadatak 10 (cijeli predmet).

Zadatak

Tim od četiri studenta pravi mini-proizvod „Rezerviši termin” za frizerske salone. U deset tačaka opišite plan: od vizije do odluke o isplativosti, i za svaku tačku navedite poglavlje knjige.

Zadatak 10 (cijeli predmet). – rješenje

Rješenje (R)

1) Vizija i zainteresovane strane (1). 2) Scrum, backlog, procjena bodovima, registar rizika (2). 3) Konceptualni model, sekvencijalni dijagram rezervacije, wireframe (3). 4) Kod po slojevima, čisti kod, Python ili C# (4). 5) Git grane, pull request, CI s testovima (5). 6) NFR: npr. potvrda rezervacije za ≤ 2 s, dostupnost 99,5 % (6). 7) Arhitektura: modularni monolit, ADR, C4 (7). 8) Komponenta „kalendar slobodnih termina” s verzijom (8). 9) SaaS za više salona (zakupci), podsjetnici kao reaktivni tok (9). 10) Funkcijske tačke, procjena napora, NPV i povrat uz pretpostavljene pretplate (10).

Dodatak E · Dodaci

Dodatak E – Izvori priča i činjenica

Dodatak E – Izvori priča i činjenica

Sve priče na početku poglavlja i okviri „Iz stvarnog svijeta” zasnovani su na javno dostupnim izvorima. Brojevi su provjereni u oktobru 2026; gdje se izvori razilaze, u tekstu stoji opreznija formulacija („oko”, „više od”).

Dodatak E – Izvori priča i činjenica

PoglavljeDogađajGlavni izvori
1NATO konferencija, Garmisch, 7–11. 10. 1968P. Naur, B. Randell (ur.): Software Engineering: Report on a conference sponsored by the NATO Science Committee, 1969; B. Randell: „Fifty Years of Software Engineering”, 2018
1Dieselgate, 2015izvještaji američke agencije EPA i Ministarstva pravde, 2015–2017
2Brooks i OS/360F. P. Brooks: The Mythical Man-Month, 1975 (izdanje 1995)
2Googleov projekat Aristotel, 2015Google re:Work, „Guide: Understand team effectiveness”
3Apple u Xerox PARC-u, decembar 1979Computer History Museum; M. Hiltzik: Dealers of Lightning, 1999
4Toyota, presuda Bookout, oktobar 2013EDN, „Toyota's killer firmware”, 2013; transkript svjedočenja M. Barra
5CrowdStrike, 19. 7. 2024CrowdStrike, preliminarni izvještaj nakon incidenta (PIR) i analiza uzroka, 2024; Microsoft blog, 20. 7. 2024; CISA
6Pokémon GO, juli 2016Google Cloud blog, L. Stone, 29. 9. 2016
6Netflix Chaos Monkey, 2011Netflix Tech Blog, „The Netflix Simian Army”, 2011
7Prime Video, 2023Prime Video Tech blog, mart 2023; devclass.com, 5. 5. 2023
8McIlroy, 1968M. D. McIlroy: „Mass Produced Software Components”, izvještaj NATO konferencije, str. 138–155
8left-pad, 22. 3. 2016npm blog, „kik, left-pad, and npm”, 2016; The Register, 23. 3. 2016

Dodatak E – Izvori priča i činjenica

PoglavljeDogađajGlavni izvori
8Ariane 5, let 501, 4. 6. 1996izvještaj istražne komisije (J. L. Lions), 19. 7. 1996
8Log4j, decembar 2021CVE-2021-44228; CISA
9Mirai i Dyn, 21. 10. 2016Dyn, izjava od 26. 10. 2016; Flashpoint; KrebsOnSecurity
10NHS NPfIT, 2002–2011National Audit Office, 2013; House of Commons Public Accounts Committee, 2011 i 2013

Dodatak E – Izvori priča i činjenica

Godine i autori pojmova (Royce 1970, Boehm 1981 i 1986, Tuckman 1965, Cunningham 1992, Reenskaug 1979, Kruchten 1995, Nygard 2011, Cockburn 2005, Gamma i dr. 1994, Szyperski 1998/2002, Kiczales i dr. 1997, McCabe 1976, Albrecht 1979, Porter 1985, Cohn 2009, Reaktivni manifest 2014, NIST 2011) navedeni su prema osnovnoj i dodatnoj literaturi predmeta.