Archiv pro rubriku: Nezařazené

[Díl 2.] Extrémní programování

Extrémní programování (XP) je jedním z mnoha procesů uplatňujících agilní přístup. Další agilní procesy jsou například Scrum, Crystal, Feature-driven development nebo adaptive software development.

Praktiky extrémního programování:

  • Tým pohromadě - celý tým zahrnující vývojáře, managery, zákazníka by měl být pohromadě. Navzájem vědět o problémech a spolupracovat na jejich řešení.
  • User stories - pro potřeby plánování potřebujeme vědět nějaké požadavky na systém. Nespecifikujeme požadavky detailně, potřebujeme znát jen tolik, abychom mohli udělat odhad náročnosti. Detaily specifikujeme až ve fázi implementace konktétních user stories. Zákazník vybere implementaci jednotlivých user stories na základě jejich priority a náročnosti.
  • Krátké cykly - XP vydává obvykle novou verzi každé dva týdny. Jeden takový cyklus se nazývá iterace. Na konci každé iterace je provedena ukázka zákazníkovi a ten na její základě předá týmu zpětnou vazbu.
  • Iterační plán - iterační plán je seznam user stories vybraných zákazníkem na základě „budgetu“ určeného vývojáři. Budget/rozpočet určí vývojáři na základě tempa v předešlých iteracích. Zákazník určí libovolnou kombinaci user stories, ale dohromady jejich odhady pracnosti nesmí překročit budget. Jakmile je iterace započata, tak se nemění user stories v ní obsazené. Verze vydávané na konci každé iterace se značí jako minor release.
  • Plán vydávání - Obvykle se jedná o tříměsíční plán, vydávané verze mohou často sloužit jako produkční. Jinak funguje podobně jako iterační plán, zákazník vybírá user stories, tým určí budget na základě předešlého cyklu. Na rozdíl od iteračního plánu se ovšem může měnit.
  • Acceptance tests – Detaily o user stories jsou zachyceny ve formě acceptance testů, které mají za úkol zajistit, že se systém chová dle požadavků. K jejich psaní se používají skriptovací jazyky, které umožňují jejich automatické spouštění a opakování.
  • Programování ve dvojicích - kód je psán dvojicí programátorů, kteří sdílejí jeden počítač. Jeden píše kód a druhý ho sleduje, hledá chyby a vylepšení. Pravidelně si střídají pozice. Zároveň se často mění jednotlivé dvojice, během jedné iterace by měl každý člen týmu pracovat alespoň jednou se všemi ostatními členy a zároveň téměř na všem, co je v dané iteraci. Díky tomu má celý tým povědomí o celém systému a jeho designu, zároveň se jednotliví členové rychle učí. Pokud je na nějaký úkol potřeba specialista, tak na něm může pracovat s kýmkoliv dalším. Tím se šíří speciální odbornost mezi tým.
  • Test-driven development - první píšeme test, který selže, protože neexistuje kód, který by zajišťoval funkcionalitu. Testy zajišťují požadované chování. Až poté píšeme kód, který zajistí splnění testu. Unit testy nám zajistí, že v případě úpravy nějakého modulu zůstane jeho chování v pořádku. Samozřejmě pokud se změní požadavky, je potřeba nejdříve přizpůsobit unit testy a poté kód.
  • Kolektivní vlastnictví - dvojice má právo vylepšit jakýkoliv modul. Nikdo není zodpovědný za jednotlivý modul, ale naopak všichni zodpovídají za všechno.
  • Stálá integrace - programátoři integrují kód do systému několikrát denně. Platí jednoduché pravidlo, kdo dřív přijde. Ostatní musí kusy kódu sloučit a integrovat. XP používá source control systémy, které neblokují přístup. To znamená, že na stejném kódu může pracovat i více párů zároveň, ale musí být připraveny, že budou muset sloučit kód. Z tohoto důvodu se integrace provádí velice často, aby se předešlo dlouhým „merging sessions“. Při každé integraci jsou spuštěny všechny testy, včetně acceptance testů, které kontrolují, že je vše v pořádku.
  • Stálé tempo - vývoj softwaru mnohdy trvá i více než rok, proto je potřeba si držet tempo a neunavovat se. XP nedovoluje přesčasy, s jedinou výjimkou – poslední týden „release“ cyklu.
  • Otevřené pracoviště - celý tým sdílí jednu místnost. Díky tomu mohou ostatní poradit, pokud má nějaký pár problém, komunikace s ostatními je velmi jednoduchá. U každého počítače jsou dvě židle, na zdech jsou nástěnky, tabule, flip charty, diagramy a podobně.
  • Planning game - zákazník určí, jak důležité jsou jednotlivé funkce/user stories a tým určí jejich „cenu“ (náročnost na implementaci). Na základě toho se plánuje další iterace. Každý člen týmu se poté hlásí k jednotlivým úkolům.
  • Jednoduchý design - XP tým udržuje co nejjednodušší design. Soustředí se pouze na funkcionalitu pro současnou iteraci, nezabývají se tím, co by mohlo přijít v další a nepřipravují si pro to infrastrukturu. Snaží se o co nejlepší design pro současnou funkcionalitu.
  • Refactoring - jedná se o drobné úpravy pro zlepšení a zpřehlednění kódu. Například dlouhé metody jsou rozděleny do více menších, jsou upraveny názvy, aby měly větší vypovídající hodnotu a podobně. Refactoring je prováděn pravidelně, vždy když je napsán nový kus kódu. Po refactoringu jsou spuštěny všechny unit testy pro ověření, že vše funguje tak jak má.
  • Metafory - jedná se o metafory pro vyvíjený systém, pro lepší chápání souvislostí.

Shrnutí

XP je sada jednoduchých a konkrétních praktik, které dohromady tvoří agilní proces. Není to ovšem nic, čeho bychom se museli přesně držet. Můžeme si tyto praktiky přizpůsobit, pokud zjistíme, že nám to vyhovuje více.