Testiranje softvera
Udžbenik i vodič za predavanja – kako pronaći grešku prije korisnika
Uvod: kako je materijal organizovan

Materijale je priredio Erkan Islamović. Kontakt: erkan.islamovic@eubd.edu.ba, erkan.islamovic@gmail.com.
Predmet je Testiranje softvera, na studijskom programu Informacione tehnologije (osnovne akademske studije). Predmet je izborni i nosi 7 ECTS bodova. Nastava traje petnaest sedmica: svake sedmice imamo tri časa teorije i tri časa praktične nastave u računarskoj učionici, ukupno 45 + 45 časova. Petnaest poglavlja knjige je petnaest sedmica. Svako poglavlje ima tri dijela teorije (po jedan čas) i dio „Praktična nastava”, u kojem isti primjer testiramo u alatu.
Zašto ovaj predmet
Prva raketa Ariane 5 raspala se 1996. godine, 37 sekundi nakon paljenja motora, jer jedan broj nije stao u 16 bita. Firma je za 45 minuta izgubila oko 440 miliona dolara jer je novi program pušten na osam servera, a stari je ostao na jednom. Jedna pogrešna datoteka u julu 2024. oborila je milione Windows računara na aerodromima, u bankama i bolnicama. Prvo poglavlje počinje s pet takvih istinitih priča, a svako sljedeće poglavlje s jednom.
Nijedna od tih grešaka nije bila genijalna ni neuhvatljiva. Svaku je mogao naći jedan dobro izabran test. Testiranje nije dosadno klikanje po ekranu. To je pažljivo, skoro detektivsko pitanje „šta bi ovdje moglo poći naopako?”, i vještina da se odgovor provjeri brzo, ponovljivo i prije korisnika.
Priča na kojoj vježbamo
Kroz cijelu knjigu testiramo jedan izmišljeni sistem: DeliveryApp (aplikacija za dostavu), aplikaciju za naručivanje hrane u jednom malom gradu. Isti sistem se projektuje u predmetu Projektovanje informacionih sistema, pa ga neki od vas već poznaju.
U DeliveryApp naručuju kupci (K-01 do K-05) iz tri restorana: R-1 Picerija, R-2 Roštilj i R-3 Salatarnica. Hranu nose četiri dostavljača (D-1 do D-4).
Aplikacija mora poštovati šest jednostavnih pravila. Zapamtite ih, jer iz njih izvodimo skoro svaki test u knjizi:
- Najmanja narudžba je 5,00 €.
- Dostava je 2,00 € do 3 km, plus 0,50 € za svaki započeti kilometar preko 3 km.
- Dostava ide najdalje 10 km.
- Za artikle od 30,00 € i više dostava je besplatna.
- Kod STUDENT10 daje 10 % popusta na artikle, najviše 5,00 €.
- Narudžba se smije otkazati samo dok restoran nije počeo pripremu.
Prvu narudžbu treba zapamtiti odmah. Narudžba N-1001: kupac K-01 naručuje iz Picerije R-1 dvije pizze Margarita po 9,50 € i jedan sok od 2,50 €. Artikli koštaju 21,50 €. Adresa je 4,2 km od restorana: 1,2 km preko granice od 3 km, a to su dva započeta kilometra, pa je dostava 2,00 + 2 × 0,50 = 3,00 €. Ukupno 24,50 €. Ako aplikacija pokaže bilo koji drugi broj, našli smo grešku.
Kod DeliveryApp je napisan u Pythonu i nalazi se u folderu primjeri/deliveryapp/. Postoje dvije verzije: ispravna i prva verzija s greškama koje su programeri „slučajno” ostavili. Kroz knjigu ih tražimo, jednu po jednu, tehnikama koje učimo.
Ljudi, 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 svrhu i značaj testiranja softvera i osnovne tehnike testiranja, i da teoriju primijene na praktičnom projektu uz odgovarajuće alate. Studenti upoznaju manuelno i automatizovano testiranje, jedinično, integraciono, sistemsko i prihvatno testiranje, testiranje web aplikacija i upravljanje procesom testiranja u timu.
Ishod predmeta
Nakon predmeta student može:
- objasniti razliku između greške, defekta i otkaza i sedam principa testiranja;
- opisati test proces, nivoe testiranja i vrste testova i reći gdje svaki pripada;
- napisati jasan test slučaj i izvještaj o defektu koji programer može ponoviti;
- izvesti testove iz specifikacije tehnikama crne kutije (klase ekvivalencije, granične vrijednosti, tabela odlučivanja, prelazi stanja);
- izmjeriti i povećati pokrivenost koda tehnikama bijele kutije i toka podataka;
- napisati i pokrenuti jedinične i integracione testove u pytestu, uz fixture, parametre i test dvojnike;
- testirati objektno orijentisan i paralelan kod i prepoznati nestabilan test;
- automatizovati test web aplikacije u Playwrightu;
- napraviti test plan zasnovan na riziku, pratiti metrike i pokretati testove u CI-ju;
- koristiti AI alate u testiranju odgovorno: svaki predloženi test pokrenuti, pročitati i provjeriti.
Raspored sedmica
| Sedmica | Poglavlje | Teorija (3 časa) | Praktična nastava (3 časa) |
|---|---|---|---|
| 1 | 1 – Zašto testiramo | Uvodne priče; greška, defekt, otkaz; sedam principa; DeliveryApp | Tabela očekivanih cijena rukom |
| 2 | 2 – Proces i nivoi | Test proces; nivoi i V-model; vrste; statičko testiranje | Recenzija zahtjeva DeliveryApp |
| 3 | 3 – Manuelno testiranje | Test slučaj; izvještaj o defektu; istraživačko testiranje | Test slučajevi za web stranicu |
| 4 | 4 – Automatizovano testiranje | Šta automatizovati; piramida testova; prvi test | Prvi pytest |
| 5 | 5 – Jedinično testiranje | AAA; fixture, parametri, izuzeci; TDD | Testovi za dostavu i popust |
| 6 | 6 – Bijela kutija | Graf toka; pokrivenost; ciklomatska složenost | coverage.py do 100 % grana |
| 7 | 7 – Tok podataka | Definicija i upotreba; anomalije; statička analiza, mutacije | ruff, mypy, ručna mutacija |
| 8 | 8 – Crna kutija | Ekvivalencija i granice; tabela odlučivanja; stanja | Lov na pet grešaka |
| 9 | 9 – Model i integracija | Model; strategije integracije; API | TestClient za API |
| 10 | 10 – Sistemsko testiranje | Sistemsko; performanse i sigurnost; prihvatno i BDD | Locust, Gherkin |
| 11 | 11 – OO testiranje | Stanje objekta; nasljeđivanje; dvojnici | Narudzba, unittest.mock |
| 12 | 12 – Paralelne aplikacije | Trka podataka; zastoj; nestabilni testovi | Niti, 1000 ponavljanja |
| 13 | 13 – Web aplikacije | Web i DOM; Playwright; Page Object, pristupačnost | Playwright za DeliveryApp |
| 14 | 14 – Upravljanje testiranjem | Test plan i rizik; metrike; CI/CD | GitHub Actions |
| 15 | 15 – Alati, AI, projekat | Pregled alata; AI u testiranju; ISTQB | Odbrana projekta |
Detaljan plan sa sekcijama, fiksnim brojevima i izvorima priča 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. U ovoj knjizi se ništa ne podrazumijeva.
- Ciljevi i plan poglavlja – šta ćete znati i šta se radi na kojem času.
- Dio 1, Dio 2, Dio 3 – teorija, uvijek na primjeru DeliveryApp.
- Praktična nastava – koraci u alatu i rezultat koji predajete.
- Vježbe za studenta – s rješenjem odmah ispod, da sami ocijenite rezultat.
- 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. – tri do pet teza 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. Sjetite se posljednje greške koju ste vidjeli u nekoj aplikaciji: dugme koje ne radi, pogrešna cijena, poruka na engleskom usred bosanskog teksta. Šta ste tačno uradili prije nego što se pojavila? Ako to možete reći korak po korak, već znate pola posla testera.
Potrebni alati
- Visual Studio Code (VS Code) – code.visualstudio.com, uz ekstenziju za Python. Ovdje pišemo i pokrećemo testove.
- Python 3 i pytest (
pip install pytest) – jezik i alat za automatske testove. Uz njih coverage (pokrivenost), ruff (statička analiza) i mypy (provjera tipova). - Playwright za Python (
pip install pytest-playwright, paplaywright install) – upravlja preglednikom i testira web stranicu. - FastAPI, httpx2 i uvicorn – mali server DeliveryApp i testovi njegovog API-ja; pytest-bdd za scenarije u Gherkinu.
- Locust (
pip install locust) – test opterećenja. - HTTPie ili Postman – ručno slanje zahtjeva API-ju.
- Git, GitHub i GitHub Actions – verzije koda i automatsko pokretanje testova.
- Tabela (Excel, Google Sheets ili Markdown u VS Codeu) – test slučajevi i izvještaji o defektima.
- AI asistent po izboru (ChatGPT, Claude, Gemini, Copilot…) – predlaže testove; mi ih pokrećemo i provjeravamo. Lozinke i stvarni podaci korisnika ne idu u razgovor s AI-jem.
Literatura
Osnovna literatura predmeta:
- J. Popović: Priručnik za test inženjere, CET i Računarski fakultet, Beograd, 2023.
- Rakić-Skoković: Priručnik za testiranje softvera, Fakultet tehničkih nauka, Novi Sad, 2013.
- G. J. Myers: The Art of Software Testing, 2. izdanje, John Wiley & Sons, 2004.
- A. P. Mathur: Foundations of Software Testing, Addison-Wesley Professional, 2008.
Dodatna literatura:
- E. Islamović: Testiranje softvera – udžbenik (ovaj materijal), Evropski univerzitet Brčko distrikta, 2026.
- ISTQB: Certified Tester Foundation Level Syllabus, verzija 4.0, 2023 (slobodno na istqb.org).
- P. Ammann, J. Offutt: Introduction to Software Testing, 2nd ed., Cambridge University Press, 2016.
- B. Okken: Python Testing with pytest, 2nd ed., Pragmatic Bookshelf, 2022.
- Zvanična dokumentacija: pytest, coverage.py, Playwright, Locust, GitHub Actions, OWASP.
- Materijali s predavanja i vježbi; preporučeni internet izvori.
Jedna rečenica predmeta
Pravilo kaže da je od 30,00 € dostava besplatna; jedan test s tačno 30,00 € provjeri to pravilo, drugi s 29,99 € provjeri drugu stranu granice, a oba se pokrenu sama svaki put kad neko promijeni kod.