PRILAGODLJIVOST NASUPROT KRUTOSTI

Agilni razvoj softvera

Malo je ljudi koji se danas ozbiljno bave razvojem softvera, a da barem jednom nisu naišli na termine poput Agile, Scrum, Lean, eXtreme Programming... Što je Agile koncept čija primjena nezaustavljivo raste, koji su mu korijeni i na koji se način razlikuje od tradicionalnog razvoja softvera?

PIŠE MARKO KEBA


Autor Marko Keba radi četiri godine na pitanjima Agile razvoja, u tvrtki Ericsson Nikola Tesla gdje vodi ured s 30 developera koji razvijaju telekom rješenja mobilnih mreža treće i četvrte generacije.

Tradicionalni vs. agilnom razvoju
Tradicionalni model razvoja Waterfall je sekvencijalni ili kaskadni slijed definiranih faza zahtjeva, analize, modeliranja rješenja, kodiranja, testiranja i isporuke. Na početku projekta izrađuje se iscrpni plan i svaka od navedenih razvojnih faza je fokusirana na optimizaciju svog dijela posla, najčešće i organizacijski odvojena u zasebnu jedinicu.
Ovaj model zahtijeva detaljno dokumentiranje izlaza svih faza kao ulaza u sljedeću fazu. Proizvod se isporučuje jednom, na kraju posljednje faze.
Možemo reći da je Waterfall procesno orijentiran razvoj. Provedba plana implicira stabilnost zahtjeva, visoku predvidljivost analize i modeliranja rješenja i u takvim okolnostima pokazuje dobre rezultate. Prema slici 1 predviđen je za jednostavnu i kompliciranu domenu kompleksnosti.



Tradicionalni Waterfall-razvoj

Agilni pristup s druge strane podržava okolnosti nestabilnih zahtjeva i varijabilnosti u procesu koji slijedi. Agile se naziva još i prilagodljiv (adaptable), iterativan i inkrementalan razvoj softvera. Kod visoke kompleksnosti proces to kontrolira ograničavanjem vremena u kojem se okolnosti neće puno promijeniti, kratkom iteracijom, takozvanim Timeboxingom, kao što se vidi na slici 2. Za razliku od definirane kontrole procesa kojom se služi Waterfall, gdje je predvidljivost ishoda visoka, Agile se služi empirijskom kontrolom procesa prilagođenom za neizvjesne okolnosti što je najveći dio razvoja softvera po svojoj prirodi.


U najkraćim crtama to se postiže definiranjem pretpostavke za rješenje problema i najbržim mogućim eksperimentom koji će je potvrditi ili opovrgnuti. Novodobiveno znanje je ulaz u sljedeću rundu ili iteraciju gdje se spomenuti proces ponavlja do konačnog rješenja. Takav model implicira usku suradnju tima koji će moći u kratkom roku opetovano prolaziti kroz sve faze razvojnog procesa, a time i potpuno drukčiji model organizacije. Fokus s optimizacije pojedine faze procesa skreće se na optimizaciju cjeline, od početka do kraja.

Agile Manifesto
Na koji način Agile odgovara tim izazovima objasnit ćemo nakon kratkog osvrta na povijest i okolnosti njegova nastanka.
Najveći dio organizacije proizvodnje vuče svoje korijene iz “Principa znanstvenog upravljanja” Frederica Taylora iz 1911. godine. Fokus je na optimizaciji proizvodnog procesa preciznom detaljizacijom njegovih elemenata ili karika te kontrolom i obrazovanjem svakog pojedinca koji sudjeluje u pojedinoj kariki. To je kao i poboljšanje samog procesa odgovornost rukovoditelja-menadžera. Sustav je preuzet i u proizvodnju softvera, ali se brzo pokazalo da su neki elementi bitno različiti: npr. predvidljivost ishoda pojedine procesne karike značajno je manja u usporedbi s industrijskom proizvodnjom, osoblje koje obavlja posao ima značajno veće kvalifikacije i kapacitete od proizvodnog radnika na traci, a i očekivanja odnosno zahtjevi naručitelja posla često se mijenjaju tijekom samog razvojnog procesa .



Version One godišnji pregled Agile razvoja

Nezadovoljstvo neučinkovitošću takvog procesa krajem 20. stoljeća natjeralo je pojedince da smisle nove modele, bolje prilagođene okolnostima tog doba i vrsti posla. Tako su gotovo paralelno razvijeni eXtreme Programming (XP, Kent Beck), Scrum (Jeff Sutherland i Ken Schwaber), Crystal (Alistair Cockburn), Lean Software Development (Mary i Tom Poppendieck), Feature Driven Development i drugi. Takav su pristup zvali Lightweight i 2001. godine na zajedničkom je sastanku 17 potpisnika usuglasilo svoje poglede na razvoj softvera u dokumentu pod nazivom Agile Manifesto (Agilni manifest). Tu je koncept dobio ime Agile, definirane su mu zajedničke vrijednosti i principi poput:
ljudi i njihovi međusobni odnosi su iznad procesa i oruđa kojim se obavlja posao
softver koji radi vredniji je od iscrpne dokumentacije o njemu
suradnja s kupcima je iznad pregovora oko ugovora o poslu koji treba napraviti
reagiranje na promjenu je iznad ustrajanja na zacrtanom planu
Od tog trenutka vidljivost novog koncepta značajno raste pa se tako i broj tvrtki, malih i velikih, koje se služe Agileom u razvoju svojih softverskih proizvoda eksponencijalno povećava.

Za razliku od definirane kontrole procesa kojom se služi Waterfall gdje je predvidljivost ishoda visoka, Agile se koristi empirijskom kontrolom prilagođenom neizvjesnim okolnostima, što je prirodno najveći dio razvoja softvera

Od svih agilnih metoda i praksi najzastupljeniji je Scrum pa ćemo na tom primjeru objasniti Agileovu mehaniku.
Mali razvojni tim koji ima sva potrebna znanja za analizu, kodiranje i test proizvoda u kratkim će ga iteracijama (sprint do 4 tjedna) razvijati dio po dio, tako da se svaki sljedeći inkrementalno nadograđuje na onaj iz prethodne iteracije. Količinu posla koju tim može obaviti u jednom sprintu određuju sami članovi, dakle posao se ne gura u tim, nego ga tim vuče (pull nasuprot push). Dnevno na kratkom sastanku (Daily Standup) tim prati ostvarenje zacrtanog plana za taj sprint. Nakon svake iteracije tim usavršuje proces učeći retrospektivno iz iskustva protekle iteracije za što je odvojeno posebno vrijeme.
Progres prema konačnom rješenju uvijek je mjerljiv kodom koji je spreman za potencijalnu isporuku, dakle prošao je test i dovoljno je dokumentiran. Sustav je fleksibilan na promjene zahtjeva kupaca jer u svakoj iteraciji tim radi na zahtjevima najvišeg prioriteta u tom trenutku, a sam kupac stalno i transparentno prati razvoj te daje timu povratnu informaciju na temelju demonstriranog dijela, dakle dogovaraju rješenje u kolaboraciji. To je posebno bitno jer kupac najčešće dugo nije siguran kako će najbolje doći do rješenja svog problema.
Kako bi ovako postavljen sustav funkcionirao treba zadovoljiti neke temeljne pretpostavke. Scrum tim, dakle ljudi koji su najbliži proizvodnji vrijednosti za kupca i odgovorni su za razvoj proizvoda, moraju imati povjerenje, slobodu i neometane uvjete da naprave posao. Tim radi u zajedničkom prostoru i stalno uklanja ili poboljšava elemente koji ga usporavaju u radu. Također ima slobodu odabira načina i alata kojima će doći do rješenja na najbolji način.



Scrum proces

Grafovi na slici 5 jednostavno pokazuju neke implikacije takvog iterativnog pristupa: konstantnu transparentnost, visoku prilagodljivost, kreaciju vrijednosti od samog početka (ne isključivo na kraju) i nižu razinu rizika kad je mjerilo progresa testirani softver i stalna suradnja s kupcem.
Kako bi se kroza sve razvojne faze prolazilo u kratkim iteracijskim intervalima treba primijeniti tehničke prakse koje omogućuju brzu povratnu informaciju o rješenju, kao što je - programiranje u paru, refactoring, Test Driven Development i Continuous Integration i druge koje vuku korijene iz eXtreme Programminga. Za razliku od industrijskog radnika usko zaduženog za jednu kariku u proizvodnom procesu član razvojnog tima nužno širi svoje znanje na cijeli proces.



Usporedba agilnog i tradicionalnog razvoja.

U ovakvom se kontekstu rukovođenje-menadžment okreće od zapovjedno-kontrolnog industrijskog pristupa k uslužnom, gdje menadžeri stvaraju okolnosti za neometan rad i rast timova. Agile nije proces pa za puni benefit takvog pristupa treba promjena razmišljanja i kulture na svim razinama od organizacije do pojedinca u timu. U ovom slučaju cilj je sam put, put kontinuiranog napretka i sagledavanja cjeline što u jednoj rečenici zvuči trivijalno, a iskustvo nam pokazuje nešto sasvim suprotno.
Dobro je spomenuti i razvojni pristup Lean koji vuče korijene iz proizvodnog modela Toyote (TPS), a prevela ga je Mary Poppendieck definiranjem sedam Lean-disciplina za razvoj softvera kao što su uklanjanje otpada, optimiziranje cjeline, poštovanje ljudi i drugo. Iz tog je modela nastao i sve popularniji Kanban.

Što donosi budućnost?
Po tom pitanju, potpisnici manifesta složili su se nakon deset godina da očekuju puno veći fokus na vještinu razvoja softvera (craftsmanship) pa je već dostupan i Craftsmanship manifesto s naglaskom na profesionalnost i još veći odmak od industrijskog prema zanatskom pristupu poslu.

Linkovi:
Agile manifesto: http://agilemanifesto.org/
Software Craftsmanship Manifesto: http://manifesto.softwarecraftsmanship.org/
Scrum: www.scrum.org
eXtreme Programming: http://www.extremeprogramming.org/
Lean Software Development: http://www.poppendieck.com/
VersionOne State of Agile Development Survey 2012:
http://www.versionone.com/state-of-agile-survey-results/