Projektovanje informacionih sistema · Dodaci

Dodaci

Rječnik, formule, DeliveryApp. Mermaid, SQL, HTTP, š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

Dodaci: rječnik, formule, Mermaid, SQL, HTTP, šabloni, ispitni zadaci i izvori priča.

Sed.PoglavljeSed.Poglavlje
1P1 Zašto projektujemo9P9 Arhitektura
2P2 Životni ciklus10P10 Integracija i API
3P3 Zahtjevi11P11 Korisnički interfejs
4P4 Poslovni procesi12P12 Sigurnost i privatnost
5P5 UML i slučajevi korištenja13P13 Realno vrijeme i IoT
6P6 Klase i objekti14P14 Kvalitet i isporuka
7P7 Sekvence i stanja15P15 AI i završni projekat
8P8 Baza podataka
Mermaid crta · Python izvršava · SQLite čuva · Git pamti verzije

Zašto ovo poglavlje

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.

Dodaci

A. Rječnik

A. Rječnik

PojamZnačenjePoglavlje
ACIDatomarnost, konzistentnost, izolacija i trajnost transakcije8
ADRkratak zapis jedne arhitektonske odluke: kontekst, odluka, posljedice9
agilni razvojrazvoj u kratkim iteracijama uz stalan razgovor s korisnikom2
akteruloga (čovjek ili sistem) koja koristi sistem ili s njim razgovara5
APIdogovoren način na koji jedan program traži uslugu od drugog10
arhitekturavažne odluke o dijelovima sistema koje se teško mijenjaju9
asocijacijaveza između klasa čiji se objekti poznaju6
autentifikacija / autorizacijaprovjera ko je korisnik / šta smije12
backloglista posla poredana po važnosti2
balanser opterećenjaraspoređuje zahtjeve na više servera9
BPMNstandard za crtanje poslovnih procesa4
C4 modelčetiri nivoa crteža arhitekture: kontekst, kontejneri, komponente, kod9
CI / CDautomatsko testiranje / isporuka pri svakoj izmjeni2, 14
CIApovjerljivost, integritet, dostupnost12
DFDdijagram toka podataka4
dijagram stanjastanja jednog objekta i prelazi između njih7
dostupnostudio vremena u kojem sistem radi3, 9
enkapsulacijaobjekat skriva podatke i mijenja ih samo kroz svoje operacije6
ER dijagramcrtež tabela (entiteta) i veza8
evaluacijamjerenje AI sistema na skupu pitanja s tačnim odgovorima15
funkcionalni / nefunkcionalni zahtjevšta sistem radi / kakav mora biti3
GDPRevropska uredba o zaštiti podataka o ličnosti12
halucinacijauvjerljiv, ali netačan odgovor jezičkog modela15
hešjednosmjerni otisak iz kojeg se lozinka ne može vratiti12
histerezadvije granice regulatora da se uređaj ne pali i gasi stalno13
idempotentnostponovljen zahtjev ima isti efekat kao jedan10
indekspomoćna struktura koja ubrzava pretragu, kao kazalo u knjizi8
inkrementkomad sistema koji radi i dodaje se prethodnim2
IoTuređaji sa senzorima povezani preko interneta13
JSONtekstualni format podataka s objektima i nizovima10
Kanbantabla s kolonama i ograničenjem posla u toku2
klasa / objekatopis (kalup) / konkretna instanca (kolač)6
kompozicijadio ne postoji bez cjeline6
kontejner (Docker)program zapakovan sa svim što mu treba14
korisnička priča„Kao …, želim …, da bih …”3
kriterij prihvatanjaprovjerljiv uslov Dato–Kada–Tada3
LLMveliki jezički model15
mikroservisi / monolitmnogo malih samostalnih programa / jedan program9
modelpojednostavljena slika sistema za jedno pitanje1
MoSCoWmora, trebalo bi, moglo bi, neće ovaj put3
MQTTprotokol objavi–pretplati se za IoT13
normalizacijasvaka činjenica na jednom mjestu (1NF, 2NF, 3NF)8
OpenAPIstandard za opis API-ja kao ugovora10
OWASP Top 10lista deset najčešćih rizika web aplikacija12
personaizmišljen, ali tipičan korisnik iz stvarnih intervjua11
primarni / strani ključjedinstveni identitet reda / veza na red druge tabele8
prototipmodel ekrana koji se može isprobati11
pull requestprijedlog izmjene uz pregled i automatske provjere14
RAGmodel odgovara na osnovu dohvaćenih dokumenata15
realno vrijemerezultat je ispravan samo ako je tačan i na vrijeme13
redundancijadodatni primjerak koji preuzima posao9, 13
RESTstil API-ja: resursi s adresama, radnje kao HTTP metode10
revizijski tragzapis ko je, kada i šta uradio12
RTOSoperativni sistem za realno vrijeme13
Scrumagilni okvir: tri uloge, tri artefakta, pet događaja2
sekvencijalni dijagramporuke između učesnika kroz vrijeme7
SLOmjerljiv cilj nivoa usluge14
slučaj korištenjacilj koji akter postiže uz pomoć sistema5
SQL injekcijaunos korisnika postane dio SQL naredbe12
STRIDEšest vrsta prijetnji12
tehnički dugbrza prečica danas, kamata sutra14
transakcijaizmjene koje se izvrše sve ili nijedna8
UMLobjedinjeni jezik za modelovanje softvera5
V-modelsvaka faza projektovanja ima svoj par provjere2
verifikacija / validacijapravimo li sistem ispravno / pravimo li pravi sistem14
vodopadfaze jedna za drugom, bez vraćanja2
WCAGsmjernice za pristupačnost weba11
zainteresovana stranasvako koga se sistem tiče3
Dodaci

B. Formule

B. Formule

FormulaZnačenjePrimjerPoglavlje
dostava = 200 + 50 · ⌈max(0, d − 3)⌉ centipravilo PP-2 (ispod 30,00 €, do 10 km)d = 4,2 km → 300 centi = 3,00 €1
v̄ = (v₁ + … + vₙ) / nprosječna brzina tima(18 + 22 + 20) / 3 = 20 bodova2
W = L / λLittleov zakon: vrijeme u sistemu6 / 3 = 2 dana2
t_zastoj = (1 − A) · 720 hdozvoljeni zastoj u 30 dana(1 − 0,995) · 720 = 3,6 h3, 14
E = t_rad / t_ukupno · 100 %efikasnost toka procesa27 / 50 = 54 %; 27 / 35 ≈ 77 %4
A_niz = A₁ · A₂dostupnost dijelova u nizu0,995 · 0,995 ≈ 99,0 %9
A_par = 1 − (1 − A)ⁿdostupnost paralelnih dijelova1 − 0,005² = 99,9975 %9
λ = korisnici / vrijeme između zahtjevaopterećenje servera200 / 5 s = 40 zahtjeva/s9
K = (L₁ + 0,05) / (L₂ + 0,05)omjer kontrasta (WCAG)bijelo na #1F5FA8 ≈ 6,4 : 111
P(n) = 1 − (1 − 0,31)ⁿdio problema koje otkrije n korisnikaP(5) ≈ 84 %11
N = kᴸbroj mogućih lozinki (k znakova, dužina L)26⁸ ≈ 2,09 · 10¹¹12
rizik = vjerovatnoća · uticajocjena prijetnje (1–5 · 1–5)4 · 4 = 1612
ΔU = U_opseg / 2ⁿrezolucija A/D pretvarača3,3 V / 1024 ≈ 3,2 mV13
U = Σ Cᵢ / Tᵢ ≤ n(2^{1/n} − 1)test rasporedivosti zadataka0,25 ≤ 0,7813
R = 3r² − 2r³pouzdanost glasanja dva od trir = 0,99 → 0,999713
greška = ε · f · tnagomilana greška sata9,5 · 10⁻⁸ · 10 · 360 000 ≈ 0,34 s13
Dodaci

C. DeliveryApp na jednom mjestu

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.

C. DeliveryApp na jednom mjestu

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

Dodaci

D. Podsjetnik: Mermaid

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")
Dodaci

E. Podsjetnik: SQL

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.

Dodaci

F. Podsjetnik: HTTP

F. Podsjetnik: HTTP

MetodaNamjenaKodZnačenje
GETčitanje200uspjeh
POSTpravljenje201napravljeno
PATCHizmjena dijela204uspjeh bez tijela
PUTzamjena400pokvaren zahtjev
DELETEbrisanje401 / 403niste prijavljeni / nemate pravo
404ne postoji
409sukob sa stanjem
422podaci krše pravilo
429previše zahtjeva
500 / 503greška servera / privremeno nedostupan

F. Podsjetnik: HTTP

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

Dodaci

G. Šabloni dokumenata

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

G. Šabloni dokumenata

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

G. Šabloni dokumenata

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

H. Ispitni zadaci s rješenjima

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?

H. Ispitni zadaci s rješenjima

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?

H. Ispitni zadaci s rješenjima

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.

H. Ispitni zadaci s rješenjima

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.

Dodaci

I. Izvori priča

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”).

I. Izvori priča

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

I. Izvori priča

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.