Predmet analize i izlaganja gradiva u ovom udžbeniku je razvoj softvera orijentisanog na procese. Gradivo uključuje teorijske osnove, metode koje se koriste u projektovanju softvera, implementaciona okruženja, kao i alate i metode za upravljanje razvojem softvera. Cilj je da se u okviru knjige predstave najznačajniji procesi softverskog inženjerstva i njihova primena, počev od korisničkih zahteva koji se danas postavljaju pred informacione sisteme velikih preduzeća: distribuiranost, linearna skalabilnost i pouzdanost. Zatim, pregled teorijskih koncepata koji to omogućuju: paralelni procesi, servisi, događaji i metode za njihovo upravljanje, kao i metode za upravljanje softverskim procesom, gde je posebna pažnja posvećena DevOps-u.
S obzirom na to da je softversko inženjerstvo u najvećoj meri okrenuto praksi i konkretnoj primeni, deo ove knjige posvećen je implementacionim okruženjima i alatima za upravljanje životnim ciklusom kontejnera kao i njihovom orkestracijom. Udžbenik i praktikum laboratorijskih vežbi, koji je u pripremi, čine celinu nastavnih materijala za savlađivanje izloženog gradiva.
SADRŽAJ
PREDGOVOR
I. UVOD
1. Softversko inženjerstvo
2. Paradigme razvoja softvera
3. Paradigma razvoja proceduralnog softvera
4. Paradigma razvoja objektno-orijentisanog softvera
5. Paradigma razvoja softvera orijentisanog na procese
II. UPRAVLJANJE SOFTVERSKIM PROCESOM
6. Model vodopada
7. Spiralni model
8. Iterativni model
9. Agilni modeli i SkramDevOps
10.1. Planiranje (Plan)
10.2. Kodiranje (Code)
10.3. Konstrukcija softvera (Build)
10.4. Testiranje softvera (Test)
10.5. Izdavanje nove verzije softvera (Release)
10.6. Postavljanje softvera u produkciono okruženje (Deploy)
10.7. Eksploatacija i operativni rad softvera (Operate)
10.8. Nadgledanje i praćenje (Monitor)
11. Evaluacija softverskog procesa
12. Otvorene inovacije i softver otvorenog kôda
III. ANALIZA I PROJEKTOVANJE
13. Prikupljanje zahteva i analiza poslovnog sistema
13.1. Pregled tradicionalnih tehnika za analizu zahteva
13.2. Analiza zahteva pomoću UML-a
13.3. Modelovanje poslovnih procesa i BPMN
13.4. Izvršna specifikacija poslovnih procesa
14. Projektovanje softvera
14.1. Apstrakcija i modelovanje u projektovanju softvera
14.2. Modularnost
14.2.1 Sprega između modula
14.2.2 Kohezija
14.2.3 Razdvajanje nadležnosti
14.2.4 Moduli u softveru orijentisanom na procese
14.3. Aktivnosti i zadaci u projektovanju softvera
15. Metode razvoja softvera orijentisanog na procese
15.1. Razvoj softvera vođen podacima
15.2. Razvoj softvera vođen modelom
15.3. Fabrike softvera
16. Arhitektura softvera
16.1. Paterni arhitekture softvera
16.2. Antipaterni
16.3. Arhitekturni stilovi u projektovanju softvera
16.4. Taksonomija paterna i arhitekturnih stilova
16.5. Arhitekturni paterni opšte namene
16.5.1 Patern klijent-server arhitekture
16.5.2 Paterni višeslojne arhitekture
16.5.3 Patern master-worker
16.5.4 Patern peer-to-peer arhitekture
16.5.5 Patern posrednika – broker arhitektura
16.5.6 Patern virtuelizovanog srednjeg sloja
16.5.7 Patern filtriranja toka podataka
16.5.8 Patern arhitekture u formi mikrokernela
16.6. Paterni projektovanja korisničkog interfejsa
16.6.1 Model View Controller
16.6.2 Model View Presenter
16.6.3 Model View View Model
17. Paterni arhitekture orijentisane na procese
17.1. Domenom vođeno projektovanje softvera
17.1.1 Domen
17.1.2 Rečnik termina u okviru domena
17.1.3 Povezan kontekst
17.1.4 Domenski model
17.1.5 Upotreba domenskog modela
17.2. Koncepti modelovanja softvera orijentisanog na procese
17.2.1 Agregacije u modelima softvera orijentisanog na procese
17.2.2 Događaj
17.2.3 Servis
17.2.4 Proces
17.2.5 Interakcija procesa – aplikacija
17.2.6 Informacioni sistem
17.2.7 B2B mreže
17.3. Informacioni model softvera orijentisanog na procese
17.3.1 Metapodaci i podaci događaja
17.3.2 Metapodaci i podaci procesa
17.4. Paterni skladištenja događaja
17.4.1 Event store
17.4.2 Informaciono jezero
17.5. Paterni obrade događaja
17.5.1 Patern osnovne obrade događaja
17.5.2 Komunikacija i sinhronizacija procesa – Pub/Sub patern
17.5.3 Obrada tokova događaja
17.5.4 Obrada kompleksnih događaja
17.5.5 Lambda i Kappa arhitekture
18. Servisno-orijentisane arhitekture
18.1. REST API
18.1.1 Preporuke i ograničenja za REST API
18.1.2 REST API za veb servise
18.1.3 Model zrelosti za REST API
19. Mikroservisi
19.1. Aplikacioni programski interfejs mikroservisa
19.2. Komunikacija mikroservisa s okruženjem
19.3. Aplikaciona logika mikroservisa
19.4. Primena mikroservisa u razvoju softvera orijentisanog na procese
19.5. Koreografija i orkestracija mikroservisa
19.6. Raspodela opterećenja u mikroservisnim arhitekturama
19.6.1 Reverzni proksi
19.6.2 API proksi
19.7. Upravljanje podacima u mikroservisnim arhitekturama
19.7.1 CAP teorema
19.8. Upravljanje transakcijama u mikroservisnim arhitekturama
19.8.1 Dvofazni protokol izvršavanja transakcija – 2PC
19.8.2 Saga patern
19.9. Upravljanje transakcijama u mikroservisnim arhitekturama
19.9.1 Postavljanje više instanci servisa na jedan server
19.9.2 Postavljanje jedne instance servisa na jedan server
19.9.3 Postavljanje jedne instance servisa po virtuelnoj mašini
19.9.4 Postavljanje jedne instance servisa u jedan kontejner
19.9.5 Postavljanje mikroservisa u serverless okruženje
20. Softverske platforme i ekosistemi
IV. INFRASTRUKTURA
21. Virtuelizacija
21.1. Evolucija i istorija razvoja virtuelizacije
21.2. Tipovi virtuelizacije
21.2.1 Potpuna virtuelizacija
21.2.2 Virtuelizacija podržana kernelom
21.2.3 Virtuelizacija podržana hardverom
21.2.4 Paravirtuelizacija
21.3. Virtuelizacija računarskih mreža
21.4. Virtuelizacija skladištenja podataka
21.4.1 Izbor hipervizora i tipa virtuelizacije
22. Kontejneri
22.1. Koncepti Linux kernela u kontejnerskoj virtuelizaciji
22.1.1 Linux procesi
22.1.2 Kreiranje procesa
22.1.3 Organizacija procesa
22.1.4 Međuprocesna komunikacija
22.1.5 Kontrola i ograničavanje resursa – kontrolne grupe (cgroups)
22.1.6 Izolacija resursa – oblasti imenovanja (namespaces)
22.2. Ekosistem kontejnera
22.3. Životni ciklus kontejnera
22.4. Umrežavanje kontejnera
22.5. Fajl sistemi kontejnera
22.6. Upravljanje volumenima u kontejnerskom okruženju
22.7. Registar kontejnera
22.8. Standardizacija kontejnerskog ekosistema
22.8.1 OCI Image-spec
22.8.2 OCI Runtime-spec
22.9. Container runtime i container engine
22.10. Cloud native pristup razvoju softvera
22.11. Orkestracija kontejnera
22.11.1 Single host orkestracija – Docker Compose
22.11.2 Multi-node orkestracija
23. Kubernetes
23.1. Kubernetes arhitektura
23.1.1 API server
23.1.2 Etcd skladište
23.1.3 Scheduler23.1.4 Controller Manager
23.1.5 Kubelet
23.1.6 Kube-proxy
23.1.7 Container runtime
23.1.8 Interakcija i sinhronizacija komponenti Kubernetes-a
23.2. Pôd
23.3. Kontroleri
23.3.1 ReplicaSet
23.3.2 Deployment Controller
23.3.3 StatefulSet
23.4. Umrežavanje u Kubernetes-u
23.4.1 Kubernetes mrežni servisi aplikacionog nivoa
23.5. Funkcionalnosti Kubernetes klastera
23.5.1 Generisanje i raspoređivanje pôdova
23.5.2 Balansiranje opterećenja
23.5.3 Skaliranje performansi
23.5.4 Obrada neplaniranih prekida i oporavak
23.5.5 Bezbednost
23.5.6 CI/CD
24. Paterni postavljanja softvera u produkciono okruženje
USPEŠNO DODATO U KORPU