U subotu, 6. prosinca 2014. godine polaznici Software Startup Akademije imali su priliku čuti kako bi izgledao idealni proces razvoja softverskih proizvoda, ali i na koje probleme se nailazi u praksi. Denis Sušac je polaznicima prenio dio svog velikog iskustva u vođenju tvrtke Mono.
Pričao je o dvije glavne metode razvoja softvera, tradicionalnoj waterfall metodi, koja je slična klasičnom inženjerskom pristupu, i agile metodi, koja nastoji riješiti probleme koji se javljaju u stvarnoj praksi. Metodologije razvoja se stalno razvijaju jer se pokazalo da se na razvoj softvera ne može gledati kao na klasično inženjerstvo. Waterfall metoda počinje detaljnom specifikacijom programskog rješenja, ali u praksi ispada da su stvarni zahtjevi drugačiji nego što se definiralo u početku. Kod ove metode su promjene u kasnijoj fazi komplicirane i skupe.
Pokazalo se da u stvarnim situacijama dolazi do istih problema – nikad se unaprijed ne znaju sve potrebe projekta, one potrebe koje se definiraju na početku kasnije će se promijeniti i uvijek će biti više stvari za napraviti nego što ima vremena i resursa.
Agile metoda od samog početka računa da će se zahtjevi mijenjati. Ta metoda je iterativna, proizvod se razvija u inkrementima koji nadograđuju funcionalnost na osnovu testiranja prototipa i stalnog dogovaranja s klijentima.
Agile razvoj softvera naglašava interakcije među članovima tima te među klijentima i timom. U takvom pristupu razvoju bitnije je imati proizvod koji radi nego urednu dokumentaciju. Bitnije je brzo odgovoriti na promjene nego kruto slijediti unaprijed dogovoreni plan.
Denis Sušac, “Razvoj softverskih proizvoda” (snimka predavanja)
Postoji više načina definiranja zahtjeva softverskog proizvoda:
- user stories – priče korisnika: opis funkcionalnosti na osnovu iskustva korisnika
- prototyping – tek kada korisnik vidi kako nešto radi, znat će odgovara li mu to ili treba nešto mijenjati
- use cases – dijagrami interakcije korisnika sa sustavom
Najbolje je kombinirati sve tri metode. Procjena cijene i trajanja razvoja softvera je najteža stvar kod dogovora s klijentom. Točnost te procjene se postiže iskustvom, ali korisničke priče pomažu u tome. Treba izbjegavati davanje apsolutne procjene, zato se koriste relativni odnosi među jedinicama softvera. Svakoj korisničkoj priči se dodijele bodovi zahtjevnosti razvoja u odnosu na druge priče, a na osnovu trajanja razvoja prvih jedinica se onda procijeni koliko će trajati razvoj cijelog projekta.
Pokazalo se da se primjenom nekih principa razvija kvalitetniji softver uz manje troškove:
- unit testing – dodaju kvalitetu softveru koji razvijate i olakšavaju kasnije promjene
- continuous integration – svi članovi tima koji sve što rade šalju na jedno mjesto gdje se kod bilda, testira, pakira i to sve automatski
- test driven development – najprije se pišu testovi, a onda kôd koji će zadovoljiti te testove – zahtijeva više vremena, ali daje vrijednost softveru
- standardni stil pisanja kôda unutar tima, po mogućnosti po svjetskim standardima
- međusobno pregledavanje kôda i ukazivanje na greške
- testiranje po planu i na više nivoa: unit, funkcional, performance, penetration
Alati koji pomažu u razvoju:
- alati za verzioniranje – Git
- praćenje bugova i problema
- praćenje utrošenog vremena
- alati za skiciranje
- continous integration
Na kraju je Denis govorio o zanatskom pristupu usavršavanja developera kroz kontinuirani rad u kojem se potenciraju individualne vještine. Pokazalo se da su za uspjeh nekog projekta najbitniji entuzijazam, zanimanje i vjera u proizvod.
U praktičnom dijelu SSA polaznici su od Denisa dobili savjete za svoje projekte – kako bi ih bilo najbolje realizirati i koju tehnologiju pritom koristiti. Dio atmosfere s predavanja možete pogledati na YouTubeu, a prezentaciju preuzeti putem SlideSharea.
- Tekst: Vojislav Pavasović
- Foto: YouTube (screenshot)