Deo zbornika Uvod u softversko inženjerstvo
Uvod u softversko inženjerstvo
Softversko inženjerstvo je disciplina koja se bavi svim aspektima proizvodnje softvera - modelima, metodama i alatima potrebnim da bi što jeftinije mogli proizvoditi što kvalitetnije softverske proizvode.
Softversko inženjerstvo je složen proces za koji je potrebno naučiti veliki broj principa, alata i tehnika kako bismo bili uspešni u tom poslu. No, stručnost se ne stiče učenjem velikog broja tehnologija, alata i jezika ili praćenjem trendova, nego temeljnim poznavanjem principa softverskog inženjerstva.
Softversko inženjerstvo kao nauka
Softversko inženjerstvo može se smatrati znanstvenom disciplinom no također i tehničkom strukom. U oba slučaja, ono je u bliskoj vezi s još dva područja znanja:
- Računarstvo (computer science). Poznavanje teorijskog računarstva potrebno je softverskom inženjeru na sličan način kao što je poznavanje mehanike potrebno strojarskom inženjeru.
- Sistemsko inženjerstvo (system engineering). Bavi se razvojem složenih sustava koji se sastoje od hardvera, softvera i ljudskih aktivnosti. Softverski inženjer mora svoje softversko rješenje uklopiti u takav složeniji sustav.
Softversko inženjerstvo kao profesija
Softversko inženjerstvo također je i profesija. U mnogim zemljama softverski inženjeri organizirani su u strukovne udruge koje štite njihova prava ali donekle i ograničavaju slobodu njihovog djelovanja. Primjeri takvih udruga su ACM, IEEE-CS i British Computer Society. Udruge donose pravila ponašanja za svoje članove. Postoji i etički kodeks softverskih inženjera kojeg su zajednički usvojili ACM i IEEE-CS.
Posao softverskog inženjera ne predstavljaju samo klase, algoritmi i tehnologije. Veći deo posla softverskog inženjera čine razumevanje zahteva, refaktorisanje, pisanje testova, pronalaženje defekata, kontinualna integracija koda, procesi razvoja projekta i ostalo.
Istorija
Softversko inženjerstvo počelo se razvijati krajem 1960-tih godina. Sam naziv izgleda da je bio skovan na jednoj NATO konferenciji u Njemačkoj 1968. godine. Disciplina je nastala kao odgovor na takozvanu „softversku krizu“. Naime, pojavom računala treće generacije (na primjer IBM serija 360) stvorila se potreba za složenijim softverom (na primjer multi-tasking operacijski sustav). Pokrenuti razvojni projekti višestruko su premašili planirane troškove i rokove. Vidjelo se da se dotadašnje neformalne tehnike individualnog programiranja ne mogu uspješno „skalirati“ na velike programe gdje sudjeluje velik broj programera. Osjećala se potreba za složenijim metodama razvoja softvera koje bi bile u stanju kontrolirati kompleksnost velikog softverskog projekta. Stanje svijesti iz tih vremena plastično je opisano u čuvenoj knjizi.
Od 1960-tih godina do danas softversko inženjerstvo prešlo je dug put. Ispočetka su se predlagale metode razvoja softvera oblikovane po analogiji s metodama iz tradicionalnih tehničkih struka (na primjer mostogradnja) . Kasnije se uvidjelo da je softver po mnogo čemu specifičan te da zahtijeva drukčije pristupe. Razvijali su se novi programski jezici, bolji načini utvrđivanja zahtjeva, grafički jezici za modeliranje, formalne metode za specifikaciju i verifikaciju, pouzdaniji načini vođenja projekata i procjene troškova, alati koji nastoje automatizirati proces razvoja softvera. Zahvaljujući takvom razvoju, softversko inženjerstvo uspjelo se etablirati kao važan dio tehnike i računarstva. Softver se u današnje vrijeme proizvodi daleko predvidljivije i efikasnije nego prije. Ipak, još uvijek postoji širok prostor za poboljšanje.
Karakteristike
Važna osobina softverskog inženjerstva je da u njemu nema „jednoumlja“ ni jednoobraznosti. Za razliku od matematike gdje se proučavaju nepobitne istine, u softverskom inženjerstvu razvijaju se različite ideje i pristupi koji su često u međusobnom nesuglasju. Glavni razlog za takvu raznolikost pristupa je raznolikost samih softverskih produkata – zaista, teško je očekivati da se sve vrste softvera mogu razvijati na isti način. Drugi razlog za raznolikost je činjenica da softversko inženjerstvo još uvijek nije doseglo svoju zrelu fazu – ta disciplina se i ovog trenutka intenzivno razvija, a nove spoznaje stalno revidiraju stare.
Literatura
- Robert Manger, Softversko inženjerstvo (skripta), Zagreb, 2012.
- Dr Jovan Popović, Osnove softverskog inženjerstva, Računarski fakultet, Beograd, 2019.