# Agilni razvoj softvera

Agilni razvoj softvera
*konceptualni okvir za realizaciju softverskih projekata.*
Obrazovanje moderne definicije agilnog razvoja softvera potiče iz sredine 1990-tih godina i to kao deo sve šire negativne reakcije na *robusne* ("heavyweith") metode, pre svega zbog čvrsto regulisanih, jako rasprostranjenih i sitničavo-korišćenih “waterfall” modela razvoja. Procesi koji su nastajali iz ovakvog korišćenja tog modela posmatrani su kao spori, birokratski, zahtevni i kontradiktorni onome kako se programiranje zaista odvija u praksi.

U početku, agilne metode zvane su *lagane* (lightweight). 2001. godine istaknuti svetski softverski inženjeri su se sastali u mestu Snowbird, Utah, SAD, gde su usvojili naziv “agilne metode.” Neki od njih su kasnije oformili neprofitnu organizaciju “The Agile Aliance” čiji je cilj promovisanje agilnog razvoja. Stvaraoci agilne metodologije kreiraju manifest agilnih metodologija Arhivirano 2021-03-27 na Wayback Machine-u koji propisuje vrednosti i principe koje moraju prihvatiti sve ovakve metode da bi bile agilne.

Nastanak ranih agilnih metoda vezuje se za period pre 2000.godine:

* 1986. – Scrum u oblasti opšteg menadžmenta
* 1995. – Adaptivni razvoj softvera, Razvoj vođen karakteristikama i Metod dinamičnog razvoja sistema
* 1996. – Crystal clear i ekstremno programiranje

Tek sa ekstremnim programiranjem nastaje svest o novoj vrsti metodologija. Najpoznatije metode agilnog softverskog razvoja danas su:

* + Ekstremno programiranje (XP) i Industrijsko ekstremno programiranje (IXP)
	+ Scrum
	+ Agilno modeliranje
	+ Adaptivni razvoj softvera (ASD)
	+ Crystal clear i ostale crystal metode
	+ Metod dinamičnog razvoja sistema (DSDM)
	+ Razvoj vođen karakteristikama (FDD)
	+ “Suvi” razvoj (lean development)
	+ Agile Unified Process (AUP)

U ovu vrstu pristupa takođe spadaju i

* Agilna dokumentacija
* ICONIX
* Microsoft Solutions Framework (MSF)
* Agile Data Method
* Refaktorisanje baza podataka

Takođe, postoje i primeri primene agilnih principa na druge oblasti, a jedan od primera je korišćenje “suve” proizvodnje (lean manufacturing).

Mnogi tvrde da agilne i iterativne metode vode povratku na prevaziđenu code-fix praksu koja je vodila krizi softverskog inženjerstva, međutim to nije slučaj. Istina je negde na pola puta do ove premise.

Agilne metode imaju značajne razlike u odnosu na ranije planskocentrične inženjerske metode. Najuočljivija razlika je insistiranje na manje obimnoj dokumentaciji za dati problem. Umesto dokumentaciono-orjentisane, agilne metode su pre orjentisane ka izvornom kodu kao ključnom delu dokumentacije.

Ovo je ipak samo površno gledište. To je samo simptom mnogo dubljih razlika a one su po Martinu Fowleru sledeće:

1. Agilne metode su pre adaptivne nego predvidive.
2. Agilne metode su orjentisane ka ljudima radije nego ka procesima.

Adaptivno programiranje stoji nasuprot predvidivom, negde između njih se nalazi iterativno programiranje. Ipak adaptivno nije i potpuno nepredvidivo, nego je, recimo, razumna mera troškova za dovoljnu predvidivost. Na uštrb velikoj predvidivosti ovde je jako povećan nivo fleksibilnosti, tj. prilagodljivosti promenama u okruženju.

Kada je potrebno menjati projekat i adaptivni tim se takođe menja sa njim. Adaptivni tim ima problem da tačno opiše šta će se u budućnosti dešavati. Što je datum o kome se govori dalji, to će tim koji praktikuje neki adaptivni metod biti nejasniji o detaljima koji bi trebali objasniti šta će se tada dešavati u projektu. Adaptivni tim će tačno opisati šta će se raditi sledeće nedelje, ali o sledećem mesecu će imati samo predstavu koje bi osobine trebalo tada dodavati u program. Izveštaji adaptivnog tima o sledećeih šest meseci mogu sadržati samo informacije o očekivanim rezultatima u zavisnosti od uslova i zahteva, kao i zvanične izjave vezane za plan puštanja sledeće verzije.

Nasuprot ovome predvidive metode se koncentrišu na detaljno planiranje budućnosti. Ovakav tim tačno zna koje osobine i zadaci su planirani u kom trenutku sveg vremena trajanja procesa realizacije softverskog projekta. Međutim, za njega je teško da menjaju pravac delovanja. Plan je, uglavnom, optimizovan za glavni cilj te promena pravca može prouzrokovati kompletno odbacivanje dosadašnjeg rada i ponovni početak na novi način. Prediktivni timovi često postavljaju posebnu komisiju za kontrolu promena kako bi se razmatrale samo one najbitnije.

Inženjerske (prediktivne) metode imaju zadatak da definišu procese koji će raditi bez obzira na to ko radi sa njima, dok agilne metode pretpostavljaju da ni jedan proces ne može biti važniji od veštine tima koji ga upotrebljava za razvoj. Iz toga proizilazi da je zadatak procesa da podrži razvojni tim u njegovom radu.

Primena agilnog razvoja nije do kraja istražena do danas. Očekuje se potvrda vremena, dotle za neke situacije ostaju otvorena pitanja upotrebljivosti. Te situacije su sledeće:

- Veliki razvojni timovi od preko 20 učesnika

- Virtualni i distriburirani razvojni poduhvati fizički razdvojenih timova

- Rizični poduhvati od kojih zavisi širi razvoj ili životi

- U uslovima funkcionalne organizacije – sa linijskom komunikacijom i/ili komandno-kontrolnom korporativnom kulturom