Appendix A — Dodaci

Dodaci su priručnik za brzo ponavljanje i za rad na projektu: rječnik pojmova, sve formule na jednom mjestu, podsjetnici za Mermaid, SQL i HTTP, šabloni dokumenata, ispitni zadaci s rješenjima i izvori istinitih priča iz knjige.

A. Rječnik

Pojam Značenje Poglavlje
ACID atomarnost, konzistentnost, izolacija i trajnost transakcije 8
ADR kratak zapis jedne arhitektonske odluke: kontekst, odluka, posljedice 9
agilni razvoj razvoj u kratkim iteracijama uz stalan razgovor s korisnikom 2
akter uloga (čovjek ili sistem) koja koristi sistem ili s njim razgovara 5
API dogovoren način na koji jedan program traži uslugu od drugog 10
arhitektura važne odluke o dijelovima sistema koje se teško mijenjaju 9
asocijacija veza između klasa čiji se objekti poznaju 6
autentifikacija / autorizacija provjera ko je korisnik / šta smije 12
backlog lista posla poredana po važnosti 2
balanser opterećenja raspoređuje zahtjeve na više servera 9
BPMN standard za crtanje poslovnih procesa 4
C4 model četiri nivoa crteža arhitekture: kontekst, kontejneri, komponente, kod 9
CI / CD automatsko testiranje / isporuka pri svakoj izmjeni 2, 14
CIA povjerljivost, integritet, dostupnost 12
DFD dijagram toka podataka 4
dijagram stanja stanja jednog objekta i prelazi između njih 7
dostupnost udio vremena u kojem sistem radi 3, 9
enkapsulacija objekat skriva podatke i mijenja ih samo kroz svoje operacije 6
ER dijagram crtež tabela (entiteta) i veza 8
evaluacija mjerenje AI sistema na skupu pitanja s tačnim odgovorima 15
funkcionalni / nefunkcionalni zahtjev šta sistem radi / kakav mora biti 3
GDPR evropska uredba o zaštiti podataka o ličnosti 12
halucinacija uvjerljiv, ali netačan odgovor jezičkog modela 15
heš jednosmjerni otisak iz kojeg se lozinka ne može vratiti 12
histereza dvije granice regulatora da se uređaj ne pali i gasi stalno 13
idempotentnost ponovljen zahtjev ima isti efekat kao jedan 10
indeks pomoćna struktura koja ubrzava pretragu, kao kazalo u knjizi 8
inkrement komad sistema koji radi i dodaje se prethodnim 2
IoT uređaji sa senzorima povezani preko interneta 13
JSON tekstualni format podataka s objektima i nizovima 10
Kanban tabla s kolonama i ograničenjem posla u toku 2
klasa / objekat opis (kalup) / konkretna instanca (kolač) 6
kompozicija dio ne postoji bez cjeline 6
kontejner (Docker) program zapakovan sa svim što mu treba 14
korisnička priča „Kao …, želim …, da bih …” 3
kriterij prihvatanja provjerljiv uslov Dato–Kada–Tada 3
LLM veliki jezički model 15
mikroservisi / monolit mnogo malih samostalnih programa / jedan program 9
model pojednostavljena slika sistema za jedno pitanje 1
MoSCoW mora, trebalo bi, moglo bi, neće ovaj put 3
MQTT protokol objavi–pretplati se za IoT 13
normalizacija svaka činjenica na jednom mjestu (1NF, 2NF, 3NF) 8
OpenAPI standard za opis API-ja kao ugovora 10
OWASP Top 10 lista deset najčešćih rizika web aplikacija 12
persona izmišljen, ali tipičan korisnik iz stvarnih intervjua 11
primarni / strani ključ jedinstveni identitet reda / veza na red druge tabele 8
prototip model ekrana koji se može isprobati 11
pull request prijedlog izmjene uz pregled i automatske provjere 14
RAG model odgovara na osnovu dohvaćenih dokumenata 15
realno vrijeme rezultat je ispravan samo ako je tačan i na vrijeme 13
redundancija dodatni primjerak koji preuzima posao 9, 13
REST stil API-ja: resursi s adresama, radnje kao HTTP metode 10
revizijski trag zapis ko je, kada i šta uradio 12
RTOS operativni sistem za realno vrijeme 13
Scrum agilni okvir: tri uloge, tri artefakta, pet događaja 2
sekvencijalni dijagram poruke između učesnika kroz vrijeme 7
SLO mjerljiv cilj nivoa usluge 14
slučaj korištenja cilj koji akter postiže uz pomoć sistema 5
SQL injekcija unos korisnika postane dio SQL naredbe 12
STRIDE šest vrsta prijetnji 12
tehnički dug brza prečica danas, kamata sutra 14
transakcija izmjene koje se izvrše sve ili nijedna 8
UML objedinjeni jezik za modelovanje softvera 5
V-model svaka faza projektovanja ima svoj par provjere 2
verifikacija / validacija pravimo li sistem ispravno / pravimo li pravi sistem 14
vodopad faze jedna za drugom, bez vraćanja 2
WCAG smjernice za pristupačnost weba 11
zainteresovana strana svako koga se sistem tiče 3

B. Formule

Formula Značenje Primjer Poglavlje
dostava = 200 + 50 · ⌈max(0, d − 3)⌉ centi pravilo PP-2 (ispod 30,00 €, do 10 km) d = 4,2 km → 300 centi = 3,00 € 1
v̄ = (v₁ + … + vₙ) / n prosječna brzina tima (18 + 22 + 20) / 3 = 20 bodova 2
W = L / λ Littleov zakon: vrijeme u sistemu 6 / 3 = 2 dana 2
t_zastoj = (1 − A) · 720 h dozvoljeni zastoj u 30 dana (1 − 0,995) · 720 = 3,6 h 3, 14
E = t_rad / t_ukupno · 100 % efikasnost toka procesa 27 / 50 = 54 %; 27 / 35 ≈ 77 % 4
A_niz = A₁ · A₂ dostupnost dijelova u nizu 0,995 · 0,995 ≈ 99,0 % 9
A_par = 1 − (1 − A)ⁿ dostupnost paralelnih dijelova 1 − 0,005² = 99,9975 % 9
λ = korisnici / vrijeme između zahtjeva opterećenje servera 200 / 5 s = 40 zahtjeva/s 9
K = (L₁ + 0,05) / (L₂ + 0,05) omjer kontrasta (WCAG) bijelo na #1F5FA8 ≈ 6,4 : 1 11
P(n) = 1 − (1 − 0,31)ⁿ dio problema koje otkrije n korisnika P(5) ≈ 84 % 11
N = kᴸ broj mogućih lozinki (k znakova, dužina L) 26⁸ ≈ 2,09 · 10¹¹ 12
rizik = vjerovatnoća · uticaj ocjena prijetnje (1–5 · 1–5) 4 · 4 = 16 12
ΔU = U_opseg / 2ⁿ rezolucija A/D pretvarača 3,3 V / 1024 ≈ 3,2 mV 13
U = Σ Cᵢ / Tᵢ ≤ n(2^{1/n} − 1) test rasporedivosti zadataka 0,25 ≤ 0,78 13
R = 3r² − 2r³ pouzdanost glasanja dva od tri r = 0,99 → 0,9997 13
greška = ε · f · t nagomilana greška sata 9,5 · 10⁻⁸ · 10 · 360 000 ≈ 0,34 s 13

C. DeliveryApp na jednom mjestu

Pravila: PP-1 najmanja narudžba 5,00 €; PP-2 dostava 2,00 € do 3 km, plus 0,50 € za svaki započeti km preko 3 km; PP-3 najdalje 10 km; PP-4 od 30,00 € dostava besplatna; PP-5 STUDENT10 daje 10 % na artikle, najviše 5,00 €; PP-6 otkazivanje samo u stanju NOVA ili PRIHVAĆENA.

Nefunkcionalni zahtjevi: NZ-1 95 % odgovora ≤ 2 s pri 200 korisnika; NZ-2 dostupnost 99,5 % (≤ 3,6 h u 30 dana); NZ-3 lozinke kao heš, restoran dvofaktorski; NZ-4 prva narudžba ≤ 3 min, kontrast ≥ 4,5 : 1; NZ-5 adresa i telefon se brišu 12 mjeseci poslije posljednje narudžbe.

Narudžbe: N-1001 = 24,50 € (sa STUDENT10 22,35 €); N-1002 = 32,00 €; N-1003 odbijena (4,50 €); N-1004 odbijena (11 km); N-1005 = 25,60 €.

Stanja: NOVA, PRIHVAĆENA, ODBIJENA, U_PRIPREMI, NA_PUTU, ISPORUČENA, OTKAZANA; 7 dozvoljenih i 42 nedozvoljena prelaza.

Fajlovi u primjeri/deliveryapp/: deliveryapp.py (pravila i stanja), model.py (klase), schema.sql i podaci.sql (baza), baza.py, api.py i openapi.yaml (API), hladnjak.py (realno vrijeme), test_deliveryapp.py (testovi), Dockerfile i requirements.txt (kontejner); primjeri/ci/ci.yml (GitHub Actions); primjeri/mermaid/ (izvori dijagrama).

D. Podsjetnik: Mermaid

U vlastitom Markdown fajlu blok počinje sa ```mermaid. Natpise sa razmacima, zagradama, dvotačkom ili znakovima < i > stavite pod navodnike.

flowchart LR                          dijagram toka (LR lijevo-desno, TD odozgo)
    A["Kupac"] -->|narudžba| B(("DeliveryApp"))
    C{"Iznos ≥ 30 €?"} -- da --> D["0,00 €"]

classDiagram                          klase
    class Narudzba { +broj: str  -stanje: str  +ukupno() int }
    Kupac "1" --> "0..*" Narudzba : pravi
    Narudzba "1" *-- "1..*" Stavka : sadrži
    Korisnik <|-- Kupac

sequenceDiagram                       sekvence
    actor K as Kupac
    K->>S: zahtjev
    S-->>K: odgovor
    alt uslov
    else drugi uslov
    end

stateDiagram-v2                       stanja
    state "PRIHVAĆENA" as PRIHVACENA
    [*] --> NOVA
    NOVA --> PRIHVACENA: restoran prihvati

erDiagram                             baza
    KUPAC ||--o{ NARUDZBA : pravi

C4Context                             arhitektura
    Person(kupac, "Kupac", "opis")
    System(z, "DeliveryApp", "opis")
    Rel(kupac, z, "naručuje")

E. Podsjetnik: SQL

CREATE TABLE stavka (
    narudzba TEXT NOT NULL REFERENCES narudzba(broj) ON DELETE CASCADE,
    jelo     INTEGER NOT NULL REFERENCES jelo(id),
    kolicina INTEGER NOT NULL CHECK (kolicina > 0),
    PRIMARY KEY (narudzba, jelo)
);
INSERT INTO stavka VALUES ('N-1001', 1, 2);
SELECT n.broj, SUM(s.kolicina * s.cijena_u_trenutku) AS artikli
FROM narudzba n JOIN stavka s ON s.narudzba = n.broj
WHERE n.kupac = ?                    -- parametar, nikad zalijepljen tekst
GROUP BY n.broj ORDER BY n.broj;
UPDATE narudzba SET stanje = 'PRIHVAĆENA' WHERE broj = 'N-1001';
DELETE FROM adresa WHERE kupac IN (...);
BEGIN; ... COMMIT;                   -- ili ROLLBACK;
CREATE INDEX ix_narudzba_restoran ON narudzba(restoran);

U SQLiteu: PRAGMA foreign_keys = ON; uključuje provjeru stranih ključeva. Prazna vrijednost se provjerava sa IS NULL.

F. Podsjetnik: HTTP

Metoda Namjena Kod Značenje
GET čitanje 200 uspjeh
POST pravljenje 201 napravljeno
PATCH izmjena dijela 204 uspjeh bez tijela
PUT zamjena 400 pokvaren zahtjev
DELETE brisanje 401 / 403 niste prijavljeni / nemate pravo
404 ne postoji
409 sukob sa stanjem
422 podaci krše pravilo
429 previše zahtjeva
500 / 503 greška servera / privremeno nedostupan

HTTPie: http GET :8000/v1/jela restoran==R-1 (parametar u adresi), http POST :8000/v1/cijena kupac=K-01 udaljenost_km:=4.2 (= tekst, := broj ili JSON), http PATCH … X-Kupac:K-01 (zaglavlje).

G. Šabloni dokumenata

Vizija

# Vizija – <sistem>
## Problem
## Za koga
## Rješenje u jednoj rečenici
Za … koji …, <sistem> je … koji … . Za razliku od …, … .
## Kako mjerimo uspjeh
## Pravila posla
## Šta nije u prvoj verziji

Korisnička priča (GitHub Issue)

Kao <uloga>, želim <nešto>, da bih <korist>.

Kriteriji prihvatanja
1. Dato … Kada … Tada …
2. Dato … Kada … Tada …

Prioritet: M / S / C / W · Veličina: … bodova · Pripada: UC-…

Specifikacija slučaja korištenja

# UC-<broj> <Naziv>
| Polje | Sadržaj |
| --- | --- |
| Primarni akter | |
| Sekundarni akteri | |
| Cilj | |
| Preduslovi | |
| Okidač | |
| Postuslov (uspjeh) | |
| Postuslov (neuspjeh) | |
| Poslovna pravila | |
## Glavni tok
1. …
## Alternativni tokovi
- 3a. …

ADR

# ADR-<broj>: <Odluka>
- Status: predloženo / prihvaćeno / zamijenjeno ADR-…
- Datum:
## Kontekst
## Odluka
## Posljedice
+ …
− …
## Razmotrene opcije

Red modela prijetnji

| Element | STRIDE | Prijetnja | V | U | Rizik | Odbrana |

Dnevnik AI pomoći

| Datum | Alat | Zadatak | Šta je predloženo | Šta je prihvaćeno | Kako je provjereno |

H. Ispitni zadaci s rješenjima

Zadaci su na proširenju DeliveryApp. Udruženje dodaje četvrti restoran, R-4 Pekara, s jelima: burek 3,50 €, jogurt 1,20 €, kroasan 2,00 €. Pekara radi od 6 do 14 h i nudi novo pravilo PP-7: narudžbe primljene prije 8 h imaju dostavu 1,00 € jeftiniju (ali ne ispod 0,00 €).

Zadatak 1 – zahtjevi. Napišite PP-7 kao korisničku priču i dva kriterija prihvatanja s brojevima. Postavite jedno pitanje koje otkriva nejasnoću pravila.

Rješenje. „Kao kupac koji naručuje doručak, želim jeftiniju dostavu prije 8 h, da bih platio manje.” Kriterij 1: Dato su 2 bureka i 1 jogurt (8,20 €), 4,2 km, narudžba u 7:30; Kada kupac otvori pregled; Tada vidi dostavu 3,00 − 1,00 = 2,00 € i ukupno 10,20 €. Kriterij 2: isto u 8:15 → dostava 3,00 €, ukupno 11,20 €. Pitanje: računa li se vrijeme narudžbe ili vrijeme plaćanja, i šta je s narudžbom u tačno 8:00? (Nejasnoća granice, kao „započeti kilometar” u PP-2.)

Zadatak 2 – proces i stanja. Pekara želi da kupac može naručiti uveče „za sutra u 7 h”. Koje novo stanje treba mašini stanja i koji prelazi? Da li se PP-6 mijenja?

Rješenje. Novo stanje ZAKAZANA: [*] → ZAKAZANA (plaćanje odobreno, termin u budućnosti); ZAKAZANA → NOVA (vremenski događaj: 30 min prije termina); ZAKAZANA → OTKAZANA (kupac otkaže / vrati novac). PP-6 treba proširiti: otkazivanje je dozvoljeno i u stanju ZAKAZANA. U tabeli prelaza sada je 8 stanja (64 para) i 9 dozvoljenih prelaza (sedam starih i dva nova; ulaz iz početnog čvora se ne broji kao par stanja).

Zadatak 3 – baza. Šta treba dodati u šemu iz poglavlja 8 za R-4 i PP-7? Napišite SQL za izmjenu.

Rješenje. Radno vrijeme restorana i vrijeme termina narudžbe: ALTER TABLE restoran ADD COLUMN otvara TEXT; ALTER TABLE restoran ADD COLUMN zatvara TEXT; ALTER TABLE narudzba ADD COLUMN termin TEXT; i u CHECK za stanje dodati ‘ZAKAZANA’. Popust iz PP-7 se ne čuva posebno, jer kolona dostava već pamti obračunati iznos u trenutku narudžbe. Jela R-4 su novi redovi u tabeli jelo.

Zadatak 4 – dostupnost. Pekara prima narudžbe od 6 h, kad je i redovno održavanje servera (30 minuta svake srijede od 6:00). Koliko to zastoja daje mjesečno (4 srijede) i kako se uklapa u NZ-2?

Rješenje. 4 × 30 min = 2 h mjesečno od 3,6 h budžeta; ostaje 1,6 h za sve ostale kvarove. Bolje je održavanje pomjeriti na noć (npr. 3:00), kad nema ni jednog otvorenog restorana, ili ga raditi bez zastoja (plavo–zelena isporuka, poglavlje 14).

Zadatak 5 – API. Koji statusni kod vraća POST /v1/narudzbe za narudžbu iz R-4 u 15:00? Napišite poruku za korisnika.

Rješenje. 422 (zahtjev je ispravan JSON, ali krši pravilo radnog vremena), ili 409 ako se zatvoren restoran shvata kao sukob sa stanjem; tim bira i zapisuje u OpenAPI. Poruka: „Pekara radi od 6 do 14 h. Možete zakazati narudžbu za sutra od 6 h.”

Zadatak 6 – sigurnost. Navedite dvije prijetnje STRIDE za novu funkciju zakazivanja i odbranu.

Rješenje. T: kupac promijeni vrijeme narudžbe u zahtjevu na 7:30 da dobije PP-7, iako naručuje u 9:00 → server popust računa po vremenu servera, ne po vremenu iz zahtjeva. D: napadač zakaže hiljade lažnih narudžbi za sutra → plaćanje unaprijed, ograničenje broja zakazanih narudžbi po kupcu i ograničenje broja zahtjeva.

Zadatak 7 – testovi. Napišite bar tri jedinična testa za PP-7 (opis ulaza i očekivanog izlaza).

Rješenje. (1) 8,20 €, 4,2 km, 7:30 → dostava 200 centi. (2) isto u 8:15 → 300 centi. (3) 8,20 €, 2 km, 7:00 → osnovna dostava 200 − 100 = 100 centi; (4) granica: 30,00 € u 7:00 → 0 centi (ne −100), jer PP-7 kaže „ne ispod 0,00 €”.

Zadatak 8 – realno vrijeme. Pekara ima peć s tri senzora temperature i glasanjem dva od tri. Senzori pokazuju 182 °C, 180 °C i 25 °C. Šta glasač vraća i šta sistem treba uraditi?

Rješenje. Dva senzora se slažu (oko 181 °C), pa glasač vraća njihov prosjek, 181 °C. Treći senzor (25 °C) je vjerovatno pokvaren: sistem nastavlja rad, ali pali upozorenje za održavanje, jer sada nema rezerve: ako otkaže još jedan, glasanje više nije moguće.

I. Izvori priča

Brojevi u pričama provjereni su u ovim izvorima (oktobar 2026). Gdje se izvori razilaze, u tekstu je napisana opreznija vrijednost („oko”, „više od”).

Priča Izvor
Denver, 1995 Wikipedia: Denver International Airport; Associated Press, juni 2005 (United napušta automatski sistem prtljaga)
FBI Virtual Case File, 2005 Computerworld, 2005: FBI scuttles $170M system for managing investigations
Healthcare.gov, 2013 ABC News, 2013: Memo reveals only 6 people signed up for Obamacare on first day; PolitiFact, 2013
Britanska pošta (Horizon) Criminal Cases Review Commission: Post Office Horizon cases; Wikipedia: British Post Office scandal
Estonija, X-Road e-estonia.com: X-Road
Agilni manifest, 2001 agilemanifesto.org
W. Royce, 1970 W. W. Royce: Managing the Development of Large Software Systems, Proceedings of IEEE WESCON, 1970
Hitna pomoć London, 1992 Report of the Inquiry into the London Ambulance Service, februar 1993
Ford, 1913 The Henry Ford: Ford Methods and the Ford Shops
I. Jacobson; UML I. Jacobson, OOPSLA 1987; Object Management Group, UML 1.1 (1997)
Simula, Dahl i Nygaard ACM A. M. Turing Award 2001
A. Turing, 1936 A. M. Turing: On Computable Numbers, with an Application to the Entscheidungsproblem, Proc. London Math. Society, 1936
E. F. Codd, 1970 E. F. Codd: A Relational Model of Data for Large Shared Data Banks, Communications of the ACM, 1970
Netflix, 2008–2016 Netflix Technology Blog, 2016: Completing the Netflix Cloud Migration
Mars Climate Orbiter, 1999 NASA: Mars Climate Orbiter Mishap Investigation Board Phase I Report, 1999
Havaji, 2018 Federal Communications Commission: izvještaji o lažnoj uzbuni od 13. 1. 2018
Equifax, 2017 CSO Online: Equifax data breach FAQ; saopštenja Equifaxa, 2017
Apollo 11, 1969 NASA: Apollo 11 Lunar Surface Journal (alarmi 1201 i 1202)
Patriot, 1991 GAO/IMTEC-92-26: Patriot Missile Defense: Software Problem Led to System Failure at Dhahran, Saudi Arabia, 1992
Mars Pathfinder, 1997 G. Reeves (JPL): What really happened on Mars?, 1997
Knight Capital, 2012 Knight Capital Group, Form 8-K (SEC), avgust 2012; SEC, 2013
CrowdStrike, 2024 Microsoft, 20. 7. 2024; CISA: Widespread IT Outage Due to CrowdStrike Update, 2024
Air Canada, 2024 Civil Resolution Tribunal (Britanska Kolumbija): Moffatt v. Air Canada, 14. 2. 2024

Za Netflixovu priču o 2008. i za podatke o Knight Capitalu (osam servera, ponovo upotrijebljena oznaka) korišteni su i izvještaji s kraja tih godina; ako se kasnije pojave precizniji podaci, okviri se usklađuju s njima.