Dio 1 – Projekat i proizvod, trendovi, etika
Dio 2 – Inženjerski pristup, alati, automatizacija
Dopunska praksa – Repozitorij i vizija proizvoda
Materijale priredio Erkan Islamović
erkan.islamovic@eubd.edu.ba · erkan.islamovic@gmail.com
Deset predavanja: dva časa teorije i jedan čas dopunske prakse. Danas: poglavlje 1 (označeno). Isti primjer kroz knjigu: DeliveryApp 2.0.
| Pred. | Dio 1 | Dio 2 | Praksa |
|---|---|---|---|
| 1 | Projekat i proizvod, trendovi, etika | Inženjerski pristup, alati, automatizacija | Repozitorij i vizija proizvoda |
| 2 | Modeli, uloge, planiranje | Rizici, tim, kvalitet, poboljšanje procesa | Plan izdanja, registar rizika |
| 3 | Konceptualni model, UML, SOLID | Prototip, UX, specifikacija dizajna | Wireframe i SDD |
| 4 | IDE, organizacija koda, OOP, okviri | Podaci, MVC/MVVM, čisti kod, refaktoring | Refaktoring funkcije |
| 5 | Git, pull request, CI | Testovi, CD, kontejneri | GitHub Actions |
Deset predavanja: dva časa teorije i jedan čas dopunske prakse. Danas je poglavlje 1. Isti primjer kroz knjigu: DeliveryApp 2.0.
| Pred. | Dio 1 | Dio 2 | Praksa |
|---|---|---|---|
| 6 | Klasifikacija, mjerljivost | Taktike i redizajn | Mjerenje i keš |
| 7 | Odluke, pogledi, stilovi | Troslojna i čista arhitektura, predlošci | ADR i C4 |
| 8 | CBSE, odlike, interfejsi | Principi, smjernice, provođenje | Paket sa verzijom |
| 9 | SaaS, SOA, IoT, proizvodne linije | Aspekti, reaktivno programiranje | Dekorator i tok događaja |
| 10 | Vrijednost, troškovi, razvoj ili kupnja, TCO | Metrike, procjena, NPV, povrat | NPV u Pythonu |
U oktobru 1968. godine, od 7. do 11. oktobra, u gradiću Garmisch u bavarskim Alpama okupilo se pedesetak najboljih stručnjaka za računare iz Evrope i Amerike. Skup je organizovao naučni komitet NATO-a, a naslov mu je bio neobičan: „Softversko inženjerstvo” (Software Engineering). Organizatori su priznali da su naslov izabrali namjerno provokativno. Tada niko nije pravio softver kao što se prave mostovi: s proračunom, standardima i provjerom. Programi su kasnili godinama, koštali višestruko više od plana i puni grešaka stizali do korisnika. Učesnici su za to stanje skovali izraz koji se i danas koristi: softverska kriza.
Izvještaj sa skupa, koji su uredili Peter Naur i Brian Randell, počinje mišlju da softver mora postati inženjerska disciplina, sa svojim teorijama i praksom, kao i druge grane inženjerstva. Ovaj predmet je, na neki način, pedeset godina kasnije napisan odgovor na pitanja iz Garmischa.
Ovo je prvo poglavlje, pa se ne nastavlja ni na šta, osim na ono što već znate: kako se piše program. Ovdje učimo zašto napisati program i napraviti proizvod nisu ista stvar. Prvi dio objašnjava razliku između projekta i proizvoda, šta tržište danas traži od softvera i šta znači biti profesionalac u ovom poslu. Upoznajemo i DeliveryApp 2.0, proizvod koji ćemo razvijati kroz cijelu knjigu. Drugi dio govori o inženjerskom pristupu: zašto je razvoj softvera inženjerstvo, s kojim alatima se radi i koliko je posla danas automatizovano, uključujući i AI asistente.
Nakon poglavlja možete:
objasniti razliku između projekta i proizvoda; nabrojati pet trendova koji danas oblikuju razvoj softvera; navesti osam principa etičkog kodeksa softverskih inženjera; objasniti šta inženjerski pristup dodaje „samom programiranju”; nabrojati alate razvojne okoline i reći čemu koji služi; opisati stepenice automatizacije razvoja, od prevodioca do AI asistenta, i kako se rezultat AI asistenta provjerava; opisati DeliveryApp 2.0 i njegove zainteresovane strane.
| Čas | Sadržaj | Na času |
|---|---|---|
| Teorija 1 | 1.1–1.4 Projekat i proizvod, trendovi, etika, DeliveryApp 2.0 | Šta je proizvod, a šta projekat? Zainteresovane strane DeliveryApp |
| Teorija 2 | 1.5–1.8 Inženjerski pristup, alati, automatizacija, kako se uči | Most i aplikacija; stepenice automatizacije |
| Dopunska praksa | Repozitorij deliveryapp-2, README i vizija proizvoda | Prvi commit proizvoda |
Zamislite da vas komšija zamoli da mu napravite program koji sabira račune njegove radnje. Napišete ga za jedan vikend, pokažete mu kako radi, on je zadovoljan i to je kraj priče. To je bio projekat: imao je početak, kraj, jednog naručioca i jasan cilj.
Sada zamislite da se za vaš program pročuje i da ga za godinu dana koristi trista radnji u pet gradova. Svaka radnja ima svoje želje. Jedna hoće izvještaj za porez, druga radi na starom računaru, treća ima dvadeset kasa. Program se mora mijenjati svake sedmice, a da pri tome ni jedna radnja ne ostane bez rada ni sat vremena. Vi ste ga napisali sami, a sada vam treba pet ljudi. To više nije projekat, nego proizvod.
| Projekat | Proizvod | |
|---|---|---|
| Trajanje | ima kraj | traje dok ima korisnika (godinama) |
| Naručilac | jedan, poznat | mnogo korisnika, često nepoznatih |
| Cilj | isporučiti dogovoreno | stvarati vrijednost i prihod iz godine u godinu |
| Zahtjevi | dogovoreni na početku | stalno se mijenjaju, tržište ih diktira |
| Uspjeh se mjeri | rok, budžet, obim | korisnici, prihod, zadovoljstvo, brzina promjena |
| Najveći trošak | izrada | održavanje i razvoj novih verzija |
Proizvod nastaje kroz mnogo projekata: verzija 1.0 je projekat, verzija 2.0 je novi projekat, a između njih stalno teče održavanje. Zato se za proizvod koristi slika životnog ciklusa proizvoda: ideja, prva verzija, rast, zrelost i na kraju povlačenje.

„Kad je softver isporučen, posao je gotov.” Za proizvod je isporuka tek početak. Većina ukupnog troška softvera koji se koristi godinama nastaje poslije prve isporuke: ispravke, prilagođavanje novim uređajima i zakonima, nove funkcije. O brojevima govori poglavlje 10.
Za ovaj predmet važno je zapamtiti: kad pravimo proizvod, svaka odluka se mjeri i pitanjem „kako će ovo izgledati za tri godine i sa deset puta više korisnika?”.
Softver iz 1968. radio je na jednom velikom računaru u jednoj zgradi. Danas proizvod radi u oblaku, na mobitelu, u automobilu i na satu, a korisnik ga poredi s najboljim aplikacijama koje svakodnevno koristi. Pet trendova najviše oblikuje zahtjeve koje proizvod mora ispuniti:
Ovim trendovima treba dodati i zahtjeve koji su uvijek tu, ali danas su stroži: proizvod mora biti upotrebljiv bez uputstva, pristupačan osobama s invaliditetom, brz i dostupan stalno. Te zahtjeve zovemo nefunkcionalni i njima je posvećeno poglavlje 6.

Uzmite aplikaciju za dostavu hrane koju poznajete. Za svaki od pet trendova nađite jedan znak u aplikaciji: šta je u njoj „oblak”, šta „mobilnost”, šta „brzina isporuke” (kada ste zadnji put dobili ažuriranje?), šta „sigurnost” i šta „AI”.
Programirati može svako ko je naučio jezik. Profesionalni programer se razlikuje po tome što piše softver koji koriste drugi ljudi, koji će mijenjati drugi programeri, i za koji neko odgovara. Sommerville to kaže jednom rečenicom: profesionalni softver nije samo program, nego i dokumentacija, podaci za podešavanje i sve što treba da bi program radio i mogao se mijenjati.
Profesionalac zato pazi na stvari koje početnika ne zanimaju: da li će kolega razumjeti kod za šest mjeseci, da li postoji test koji će uhvatiti grešku kad neko promijeni pravilo, da li je lozinka korisnika sigurno sačuvana, da li je posao procijenjen pošteno.
Softver danas upravlja avionima, bolnicama, bankama i izborima. Zato struka ima i svoj etički kodeks. Udruženja ACM i IEEE usvojila su 1999. godine Etički kodeks i pravila profesionalne prakse softverskog inženjerstva. Kodeks ima osam principa:
| Princip | Šta znači, prostim riječima |
|---|---|
| Javnost | radi u interesu javnosti; ne isporučuj softver za koji znaš da je opasan |
| Klijent i poslodavac | radi u interesu klijenta, ali ne protiv javnosti |
| Proizvod | proizvod neka bude što kvalitetniji, provjeren i testiran |
| Prosudba | sačuvaj nezavisnost i poštenje profesionalne procjene |
| Upravljanje | rukovodioci neka vode posao etički, s poštenim procjenama |
| Profesija | čuvaj ugled struke |
| Kolege | budi pošten i pomažući prema kolegama |
| Lično | uči cijeli život i ponašaj se etično |
Etika nije apstraktna. Programer u DeliveryApp može dobiti zahtjev da „sakrije” dio cijene dostave dok kupac ne potvrdi narudžbu, jer to „povećava prodaju”. To je tamni obrazac (dark pattern): dizajn koji korisnika navodi na odluku koju ne bi donio da je sve vidio. Profesionalac kaže zašto je to loše i predlaže pošten način (poglavlje 3).
U skandalu „Dieselgate” iz 2015. godine pokazalo se da je softver u milionima Volkswagenovih dizel automobila prepoznavao kad je vozilo na testu emisije i tada smanjivao ispušne gasove, a na cesti ne. Firma je platila desetine milijardi dolara kazni i odšteta, a pojedini inženjeri i rukovodioci krivično su gonjeni. Kod je radio „tačno ono što je traženo”, i baš zato je pitanje odgovornosti postalo pitanje za cijelu struku.
Kroz cijelu knjigu razvijamo jedan izmišljeni proizvod. DeliveryApp je aplikacija za naručivanje hrane iz tri restorana malog grada (R-1 Picerija, R-2 Roštilj, R-3 Salatarnica). Kupac bira jela, plaća karticom, a dostavljač donosi hranu. Godinu dana radi u Gradu A, sada u verziji 1.4.2.
DeliveryApp je uspio, i udruženje ugostitelja ima novu ideju: ponuditi ga drugim gradovima kao uslugu uz mjesečnu pretplatu. Tako DeliveryApp prestaje biti projekat jednog grada i postaje proizvod. Cilj verzije 2.0:
| Grad | Dostava do uključenih km | Uključeno | Po započetom km preko toga | Najdalje |
|---|---|---|---|---|
| Grad A | 2,00 € | 3 km | 0,50 € | 10 km |
| Grad B | 2,00 € | 2 km | 0,60 € | 8 km |
| Grad C | 2,50 € | 3 km | 0,50 € | 12 km |
Ista narudžba N-1001 (artikli 21,50 €, adresa 4,2 km od restorana) u tri grada košta različito. U Gradu A dostava je 2,00 + 2 × 0,50 = 3,00 €, ukupno 24,50 €. U Gradu B preko 2 km ostaje 2,2 km, to su tri započeta kilometra: 2,00 + 3 × 0,60 = 3,80 €, ukupno 25,30 €. U Gradu C dostava je 2,50 + 2 × 0,50 = 3,50 €, ukupno 25,00 €. Već sada vidimo prvi zadatak za dizajn: pravilo dostave više ne smije biti „zakucano” u kodu, nego mora biti podešavanje po gradu (poglavlja 3, 8 i 9).
Proizvod pravi tim od šest ljudi: Lana je vlasnica proizvoda, Amar je scrum master i programer, Sara, Dino i Emir su programeri, a Ena radi dizajn sučelja i testiranje. Kako se takav tim organizuje, govori poglavlje 2.
DeliveryApp se tiče mnogih ljudi. To su zainteresovane strane:
| Zainteresovana strana | Šta želi od DeliveryApp 2.0 |
|---|---|
| Kupac | brzo naručiti, tačna cijena, hrana stiže topla |
| Restoran | više narudžbi, jednostavan ekran, mala provizija |
| Dostavljač | jasna adresa, kratka ruta, isplata na vrijeme |
| Udruženje (vlasnik) | proizvod koji se isplati i širi u nove gradove |
| Grad (opština) | red u dostavi, poštovanje propisa |
| Tim | jasni prioriteti, kod koji se lako mijenja |
| Regulator | zaštita ličnih podataka, fiskalni računi |

Koja dva zahtjeva iz gornje tabele se mogu sukobiti? (Primjer: restoran želi malu proviziju, a vlasnik želi proizvod koji se isplati.) Ko odlučuje kad se zahtjevi sukobe?
Odgovori: tipka R ili klik na zamućeno polje.
Kad inženjer gradi most, ne počinje tako što na rijeku nabaca grede pa gleda da li drži. Prvo izmjeri rijeku i opterećenje, izračuna nosivost, koristi standarde (propisane materijale i postupke), napravi plan, a na kraju most ispita opterećenjem prije nego što ga otvori. Kad se most sruši, istraga utvrdi uzrok i propisi se promijene, da se greška ne ponovi.
Inženjerski pristup razvoju softvera prenosi iste navike:
| Navika inženjera | U razvoju softvera |
|---|---|
| mjeri prije nego što gradi | zahtjevi i nefunkcionalni zahtjevi zapisani mjerljivo (poglavlje 6) |
| crta plan | modeli i dizajn prije koda (poglavlje 3) |
| koristi standarde i provjerene elemente | obrasci dizajna, okviri, komponente (poglavlja 4, 7, 8) |
| ispituje prije otvaranja | automatizirani testovi i kontinuirana integracija (poglavlje 5) |
| procjenjuje trošak | procjena napora i isplativosti (poglavlje 10) |
| uči iz nesreća | analiza incidenata bez traženja krivca, poboljšanje procesa (poglavlje 2) |
Ali softver nije most, i zato se ne može sve prepisati od građevinara. Softver se ne troši (ne hrđa), ali stari, jer se svijet oko njega mijenja. Softver je nevidljiv, pa je teško vidjeti koliko je „sagrađeno”. Softver se lako mijenja, i upravo zato ga svi stalno mijenjaju, često bez plana. Most se gradi jednom, a softver se gradi stalno.
„Inženjerski pristup znači mnogo papira.” Ne znači. Inženjerski pristup znači da se rezultat provjerava i da se zna zašto je nešto urađeno. Jedan dobar automatski test vrijedi više od deset stranica dokumenta koji niko ne čita. Kad vidite riječ „inženjerski”, mislite „mjerljivo i provjerljivo”, a ne „birokratski”.

Stolar ima radionicu: stol, testere, stege, mjernu traku. Programerski tim ima razvojnu okolinu: skup alata koji prate kod od prve linije do korisnika. Za DeliveryApp 2.0 okolina izgleda ovako:
| Posao | Alat (primjeri) | Šta radi za tim |
|---|---|---|
| pisanje i čitanje koda | VS Code, Visual Studio, JetBrains Rider ili PyCharm | editor, dopunjavanje, otklanjanje grešaka |
| pamćenje verzija | Git, GitHub | ko je šta promijenio i kada; povratak na staru verziju |
| zadaci i plan | GitHub Projects, Jira | backlog, sprint, tabla |
| dijagrami | Mermaid, draw.io, Figma | modeli i prototipi |
| provjera | pytest (Python), xUnit (C#), ruff, SonarQube | testovi i statička analiza |
| gradnja i isporuka | GitHub Actions, Docker | automatska provjera i pakovanje svake izmjene |
| rad u produkciji | logovi, nadzor, upozorenja | vidimo šta se dešava kod korisnika |
| komunikacija | Slack, Teams, e-pošta | razgovor i dogovori |
Alati sami ne čine dobar tim, ali loši alati sigurno usporavaju dobar tim. Pravilo je jednostavno: sve što se radi više od dva puta ručno, treba prepustiti alatu. Ručno pokretanje testova prije svakog spajanja koda zaboraviće se; automatsko neće.
Riječ „IDE” znači integrisano razvojno okruženje. Prvi IDE-ovi pojavili su se sedamdesetih i osamdesetih godina (npr. Turbo Pascal iz 1983. imao je editor i prevodilac u jednom programu koji je stajao na jednoj disketi). Današnji VS Code nije pravi IDE dok mu se ne dodaju ekstenzije; zato ga mnogi zovu „editor koji može postati IDE”.

Istorija razvoja softvera može se ispričati kao niz stepenica. Na svakoj stepenici programer manje radi „ručno” i više opisuje šta hoće, a alat odlučuje kako.
ukupno = artikli + dostava, a prevodilac pravi instrukcije.
Svaka stepenica je izazvala strah da „programeri više neće trebati”. Desilo se suprotno: što je pravljenje softvera lakše, to ga se više pravi, i to za teže probleme. Ono što se mijenja je gdje programer troši vrijeme: manje na kucanje, više na razumijevanje problema, dizajn, provjeru i odgovornost.
Kako tim DeliveryApp koristi AI asistenta. Sara treba funkciju koja računa dostavu za Grad B. Asistentu opiše pravilo i dobije kod za nekoliko sekundi. Ali posao tek tada počinje:
„AI je napisao kod, znači da je tačan.” AI asistent predlaže kod koji izgleda uvjerljivo, ali može izmisliti funkciju koja ne postoji ili pogrešno razumjeti pravilo (npr. računati „pune” kilometre umjesto „započetih”). Odgovornost za kod je uvijek na čovjeku koji ga je predao.
Razvoj proizvoda se ne uči napamet. Uči se kao vožnja bicikla: malo teorije, mnogo vježbe, i na kraju navike koje rade same. Zato ova knjiga ima stalni primjer (DeliveryApp 2.0) i dopunsku praksu na kraju svakog poglavlja.
Tri navike vrijedi početi graditi od prvog dana:
Koja od tri navike vam je najteža i zašto? Napišite jednu rečenicu cilja za aplikaciju koju koristite svaki dan.
Odgovori: tipka R ili klik na zamućeno polje.
Cilj je napraviti „kuću” proizvoda DeliveryApp 2.0: repozitorij na GitHubu s README-om i dokumentom vizije. Trajanje: jedan čas.
deliveryapp-2 (javni ili privatni), s fajlovima README.md i .gitignore za Python.git clone https://github.com/<vaše-ime>/deliveryapp-2.git
cd deliveryapp-2
code .U README.md napišite četiri kratka odjeljka:
# DeliveryApp 2.0
Aplikacija za naručivanje hrane za više gradova, kao usluga uz mjesečnu pretplatu.
## Za koga
Kupci, restorani i dostavljači u gradovima A, B i C.
## Kako pokrenuti
(dopunićemo u poglavlju 4)
## Tim
Vlasnica proizvoda: Lana · Scrum master: Amar · Programeri: Sara, Dino, Emir · Dizajn i testiranje: EnaNapravite fajl docs/vizija.md po šablonu za viziju proizvoda (jedna rečenica koja se čita naglas):
# Vizija DeliveryApp 2.0
Za **stanovnike malih gradova** koji žele **brzo naručiti hranu iz lokalnih restorana**,
**DeliveryApp 2.0** je **aplikacija za naručivanje i dostavu**
koja **u tri dodira daje tačnu cijenu i prati dostavljača uživo**.
Za razliku od **naručivanja telefonom**, naš proizvod **nikad ne gubi narudžbu i radi isto u svakom gradu**.
## Zainteresovane strane
(tabela iz odjeljka 1.4)
## Mjere uspjeha
- 3 grada do kraja godine
- 95 % narudžbi bez žalbegit add .
git commit -m "Dodaj README i viziju proizvoda"
git pushDajte AI asistentu viziju i tražite tri pitanja koja bi postavio skeptični investitor. Za svako pitanje u vizija.md dopišite jednu rečenicu odgovora. Provjerite da asistent nije „dodao” funkcije koje niko nije tražio.
Rezultat: link na repozitorij s README.md i docs/vizija.md i bar jednim commitom.
Rješenja su sakrivena – tipka R ili klik na okvir.
Za svaki primjer recite da li je projekat ili proizvod i zašto: a) web stranica za jednu konferenciju 2027. godine; b) aplikacija za mobilno bankarstvo; c) prelazak baze jedne firme sa starog servera u oblak; d) igra koja dobija novi nivo svakog mjeseca.
a) projekat: ima jasan kraj (konferencija prođe); b) proizvod: traje godinama, mnogo korisnika, stalne nove verzije; c) projekat: privremen posao s ciljem i rokom (iako je dio života nekog proizvoda); d) proizvod: stalno se razvija za mnogo igrača.
Narudžba ima artikle od 12,00 € i adresu 6,5 km od restorana. Koliko je ukupno u Gradu A, B i C?
Grad A: preko 3 km je 3,5 km, započeta su 4 km: 2,00 + 4 × 0,50 = 4,00 €; ukupno 16,00 €. Grad B: preko 2 km je 4,5 km, započeto 5 km: 2,00 + 5 × 0,60 = 5,00 €; ukupno 17,00 €. Grad C: preko 3 km je 3,5 km, 4 km: 2,50 + 4 × 0,50 = 4,50 €; ukupno 16,50 €.
Lana traži da se u DeliveryApp dugme „Otkaži pretplatu” za restorane sakrije u peti nivo podešavanja, „da manje restorana otkazuje”. Koji princip etičkog kodeksa je u pitanju i šta predlažete?
U pitanju su principi „javnost” i „proizvod” (pošten odnos prema korisniku), a sakrivanje dugmeta je tamni obrazac. Prijedlog: dugme ostaje vidljivo, a prije otkazivanja kratko pitanje „Zašto odlazite?” s ponudom pomoći. Tako proizvod dobija informaciju, a korisnik nije prevaren.
AI asistent je za Grad B predložio ovaj kod. Nađite grešku pomoću primjera N-1001.
def dostava_grad_b(km):
if km <= 2:
return 200
return 200 + int(km - 2) * 60Za 4,2 km kod daje int(2.2) = 2, pa 200 + 120 = 320 centi (3,20 €), a tačno je 3,80 € jer su započeta tri kilometra. int odsijeca decimale, a pravilo traži zaokruživanje naviše (math.ceil). Kod uz to ne provjerava granicu od 8 km.