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** - *[[w:Test driven development|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,