Agilne metode razvoja programske opreme
Agilni razvoj je skupek metod za razvoj programske opreme, po katerih se zahteve in rešitve prilagajajo med sodelovanjem samoorganiziranih in multi-funkcijskih timov. Promovira prilagodljivo planiranje, niz dobrih inženirskih praks, hitro dostavo rešitev, nenehne izboljšave in spodbuja hitro prilagodljivost na spremembe.

Zgodovina 
Najprej so se metode agilnega programiranja imenovali lahke metode (“Lightweight”). Leta 2001 pa so se v mestu Snowbird (Utah, USA) zbrali izkušeni inženirji programske opreme in prvič uporabili ime “agilne metode”. Nekateri od njih so kasneje ustanovili neprofitno organizacijo “The Agile Alliance”, katere cilj je promoviranje agilnega razvoja. Avtorji agilne metodologije so ustvarili manifest agilnih metodologij, ki predpisuje principe in postopke, katere bi morale upoštevati vse agilne metode.

Zgodovinsko pomembne metode 
Prve agilne metode, ki so nastale že pred letom 2000:
 1986 - SCRUM
 1995 - Prilagodljiv razvoj programske opreme, Razvoj narekovan z lastnostmi in Metode dinamičnega razvoja sistemov
 1996 - Crystal Clear in ekstremno programiranje

Najbolj poznane metode 
 Ekstremno programiranje (XP – Extreme Programming) in industrijsko ekstremno programiranje (IXP – Industrial Extreme Programming)
 Scrum
 Agilno modeliranje (Agile Modeling)
 Agile data method
 Crystal Clear in ostale Crystal metode
 Metoda dinamičnega razvoja sistemov (DSDM – Dynamic Systems Development Method)
 Razvoj narekovan z lastnostmi (FDD – Feature Driven Development)
 Agilno združen proces (AUP – Agile Unified Process)
 Kanban

Primerjava z drugimi metodami 
Agilne metode se značajsko razlikujejo od zgodnjih načrtno-usmerjenih inženirskih metod. Najočitnejša razlika je vztrajanje pri manj popolnejši dokumentaciji za dani problem. Namesto dokumentaciji, se agilne metode bolj posvečajo sami kodi kot ključnemu delu dokumentacije.

A vseeno je takšno videnje agilnih metod površno. Je le posledica mnogo globljih razlik, ki so po Martinu Fowler-ju naslednje:
 agilne metode so prilagodljive
 agilne metode so orientirane k ljudem in ne k procesom

Prilagodljivo programiranje je nasprotno od prediktivnega, nekje med njima pa se nahaja iterativno programiranje. Kljub temu tudi prilagodljivo ni popolnoma nepredvidljivo, temveč se trudi ohraniti pametno razmerje med stroški in pretirano predvidljivostjo. Kot protiutež predvidljivosti služi velika mera fleksibilnosti, tj. prilagodljivost spremembam v okolju.

Ko se menja projekt, se hkrati z njim menja tudi prilagodljiva ekipa. Prilagodljiva ekipa razvijalcev ima problem natančno predvideti razvijanje problema v prihodnosti. Prilagodljiva ekipa zna predvideti, kaj se bo s projektom dogajalo v bližnji prihodnosti, večji problem pa ima z napovedovanjem, kaj se bo z njim dogajalo v roku enega meseca oz. imajo le bled obris aktivnosti. Pričakovanja o tem, kaj se bo dogajalo v prihodnje pol leta pa vključujejo zgolj pričakovane rezultate v odvisnosti od zahtev strank ter funkcionalnosti, ki naj jih vključuje naslednja različica programske opreme.

V nasprotju z agilnimi metodami programiranja, se prediktivne metode koncentrirajo na striktno načrtovanje prihodnosti. Takšne ekipe točno vedo, katere vsebine in aktivnosti so planirane v posameznem obdobju realizacije programske opreme, a se obenem težko prilagodijo spremenjenim karakteristikam projekta. Načrt, ki ga postavijo v začetku in kateremu sledijo do konca razvoja namreč ne predvideva radikalnejših sprememb, a če do njih vseeno pride, lahko to vzrokuje zavrnitvi dotedanjega dela in ponovnemu začetku razvoja. Ekipe, ki delajo po prediktivnih metodah razvoja pogosto nadzoruje posebna komisija za kontrolo sprememb, ki jim omogoča ugotavljanje najbolj pomembnih sprememb.

Inženirske (predvidljive) metode definirajo procese, ki naj bi delovali ne glede na razvojni tim, medtem ko agilne metode predpostavljajo, da sam proces sme biti pomembnejši od izkušenj razvojnega moštva. Zato je posledično cilj procesa tisti, ki naj le podpira delo posameznega razvojnega moštva.
Agilen razvoj programske opreme do daneš še ni najbolj preizkušen, a za nekatere specifične razvojne situacije je njihova uporabnost že zdaj močno vprašljiva.

Primeri situacij v katerih agilne metodologije preverjeno niso učinkovite:
 velike razvojne ekipe s preko 20 sodelavci
 virtualne in distribuirano organizirane ekipe (beri: brez direktnega, fizičnega osebnega stika)
 tvegani, ključni problemi od katerih je odvisen širši razvoj ali celo življenja

Agilne metode in razvoj drugih produktov 
Agilne metode razvoja programske opreme so odvisne od nekaterih posebnih lastnosti značilnih le za programsko oprema, kot npr. objektne tehnologije in zmožnost avtomatičnega testiranja. Kakorkoli, podobne tehnike ali metode so bile razvite tudi za razvoj drugih produktov, ki niso povezani z razvojem programske opreme, kot so razvoj polprevodnikov, motornih koles ali kemikalij.

Funkcionalni principi agilnega razvoja izvirajo iz t. i. »lean manufacturing-a« in »six sigma«. Ti koncepti vključujejo pregledovanje napak, odstranitev nepotrebnih reči, ustvarjanje toka, dodajanje strankine vrednosti in dodelitve moči zaposlenim. Koncepti večinoma izvirajo iz avtomobilske industrije, natančneje iz podjetja Toyota.

Viri 
 Fowler, Martin. Is Design Dead?. Appeared in Extreme Programming Explained, G. Succi and M. Marchesi, ed., Addison-Wesley, Boston. 2001.
 Riehle, Dirk. A Comparison of the Value Systems of Adaptive Software Development and Extreme Programming: How Methodologies May Learn From Each Other. Appeared in Extreme Programming Explained, G. Succi and M. Marchesi, ed., Addison-Wesley, Boston. 2001.
 M. Stephens, D. Rosenberg. Extreme Programming Refactored: The Case Against XP. Apress L.P., Berkeley, California. 2003. (ISBN 1-59059-096-1)
 Larman, Craig and Basili, Victor R. Iterative and Incremental Development: A Brief History  IEEE Computer, June 2003 
 Abrahamsson, P., Salo, O., Ronkainen, J., & Warsta, J. (2002). Agile Software Development Methods: Review and Analysis. VTT Publications 478.
 Cohen, D., Lindvall, M., & Costa, P. (2004). An introduction to agile methods. In Advances in Computers (pp. 1-66). New York: Elsevier Science.

Zunanje povezave 
 Združenje Scrum (Scrum Alliance)
 Ekstremno programiranje (Extreme Programming)
 Agilna zveza (Agile Alliance)

Programska oprema
Agilni razvoj je skupek metod za razvoj programske opreme , po katerih se zahteve in rešitve prilagajajo med sodelovanjem samoorganiziranih in multi - funkcijskih timov . Promovira prilagodljivo planiranje , niz dobrih inženirskih praks , hitro dostavo rešitev , nenehne izboljšave in spodbuja hitro prilagodljivost na spremembe . Zgodovina Najprej so se metode agilnega programiranja imenovali lahke metode ( “ Lightweight ” ) . Letapa so se v mestu Snowbird ( Utah , USA ) zbrali izkušeni inženirji programske opreme in prvič uporabili ime “ agilne metode ” . Nekateri od njih so kasneje ustanovili neprofitno organizacijo “ The Agile Alliance ” , katere cilj je promoviranje agilnega razvoja . Avtorji agilne metodologije so ustvarili manifest agilnih metodologij , ki predpisuje principe in postopke , katere bi morale upoštevati vse agilne metode . Zgodovinsko pomembne metode Prve agilne metode , ki so nastale že pred letom - SCRUM - Prilagodljiv razvoj programske opreme , Razvoj narekovan z lastnostmi in Metode dinamičnega razvoja sistemov - Crystal Clear in ekstremno programiranje Najbolj poznane metode Ekstremno programiranje ( XP – Extreme Programming ) in industrijsko ekstremno programiranje ( IXP – Industrial Extreme Programming ) Scrum Agilno modeliranje ( Agile Modeling ) Agile data method Crystal Clear in ostale Crystal metode Metoda dinamičnega razvoja sistemov ( DSDM – Dynamic Systems Development Method ) Razvoj narekovan z lastnostmi ( FDD – Feature Driven Development ) Agilno združen proces ( AUP – Agile Unified Process ) Kanban Primerjava z drugimi metodami Agilne metode se značajsko razlikujejo od zgodnjih načrtno - usmerjenih inženirskih metod . Najočitnejša razlika je vztrajanje pri manj popolnejši dokumentaciji za dani problem . Namesto dokumentaciji , se agilne metode bolj posvečajo sami kodi kot ključnemu delu dokumentacije . A vseeno je takšno videnje agilnih metod površno . Je le posledica mnogo globljih razlik , ki so po Martinu Fowler - ju naslednje : agilne metode so prilagodljive agilne metode so orientirane k ljudem in ne k procesom Prilagodljivo programiranje je nasprotno od prediktivnega , nekje med njima pa se nahaja iterativno programiranje . Kljub temu tudi prilagodljivo ni popolnoma nepredvidljivo , temveč se trudi ohraniti pametno razmerje med stroški in pretirano predvidljivostjo . Kot protiutež predvidljivosti služi velika mera fleksibilnosti , tj. prilagodljivost spremembam v okolju . Ko se menja projekt , se hkrati z njim menja tudi prilagodljiva ekipa . Prilagodljiva ekipa razvijalcev ima problem natančno predvideti razvijanje problema v prihodnosti . Prilagodljiva ekipa zna predvideti , kaj se bo s projektom dogajalo v bližnji prihodnosti , večji problem pa ima z napovedovanjem , kaj se bo z njim dogajalo v roku enega meseca oz . imajo le bled obris aktivnosti . Pričakovanja o tem , kaj se bo dogajalo v prihodnje pol leta pa vključujejo zgolj pričakovane rezultate v odvisnosti od zahtev strank ter funkcionalnosti , ki naj jih vključuje naslednja različica programske opreme . V nasprotju z agilnimi metodami programiranja , se prediktivne metode koncentrirajo na striktno načrtovanje prihodnosti . Takšne ekipe točno vedo , katere vsebine in aktivnosti so planirane v posameznem obdobju realizacije programske opreme , a se obenem težko prilagodijo spremenjenim karakteristikam projekta . Načrt , ki ga postavijo v začetku in kateremu sledijo do konca razvoja namreč ne predvideva radikalnejših sprememb , a če do njih vseeno pride , lahko to vzrokuje zavrnitvi dotedanjega dela in ponovnemu začetku razvoja . Ekipe , ki delajo po prediktivnih metodah razvoja pogosto nadzoruje posebna komisija za kontrolo sprememb , ki jim omogoča ugotavljanje najbolj pomembnih sprememb . Inženirske ( predvidljive ) metode definirajo procese , ki naj bi delovali ne glede na razvojni tim , medtem ko agilne metode predpostavljajo , da sam proces sme biti pomembnejši od izkušenj razvojnega moštva . Zato je posledično cilj procesa tisti , ki naj le podpira delo posameznega razvojnega moštva . Agilen razvoj programske opreme do daneš še ni najbolj preizkušen , a za nekatere specifične razvojne situacije je njihova uporabnost že zdaj močno vprašljiva . Primeri situacij v katerih agilne metodologije preverjeno niso učinkovite : velike razvojne ekipe s prekosodelavci virtualne in distribuirano organizirane ekipe ( beri : brez direktnega , fizičnega osebnega stika ) tvegani , ključni problemi od katerih je odvisen širši razvoj ali celo življenja Agilne metode in razvoj drugih produktov Agilne metode razvoja programske opreme so odvisne od nekaterih posebnih lastnosti značilnih le za programsko oprema , kot npr. objektne tehnologije in zmožnost avtomatičnega testiranja . Kakorkoli , podobne tehnike ali metode so bile razvite tudi za razvoj drugih produktov , ki niso povezani z razvojem programske opreme , kot so razvoj polprevodnikov , motornih koles ali kemikalij . Funkcionalni principi agilnega razvoja izvirajo iz t. i . » lean manufacturing - a « in » six sigma « . Ti koncepti vključujejo pregledovanje napak , odstranitev nepotrebnih reči , ustvarjanje toka , dodajanje strankine vrednosti in dodelitve moči zaposlenim . Koncepti večinoma izvirajo iz avtomobilske industrije , natančneje iz podjetja Toyota . Viri Fowler , Martin . Is Design Dead ? . Appeared in Extreme Programming Explained , G. Succi and M. Marchesi , ed . , Addison - Wesley , Boston . Riehle , Dirk . A Comparison of the Value Systems of Adaptive Software Development and Extreme Programming : How Methodologies May Learn From Each Other. Appeared in Extreme Programming Explained , G. Succi and M. Marchesi , ed . , Addison - Wesley , Boston . M. Stephens , D. Rosenberg. Extreme Programming Refactored : The Case Against XP. Apress L . P . , Berkeley , California . ( ISBN096 - 1) Larman , Craig and Basili , Victor R. Iterative and Incremental Development : A Brief History IEEE Computer , June Abrahamsson , P . , Salo , O . , Ronkainen , J . , & Warsta , J. Agile Software Development Methods : Review and Analysis . VTT Publications Cohen , D . , Lindvall , M . , & Costa , P. An introduction to agile methods . In Advances in Computers ( pp. New York : Elsevier Science . Zunanje povezave Združenje Scrum ( Scrum Alliance ) Ekstremno programiranje ( Extreme Programming ) Agilna zveza ( Agile Alliance ) Programska oprema