Metodiky pro efektivní vývoj software (agilní programování)
Netradiční metody programování • Cílem těchto metodik je vyvinout kvalitní a dobře fungující software rychle a levně. • Umožňují flexibilní reakci na specifická přání zákazníka na funkcionalitu software při zachování minimálních nákladů na vývoj a následnou údržbu. • Jednoznačná podpora týmové práce napříč všemi metodikami. • Zvýšení efektivity vývoje software se zachováním jeho dlouhodobé funkčnosti spolu se snadností obsluhy a údržby. • Hlavním cílem je dodat zákazníkovi co nejdříve produkt jež splňuje všechny požadavky, je kvalitní a lze u něj i nadále provádět podporu. Podstatné je dodat produkt spíše než konkurence.
Rozdělení metodik vývoje software Klasické přístupy – – – –
Vodopádový model životního cyklu Spirálový model životního cyklu Metodika Rational Unified Process Metodika Unified Software Development Process
Agilní metodiky – – – – – – – –
Extrémní programování Metodika SCRUM Development Process Lean Development Feature Driven Development Test Driven Development Metodika Crystal Adaptive Software Development Dynamic Software Development Method
Vývoj internetových aplikací – Metodika Jennifer Fleming – WebWAVE Development Process – WebWAVE Ongoing Development Process
Metodiky programování… • Dřívější vývoj softwaru bez metodik, tzv. garážový software. V současné době vývoj softwaru obsahuje – Týmovou spolupráci – Podpora rychlosti vývoje – Požadavek na podporu a údržbu
• Z důvodu podpory dílčích bodů zejména s ohledem na týmovou spolupráci vznikají postupy tvorby softwaru. Není třeba nové přístupy vymýšlet, stačí použít stávající a aplikovat je. • Tento přístup umožnuje výtvářet modulární software a to nepoměrně rychleji než dříve. Taktéž to ovlivní skladbu vývojového týmu a přístup lídrů týmu.
Softwarové inženýrství • Agilní jakožto i další přístupy vývoje software vychází z definice softwarového inženýrství • Existuje povícero definic. Uvedme si definici Fritz Bauer jež zazněla v roce 1968 na konferenci NATO: „Softwarové inženýrství je zavedení a používání řádných inženýrských principů tak, abychom dosáhli ekonomické tvorby softwaru, který je spolehlivý a pracuje účinně na dostupných výpočetních prostředcích.“ • Definice obecná, avšak nadčasově platná. Snaží se nejen zavádět inženýrské přístupy, ale i nabádat k jejich dodržování.
Podmínky úspěšné a ekonomické tvorby software •
Ovlivňující faktory – Vhodně sestavený vývojový tým (role, týmová práce, specializace a zástupitelnost členů týmu) – Správná volba vývojového nástroje a operačního systému (povětšinou dána již zadáním) – Počáteční rozvaha vyvinout/koupit (možnost integrace volně dostupných modulů…). – Podrobná specifikace zadání od zadavatele (úspora dodatečných úprav). Většinou podrobně zadáno formou poptávkového dokumentu RFP (Reguest For Proposal) popřípadě formát RFI (Request For Information) pro informační souhrn. – Rozvaha o budoucí údržbě a rozšiřování (možnost integrace rozšiřujících modulů, úspora nákladů, času,…).
• Výsledná aplikace by měla býti spolehlivá a účinně pracovat na dostupných technologických zařízeních, tedy efektivně využívat dosupné zdroje (hardwarové, softwarové, personální a jiné) a ve výsledku být šetrná k životnímu prostředí.
Předcházení problémům při vývoji software • Dobrá komunikace na všech úrovních (tým, zákazník). • Správný přístup vývoje (podpora CRM). • Adekvátní odhady (čas, cena, rozsah, efektivita, návratnost,…). • Dobré plánování (časové rozvrhnutí jednotlivých vývojových etap/hurá akce). • Zvýšení produktivity práce (dělba práce dle specializací). • Nepodceňování hrozeb a rizik (odhalování chyb již po čas vývoje snižuje celkové náklady). • Perfektní zvládnutí nových technologií (maximální využití všech možností a přístupů, při vývojovém nasazení, za účelem zjednodušit si práci).
Metodiky, životní cykly vývoje softwaru Specifikace pojmů • Metodologie je nejobecnějším popisným pojmem a ve své podstatě se jedná o nauku o metodách. Jinak řečeno metodologie je vědní disciplína, která definuje, popisuje a rozebírá jednotlivé metodiky. • Metodika je popis komplexních postupů a navrhů vývoje, v místní souvislosti při vývoji softwarové aplikace. Mezi jednotlivé metodiky patří např. „vodopádový model“, či „model napiš a oprav“. Pod metodikou se skrývají všechny etapy řešení, avšak popis je brán s nadhledem (proc?, kdo?, kdy?, co?) bez detailnější specifikace. • Metoda je označení konkrétního postupu vedoucího k vyřešení dílčího problému. Jedná se o specifikaci jednotlivých kroků.
Životní cykly projektu – prvotní přístup •
Metodiky vývoje aplikací procházely vývojem a vždy odrážely aktuelní požadavky na software kladený v dané době. Cílem metodik bylo odstranit nedostatky vývoje aplikací, které se v daném časovém údobí projevovaly. • Dnešní agilní metodiky zaměřeny na vývoj produktu co nejrychleji, v co nejkratším čase. Model napiš a oprav – Rychlé napsání aplikace (jakýmkoliv způsobem) a předání do provozu – Vhodné jen u jednoduchých aplikací – V dnešní době již nepoužitelné
Životní cykly projektu – prvotní přístup Striktní posloupnost fází • Dlouhodobé využití modelu „napiš a oprav“ již nebylo možné, proto v roce 1957 byl definován model na striktním dodržování vývojových fází. • Nedostatkem tohoto modelu je absence zpětné vazby mezi jednotlivými stupni vývoje. Absence revizí, zhodnocení rizik, … • Zpětná vazba následovala až po dokončení vývojové fáze a to formou revalidace.
Životní cykly projektu – prvotní přístup Vodopádový model • Kladen důraz na vývoj softwaru • Snaha o vytvoření zpětné vazby, po skončení každé fáze revidování postupu • Dlouhá doba vývoje • Až po dokončení fin. produkt
Životní cykly projektu – prvotní přístup Spirálový model • Mezník ve vývoji aplikací, v některých systémech převládající do dnešních dob. Překonává nedostatky vodopádového modelu jakými jsou sice komplexní, ale dlouhý vývoj aplikace. Zavádí iterativní přístup a opakovanou, důslednou analýzu rizik. • Vývoj aplikace probíhá v opakovaných krocích, tzv. iteracích, kdy se zpřesnuje zákaznická specifikace. • Na rozdíl od vodopádového přístupu dochází k přeskládání některých etap vývoje dle vhodnosti. • Provádí se vývoj aplikace, dle hrubé specifikace a následně se progres konzultuje přímo se zákazníkem.
Specifikace softwarových produktů •
Produkt vývojářského snažení můžeme specifikovat na základě: – Popisných metrik – Předepsané funkcionality
•
Kvalitu softwaru je vždy možné měřit jen ve vztahu k očekáváním, která na něj klade jeho uživatel.
•
Program je softwarovým výrobkem, programovaným obvykle na zakázku, nebo splnující konkrétní požadovanou funkci. Softwarový produkt je vyšší formou programu. V průběhu vývoje byly na něj aplikovány softwarově-inženýrské techniky, tedy na počátku projektu byla provedena analýza projektu a na konci vývoje testování funkčnosti. Produkt je je dodáván s dokumentací, měl by obsahovat nápovědu a uživatelskou podporu. Programový systém je nejvyšší formou softwaru. Jedná se o navzájem propojené softwarové produkty, jež se v sobě navzájem integrují. Navíc umožnuje komunikaci s okolím (podpora konverze dat), komunikačních protokolů.
•
•
Agilní metodiky • • • • • • • • •
Rychlý, aktivní, svižný vývoj za účelem co nejrychleji dosáhnout stanoveného cíle. Rychlost vývoje je nejpalčivější problém při uvádění výsledného produktu na trh. Nejčastější nasazení při vytváření produktů na bázi webových technologií. V dnešní době píše aplikace kdekdo, při výužití programovacích nástrojů a technik typu Rapid Application Development je to velmi snadné. Zákazník chce aplikaci a nechce na ni čekat déle než je nutné. Tvorba nových přístupů a principů, jenž tyto body v sobě integrují. Odladěné a neprůstřelné aplikace x rychle vyvinutá a funkční aplikace. Důraz kladen i na náklady vývoje. Mnohdy zákazník v počátku ani neví, co vše od aplikace očekává, agilní přístup zapojuje zákazníka do vývoje. Podpora malých vývojových týmů.
Spolupráce zákazníků a vývojářů Rigorózní metodiky standardizují lidi v organizaci snaží se vykázat lidi do role zaměnitelné součástky čím větší projekty se realizují, tím více specialistů je třeba zapojit Agilní metodiky využívají individualit a silných stránek lidí požadují integraci znalostí, stálá interakce a kooperace, sdílení znalostí v týmu, týmové řešení problému.
Předpoklady agilního vývoje
zákazník je součástí týmu a je k dispozici dle potřeby dokumentace a modely nehrají klíčovou roli při vývoji požadavky a prostředí se mění v průběhu vývoje přizpůsobování procesu vývoje vede k vyšší kvalitě produktu vývojáři mají zkušenosti potřebné k přizpůsobování procesů viditelnost procesů je jen při ukončení přírůstku hodnocení produktu je neformální cílem není znovupoužitelnost SW může být vyvíjen inkrementálně
Tur, D. - France, R. - Rumpe, B.: Limitations of Agile Software Process
Omezení agilního vývoje
omezená podpora pro distribuované prostředí vývoje týmy nejlépe v jedné místnosti, komunikace tváří v tvář omezená podpora subdodavatelů omezená podpora pro vytváření znovupoužitelných artefaktů omezená podpora pro vývoj ve velkém týmu omezená podpora pro vývoj kritických aplikací omezená podpora pro vývoj velkého komplexního SW - není architektura !!
Tur, D. - France, R. - Rumpe, B.: Limitations of Agile Software Process
Agilní přístupy v řešení • Při tradičním vývoji množina požadavků neměnná, tento přístup musel být změněn. • Agilní přístup bere za neměnné čas a zdroje, v závislosti na tom se mění funkcionalita produktu.
Základní principy agilních metodik • • • • •
•
Iterativní a inkrementalní vývoj s velmi krátkými iteracemi (možnost průběžné dodávky řešení). Důraz na přímou a osobní komunikaci v týmu (osobní kontakt s vyříkáním si problémů při vývoji). Nepřetržité sepětí a komunikace se zadavatelem. Rigorózní, opakované, průběžné automatizované testování. Snaha o odstranění byrokracie s cílem dosáhnout co nejrychleji výsledný kód. Agilní přístup je vhodný zejména pro projekty s často se měnícím zadáním a uzpůsobováním aktuelní situaci.
Manifest agilního vývoje softwaru •
Pilířem agilních metodik vývoje softwaru je manifest z roku 2001 (The Agile Manifesto; www.agile-manifesto.org).
Obsah manifestu: • Přijmout a umožnit změnu je mnohem efektivnější, než pokoušet se ji zabránit. • Je třeba být připraven reagovat na nepředvídatelné události, nebot zaručeně nastanou, tj. jedinou jistotou je změna. •
Na základě manifestu se dává přednost: – Individualitám a komunikaci před procesy a nástroji – Provozuschopnému softwaru před obsáhlými, objemnými dokumentacemi – Spolupráci se zákazníkem před uzavíráním mnoha smluv – Reakci na změnu před striktním plněním plánu
Jednotlivé dílčí prvky • • • • • • • • • • • •
Užitná hodnota pro zákazníka (kontinuální dodávky softwaru s vyšší prioritou než dodávky dokumentace formou UML, ERD, …). Změny jsou výhodou (bezproblémová změna funkcionality i v pozdní části vývoje je konkurenční výhodou zadavatele). Časté dodávky (velmi krátké dodací cykly mezistavů vývoje). Zákazníci spolupracují s týmem. Motivace je klíčová (podpora vývojového týmu). Vzájemná konverzace (verbální komunikace v týmu přednostní před zprávami). Úspěch posuzován podle fungování. Udržitelný vývoj (sice netradiční vývoj, avšak nestaven na přesčasech). Perfektní návrh, perfektní řešení (není v souvislosti s neměnností). Zásadní je jednoduchost. Důvěra a komunikace vedoucí ke kreativitě. Zvyšování efektivity.
Agilní metodiky vývoje • • • • • • • •
Adaptivní vývoj softaru (Adaptive Software Development) Vlastnostmi řízený vývoj (Feature-Driven Development) Extrémní programování (Extreme Programing) Lean Development SCRUM Development Process Crystal metodiky (Crystal Methodologies) Dynamic System Development Method (DSDM Consortium) Testy řízený vývoj (Test-Driven Development)
Extrémní programování •
Základními proměnnými i zde jsou: – – – –
Náklady Čas Kvalita Šíře zadání
Zvýšení interakce mezi proměnnými. Rapidně změnit celkové náklady na změnu projektu. Základní hodnoty přístupu: – – – –
Komunikace. Jednoduchost. Zpětná vazba. Odvaha.
Extrémní programování Základní principy: – – – – –
Rychlá zpětná vazba. Předpoklad jednoduchosti. Přírustková změna. Vzužití změny. Kvalitní práce.
Doplňkové principy: Výuka poznatků Malá počáteční investice Hraní na výhru Konkrétní experimenty Otevřená a úpřímná komunikace Přijetí zodpovědnosti Místní přizpůsobení Poctivé měření.
Extrémní programování • Zpět k základům: – – – –
Psaní zdrojového kódu. Testování. Poslouchání. Navrhování.
– Uprávy a dodávka.
Další metody: – 40hodinový týden – Zákazník na pracovišti – Standardy pro psaní zdrojového textu
Extrémní programování Životní cyklus ideálního projektu: – – – – – –
Průzkum Plánování Iterace do uvolňění první verze Zprovozňování Údržba Smrt
Lidské role: – – – – – – –
Programátor Zákazník Tester Stopař Kouč Konzultant Velký šéf
Zdroje • •
• •
Kadlec Václav: Agilní programování-metodiky efektivního vývoje softwaru. Computer Press. Brno. 2004. ISBN 80-251-0342-0. Andrew Hunt; David Thomas: Programátor pragmatik-jak se stát lepším programátorem a vytvářet kvalitní software. Computer Press. Brno. 2007, ISBN 978-80-251-1660-9. Beck Kent: Extrémní programování. Grada. Praha. 2002. ISBN 80-2470300-9. Extrémní programování [online]. 2004-2007 [cit. 2007-11-30]. Dostupný z WWW: .
Vývojové metodiky
Lean Development • Agilní metodika programování. • Nevznikla formalizací, ale na základě výrobních požadavků, podstatou je odstranit nadbytečné nevýrobní kroky. • Původ v Japonsku, neefektivní a neflexibilní výroba automobilů. • Podstatou je odstranění všeho zbytečného, co snižuje efektivitu a zvyšuje náklady. • Vznikl Toyta production system, který je znám pod názvem Lean manufacturing.
Lean Development • V roce 1980 definováno deset pravidel vedoucí k naplnění Lean manufactoring. Následně byly přizpůsobeny vývoji softwaru. • Adaptace na agilní přístupy vývoje, tj. snížit náklady, časové nároky a snížit četnost chyb.
Klíčové pojmy • • • • • • • • • •
Odstranit vše co je zbytečné. Minimalizovat zásoby (meziprodukty). Maximalizovat tok (zkrátit vývojový čas). Vývoj je tažen poptávkou (rozhodnutí v pozdní chvíli). Pracovníci mají pravomoci rozhodovat (rozhodování I na nejnižších úrovních). Hlavním cílem je uspokojovat požadavky zákazníků (a to nejen teď, ale i v budoucnu). Zavést zpětnou vazbu (a nebát se učiněných rozhodnutí). Odstranit lokální optimalizace (neustálé optimalizace stávajícího řešení nedávají smysl). Vybudovat partnerství s dodavateli (využívat subdodávek a předpřipravených komponent). Vybudovat kulturu pro možnost neustálého zlepšování.
Šest druhů plýtvání • Navýroba (nesmyslné řešení). • Čas ztracený čekáním (dynamické přidělování úkolů). • Plýtvání související s transportem a přepravou (lepší rozdělení a automatizace procesů a to včetně zálohování). • Plýtvání související se zpracováním (vedení musí mít přehled o rozdělení úkolů a jejich progresu). • Plýtvání související s neefektivní prací (použití efektivních nástrojů vývoje s nutným povědomím o jejich dostupnosti). • Plýtvání související s defekty ve výrobcích (minimalizace chyb, jež ne vždy lze odstranit).
Principy a nástroje Lean development • Eliminace plýtvání (identifikace zdrojů, identifikace hodnoty). • Rozvinout učení (ověření fungování experimentem). • Rozhodovat co nejpozději (udržení otevřené mysli, rozhodování ve vhodnou chvíli). • Rychlé a časté dodávky (meziprodukt, možnost rozhodování zákazníka). • Pravomoci pracovníků (hierarchie, motivace lidí, rozdělení vedení, získávání zkušeností). • Integrita (integrita softwaru, jednotlivých modulů, dbát na testování, zabývat se refaktorizací). • Vidět celek (odstranění lokálních optimalizzací, vhodné a “měřitelné” smlouvy se zákazníky.
Vývoj pro web • • • • •
Tým, vývoj, vize Platformy, systémy, prohlížeče Uživatelské prostředí Zákazník Cíle webových prezentací
Metodika Jennifer Fleming • Jennifer Fleming, webová návrhářka a vývojářka. • Iterativní vývoj projektu, dodávání meziproduktů. • Modelování, lineární přístup vývoje, adaptabilita na nové požadavky.
Základní fáze JF • Shromáždění informací (konkurence, novinky, noví uživatelé). • Stanovení strategie (identifikace problému, reálnost modelu, průzkum médií, rozpoutání diskuse, definice koncepce a rozsahu, utřídění obsahu, alternativy). • Vytvoření prototypu (mapování pohybu po stránkách, vytvoření nadhledu designu, otestování prototypu, vytvoření finální architektury, načrtnutí obsahu produktu). • Implementace (příprava a editace obsahu, dokončení GUI, vytvoření jádra aplikace, řešení problémů). • Uvedení do chodu (testování a zjišťování kvality). • Údržba, správa a rozšiřování (řízení obsahu, logy, kontrola odkazů, periodicita testování, restrukturalizace obsahu).
Jennifer Fleming • • • •
Návrh a řešení webových projektů. Popis řešení. RUP. Jednoduchost vývoje.