Je design mrtvý?


Original: http://martinfowler.com/articles/designDead.html

Pro mnoho lidí, které přicházejí do styku s krátkým Extrémní programování, zdá se, že XP vyzývá k smrti návrhu softwaru. Není to jen je mnohem projektová činnost zesměšňován jako “Big vpředu design”, ale takové konstrukční techniky jako je UML, flexibilních rámců, a dokonce i vzory jsou de-zdůraznil nebo přímo ignorovány. Ve skutečnosti XP zahrnuje spoustu designu, ale dělá to jiným způsobem, než bylo zjištěno softwarových procesů. XP se zotavil představu evolučního návrhu s postupy, které umožňují vývoj, aby se stala životaschopnou strategii designu. Poskytuje také nové výzvy a dovednosti, jako návrháři potřebují naučit, jak udělat jednoduchý design, jak používat refactoring, aby design čistý a jak používat vzory v evolučním stylu.

Extrémní programování ( XP) napadá mnoho společných předpokladů o vývoji softwaru . Z těchto jeden z nejvíce kontroverzní je jeho odmítnutí značné úsilí v up- designu přední části vozu , ve prospěch více evolučního přístupu. Pro jeho kritiky to je návrat k ” kód a opravit ” vývoj – obvykle posmíval se jako hacking . Pro jeho fanoušky je často viděn jako odmítnutí návrhu technik (např. UML ) , principů a vzorů. Nebojte se o design, když budete naslouchat kódudobrý design se objeví .

Jsem se ocitl v centru tohoto argumentu . Většina mé kariéry se podílí grafický návrh jazyky -Unified Modeling Language (UML ) a jeho předchůdci – a vzorů. Opravdu jsem napsal knihy na obou UML a vzory. Má moje objetí XP tím, že jsem se zřekl všech , co jsem napsal o těchto tématech , čistící mou mysl všech těchto kontrarevolučních představ ?

No nebudu očekávat, že mohu nechat viset na háku dramatického napětí . Stručná odpověď zní: ne. Dlouhá odpověď je zbytek tohoto příspěvku .
Plánované a Evoluční návrh

V tomto článku budu popisovat dva styly , jak je design, jsou ve vývoji softwaru . Snad nejčastější je evoluční návrh . V podstatě evoluční návrh znamená, že návrh systému roste , protože systém je realizován . Návrh je součástí procesu programování a když se program vyvíjí konstrukční změny .

V běžném zvyku, evoluční design je katastrofa. Návrh nakonec jeagregace banda ad-hoc taktické rozhodování , z nichž každý jekód těžší změnit . V mnoha způsobů, jak by mohl argumentovat, to není design, jistě to obvykle vede k špatné konstrukci . Jak Kent říká , design je tu , abyste mohli neustále mění software snadno v dlouhodobém horizontu . Jako vzor zhoršuje , tak se vaše schopnost provádět změny efektivně. Máte stav softwaru entropie , časem design dostane horší a horší . Nejen to , aby software těžší změnit , to také dělá chyby i snadnější k chovu a těžší najít a bezpečně zabít . Toto je ” kód a fix ” noční můra , kde se chyby staly exponenciálně dražší opravit , jakprojekt pokračuje.

Plánované Design je proti tomu , a obsahuje pojem narozené od ostatních strojírenských oborech . Pokud chcete stavět boudu , můžete jen získat nějaké dřevo dohromady a získat hrubý tvar. Nicméně, pokud chcete postavit mrakodrap , nemůžete pracovat tímto způsobem – to bude prostě zhroutí před sebou ještě půl cesty nahoru. Takže začnete s technických výkresů , podepsaná v inženýrské kanceláři jako ta moje žena pracuje v v centru Bostonu . Co dělá design se vyřeší všechny problémy , částečně tím, matematické analýzy , ale hlavně pomocí stavebních předpisech . Stavební předpisy jsou pravidla o tom, jak si navrhnout struktury na základě zkušeností , co funguje ( a některé základní matematika ) . Jakmile je design je hotovo, pak se její inženýrská společnost může podat návrh mimo jiné společnosti , která staví ji .

Plánované design software by měl fungovat stejným způsobem. Návrháři si z velkých problémů v předstihu . Nemusejí psát kód , protože nejsou stavební software , jsou zasazení . Takže můžete použít konstrukční techniky , jako je UML , který dostane od některé podrobnosti o programování a umožňuje návrhářům pracovat na více abstraktní úrovni . Jakmile je konstrukce se provádí mohou předat ho do samostatné skupiny ( nebo isamostatná společnost ) na výstavbu . Vzhledem k tomu, návrháři myslí ve větším měřítku , mohou zabránit sérii taktických rozhodnutí, která vedou k softwaru entropie. Programátoři mohou sledovat směr designu a za předpokladu, že po návrhu, mají dobře postavený systém

Nyníplánovaný přístup k designu byl asi od 70. let , a spousta lidí ho používat . Je lepší v mnoha ohledech než kódu a opravy evoluční design. Ale to má nějaké chyby . První chyba je, že to je nemožné , že přes všechny problémy , které je třeba řešit při programování . Takže je to nevyhnutelné, že při programování najdete věci, které zpochybňují návrh . Nicméně, pokud se provádí konstruktéři , přestěhoval se do jiného projektu , co se stane? Programátoři začít psát kód kolem designu a entropie sady palců I když je návrhář nešla , to vyžaduje určitý čas vyřešit konstrukční problémy , změňte kresby , a pak změnit kód. Tam je obvyklerychlejší fix a časový tlak . Proto entropie ( opět ) .

Navíc tam častokulturní problém. Návrháři jsou návrháři kvůli dovednosti a zkušenosti , ale oni jsou tak tvrdě pracují na plánech nemají dostat tolik času žádnou další změnu. Nicméně nástroje a materiály změn vývoje softwaru rychlým tempem . Pokud již kód není jen můžete přijít o změny, které nastanou při tomto technologickém toku , můžete také ztratit respekt těch, kteří kód.

Toto napětí mezi stavebníky a projektanty ve stavebních stane taky, ale je to více intenzivní v softwaru. Je to proto, že intenzivní , že jezásadní rozdíl . V budově je jasnější rozdělení do dovedností mezi těmi, kteří design a ty, kdo stavět , ale v softwaru, který je menšípřípad. Každý programátor práci ve výškách designu prostředí musí být velmi zručný . Zručný dost pochybovat návrhářských návrhy , zejména pokud projektant je menší znalosti o každodenní realitu vývojovou platformu .

Nyní tyto problémy by mohly být opraveny. Možná bychom mohli vypořádat s lidským napětí. Možná, že se můžeme dostat návrháři zručný dost si poradit s většinou problémů , a mít k dispozici postup dostatečně disciplinovaní změnit výkresů. Je tu ještě další problém : měnícím se požadavkům . Změna požadavky jsoučíslo jedna velký problém , který způsobuje bolesti hlavy v softwarových projektech, které jsem narazit .

Jeden způsob, jak se vypořádat s měnícími se požadavky je vybudovat flexibilitu do konstrukce , takže můžete snadno změnit jej jako se mění požadavky . To však vyžaduje vhled do jaké změny můžete očekávat . Design může být v plánu zabývat se oblastí volatility , ale zároveň , že pomůže k předpokládané požadavky změn , bude to nepomůže ( a může ublížit ) pro nepředvídané změny. Takže musíte pochopit požadavky dost dobře oddělit nestabilních oblastí , a můj postřeh je , že je to velmi těžké.

Nyní některé z těchto požadavků problémy jsou kvůli nepochopení požadavků dostatečně jasně . Takže mnoho lidí zaměřením především na požadavky technických získat lepší podmínky v naději, že to bude bránit potřebu změnit návrh později. Ale i tento směr je ten, který nemůže vést k vyléčení . Mnoho nepředvídatelné požadavky změnám v důsledku změn v podnikání. Ty nelze zabránit , ale pozor, vaše požadavky inženýrství proces .

Takže to vše dělá plánované podoby zvukové nemožné. Jistě , že jsou velké výzvy . Ale já nejsem ochoten tvrdit, že plánované design je horší než evolučního návrhu , jak je nejčastěji praktikuje v ” kódu a opravy ” způsobem . Opravdu bych raději plánoval design ” kód a opravit ” . Nicméně jsem si vědom problémů plánované podoby a jsem hledají nový směr .
K Povolení praktiky XP

XP je kontroverzní z mnoha důvodů , ale jedním z klíčových červené vlajky v systému Windows XP je to, že prosazuje evoluční design, spíše než plánované podoby . Jak víme, je evoluční návrh v žádném případě pracovat v důsledku ad hoc rozhodnutí o návrhu softwaru a entropie .

Jádrem pochopení tohoto tvrzení je změna softwaru křivka . Změna křivka říká, že daný projekt spuštěn, bude exponenciálně dražší provést změny. Změna křivka je obvykle vyjádřena fází “změna provedená v analýze pro 1 dolar bude stát tisíce opravit ve výrobě ” . To je ironické , protože většina projektů stále pracovat v ad-hoc proces, který nemá fázi analýzy , ale umocňování je tam pořád. Exponenciální křivka změna znamená, že evoluční návrh nemůže fungovat. To také vyjadřuje proto musí být plánovaná konstrukce se postupovat opatrně , protože nějaké chyby v plánované podoby čelí stejnému umocňování .

Základním předpokladem, na němž XP je, že je možné srovnat změnu křivky natolik, aby se evoluční projekční práce . Toto zploštění je tak umožněno XP a využívány XP. To je část spojky na XP postupů , konkrétně nemůžete dělat ty části XP , které využívají narovnanou křivky , aniž by dělali ty věci , které umožňujízploštění . Jedná se o společný zdroj sporu o XP. Mnozí lidé kritizují využití bez povelu k pochopení . Často Týkala z vlastních kritiků zkušenosti, kde se neučinil aktivační postupy , které umožňují využívající postupy do práce. V důsledku toho dostal spálili , a když vidí, XP si vzpomenout na oheň.

Existuje mnoho částí do aktivačních postupů. V jádru jsou postupy testování a kontinuální integrace . Bez bezpečnosti stanovené testování zbytek XP by nebylo možné . Kontinuální integrace je nutné, aby tým v synchronizaci , takže můžete provést změnu , a ne se bát o integraci s jinými lidmi. Dohromady tyto praktiky mohou mít velký vliv na změnu křivky. Vzpomněl jsem si na to ještě jednou tady na ThoughtWorks . Představujeme testování a kontinuální integrace mělo výrazné zlepšení na úsilí vývojářů . Určitě dost vážně zpochybňují tvrzení, XP , které budete potřebovat všechny postupy , aby se velké zlepšení .

Refaktoring má podobný účinek . Lidé, kteří refactor jejich kód v disciplinovaně navrhované XP nalezen významný rozdíl v jejich účinnosti v porovnání s tím volnější , více ad- hoc na restrukturalizaci . To byla moje zkušenost, jistě jednou Kent mě naučil refaktorovat správně. Koneckonců, jen taková silná změna se mě motivovalo napsat celou knihu o tom.

Jim Highsmith , ve své skvělé shrnutí XP používá analogii sady měřítek. V jednom zásobníku je plánováno provedení , druhá je refactoring . Ve více tradičních přístupů plánováno provedení dominuje , protože se předpokládá, že nemůžete změnit svůj názor později. Protože náklady na změnu snižuje pak můžete udělat více vašeho návrhu , později jako refactoring . Plánované provedení nezmizí úplně, ale nyní je rovnováha dvou designových přístupů k práci s . Pro mě to vypadá, že před refactoring jsem dělal všechny své konstrukci jednou rukou .

Tyto postupy , které umožňují kontinuální integrace , testování a refaktoring , poskytují nové prostředí, které umožňuje evoluční návrh věrohodné . Nicméně jedna věc, kterou jsme dosud přišel na to, je -li zůstatek bod . Jsem si jistý , že i přes vnější dojem , XP není jen test, kód a refactor . Je zde prostor pro projektování před kódování . Částečně je to ještě předtím, než je nějaký kódování , většina z nich se vyskytuje v iterací před kódování pro určitý úkol . Ale je tu nová rovnováha mezi up- designu přední části vozu a refaktoring .
Hodnota jednoduchosti

Dva z největších uzdravovat výkřiky v XP jsou slogany “Udělej ta nejjednodušší věc , které by mohly práce” a ” nebudete potřebovat ” (známý jako YAGNI ) . Oba jsou projevy praxe XP jednoduchý design .

Cesta YAGNI je obvykle popisován , říká, že byste neměli přidat kód , který dnes bude používat pouze funkce, která je nutná zítra. Na první pohled to zní to jednoduché. Problém je s takovými věcmi jako rámců , opakovaně použitelných komponent a flexibilní design. Takové věci jsou složité stavět. Platíte navíc up-front náklady na výstavbu je v očekávání, že získáte zpět , že náklady na později. Tato myšlenka vybudování flexibilitu up-front je považován za klíčovou součást efektivního návrhu softwaru .

Nicméně XP na rada je, že nebudete stavět flexibilní komponenty a rámce pro první případ , který potřebuje tuto funkci . Nechat tyto struktury roste , když je potřeba . Pokud chci Money třídu , že dnes se zabývá doplněk , ale ne násobení pak jsem stavět pouze přidání do Money třídy. I když jsem si jistý , že budu potřebovat násobení, rovněž v příští iteraci , a pochopit, jak to udělat jednoduše , a myslím, že to bude opravdu rychle dělat, budu stále přenechává do té další iteraci .

Jeden důvod pro toto je ekonomická. Pokud mám dělat žádnou práci , které je určeno výhradně pro funkci, která je potřeba zítra, to znamená, že jsem ztratil úsilí z prvků, které je třeba udělat pro tuto iteraci. Vydání plán říká, že to, co je třeba pracoval na nyní pracuje na dalších věcech v budoucnu je v rozporu s vývojáři dohodě se zákazníkem . Existujeriziko, že tato iterace příběhy nemusí stihnout . I když se tato iterace příběhy nejsou ohroženi , že je to až k zákazníkovi se rozhodnout, jaké další práce je třeba udělat – a to možná ještě nezahrnují násobení.

Tato ekonomická překážka je umocněn náhodou, že nemůžeme dostat to pravé. Nicméně jistá, že může být o tom, jak tato funkce funguje, můžeme ještě dostat to špatně – zejména proto, že nemáme podrobnější požadavky ještě . Práce na špatné řešení již je ještě plýtvání než pracovat na správné řešení brzy . A Xperts obecně věří, že jsme mnohem pravděpodobnější, že se mýlil , než pravé ( a já souhlasím s tím sentimentem . )

Druhým důvodem je to, že jednoduchou konstrukcisložité konstrukce je složitější na pochopení , než jednoduché konstrukci . Proto jakákoliv změna systému se provádí těžší větší složitosti . To přidává určité náklady v období mezi dobou, kdy byl složitější design přidal , a když bylo potřeba .

Nyní tato rada zasáhne mnoho lidí jako nesmysl , a mají pravdu, si myslí, že . Pravým za předpokladu, že si představit svět, kde obvyklý vývoj příznivých praktiky XP nejsou na místě. Nicméně, když rovnováha mezi plánovanými a evoluční návrh měnila , pak YAGNI stává dobrým zvykem (a pouze tehdy) .

Takže shrnout . Nechcete trávit úsilí přidání nové funkce , které nebudou zapotřebí, aby budoucí iterace. A i když cena je nulová , stále nechcete přidat , protože to zvyšuje náklady na změnu , i když to nic nestojí dát dovnitř však můžete jen rozumně chovat tímto způsobem , pokud používáte XP nebopodobný technika, která snižuje náklady na změnu .
Co na Zemi je jednoduchost Každopádně

Takže chceme, aby náš kód být tak jednoduché, jak je to možné. To nezní jako , že to příliš těžké argumentovat pro , po tom všem , kteří chtějí být složité ? Ale to samozřejmě vyvoláváotázku: ” co je jednoduché? ”

V XPE Kent dává čtyři kritéria pro jednoduchý systém . V pořádku ( nejdůležitější první ) :

Spustí všechny testy
Odhaluje veškerou záměr
rozmnožování
Nejmenší počet tříd nebo metod

Spuštění všech testů je velmi jednoduchá kritériem . Rozmnožování je také velice jednoduché , i když spousta vývojářů potřebujete návod, jak toho dosáhnout . Nejtěžší z nich má co do činění s odhaluje záměr . Co přesně to znamená?

Základní hodnota je zde přehlednost kódu . XP klade velký důraz na kód, který je snadno číst . V XP ” chytré kódu ” je nadávka . Ale záměr některých lidí odhalující kód je jiný je chytrost .

V jeho 2000 papíru XP , Josh Kerievsky poukazuje na dobrý příklad. Dívá se na možná nejvíce veřejného kódu XP vše – JUnit . JUnit používá malíři přidat volitelné funkce pro testovacích případů, takové věci jako souběžnost synchronizaci a dávkové nastavit kódu. Tím, že oddělí tento kód do dekoratérů umožňuje obecný kód je přehlednější , než by tomu jinak bylo .

Ale to se musíte zeptat sami sebe, zda výsledný kód je velice jednoduchý. Pro mě to je, ale pak jsem obeznámen s dekoratér vzorem. Ale pro mnohé , které nejsou je to docela složité. Podobně JUnit používá zásuvné metody, které jsem si všiml, většina lidí zpočátku nic najít , ale jasné . Takže můžeme konstatovat, že JUnit design je jednodušší pro zkušené designéry , ale složitější pro méně zkušené lidi?

Myslím, že se zaměřují na odstranění zdvojení , a to jak s XP je ” pouze jednou ” a pragmatického programátora DRY ( Neopakovat Yourself ), je jedním z těch zřejmých a úžasně výkonný kousky dobrou radu . Jen po sám může trvat dlouhou cestu. Ale to není všechno, a jednoduchost je stálekomplikovaná věc najít.

Nedávno jsem byl zapojen v tom něco, co může být více než navržený . Dostal refactored a některé pružnosti byl odstraněn . Ale jak jeden z vývojářů řekl: ” je to jednodušší, než refaktorovat -design , než je refaktorovat žádný návrh . ” Je lepší být trochu jednodušší, než musíte být , ale není to katastrofa být trochu složitější.

Nejlepší rada, kterou jsem slyšel na tohle všechno přišel od strýce Bob ( Robert Martin) . Jeho rada byla , aby se příliš zavěsil co nejjednodušší design . Koneckonců je to možné, měl, a bude refactor později . Na konciochota refaktorovat je mnohem důležitější než vědět, co ta nejjednodušší věc je hned.
Má Refaktoring Porušovat YAGNI ?

Toto téma přišel na konferenci XP v poslední době, a to stojí za to přinášet tak, jak se díváme na roli designu v XP.

V podstatěotázka začíná té míry, že refaktorováním potřebuje čas , ale nepřidá funkci . Protože bod YAGNI je to, že jste měl navrhnout pro tuto chvíli není pro budoucnost , je toporušení ?

Bod YAGNI je , že nemusíte přidávat složitost , která není potřeba pro současné příběhy. To je součástí praxe jednoduchého designu. Refaktoring je potřeba , aby design jako jednoduché, jak je to možné, takže byste měli refactor kdykoli si uvědomíte, že můžete dělat věci jednodušší.

Jednoduchý design jak zneužívá XP postupů a takéumožňuje praxe . Pouze pokud jste testování , kontinuální integraci a refaktoring můžete cvičit jednoduchý design efektivně. Ale zároveň udržetjednoduché konstrukce , je nezbytná pro udrženízměny křivka plochá. Všechny nepotřebné složitost jesystém těžší změnit ve všech směrech, s výjimkou toho předvídat s komplexní flexibilitou dát dovnitř se však lidé nejsou dobře předvídat , takže je nejlepší usilovat o jednoduchost . Nicméně lidé nebudou mít co nejjednodušší věc poprvé, takže je třeba refaktorovat , aby se dostal blíž k cíli.
Vzory a XP

Příklad JUnit mě vede nevyhnutelně do vychovávají vzory. Vztah mezi vzory a XP je zajímavá, a to je častá otázka . Joshua Kerievsky argumentuje, že vzory jsou nedostatečný důraz v systému Windows XP , a on dělá argument výmluvně , takže nechci opakovat to. Ale je dobré mít na paměti, že pro mnoho lidí vzorce působit v rozporu s XP.

Podstatou tohoto argumentu je, že vzory jsou často nadměrně používá . Svět je plný legendární programátor , čerstvé z jeho prvního čtení , který zahrnuje šestnáct GOF vzory v 32 řádků kódu. Vzpomínám si na jeden večer , poháněný velmi pěkné whisky , procházející se Kent papír se nazývá ” Ne Design Patterns : 23 levné triky” jsme uvažovali o takových věcech, jako použít příkaz if spíše než strategie. Vtip měl pravdu , vzory jsou často nadměrně , ale to neznamená, že je špatný nápad. Otázkou je , jak je používáte .

Jedna teorie je , že síly jednoduchým designem vás zavede do vzorů. Mnoho refaktorování to výslovně , ale i bez nich podle následujících pravidel jednoduchým designem budete přijít s modely , i když nevíte, je již . To může být pravda , ale je to opravdu nejlepší způsob , jak to udělat ? Určitě je to lepší, když víte zhruba , kam jdete a máte knihu, která vám pomůže přes problémy , místo aby musel vymyslet všechno sám . Určitě ještě dosáhnout na GOF když cítím vzor nástup . Pro mě je efektivní návrh argumentuje, že potřebujeme vědět, je cena vzoru se vyplatí – to je jeho vlastní dovednost. Stejně tak, pokud Joshua napovídá, musíme být více známý o tom, jak zmírnit do vzoru postupně . V tomto ohledu XP zachází způsob, jakým používáme vzorce jinak, než někteří lidé je využívají , ale určitě neodstraní jejich hodnotu.

Ale čtení některé z e-mailových konferencí mám neodbytný pocit, že mnoho lidí vidět XP jako odradit vzory , a to navzdory ironií , že většina zastánců XP byli vůdcové hnutí vzory taky. Je to proto, že vidět za vzory , nebo proto, že vzory jsou tak zakotveny v jejich myšlení , že už si to uvědomit ? Nevím odpovědi pro ostatní , ale pro mě vzory jsou stále velmi důležité . XP může být proces vývoje, ale vzory jsoupáteří designu znalostí, znalostí, které je cenné , co váš proces může být . Různé procesy se mohou používat vzory v různých způsobech . XP zdůrazňuje, jak nepoužíváte vzor , dokud je to potřeba, a vyvíjí svou cestu do vzoru pomocí jednoduchého provedení. Ale vzory jsou stále hlavním poznatky získat.

Moje rada XPers pomocí vzorců by bylo

Investovat čas do učení o vzorech
Soustřeďte se na kdy má být vzor ( není příliš brzy )
Soustředit se na tom, jak realizovat vzorku v jeho nejjednodušší formě , poté ještě složitější později .
Pokud dáte vzor v , a později si uvědomit, že to není tahání svou váhu – nebojte se , aby se to znovu.

Myslím, že XP by měl zdůrazňovat učení o vzorech více . Nejsem si jistý, jak bych za vhodné, že do praxe XP , ale jsem si jistý, Kent může přijít s takovým způsobem .
Rostoucí architektura

Co máme na mysli softwarové architektury ? Pro mě je termín architektura vyjadřuje představu o základních prvků systému , figurky , které je obtížné změnit. Základem, na kterém musí být zbytek být stavěn.

Jakou rolihraje architektura při použití evoluční design? Opět XPS kritici tvrdí, že XP ignoruje architektura , že XP na cesta , je jít do kódu rychle a věřím, že refactoring , který vyřeší všechny problémy návrhu . Zajímavé je , že mají pravdu , a to může být slabost . Jistě nejagresivnější XPers – Kent Beck , Ron Jeffries a Bob Martin – jsou uvedení více a více energie do aniž by se dopředu architektonický design . Nedávejte do databáze, dokud opravdu víte, budete potřebovat . Práce se soubory a první Předělánídatabáze v průběhu pozdějšího opakování .

Můj kolega Neal Ford ponořil hlouběji do technik evolučního návrhu v patnáct článku série pro IBM developerWorks . On také ponořil do videa s dílnou na technické postupy pro agilní O’Reilly .

Jsem známý tím, žezbabělý XPer , a jako takový musím nesouhlasit . Myslím, že jerole pro širokou výchozího bodu architektury. Takové věci jako uvede brzy na to, jak se vrstvy aplikace , jak budete komunikovat s databází (pokud budete potřebovat ) , jaký přístup se používá pro zpracování webový server .

V podstatě myslím, že mnoho z těchto oblastí jsou vzory , které jsme se naučili v průběhu let. Jak se vaše znalost vzorů roste , měli byste mítrozumné vzít v prvé řadě na to, jak je používat. Nicméně hlavní rozdíl je, že tyto časné architektonické rozhodnutí se neočekává, že bude vytesáno do kamene , nebo spíše tým ví, že se může mýlit ve svých prvních rozhodnutí , a měl by mít odvahu opravit. Jiní vyprávěl příběh o jednom projektu, který , v blízkosti nasazení, se rozhodl, že to není třeba EJB a už odstranil to z jejich systému. Byl to značný refactoring , bylo provedeno pozdě, ale umožňují praktiky dělal to nejen možné, ale stojí za to.

Jak by to fungovalo opačně . Pokud jste se rozhodli nepoužívat EJB , bylo by to těžší přidat později? Pokud jste tedy nikdy začít s EJB , dokud jste se pokusili věci, aniž by a zjistil, že chybí ? To je otázka , která zahrnuje mnoho faktorů . Určitě pracuje bez složité prostotě složky zvyšuje a dělá věci rychleji . Nicméně někdy je jednodušší vytrhnout něco takového, než je dát dovnitř

Takže moje rada je začít tím, že posouzení toho, co by architektura . Pokud uvidíte velké množství dat s více uživateli , jděte do toho a použijete databáze z 1. den . Pokud vidíte komplexní obchodní logiku , dát do domény modelu. Nicméně v úctě k bohům YAGNI , v případě pochybností chybovat na straně jednoduchosti . Také se připraveni zjednodušit architekturu , jakmile zjistíte, že součástí architektury není pro nic .
UML a XP

Ze všech otázek, které jsem si o svém zapojení s XP jedním z největších točí kolem mé spojení s UML. Nejsou dvě neslučitelné ?

Existuje celá řada míst nekompatibility . Jistě XP de- zdůrazňuje, diagramy do značné míry . Ačkoli oficiální postoj je v duchu ” použít , pokud jsou vhodné ” , tam je silný podtext ” skutečné XPers nedělají diagramů .” Tato skutečnost je posílena tím, že lidé jako Kent nejsou vůbec spokojeni s diagramy , opravdu nikdy jsem neviděl Kent dobrovolně nakreslit diagram software v kterékoli stálé zápisu

Myslím, že problém pochází ze dvou různých příčin. Jedním z nich je skutečnost, že někteří lidé najdou užitečné softwarové diagramy a někteří lidé nemají. Hrozí nebezpečí, že ti, kteří si myslí, že ti, kteří nemají měli dělat a naopak . Místo toho bychom měli akceptovat, že někteří lidé budou používat diagramy a někteří ne .

Dalším problémem je to, že software diagramy mají tendenci být spojena s těžkém procesu . Takové procesy tráví hodně času kreslení diagramů , které nepomáhají a může skutečně způsobit škodu. Takže si myslím, že lidé by měli být poučeni, jak používat diagramy dobře a vyhnout se pasti , spíše než” pouze tehdy, pokud musí být ( slaboch ) ” zprávu, která obvykle vychází z Xperts .

Tak tady je moje rada pro použití diagramů dobře .

První mějte na paměti to, co jste kreslení diagramů pro . Primární hodnota je komunikace. Efektivní komunikace znamená výběr důležitých věcí a zanedbáníméně důležité. Tato selektivita je klíčem k použití UML dobře . Nekreslete každé třídě – jen ty důležité . Pro každou třídu , nevykazují každý atribut a provoz – jen ty důležité . Nekreslete sekvenční diagramy pro všechny případy použití a scénáře – pouze … dostanete obrázek . Častým problémem se společným využitím diagramů je, že lidé se snaží , aby byly komplexní . Kód je nejlepším zdrojem komplexních informací , jak je kód nejjednodušší držet krok s kódem . Pro diagramy komplexnost je nepřítelem srozumitelnosti .

Běžné použití diagramů je prozkoumat ještě předtím, než začnete kódování to. Často máte pocit, že tato činnost je nezákonná v XP, ale to není pravda . Mnoho lidí říká, že když máte lepkavou úkol stojí za to scházení mít rychlý návrh relaci jako první. Nicméně, když budete dělat takové sezení :

držet je krátký
Nesnažte se řešit všechny podrobnosti ( jen ty důležité )
považovat výsledný design jako skici , ne jako konečný návrh

Poslední bod má hodnotu rozšíření . Pokud nemáte nějaké up-front designu , budete nevyhnutelně zjistíte, že některé aspekty návrhu jsou špatné , a zjistit pouze to při kódování . To není problém, za předpokladu, že potom změnit design. Problém nastává, když si lidé myslí design je dělán , a pak neberou znalosti, které získali prostřednictvím kódování a spusťte jej zpět do designu.

Změna designu nemusí nutně znamenat změnu na obrázcích. Je to naprosto rozumné kreslit diagramy , které vám pomohou pochopit konstrukci a pak hodit diagramy pryč. Kresba je pomáhal , a to je dost , aby se jim vyplatilo. Nemají ke zmagnetizování na permanentní artefakty . Nejlepší UML diagramy nejsou artefakty .

Mnoho XPers použití CRC karty . To není v rozporu s UML. Já používám kombinaci CRC a UML celou dobu , podle toho, co používáte technika je nejužitečnější pro práci v ruce.

Další použití UML diagramů je na průběžné dokumentace . Ve své obvyklé formě, to je model s bydlištěm na případové nástroj. Myšlenka je, že vedení této dokumentace pomáhá lidem pracovat na systému. V praxi se často nepomůže vůbec .

to trvá příliš dlouho , aby diagramy aktuální, takže vypadnout synchronizován s kódem
které jsou skryty v případě, nástroje nebo husté pojiva , takže nikdo na ně dívá

Takže rada na průběžné dokumentace běží z těchto pozorovaných problémů:

Používejte pouze diagramy, které můžete průběžně aktualizovat bez znatelného bolesti
Dejte diagramy , kde si každý může snadno vidět. Rád je umístit na zeď. Motivovat lidi k úpravě stěn kopii s perem pro jednoduché změny.
Věnujte pozornost tomu, zda lidé používají je, pokud ne je vyhodit .

Posledním aspektem je pomocí UML pro dokumentaci vpředání situace , například když jedna skupina předává do druhé. Tady jde o XP je , že výroba dokumentace jeuživatel příběh jako každý jiný , a tím i její obchodní hodnota je určena zákazníkem . Opětje zde velmi užitečná UML , poskytující schémata jsou selektivní pomoci komunikace . Pamatujte si, že kód je pramen informace , schémata jednat shrnout a zdůraznit důležité otázky .
na Metafora

Tak já bych mohl také říct to veřejně – jsem ještě přišel na kloub této metafory věci. Viděl jsem to funguje a funguje dobře na projektu C3 , ale to neznamená, že mám nějaký nápad, jak to udělat, natož vysvětlit, jak to udělat.

Praxe XP metafora je postaven na přístupu Ward Cunninghams v systému jmen. Důležité je, že jste přišli sdobře známá sada jmen, která působí jako slovník hovořit o doméně . Tento systém jmen hraje do toho, jak pojmenovat třídy a metody v systému

Jsem postavil systém jmen budování konceptuální model domény. Udělal jsem to s odborníky domény pomocí UML nebo jeho předchůdci. Zjistil jsem, že musíte být opatrní, jak to udělat. Musíte se držet minimální jednoduchou sadu zápisu , a vy budete muset chránit před tím, aby nějaké technické problémy plíží do modelu . Ale pokud to budete dělat Zjistil jsem, že můžete použít k vybudování slovník doméně doménové odborníci mohou pochopit a používat ke komunikaci s vývojáři . Tento model neodpovídá třídy návrhy perfektně , ale je to dost, aby společný slovník pro celou doménu .

Teď nevidím žádný důvod, proč tento slovník nemůže býtmetaforické jeden , jako je metafora C3 , který se obrátil mzdy do linky továrny montáž . Ale já také nevidím důvod, proč založit systému jmen na slovníku domény je tak špatný nápad jeden. Ani jsem nakloněn opustit techniku, která funguje dobře pro mě v získávání systém jmen .

Často lidé kritizují XP na základě toho, že si potřebujete alespoň nějaké osnovy návrhu systému . XPers často reagují s odpovědí, ” to je metafora ” . Ale pořád si nemyslím, že jsem viděl metafora je vysvětleno v přesvědčivým způsobem. To je skutečný rozdíl v XP , a ten, který je potřeba , aby XPers vyřešit .
Chceš býtarchitekt , až vyrosteš ?

Pro hodně z posledního desetiletí , termín ” softwarový architekt ” se stala populární . Je to termín, který je obtížné pro mě osobně k použití. Moje žena je stavební inženýr . Vztah mezi inženýry a architekty je … zajímavé. Moje oblíbená je ” architekti jsou dobré pro tři dvojky : žárovky , keře, ptáci ” . Představa je, že architekti přijít se všemi těmito krásnými kresby , ale je to inženýři , kteří mají zajistit, že se skutečně může postavit . V důsledku toho jsem se vyhnuli termínu softwarový architekt , po tom všem , pokud moje žena nemůže se mnou s profesionálním vzhledem , jakou šanci mám vydržet s někým jiným ?

V programu , termín architekt znamená mnoho věcí. ( . V softwaru každý termín znamená mnoho věcí ) Obecně však vyvolává jisté vážnosti , jak v “já nejsem jen pouhý programátor – Jsem architekt ” . To se může promítnout do ” Jsem architekt teď – jsem příliš důležité na to dělat žádné programování ” . Nabízí se tedy otázka , zda jedna z oddělení se od světské programování úsilí je něco, co byste měli udělat, když chcete vykonávat odborný vedení.

Tato otázka generuje obrovské množství emocí. Viděl jsem lidi dostat velmi rozzlobený při pomyšlení , že nemají roli víc jako architekti . ” Není místo v systému Windows XP pro zkušené architekty ” je častoslyším křik .

Stejně jako v roli samotné konstrukci , nemyslím si, že je to pravda, že XP necení zkušenosti nebo dobrý design dovednosti. Ve skutečnosti mnoho zastánců XP – Kent Beck , Bob Martin a samozřejmě Ward Cunningham – jsou ti, od nichž jsem se naučil hodně o tom, co design je kolem. Nicméně to neznamená, že jejich role změní od toho, comnoho lidí vidí jako roli technického vedení.

Jako příklad , budu citovat jeden z našich technických vedoucích na ThoughtWorks : Dave Rice . Dave prošel několika životních cyklů a převzal neoficiální plášť technické olova na padesát osoba projektu. Jeho role jako vůdce znamená, že tráví spoustu času se všemi programátory. Bude pracovat s programátorem , když potřebují pomoc, rozhlédne se , kdo potřebuje pomoc. Významným znakem je , kde sedí . Jako dlouhodobé ThoughtWorker , mohl docela dobře mít žádnou funkci se mu líbila . Sdílel jeden na chvíli se Cara ,uvolnění manažer . Nicméně v posledních několika měsících se přestěhoval do otevřených polí , kdeprogramátoři práce (za použití otevřeného ” válečného pokoj” styl, který XP upřednostňuje . ), Je to pro něj důležité, protože tento způsob vidí , co se děje , a je k dispozici k zapůjčení ruka tam, kde je to potřeba .

Ti, kteří vědí, XP, uvědomíte si, že jsem popisoval explicitní XP roli kouče . Ve skutečnosti jeden z mnoha her se slovy , že XP dělá je, že volá vedoucí technický údaj” trenér ” . Význam je jasný: v XP vedení technického ukazuje učí programátory a pomáhá jim při rozhodování . Je to ten, který vyžaduje dobré lidi dovednosti , jakož i dobré technické dovednosti. Jack Bolles na XP 2000 poznamenal, že existuje jen malý prostor se pro pána osamělý . Spolupráce a učení jsou klíčem k úspěchu.

Na konferenci večeři , Dave a já jsem mluvil s hlasitý oponent XP. Jak jsme diskutovali , co jsme udělali , bylo podobnosti v našem pojetí poměrně výrazný . Všichni jsme rádi adaptivní iterativní vývoj . Testování bylo důležité . Takže jsme byli zmateni při prudkostí jeho opozice . Pak přišel jeho prohlášení , v duchu ” to poslední, co chci, je moje programátoři refactoring a monkeying kolem s designem ” . Nyní bylo vše jasné. Koncepční propast se dále vyložil Dave mi říkal později ” , když nebude věřit svým programátorům proč se najímají ?” . V XP nejdůležitějšízkušený vývojář může udělat, je předat co nejvíce znalostí , jak si může více junior vývojáře. Místo architekta, který dělá všechny důležité rozhodnutí, máte trenéra , který učí vývojářům dělat důležitá rozhodnutí . Jak Ward Cunningham zdůraznil tím, že zesiluje své schopnosti , a přidává k projektu , než nějaký hrdina osamělý moci.
reverzibilita

V XP 2002 Enrico Zaninotto Přednesl strhující vyprávění , kde se diskutovalo tie -ins mezi agilních metod a Lean Manufacturing . Jeho názor, že jedním z klíčových aspektů obou přístupů, bylo to, že řeší složitost snížením nevratnost v tomto procesu .

V tomto pohledu jedním z hlavních zdrojů složitosti jenevratnost rozhodnutí . Pokud můžete snadno změnit své rozhodnutí, to znamená, že je méně důležité , abyste je správně – což dělá váš život mnohem jednodušší. Důsledkem evolučního návrhu je, že návrháři muset přemýšlet o tom, jak se mohou vyhnout nezvratnost ve svých rozhodnutích . Spíše než se snažit získat správné rozhodnutí teď , podívejte se na způsob, jak buď odložit rozhodnutí až později (pokud budete mít více informací ), nebo učinit rozhodnutí, takovým způsobem , že budete moci obrátit na později bez větších obtíží .

Toto rozhodnutí podpořit vratnost je jeden z důvodů, že agilní metody dát hodně důrazem na zdrojových systémů kontroly kódu a uvedení všechno do takového systému. I když to není zárukou zpětného převedení zejména pro vytoužený životností rozhodnutí , poskytuje základ , který dává důvěru týmu, i když je to jen zřídka.

Projektování vratnost také znamená proces, který dělá chyby objeví rychle. Jedna z hodnot iterativní vývoj je to, že rychlé iterace umožňuje zákazníkům vidět systém , jak to roste , a je-li k omylu v požadavcích , že lze vysledovat a stanoví před náklady na upevnění se příliš vysoké. Stejný rychlé nanášení je také důležité pro design . To znamená, že budete muset nastavit věci tak, aby potenciální problémové oblasti rychle otestovat, jaké otázky dorazí. To také znamená, že to stojí za to dělat pokusy , jak tvrdé budoucí změny mohou být , i když nemáte skutečně provést skutečnou změnu teď – účinně odvádí Jednorázové prototyp na větve systému. Několik týmů vykazování vyzkoušení budoucí změny na počátku prototypu režimu a uvidíte, jak těžké to bude.
Will Design

I když jsem se soustředil spoustu technických postupů v tomto článku , jedna věc, která je příliš snadné nechat se je lidský aspekt .

Aby bylo možné pracovat , evoluční návrh potřebuje sílu, která řídí to konvergovat . Tato síla může pocházet pouze od lidí – někdo v týmu musí mít odhodlání zajistit, abykvalita designu zůstává vysoká.

Tato vůle nemusí pocházet z každého ( i když je to hezké, kdyby se to dělá ) , obvykle jen jeden nebo dva lidé v týmu převzít odpovědnost za udržování konstrukční celek. To je jeden z úkolů, které obvykle spadá pod pojem ” architekt “.

Tato odpovědnost znamená udržovat konstantní pozor na kódové základny , kteří chtějí zjistit, zda některé oblasti IT jsou stále chaotický, a pak brát rychlé kroky k nápravě problému , než se dostane mimo kontrolu. Držitel návrhu nemusí být ten, kdo řeší – ale oni přece mají zajistit, že se dostane stanovena někým .

Nedostatek vůle navrhnout Zdá se, žehlavní důvod, proč evoluční návrh může selhat . I když lidé jsou obeznámeni s tím, co jsem mluvil v tomto článku , aniž by se navrhnout konat nebude .
Věci, které jsou obtížně refaktorovat v

Můžeme použít refaktoring zabývat se všemi rozhodnutí o návrhu , nebo jsou některé problémy, které jsou tak všudypřítomné , že je obtížné přidat později? V současné době ,XP pravoslaví je, že všechny věci jsou snadno přidat , když je potřebujete , tak YAGNI platí vždy . Zajímalo by mě, jestli tam jsou výjimky. Dobrým příkladem něčeho, co je kontroverzní přidat později je internacionalizace . Je to něco, co je taková bolest přidat později , že byste měli začít s tím hned?

Mohl bych si snadno představit , že tam jsou některé věci , které by spadaly do této kategorie. Nicméně je skutečností, že máme před sebou ještě velmi málo údajů . Máte-li něco přidat , jako internacionalizace , později jste si velmi dobře vědomi úsilí je zapotřebí, aby tak učinily. Jste méně vědomé snahy by to vlastně vzaly , týden po týdnu , aby ji a udržovat ji dřív, než bylo ve skutečnosti potřeba. Také jste méně vědomi skutečnosti, že můžete také dostali to špatný , a tak potřeboval udělat nějaký refactoring tak jako tak.

Součástí zdůvodnění YAGNI je, že mnohé z těchto potenciálních potřeb skončit není potřeba , nebo alespoň ne tak, jak byste čekali . Tím, že při nich , ušetříte hodně úsilí. I když tam bude úsilí potřebné refaktorovat jednoduché řešení na to, co skutečně potřebují , to je refaktorování pravděpodobně méně práce, než budování všechny sporné prvky .

Dalším problémem je třeba mít na paměti, v tomto je, zda opravdu víte , jak to udělat . Pokud jste si udělal internacionalizace několikrát , pak budete vědět, vzory , které potřebujete zaměstnat . Jako takový máte větší pravděpodobnost, že si to pravé. Přidání předběžná struktur je asi lepší, když jste v této pozici, než kdyby jste nový problém . Takže moje rada by byla , že pokud víte , jak to udělat , jste schopen posoudit náklady to dělá teď dělat později. Nicméně, pokud jste to udělal předtím , ne jen nejsi schopen posoudit náklady docela dobře, vy jste také méně pravděpodobné, že to dobře . V takovém případě byste měli přidat později . Pokud si přidat té doby, a to bolestivé , budete pravděpodobně lépe , než by byl, kdyby jste přidali to brzy. Váš tým je zkušenější , víte, že doménu lépe , a vy rozumíte požadavkům lépe . Často se v této poloze se podíváte na to, jak snadné by to bylo s 20/20 zpětném pohledu . To může být mnohem těžší, přidejte ji dříve, než si myslíte.

Když jsme začali naši cestu do evolučního návrhu na ThoughtWorks jsme běželi přímo na otázku , zda bylo možné navrhnout databázi v evolučním způsobem. Díky úsilí Pramod Sadalage jsme zjistili, že to jasně mohla být, a že znalost stál nás v dobrém užitku od té doby . Pro více informací si můžete přečíst článek, kde jsme zavedli tyto techniky na světě, na mých stránkách .

To také navazuje na otázku o uspořádání příběhů . Při plánování XP , Kent a já otevřeně indikována svůj nesouhlas . Kent je ve prospěch nájmu obchodní hodnota může být jediným faktorem při jízdě po objednání příběhů. Po počáteční neshody Ron Jeffries se s tímto návrhem souhlasí . Jsem stále nejistý. Věřím, že jerovnováha mezi obchodní hodnoty a technické riziko. To by jet , abych alespoň některé internacionalizace brzy toto riziko . To však platí pouze v případě internacionalizace bylo potřeba pro první vydání. Jak k propuštění tak rychle, jak je to možné , je životně důležité. Jakékoli další složitost stojí za to dělat po prvním vydání , pokud to není nutné pro první vydání. Síla odeslány , běžící kód je obrovský. Zaměřuje pozornost zákazníků , roste důvěryhodnost , a je masivní zdrojem učení . Udělat vše, co může, aby toto datum blíž. I když je více úsilí přidat něco od prvního vydání, je lepší vydat dříve .

S trochou nové techniky je přirozené, že jeho zastánci nejste jisti jeho okrajových podmínek . Většina XPers bylo řečeno, že evoluční návrh je nemožné pro určitý problém , jen aby zjistil, že je to opravdu možné . To dobývání ” nemožných ” situace vede k přesvědčení, že všechny tyto situace mohou být překonány . Samozřejmě nemůžete učinit takové zobecnění , ale dokudkomunita XP hity hranice a selže, nikdy nemůžeme být jisti, kde tyto hranice leží , a to přímo vyzkoušet a tlačit za potenciální hranice, které ostatní mohou vidět.

(Nedávný článek Jim Shore popisuje některé situace , včetně internacionalizace , kde potenciální hranice se ukázalo nebýt překážky po všem. )
Je návrh děje ?

Jedním z problémů z evolučního návrhu je, že je velmi těžké říct, jestli design je skutečně děje . Nebezpečí prolínání design s programováním je , že programování může dojít, aniž designu – to je situace, kdy Evoluční návrh rozchází a selže.

Pokud jste ve vývojovém týmu, pak cítíte , zda provedení se děje podle kvality kódu. Pokud je kód základna je stále složitější a obtížnější pracovat, není dostatek designu stále provádí . Ale bohužel to je subjektivní hledisko . Nemáme spolehlivé ukazatele, které nám může dát objektivní pohled na kvalitu designu .

Pokud se tento nedostatek viditelnosti je těžké pro technické osoby , je to daleko více alarmující pro netechnické členy týmu. Pokud jste manažer nebo zákazníkem , jak můžete říct, jestli je software navržen tak ? Záleží na vás, protože špatně navržený software bude dražší změnit v budoucnosti. Neexistuje žádná jednoduchá odpověď na tuto otázku , ale zde je několik tipů .

Poslechněte si technické osoby . Pokud si stěžují na obtížnost změny , pak se tyto stížnosti vážně a dát jim čas na opravu věci.
Dávejte pozor na to, jak moc kód je vyhodit. Projekt, který má zdravé refaktoring bude trvale odstranit špatný kód . Pokud se nic dostat odstraněny , pak je to téměř jistěznámkou toho, že tam není dost refactoring děje – což povede k návrhu degradaci . Nicméně jako každá metrika může být zneužit , názor dobrém technickém lidí vítězí nad každou metrických , přes jeho subjektivitě .

Takže je design mrtvý ?

Není v žádném případě , ale povaha konstrukce změnila . XP design vypadá na následující dovednosti

Konstantní touha , aby kód tak jasné a jednoduché , jak je to možné
Refactoring dovednosti , takže můžete s jistotou provést zlepšení , kdykoliv vidíte potřebu .
Dobrá znalost vzorů: nejen řešení , ale také ocenit kdy je použít a jak se vyvíjí do nich.
Konstrukce s okem na budoucí změny , protože věděl, že přijatá rozhodnutí se bude muset v budoucnu změnit .
Vědět, jak komunikovat design pro lidi, kteří potřebují pochopit , pomocí kódu , diagramy a především : konverzace .

To je strašný výběr dovedností , ale pak byldobrý designér byl vždy těžký . XP není opravdu o nic jednodušší , alespoň ne pro mě. Ale myslím, že XP se nám nový způsob, jak přemýšlet o efektivní návrh , protože to učinil evoluční návrhvěrohodné strategie znovu. A já jsem velký fanda evoluce – jinak kdo ví, co bych mohl být?