Knihovnička softwarového inženýra: Agile & Iterative Development

Kniha o které budu dnes psát se celým jménem jmenuje Agile & Iterative development – A Manager’s guide a napsal ji pan Craig Larman. Je to další z knih, kterou by si měl člověk přečíst, pokud se chce softwarovému inženýrství opravdu věnovat. Jak už název napovídá, jde o popis a obhajobu iterativních a agilních metod. Hned v první kapitole nás zaujme následující důležitá tabulka

Předvídatelná výroba Vývoj nového produktu
Je možné nejprve dokončit specifikaci a poté vyrábět Zřídkakdy možno dopředu vytvořit neměnitelnou a detailní specifikaci
Blízko začátku je možné spolehlivě odhadnout plán prací a cenu Blízko začátku to není možné. Jak narůstá množství empirických dat, vzrůstá možnost plánovat a odhadovat
Je možné identifikovat, definovat, plánovat a určovat pořadí všech aktivit Blízko začátku to není možné. Jsou vyžadovány přizpůsobivé kroky, řízené zpětnou vazbou
Přizpůsobení se neočekávaným změnám není běžné a míra změn je velmi nízká Tvůrčí přizpůsobení se neočekávatelným změnám je běžné. Míra změn je vysoká

Sloupeček vlevo je například výroba mobilního telefonu na výrobní lince. Víme velmi přesně jak dlouho to bude trvat a kolik to bude stát.

Sloupec vpravo může například reprezentovat stavbu domu, jehož majitel chce použít nové, prostředí přívětivé materiály a metody. Navíc si není jistý co přesně chce a chystá se měnit a upřesňovat svá rozhodnutí podle toho jak se bude vyvíjet stavba, cena a čas. V které kategorii vidíte software? Autor tvrdí jednoznačně, že

Výroba většiny softwaru není předvídatelná nebo hromadná. Vývoj softwaru je vývojem nového produktu.

Kolem tohoto tvrzení se točí následující kapitoly. Dostane se nám úvodu do iterativního vývoje.

Iterativní vývoj (IID) je přístup k budování softwaru (nebo čehokoliv) v němž je celkový vývoj složen z posloupnosti několika iterací. Každá iterace je samostatný miniprojekt složený z aktivit jako je analýza požadavků, návrh, programování a testování. Cílem každé iterace je iterační vydání (release) – stabilní, zintegrovaný, otestovaný a částečně kompletní systém.

V moderních iterativních metodách je doporučená délka iterace mezi jedním a šesti týdny.

Všimněte si, iterativní vývoj není o tom, že si každý dělá co chce kdy chce (tzv. cochcárna). V iterativním vývoji máme pevně stanovený konec iterace, máme seznam funkcionalit, které se musí v dané iteraci naimplementovat a v případě potřeby máme i analýzu a design pro danou iteraci. A hlavně na konci každé iterace ukážeme výsledek zákazníkovi a až na základě jeho zpětné vazby se rozhodujeme jak postupovat v dalších iteracích.

Co nám tento přístup přinese se dozvídáme v páté a šesté kapitole. Autor porovnává iterativní metody s vodopádem. Na této kapitole je důležité to, že tu máme velké množství odkazů na výzkumné práce, které všechna fakta podporují. Uvedu jich jen pár

Typický softwarový projekt zakouší 25% změnu požadavků

Z prvotně specifikovaných požadavků není 45% používáno nikdy, 19% zřídkakdy

Zajímavé jsou i odkazy na úspěšné použití iterativního vývoje, uvedu jeden příklad za všechny: Primary Avionics Software pro americké raketoplány byl vyvinut mezi roky 1977 a 1980. Bylo použito 17 iterací po dobu 31 měsíců, průměrná délka iterace 8 týdnů. Důvod pro použití iterativního vývoje byl vskutku originální – potřeba změn požadavků v průběhu vývoje.

V druhé polovině knihy se docela podrobně seznámíme s agilními metodami Scrum, Extreme programming, Unified process a Evo. Je docela zajímavé, jak jsou si tyto metody podobné. Liší se opravdu jenom v detailech.

Tuto knihu bych doporučil všem, kteří se zajímají nebo alespoň živí řízením softwarových projektů. Možná bychom se méně setkávali s obvyklou praxí řízení projektu vodopádem v druhé půli plynule přecházejícím v cochcárnu. Pokud vás téma zaujalo, přijďte na příští CZJUG, určitě se tam dozvíte mnohem víc.