Archiv pro rubriku: Programování

Články o programování, vývoji, softwarovém designu a dalších tématech.

[Díl 1.] Agilní praktiky

Agilní praktiky vznikly z důvodu efektivního řízení softwarových projektů. Bez jakýchkoliv praktik se projekt může změnit v nekontrolovatelnou noční můru. Na druhou stranu se objevily praktiky, které zaváděly až neúnosně mnoho pravidel a procesů, které měly za následek zpomalení projektů. V roce 2001 se sešla skupina expertů a zkušených profesionálů, zvaných „Agile alliance“, a nastínili praktiky, které by pomohly skupinám vývojářů vyvíjet rychle, efektivně a reagovat na změny. Výsledkem několika měsíců práce je „Manifesto for Agile Software Development“ – manifest pro agilní softwarový vývoj:

  • Jednotlivci a interakce před procesy a nástroji – členové týmu a jejich spolupráce jsou nejdůležitější složkou úspěchu. Když není dobrý tým, nezachrání to ani špičkové procesy a nástroje a naopak špatné procesy mohou udělat dobré týmy neefektivními.
  • Funkční software před detailní dokumentací – funkční software je nejdůležitější. Příliš dlouhá dokumentace je stejně špatná jako žádná dokumentace. Dokument popisující systém by měl být stručný a krátký, pokrývající nejdůležitější aspekty návrhu systému. Dokument by měl být neustále aktuální. Zároveň by zdrojový kód měl být co nejjednodušší a čitelný, sloužící jako nejlepší a aktuální dokument.
  • Spolupráce zákazníka před vyjednáváním zakázky - software nelze objednat tak, že vypíšeme požadované funkce, za určitý čas a určitou cenu. Zákazník by se měl pravidelně účastnit tvorby softwaru a pravidelně předávat zpětnou vazbu. Nejlepší kvality se dosáhne, když zástupce zadavatele pracuje přímo s týmem.
  • Reagovat na změnu před dodržováním plánu – požadavky na funkcionalitu se velmi často mění v průběhu vývoje softwaru, dost často si zákazník uvědomí, že některé funkce nepotřebuje a jiné naopak potřebuje přidat. Pokud tvoříme plány, měly by být flexibilní a pokud možno co nejkratší. Krátkodobé plány mohou být detailní, ale střednědobé a dlouhodobé by měly být více obecné.

Agilní principy:

  1. Nejvyšší prioritou je uspokojení zákazníka skrze brzkou a pravidelně pokračující dodávku hodnotného softwaru. V agilním vývoji se první verze dodá co nejdříve a poté co nejčastěji v pravidelném intervalu. Díky tomu si zákazník může kontrolovat požadovanou funkcionalitu a schválit ji nebo vybrat změny, které jsou potřeba.
  2. Vítat měnící se požadavky, dokonce i v pozdním stádiu vývoje. Změny znamenají vyšší hodnotu systému pro zákazníka a zároveň pomáhají porozumět jeho businessu. Díky tomu je zákazník spokojenější s dodaným softwarem. Agilní tým udržuje strukturu softwaru velmi flexibilní díky návrhovým vzorům a dalším praktikám a může reagovat na změny požadavků s minimálním vlivem na celý systém.
  3. Pravidelná dodávka softwaru, od pár týdnů po pár měsíců, s preferencí kratších intervalů. Dodáváme funkční software, dodáváme ho brzo a často. Našim cílem je funkční software uspokojující zákazníka.
  4. Zákazník a vývojáři musejí spolupracovat na projektu denně. Musejí diskutovat o funkcích a nejasnostech. Jen tak se dosáhne nejvyšší kvality.
  5. Tvořit projekt kolem motivovaných lidí, dopřát jim prostředí a motivaci k práci a věřit, že svoji práci splní. Lidé jsou nejdůležitější složkou úspěchu. Ostatní faktory jako například prostředí, proces a podobně se dají jednoduše změnit.
  6. Nejefektivnější způsob přenosu informací do nebo z vývojářského týmu je skrze osobní konverzaci. Psané dokumenty jsou psané pouze podle potřeby.
  7. Fungující software je hlavní měřítko postupu. Agilní projekty měří postup skrze množství softwaru vyhovující potřebám zákazníka. Pokud je hotovo 50% požadovaných funkcí, pak je hotovo 50% projektu. Množství potřebné infrastruktury nebo dokumentace je irelevantní.
  8. Agilní procesy se vyznačují stabilním tempem vývoje. Vývoj softwaru je jako běh na dlouhou trať, je potřeba udržovat svižné stabilní tempo a neunavit se.
  9. Neustálý důraz na dobrý design a technickou kvalitu. Agilní týmy udržují kód co nejčistší a nejjednodušší jak jen to jde a jsou zavázáni nejvyšší kvalitě. Nenechávají za sebou nepořádek v kódu, jakmile vznikne, tak ho hned „uklidí“.
  10. Jednoduchost – volba jednoduchých přímých řešení. Nezabývají se problémy, které mohou nastat zítra a nepřipravují se na ně. Udržují co nejjednodušší kód pro dnešní funkcionalitu, který je velice flexibilní a jednoduchý změnit.
  11. Nejlepší architektura, požadavky, návrhy pocházejí od týmu. Tým se podílí na celém projektu, nikdo nerozhoduje za tým. Veškerý kód je všech a každý člen týmu může provést kdekoliv úpravu.
  12. V pravidelných intervalech tým provádí sebereflexi a upravuje svoje chování a práci.

Shrnutí

Cílem každého vývojáře a týmu je poskytnutí co nejvyšší hodnoty pro zákazníka. Principy agilního vývoje byly zformovány k tomu, aby týmům usnadnily dosáhnutí těchto cílů.

V příštím díle se podíváme na extrémní programování.

Seriál o agilním vývoji a návrhových vzorech

Rozhodl jsem se, že napíši seriálu o agilním vývoji, jeho principech a praktikách a o návrhových vzorech. A to z důvodů, že kdykoliv jsem hledal, tak jsem nenašel žádný komplexní materiál v češtině o zmíněné tématice a přesto, že se jedná o důležité aspekty programování, tak na školách jsou poměrně dost přehlíženy.

Poměrně hodně budu vycházet z knihy Agile Principles, Patterns, and Practices in C# od Roberta C. Martina. Jedná se o kvalitní knihu v angličtině a všem, kteří to myslí s vývojem softwaru a zároveň nechtějí čekat na můj seriál, bych ji doporučil. Jako nevýhodu bych uvedl, že jde pouze o přepracovanou edici pro jazyk C#, který je použit ve starých verzích a autor nepoužívá například ani genericitu, který tu s námi je od verze .Net frameworku 2.0. Naštěstí to u knihy o návrhových vzorech a agilních praktikách není zase až takový problém. Zároveň rád uvítám jakékoliv tipy na další povedené knihy k tématu.