Cilj predmeta
Cilj predmeta je upoznavanje studenata sa principima, modelima i tehnikama projektovanja i analize arhitekture softverskih sistema, kao i sa procesom donošenja arhitektonskih odluka u razvoju složenih softverskih rešenja. Predmet omogućava studentima da steknu znanja neophodna za razumevanje strukture, ponašanja i međuzavisnosti komponenti u savremenim softverskim sistemima, sa posebnim akcentom na održivost, skalabilnost i testabilnost.
Ishod predmeta
Po završetku predmeta student je sposoban da analizira zahteve i projektuje arhitekturu složenog softverskog sistema, da primeni odgovarajuće arhitektonske stilove i obrasce, kao i da dokumentuje i obrazloži donete arhitektonske odluke. Student razume uticaj arhitekture na testiranje, održavanje i automatizaciju razvoja softvera i osposobljen je za rad u timu na razvoju i unapređenju softverskih sistema.
Sadržaj predmeta
Teorijska nastava
Pojam i uloga softverske arhitekture. Razlika između dizajna softvera i arhitekture sistema. Arhitektonske odluke i kompromisi. Tehnički dug. Arhitektonski stilovi: slojevita arhitektura, modularni monolit, clean arhitektura i heksagonalna arhitektura. Komponente i moduli softverskog sistema. Upravljanje zavisnostima i razdvajanje odgovornosti. Arhitektonski obrasci i njihova primena u složenim sistemima. Događajno orijentisana arhitektura. Osnove CQRS pristupa. Arhitektura sistema sa bazom podataka. Uticaj arhitekture na performanse i skalabilnost. Arhitektura i testiranje softvera. Testabilnost kao arhitektonski zahtev. Veza arhitekture i CI/CD procesa. Dokumentovanje arhitekture softverskih sistema. UML dijagrami u arhitektonskom kontekstu. C4 model arhitekture. Arhitektonske odluke i njihova dokumentacija.
Praktična nastava
Analiza postojećih softverskih sistema. Projektovanje arhitekture softverskog sistema na osnovu zadatih zahteva. Definisanje komponenti, modula i njihovih međusobnih odnosa. Izrada arhitektonskih dijagrama. Primena arhitektonskih obrazaca u praktičnim primerima. Projektovanje testabilne arhitekture. Povezivanje arhitekture sa automatizovanim testiranjem i CI/CD procesima. Dokumentovanje arhitekture softverskog sistema. Rad na studijama slučaja i projektnim zadacima.