Ekstremno programiranje

Ekstremno programiranje (XP), agilni jezik uzora za razvoj softvera u timu, koji čini sinergija uspostavljenih vrednosti tima i principa koji podržavaju ove vrednosti kroz praktične mehanizme funkcionisanja timskog rada i aktivnosti kojima se tim bavi. Cilj ove sinergije je uspostavljanje visokog nivoa kvaliteta i odziva na promene.

Nastanak 
Iako ekstremno programiranje nije bilo prva metoda agilnog razvoja softvera, ono popularizuje i omasovljava upotrebu agilnih pristupa. Ekstremno programiranje je kreirao Kent Beck 1996. godine kao način prevazilaženja problema i spašavanja projekta C3 (Chrysler Comprehensive Compensation). Iako je taj projekat, posle skromnog i delimičnog uspeha, na kraju ipak otkazan, Ron Jeffries, Ward Cunningham i Kent Beck su ovaj pristup preradili u javnoj diskusiji na Cunninghamovom Portland Pattern Repository wiki sajtu koji je ujedno i prvi wiki sajt. Godine 1999. izlazi Beckova knjiga “Extreme Programming Explained”. Elementi ekstremnog programiranja se u početku zasnivaju na organizacionom patern jeziku Scrum i Cunnighamovim patern jezicima.

Do danas, sve veći broj softverskih kompanija prelazi na ekstremno programiranje. Vid njihovog organizovanja može biti drugačiji u svakom konkretnom slučaju i za svaki pojedinačni zahtev, jer ekstremno programiranje ne predstavlja krutu metodologiju, ili metodu, već je to ipak jezik uzora koji dozvoljava taktičke izmene u proceduri i sekvenci izvođenja pojedinih aktivnosti. Zajedničko za sve je korišćenje obaveznih praktičnih mehanizama. Čak i sprovođenje tih praksi podleže adaptacijama, zavisno od potrebe, što i jeste osnovna odlika uzora kao novog načina naučnog sagledavanja pojava koje se proučavaju.

Vrednosti 
Vrednosti trebaju biti osnovni motiv i pokretači svakog posla koji tim preduzima. Bez stalnog napora da se dostignu vrednosti, XP tim se suočava sa većom verovatnoćom propasti projekta. Osnovne vrednosti svakog tima koji preduzima XP projekat su sledeće:
 Komunikacija
 Jednostavnost
 Povratna sprega
 Hrabrost
 Poštovanje

Komunikacija 
Glavni problemi u timu često potiču od nedostatka komunikacije. Na taj način se sprečava protok informacija i potstiče softverska entropija, koji je glavni neprijatelj uspehu projekta. Razvoj komunikacije među članovima tima, komunikacije sa rukovodstvom, a što je i najbitnije, razvoj komunikacije sa klijentima treba da bude najprioritetniji zadatak svakoga u timu

Jednostavnost 
Posvećenost jednostavnosti je definitivno jedna kontraverzna vrednost od velikog značaja za XP tim. Bez jednostavnosti nema evolutivnog pristupa dizajnu, niti brzog odziva na promene, što se nalazi u jezgru XP.

Povratna sprega 
Ili fidbek je važna, jer omogućuje povratnu informaciju, kao indikator za evaluaciju. Povratna sprega sa klijentima, drugim programerima, konkretnim kodom i dosadašnjim sistemom čine vrednost koju vredi negovati.

Hrabrost 
Bez hrabrosti nema uspešnog rada. To je hrabrost za prihvatanje promena, hrabrost za promovisanje ideja, kao i hrabrost za odbacivanjem delova koda i ponovnim početkom, ako se pokaže potrebnim.

Poštovanje 
Iz svih ovih vrednosti proizilazi poštovanje. Ono se odnosi na poštovanje kolega u timu. Ko vodi računa o prethodnim vrednostima, sigurno dobija poštovanje ostalih. U XP timu niko ne sme biti zapostavljen, ili odbačen, pre svega zato što to vodi lošoj atmosferi u timu i izaziva opadanje zainteresovanosti za realizacijom projekta. Na taj način se projekat ugrožava i u najgorem slučaju, napušta.

Principi 
 Brza povratna sprega
 Pretpostavljena jednostavnost
 Postepene promene
 Prihvatanje promena
 Kvalitetan rad

Aktivnosti 
Da bi se dostigle vrednosti ekstremnog programiranja kroz principe, moraju se sprovoditi aktivnosti pomoću kojih bi se te vrednosti implementirale u ponašanje i rad tima. U XP se sprovodi četiri vrste takvih aktivnosti:
 Kodiranje
 Slušnje
 Testiranje
 Dizajn (Projektovanje)

Kodiranje 
Izvorni kod programa je ujedno komunikaciono sretstvo i mera uspeha pomoću koje se vrši evaluacija dostignutih ciljeva. Samo je kod koji radi relevantan pokazatelj da je XP tim na dobrom putu ka željenoj realizaciji projekta. Jedino kroz kod se na pravi način mogu plasirati i pokazati ideje i objasniti zamisli. Izvorni kod je alat razvojnog dizajna, komunikacije, implementacije i testiranja.

Slušanje 
Programeri su, po pravilu, neznalice za probleme klijenta. Oni treba tako sebe da shvataju i da učestvuju u razgovoru aktivnim slušanjem. Aktivno slušanje podrazumeva slušanje i usmeravanje klijenta ka što jasnijem predstavljanju zahteva. Klijenti nisu dobri u razlikovanju vrednog i bitnog od manje vrednog, ili važnog. Neophodan je sistem rangiranja i ponderisanja priča korisnika kako bi i on sam, vremenom, shvatio način na koji to funkcioniše.

Testiranje 
Srce XP je razvoj vođen testovima (TDD - Test driven development) koji podrazumeva stalno i prevashodno testiranje napsanog koda. XP programer ne zna koliko treba da programira do završetka ako nema test. Test se piše pre koda, a nakon toga se piše izvorni kod koji treba da zadovolji taj test. Kada kod zadovolji test, tek se onda inde dalje. Refaktorisanjem se ovaj kod dalje prečišćava i pojednostavljuje, ali osnovno je da test koji je jednom prošao mora stalno da prolazi, pri svim sledećim izmenama.
Osim ovakvog modularnog (unit) testiranja postoje i funkcionalni testovi kroz test primere (test case) koje izvodi sam klijent. Testovi korisnosti i korisničkog interfejsa se takođe izvode kod klijenta.

Dizajn (Projektovanje) 
Za razliku od dosadašnjeg planskocentričnog pristupa gde se prvo planiralo, projektovalo, pa tek onda implementiralo, XP gaji evolutivni pristup dizajnu. Sva poboljšanja se razbijaju na što manje delove i onda dodaju na jezgro koje tako postaje sve šire i kompleksnije. To se radi u malim iteracijama. Posle svake iteracije se projekat objavljuje i predaje klijentu na dalje testiranje.

Obavezna praksa 
Postoji dvanaest praktičnih mehanizama kojih se treba držati do ekstrema pri razvoju softvera pomoću XP. To su:
 Programiranje u paru
 Paniranje igre
 Razvoj vođen testovima (TDD)
 Celokupnost tima
 Stalna integracija
 Poboljšanje dizajna (refaktorisanje)
 Male verzije
 Standardi kodiranja	
 Kolektivno vlasništvo koda
 Jednostavan dizajn
 Metafora u sistemu
 Održivi korak

Svi ovi praktični mehanizmi moraju biti motivisani i vođeni vrednostima, bez toga projekat može da propadne.

Povezano 
 Agilni razvoj softvera
 Agilno modelovanje
 Industrijsko ekstremno programiranje
 Jezik uzora
 Scrum
 Uzori

Vanjske veze 

 Sajt Martina Fowlera sa puno članaka o XP
 www.extremeprogramming.org
Štampana literatura
 Kent Beck: Extreme Programming Explained: Embrace Change, Addison-Wesley, 
 Kent Beck and Martin Fowler: Planning Extreme Programming, Addison-Wesley, 
 Martin Fowler: Refactoring: Improving the Design of Existing Code, Addison-Wesley, 

Agilni razvoj softvera
Programiranje