Programujte agilně, nic jiného vám nezbývá! A nebo ano?

Softwarové inženýrství se snaží poskytovat odpovědi na všechny otázky spojené s vývojem aplikací. Jedním z nejdůležitějších hmatatelných produktů SWI jsou metodologie vývoje softwaru. Okolní svět se mění a stejně tak se mění nejen SWI jako celek, ale i jeho konkrétní produkty a techniky, včetně metodologií. Nejmodernější softwarově-inženýrský směr spočívá v používání tzv. agilních metodologií. V čem spočívají? Na čem jsou postaveny? Co hlásají?

Zákazníci chtějí co nejvíce kvalitních funkcí za co nejméně peněz

Před nedávnem jsme se na Živě zabývali problémy, které jsou důsledkem současného stavu na trhu se softwarem. Vyslovili jsme hypotézu, že klasické softwarově-inženýrské postupy, kladoucí důraz na podrobné specifikace, rozsáhlé dokumenty, robustní návrh a propracovanou architekturu, přestávají stačit požadavkům na rychlost vývoje. V diskusi pod článkem zazněla řada cenných názorů vycházejících přímo od nejzasvěcenějších – od vývojářů, programátorů, členů týmů. Z příspěvků je patrné, že současná situace rozhodně není ideální – zákazníci požadují především extrémní rychlost; nehodlají se však vzdát vysoké kvality ani šíře zadání (co nejvíce funkcí).

Diskutující se však shodují, že zanedbání analýzy a „odfláknutí“ návrhu není řešením. Den ušetřený dnes se vrátí ztraceným týdnem za rok.

Je vůbec možné skloubit šílenou rychlost vývoje s kvalitním návrhem? Potřebujeme opravdu při vývoji stohy dokumentů? Jak se vyrovnat s rostoucími požadavky zákazníků, máme-li neměnné zdroje a možnosti?

Zná softwarové inženýrství odpověď?

Začátkem 3. tisíciletí se nutně začínají prosazovat metodologie umožňující co nejrychlejší vývoj softwaru, jeho průběžnou údržbu a reakci na měnící se podmínky a zadání. Tyto metodologie jsou nazývány jako agilní.

Historie agilních metodologií sahá teprve do roku 2001, kdy byla založena Aliance pro agilní vývoj softwaru (The AgileAlliance) a definován tzv. Manifest agilního vývoje softwaru (Manifesto for Agile Software Development). V současnosti se k tomuto manifestu svým podpisem připojilo hodně přes 1000 odborníků a vývojářů z celého světa.

Pojem agilní metodologie označuje skupinu metodik, které vycházejí z poznání, že jedinou cestou, jak prověřit správnost navrženého systému, je co nejrychleji jej vyvinout, předložit zákazníkovi a na základě zpětné vazby upravovat.

Skupina agilních metodologií představuje nový směr v ubírání softwarového inženýrství. Konkrétní agilní myšlenky, postupy a principy jsou ve zdánlivém rozporu s klasickými softwarově-inženýrskými poučkami. Jako příklad uveďme známé pravidlo používané dlouhou řadu let, které zdůrazňuje význam návrhu:„Implementujeme pro dnešek, navrhujeme pro zítřek.“ Přístup agilních metodologií je poněkud jiný a vyjádřit jej lze zdánlivě mírnou, v důsledku však nesmírně zásadní úpravou tohoto pravidla: Implementujeme pro dnešek, navrhujeme pro úspěšnou implementaci. Co to znamená? Hlavním (a v podstatě jediným) cílem návrhu je umožnit úspěšnou implementaci nejbližší části systému. Nezajímáme se o to, jak bude systém možná vypadat za rok: návrh provedeme tak, abychom mohli tento a příští týden úspěšně implementovat moduly, které jsou v plánu aktuální iterace. Nic víc, nic míň.

Proměnné při vývoji softwaru

Rozdíl mezi tradičními přístupy a agilními metodologiemi je znázorněn na následujícím obrázku, který srovnává význam základních proměnných při vývoji softwaru:

Klasické vývojové metodologie požadují především naplnit za každou cenu dokument Specifikace požadavků. Požadavky jsou tedy fixní, zatímco v roli proměnných vystupovat čas a zdroje.

Agilní přístupy naopak prohlašují čas a zdroje za fixní (stanovené na začátku projektu zadavatelem) a mění se funkcionalita. Průběžně se přizpůsobuje a mění se ve své šíři i hloubce.

Poznámka: některé konkrétní agilní metodologie zavádějí k těmto třem proměnným ještě další. Poznáme to v příštích článcích, které se budou jednotlivým exemplářům podrobně věnovat.

Základní principy agilních metodologií

Agilní metodologie mají hodně propracovaný „filozofický základ“ a vycházejí z určitých (hezky znějících) základních principů. Jedná se především o následující body:

  • Iterativní a inkrementální vývoj s velmi krátkými iteracemi: plán vývoje (plán projektu) je sestaven tak, že nové funkce se dodávají často (třeba i denně). Zákazník je průběžně konfrontován s novými konfiguracemi; má pocit, že se „něco děje“ a zároveň jasně vidí, jakou rychlostí vývoj postupuje. Není-li spokojen, má možnost např. upravit požadovanou funkcionalitu.
  • Důraz na přímou, osobní komunikaci v rámci týmu: ve všech sociálních skupinách obecně platí, že za nejzávažnějšími problémy stojí špatně fungující komunikace. Agilní metodologie se pokouší předejít těmto problémů tím, že komunikaci prohlašují za jednu z forem vývoje a integrují ji přímo do vývojového procesu. Praktickými důsledky jsou nejrůznější techniky, např. časté schůzky týmu se zákazníkem, párové programování, refaktorizace apod.
  • Permanentní sepětí a komunikace se zadavatelem, resp. uživatelem: zákazník by měl být členem vývojového týmu, měl by komunikovat s vývojovým týmem, spolupodílet se na návrhu a spolurozhodovat o testech.
  • Rigorózní, opakované, průběžné automatizované testování: dochází k častým změnám systému, proto je nutné často (průběžně) ověřovat jeho správnost. Testy by měly být automatizované (ručně prováděné testy jsou obvykle závislé na subjektivních vlastnostech rukou, které je provádí) a měly by být napsány dokonce před implementací testované části.

Agilní metodologie naopak srážejí význam formálních artefaktů a dokumentů. Vycházejí z neochvějného přesvědčení, že základním, jednoznačným, exaktním, nezpochybnitelným a v podstatě jediným spolehlivým nositelem informace je zdrojový kód. Na jeho tvorbu proto kladou největší důraz; s jeho vytvářením začínají skoro bezprostředně po stanovení cílů projektu (lépe řečeno po napsání testů příslušného modulu); při jeho psaní doporučují dodržovat striktní pravidla (štábní kultura) apod.

Co přesně bychom měli dělat v rámci agilních metodologií?

Hlavní teze agilních metodologií (vlastně hlavní myšlenky Aliance pro agilní vývoj softwaru) jsou uvedeny v Manifestu agilního vývoje. Tento zajímavý dokument společně prozkoumáme v příštím článku na toto téma. V manifestu již jsou uvedeny konkrétní postupy, které by měly být realizovány každým softwarovým týmem hodlajícím vyvíjet software „agilně“. Pokud se seznámíte s libovolným konkrétním příkladem agilní metodologie (např. s extrémním programováním, s metodologiemi Crystal, s metodologií SCRUM evelopment Process apod.), zjistíte, že se více či méně řídí drtivou většinou z bodů uvedených v manifestu.

Na závěr

Věřím, že jste dnešní popis agilních metodologií shledali zajímavým. Přestože jsme zatím neuvedli konkrétně a podrobně jednotlivé body Manifestu, již nyní nad praktickým využitím agilních metodologií vznikají některé otazníky. Závěr, zda agilní metodologie „ano či ne“, proto zatím necháme nevysloven.

Diskuze (34) Další článek: Vltava.cz otevírá nové obchody se spotřební elektroniku

Témata článku: , , , , , , , , , , , , , , , , , , ,