Razvoj programskih proizvoda
Udžbenik i vodič za predavanja – od ideje do proizvoda koji se isplati
Uvod: kako je materijal organizovan

Materijale je priredio Erkan Islamović. Kontakt: erkan.islamovic@eubd.edu.ba, erkan.islamovic@gmail.com.
Predmet je Razvoj programskih proizvoda, na trećoj godini studija (5. semestar). Nastava ima deset predavanja po dva časa (20 časova teorije) i deset časova dopunske prakse. Deset poglavlja knjige je deset predavanja. Svako poglavlje ima dva dijela teorije (po jedan čas) i dio „Dopunska praksa”, u kojem isti primjer uradimo za računarom. Praksa nije obavezna za ispit, ali ko je uradi, gradivo će razumjeti dvostruko bolje.
Zašto ovaj predmet
Napisati program koji radi na vašem računaru je jedna stvar. Napraviti proizvod, program koji hiljade ljudi koristi svaki dan, koji šest ljudi mijenja istovremeno, koji se isporučuje svake sedmice bez straha, koji izdrži navalu u vrijeme ručka i koji na kraju zaradi više nego što je koštao, sasvim je druga stvar. Između te dvije stvari stoji ono što zovemo programsko (softversko) inženjerstvo.
Ime je nastalo 1968. godine, na konferenciji u njemačkom gradiću Garmischu, kada su najbolji programeri svijeta priznali da softver kasni, košta više nego što je obećano i ne radi ono što treba. Od tada je prošlo više od pola vijeka. Naučili smo mnogo, i to mnogo je ovaj predmet: kako se organizuje tim, kako se dizajnira prije nego što se programira, kako se piše kod koji drugi mogu čitati, kako se svaka izmjena automatski provjeri, kako se bira arhitektura, kako se softver slaže od komponenti i kako se izračuna da li se sve to isplati.
Svako poglavlje počinje istinitom pričom: o projektu koji je kasnio jer su dodali ljude, o jedanaest redova koda koji su srušili hiljade projekata, o ažuriranju koje je za jedno jutro zaustavilo aerodrome i bolnice, o igri koja je dobila pedeset puta više igrača nego što je planirala. Priče nisu tu da plaše. Tu su da pokažu da svako pravilo u ovoj knjizi ima razlog, i da je taj razlog neko već skupo platio.
Priča na kojoj vježbamo: DeliveryApp 2.0
Ko je slušao predmete Projektovanje informacionih sistema i Testiranje softvera, već poznaje DeliveryApp (aplikacija za dostavu): izmišljenu aplikaciju za naručivanje hrane u jednom malom gradu. Ko ih nije slušao, ne mora brinuti: sve što treba znati piše ovdje.
U DeliveryApp učestvuju kupci (K-01 do K-05), tri restorana (R-1 Picerija, R-2 Roštilj, R-3 Salatarnica), četiri dostavljača, administrator i dva vanjska sistema: sistem plaćanja i servis mapa. Prva narudžba koju treba zapamtiti je N-1001: dvije pizze Margarita po 9,50 € i jedan sok od 2,50 €, adresa 4,2 km od restorana. Artikli koštaju 21,50 €, dostava 3,00 €, ukupno 24,50 €. Dostava se računa ovako: do 3 km košta 2,00 €, a za svaki započeti kilometar preko toga još 0,50 €. Od 4,2 km preko 3 km je 1,2 km, dakle dva započeta kilometra, pa je dostava 2,00 + 2 × 0,50 = 3,00 €.
U ovoj knjizi DeliveryApp je godinu dana u radu (verzija 1.4.2) i uspješan je. Udruženje ugostitelja zato odlučuje da od njega napravi proizvod koji se nudi i drugim gradovima, uz mjesečnu pretplatu. Tako nastaje DeliveryApp 2.0: tri grada sa različitim cijenama dostave, nove funkcije „Ponovi narudžbu” i „Praćenje dostavljača uživo”, i tim od šest ljudi koji sve to treba napraviti za dvanaest sedmica.
| Član tima | Uloga |
|---|---|
| Lana | vlasnica proizvoda: odlučuje šta je najvažnije |
| Amar | scrum master i programer |
| Sara, Dino, Emir | programeri (Python i C#) |
| Ena | dizajn sučelja i testiranje |
Ljudi, gradovi, restorani i narudžbe u knjizi ne postoje. Stvarni su samo događaji u pričama na početku poglavlja i u okvirima „Iz stvarnog svijeta”.
Cilj predmeta
Cilj predmeta je da studenti upoznaju inženjerski pristup razvoju programskih proizvoda: kako se softver planira, organizuje, dizajnira, programira, provjerava, isporučuje i održava kao proizvod koji ima korisnike, tržište i cijenu, i kako se pri tome koriste savremeni alati, arhitekture, komponente i servisi.
Ishodi predmeta
Nakon predmeta student može:
- objasniti razliku između projekta i proizvoda i nabrojati trendove u razvoju softvera;
- izabrati model procesa, napraviti plan izdanja i voditi registar rizika;
- nacrtati UML dijagrame, primijeniti principe SOLID i napraviti prototip sučelja;
- pisati čitljiv kod u Pythonu ili C#, prepoznati mirise koda i refaktorisati;
- raditi s Gitom u timu i postaviti kontinuiranu integraciju s automatiziranim testovima;
- zapisati nefunkcionalne zahtjeve mjerljivo i izabrati taktike za njih;
- uporediti arhitekturalne stilove i zapisati arhitekturalnu odluku;
- projektovati komponentu s interfejsom i verzijom;
- objasniti SaaS, SOA, IoT, aspektno i reaktivno programiranje i proizvodne linije;
- procijeniti trošak razvoja i isplativost ulaganja (TCO, NPV, period povrata).
Raspored predavanja
| Predavanje | Poglavlje | Dio 1 (čas 1) | Dio 2 (čas 2) | Dopunska praksa (1 čas) |
|---|---|---|---|---|
| 1 | Softver kao proizvod | Projekat i proizvod, trendovi, etika | Inženjerski pristup, alati, automatizacija | Repozitorij i vizija proizvoda |
| 2 | Proces i organizacija | Modeli, uloge, planiranje | Rizici, tim, kvalitet, poboljšanje procesa | Plan izdanja, registar rizika |
| 3 | Dizajn i specifikacija | Konceptualni model, UML, SOLID | Prototip, UX, specifikacija dizajna | Wireframe i SDD |
| 4 | Implementacija i čisti kod | IDE, organizacija koda, OOP, okviri | Podaci, MVC/MVVM, čisti kod, refaktoring | Refaktoring funkcije |
| 5 | Verzije, testovi, isporuka | Git, pull request, CI | Testovi, CD, kontejneri | GitHub Actions |
| 6 | Nefunkcionalni zahtjevi | Klasifikacija, mjerljivost | Taktike i redizajn | Mjerenje i keš |
| 7 | Arhitekturalni stilovi | Odluke, pogledi, stilovi | Troslojna i čista arhitektura, predlošci | ADR i C4 |
| 8 | Komponente | CBSE, odlike, interfejsi | Principi, smjernice, provođenje | Paket sa verzijom |
| 9 | Usluge i trendovi | SaaS, SOA, IoT, proizvodne linije | Aspekti, reaktivno programiranje | Dekorator i tok događaja |
| 10 | Ekonomika softvera | Vrijednost, troškovi, razvoj ili kupnja, TCO | Metrike, procjena, NPV, povrat | NPV u Pythonu |
Detaljan plan sa sekcijama i fiksnim brojevima je u SADRZAJ.md.
Kako koristiti ovaj materijal
Svako poglavlje ima isti raspored:
- Priča za početak – istinit događaj koji pokazuje zašto je tema važna.
- Riječi ovog poglavlja – kratak rječnik prije čitanja.
- Ciljevi i plan poglavlja – šta ćete znati i šta se radi na kojem času.
- Dio 1 i Dio 2 – teorija, uvijek na primjeru DeliveryApp 2.0.
- Dopunska praksa – koraci za računarom; nije obavezna, ali se preporučuje.
- Vježbe za studenta – s rješenjem odmah ispod.
- Sažetak u pet rečenica, pitanja za ponavljanje i odgovori na njih.
Istaknuti okviri:
- Priča za početak. – istinit događaj s godinom i brojevima.
- Na času. – pitanje ili zadatak koji čitaju svi, i student i predavač.
- Ukratko. – teze na kraju svake numerisane sekcije.
- Iz stvarnog svijeta. – još jedan istinit događaj uz temu.
- Broj za pamćenje. – jedan broj koji vrijedi zapamtiti.
- Česta zabluda. – rečenica koja zvuči tačno, a nije, i zašto.
- Za radoznale. – dodatak za one koji hoće više. Nije obavezan za ispit.
- Provjeri se. – tri brza pitanja s odgovorima na kraju svakog dijela.
Na času. Koju aplikaciju koristite svaki dan, a da se nikad nije „pokvarila”? Šta mislite, koliko ljudi radi na njoj i koliko puta sedmično je mijenjaju? Odgovor na drugo pitanje obično iznenadi: velike aplikacije mijenjaju se i po nekoliko puta dnevno, a da korisnik to ne primijeti. Kako je to moguće, saznaćemo do poglavlja 5.
Potrebni alati
Za čitanje knjige ne treba ništa osim pažnje. Za dopunsku praksu:
- Visual Studio Code (besplatan) s ekstenzijama za Python, C# i Mermaid; po želji Visual Studio Community za C#.
- Python 3 (s paketima
pytestiruff) i .NET SDK (za C#; primjeri se pokreću sadotnet run). - Git i nalog na GitHubu (repozitorij, pull request, GitHub Projects, GitHub Actions).
- Mermaid (u VS Codeu ili na mermaid.live) za dijagrame kao tekst; Figma (besplatan plan) ili papir za prototip.
- Docker Desktop (poglavlje 5, po želji).
- AI asistent po izboru – predlaže; mi provjeravamo. Lični podaci, lozinke i tajni ključevi ne idu u razgovor s AI-jem.
Literatura
Osnovna literatura predmeta:
- I. Sommerville: Software Engineering, 10th ed., Pearson, 2016.
- R. S. Pressman, B. R. Maxim: Software Engineering: A Practitioner’s Approach, 9th ed., McGraw-Hill, 2019.
- S. Malkov: Razvoj softvera, Matematički fakultet, Beograd, 2024.
Dodatna literatura (izbor; cijeli spisak je u silabusu):
- E. Islamović: Razvoj programskih proizvoda – udžbenik (ovaj materijal), Evropski univerzitet Brčko distrikt, 2026.
- A. Tenić, H. Žigić: Menadžment informacionih sistema, EU BD, 2013.
- F. P. Brooks: The Mythical Man-Month, Anniversary ed., Addison-Wesley, 1995.
- R. C. Martin: Clean Code, 2008, i Clean Architecture, 2017, Prentice Hall.
- L. Bass, P. Clements, R. Kazman: Software Architecture in Practice, 4th ed., Addison-Wesley, 2021.
- J. Humble, D. Farley: Continuous Delivery, Addison-Wesley, 2010.
- S. McConnell: Software Estimation, Microsoft Press, 2006.
Jedna rečenica predmeta
DeliveryApp 2.0 neće biti uspješan zato što je kod pametan, nego zato što šest ljudi zna šta pravi i zašto, svaka izmjena se provjeri prije nego što stigne do kupca, sistem izdrži ručak u tri grada, i na kraju se 40.000 € uloženih vrati za manje od tri godine.