Anti -vzor - Anti-pattern
Anti-vzor je společná odpověď na opakující se problém, který je obvykle neefektivní a hrozí, že bude velmi kontraproduktivní. Termín, který v roce 1995 vytvořil počítačový programátor Andrew Koenig , byl inspirován knihou Design Patterns , která zdůrazňuje řadu návrhových vzorů při vývoji softwaru, které její autoři považovali za vysoce spolehlivé a efektivní.
Tento termín byl propagován o tři roky později knihou AntiPatterns , která rozšířila jeho použití mimo oblast softwarového designu a neformálně odkazovala na jakékoli běžně objevené, ale špatné řešení problému. Mezi příklady patří analytická paralýza , programování kultu nákladu , pochod smrti , skupinové myšlení a zablokování dodavatele .
Definice
Podle autorů Design Patterns existují dva klíčové prvky anti-vzorce, které jej odlišují od špatného zvyku, špatné praxe nebo špatného nápadu:
- Anti-vzor je běžně používaný proces, struktura vzorce působení, která, přestože se zpočátku jeví jako vhodná a účinná reakce na problém, má více špatných důsledků než dobrých
- Existuje další řešení problému, které se pokouší anti-pattern řešit, což je zdokumentováno, opakovatelné a ukázalo se, že je účinné tam, kde anti-pattern není
Příklady
Sociální a obchodní operace
Organizační
- Analytická paralýza : Projekt, který se zastavil ve fázi analýzy vývoje a není schopen dosáhnout podpory žádnému z potenciálních plánů jeho implementace
- Kůlna na kola : Přikládání nepřiměřené váhy triviálním problémům
- Krvácení : Provoz s nejmodernějšími technologiemi, které jsou stále nevyzkoušené nebo nestabilní, což vede k překročení nákladů, nedostatečnému výkonu nebo zpožděnému dodání produktu
- Apatie nezúčastněných osob: Fenomén, ve kterém jsou lidé méně pravděpodobní nebo nenabízejí pomoc člověku v nouzi, když jsou přítomni ostatní
- Cash cow : Ziskový starší produkt, který často vede ke spokojenosti s novými produkty
- Návrh podle komise : Výsledek mnoha přispěvatelů k designu, ale žádná sjednocující vize
- Eskalace závazku : Neodvolání rozhodnutí, které se ukáže jako špatné
- Groupthink : Kolektivní stav, kdy členové skupiny začínají, často nevědomky, uvažovat stejně a odmítat různé úhly pohledu
- Řízení podle cílů : Vedení pracující s výhradním zaměřením na kvantitativní kritéria řízení, jako je počet prodejů, pokud nejsou nezbytná nebo je jejich pořízení příliš nákladné
- Mikromanagement : Neúčinné výsledky vyplývající z nadměrného pozorování, dohledu nebo jiného praktického zapojení vedení
- Morální hazard : Izolace rozhodovacího orgánu od důsledků jeho rozhodnutí
- Správa hub : Udržování zaměstnanců „ve tmě a krmených hnojem“ (také „ponecháno na dušení a nakonec v konzervě“) o rozhodnutích přijímaných vedením
- Peterův princip : Neustále prosazovat jinak dobře fungující zaměstnance až do pozice, na kterou se nehodí, s odpovědností, kterou při plnění nekompetentní, kde zůstávají neomezeně dlouho
- Seagull management : Management, ve kterém manažeři komunikují se zaměstnanci pouze tehdy, když nastane problém, když „vletí dovnitř, hodně hlučí, vrhnou se na všechny, nevyřeší problém, pak odletí“
- Stovepipe nebo Silos : Organizační struktura izolovaných nebo poloizolovaných týmů, ve kterých probíhá příliš mnoho komunikace v hierarchii nahoru a dolů, nikoli přímo s jinými týmy v celé organizaci
- Typcasting : Uzamčení úspěšných zaměstnanců do příliš bezpečných, úzce definovaných a předvídatelných rolí na základě jejich minulých úspěchů, nikoli jejich potenciálu
- Uzamčení dodavatele : Vytvoření systému nadměrně závislého na externě dodávané součásti
Projektový management
- Košík před koněm : Zaostření příliš velkého množství zdrojů na fázi projektu mimo jeho pořadí
- Pochod smrti : Projekt, jehož zaměstnanci očekávají, že selžou, jsou nuceni pokračovat, často s velkým přetížením, vedením popírajícím možné selhání projektu.
- Pravidlo devadesát devadesát : Tendence podceňovat dobu potřebnou k dokončení projektu, když je „téměř hotový“
- Overengineering : Vynakládání zdrojů na vytvoření robustnějšího a složitějšího projektu, než je potřeba
- Dotvarování rozsahu : Nekontrolované změny nebo nepřetržitý růst v rozsahu projektu nebo přidávání nových funkcí do projektu poté, co byly navrženy a přijaty původní požadavky (známé také jako dotvarování požadavků a dotvarování funkcí )
- Kouř a zrcadla : Ukázka neimplementovaných funkcí, jako by již byly implementovány
- Brooksův zákon : Přidání dalších zdrojů do projektu za účelem zvýšení rychlosti, když je projekt již zpomalen koordinační režií
- Gold plating : Pokračování v práci na úkolu nebo projektu dostatečně daleko za bodem, kdy zvláštní úsilí nepřidává hodnotu
Softwarové inženýrství
Softwarový design
- Inverze abstrakce : Nevystavuje implementované funkce požadované volajícími funkce/metody/konstruktoru, takže volající kód nešikovně znovu implementuje stejnou funkci, pokud jde o tato volání
- Ambiguous viewpoint : Presenting a model (usually Object-oriented analysis and design (OOAD)) without specifying its viewpoint
- Velká koule bahna : Systém bez rozpoznatelné struktury
- Database-as-IPC : Použití databáze jako fronty zpráv pro rutinní meziprocesovou komunikaci, kde by byl vhodný mnohem lehčí mechanismus
- Efekt vnitřní platformy : Systém tak přizpůsobitelný, aby se stal špatnou replikou platformy pro vývoj softwaru
- Input kludge : Zadání a implementace zpracování možná neplatného vstupu není k dispozici
- Nadměrné rozhraní : Vytváření rozhraní tak výkonného, že je extrémně obtížné jej implementovat
- Kouzelné tlačítko : Formulář bez dynamického ověřování nebo pomoci při zadávání, například rozevíracích seznamů
- Rasa : Neschopnost pochopit důsledky událostí, které se někdy mohou navzájem rušit
- Systém Stovepipe : Sotva udržovatelná sestava špatně souvisejících komponent
Objektově orientované programování
- Anemický model domény : Použití modelu domény bez jakékoli obchodní logiky . Objekty modelu domény nemohou v každém okamžiku zaručit jejich správnost, protože jejich logika ověřování a mutace je umístěna někde venku (pravděpodobně na více místech). Martin Fowler to považuje za anti-vzor, ale někteří nesouhlasí s tím, že je to vždy anti-vzor.
- Volání super : Vyžadování podtříd k volání přepsané metody nadtřídy
- Problém kružnice a elipsy : Podtypování typů proměnných na základě hodnotových podtypů
- Kruhová závislost : Zavádění zbytečných přímých nebo nepřímých vzájemných závislostí mezi objekty nebo softwarovými moduly
- Konstantní rozhraní : Použití rozhraní k definování konstant
- Boží objekt : Soustředění příliš mnoha funkcí do jedné části designu (třídy)
- Objektová žumpa : Opětovné použití objektů, jejichž stav neodpovídá (případně implicitní) smlouvě k opětovnému použití
- Objektová orgie : Neschopnost správně zapouzdřit objekty umožňující neomezený přístup k jejich vnitřním součástem
- Poltergeists : Objekty, jejichž jediným účelem je předat informace jinému objektu
- Sekvenční vazba : Třída, která vyžaduje, aby její metody byly volány v určitém pořadí
- Vzor Singleton : Tento návrhový vzor přináší spojení a je považován za špatné řešení
- Jojo problém : Struktura (např. Dědičnosti), které je těžké pochopit kvůli nadměrné fragmentaci
Programování
- Náhodná složitost : Programovací úkoly, které by bylo možné eliminovat lepšími nástroji (na rozdíl od zásadní složitosti vlastní řešení problému)
- Akce na dálku : Neočekávaná interakce mezi široce oddělenými částmi systému
- Kotva na lodi : Zachování části systému, který již nemá žádné využití
- Rušné čekání : Spotřeba CPU při čekání, až se něco stane, obvykle opakovanou kontrolou místo zasílání zpráv
- Selhání ukládání do mezipaměti : Zapomenutí vymazat mezipaměť, která obsahuje negativní výsledek (chybu) po opravě chybového stavu
- Kulturní programování nákladu : Používání vzorů a metod, aniž bychom pochopili proč
- Kódování podle výjimky : Přidání nového kódu pro zpracování každého zvláštního případu tak, jak je rozpoznán
- Vzorec návrhu : Použití vzorů se samo nazývalo anti-pattern, což je známka toho, že systém nevyužívá dostatečnou abstrakci
- Skrytí chyby : Zachycení chybové zprávy, než se může zobrazit uživateli, a buď nezobrazí nic, nebo zobrazí nesmyslnou zprávu. Tento anti-vzor se také nazývá Plenkový vzor . Může také odkazovat na vymazání trasování zásobníku během zpracování výjimek, což může bránit ladění.
- Tvrdý kód : Vložení předpokladů o prostředí systému při jeho implementaci
- Lasagna code : Programy, jejichž struktura se skládá z příliš mnoha vrstev dědičnosti
- Lávový tok : Zachování nežádoucího (nadbytečného nebo nekvalitního) kódu, protože jeho odstranění je příliš nákladné nebo má nepředvídatelné důsledky
- Posloupnost přepínače smyčky : Kódování sady sekvenčních kroků pomocí přepínače v rámci příkazu smyčky
- Magická čísla : Včetně nevysvětlených čísel v algoritmech
- Magické řetězce : Implementace pravděpodobně nepravděpodobných vstupních scénářů, jako je srovnání s velmi specifickými řetězci, k maskování funkcí.
- Opakování : Psaní kódu, který obsahuje opakující se vzory a podřetězce znovu; vyhnout se jednou a pouze jednou (princip abstrakce)
- Shooting the messenger : Vyhození výjimek z rozsahu pluginu nebo předplatitele v reakci na legitimní vstup, zvláště když to způsobí selhání vnějšího oboru.
- Operace brokovnice : Vývojář přidává do kódové základny aplikace funkce, které v rámci jediné změny zahrnují mnoho implementátorů nebo implementací
- Soft kód : Ukládání obchodní logiky do konfiguračních souborů místo do zdrojového kódu
- Spaghetti code : Programy, jejichž struktura je sotva srozumitelná, zejména kvůli zneužití struktur kódu
Metodický
- Programování kopírování a vkládání : Kopírování (a úprava) stávajícího kódu, nikoli vytváření obecných řešení
- Zlaté kladivo : Za předpokladu, že oblíbené řešení je univerzálně použitelné (viz: Stříbrná kulka )
- Vynalezeno zde : Tendence odmítat jakékoli inovace nebo méně než triviální řešení pocházející zevnitř organizace, obvykle kvůli nedostatku důvěry v zaměstnance
- Není zde vynalezen (NIH) syndrom: Tendence k znovuobjevení kola (nepřijetí stávajícího, adekvátního řešení)
- Předčasná optimalizace : Počáteční kódování pro vnímanou efektivitu, obětování dobrého designu, udržovatelnosti a někdy dokonce efektivity v reálném světě
- Programování pomocí permutace (nebo „programování náhodou“ nebo „programování náhodou“): Pokus o přístup k řešení postupnou úpravou kódu, aby se zjistilo, zda funguje
- Znovuobjevení hranatého kola : Nepřijetí stávajícího řešení a místo toho přijetí vlastního řešení, které si vede mnohem hůře než stávající
- Silver bullet : Za předpokladu, že oblíbené technické řešení může vyřešit větší proces nebo problém
- Vývoj řízený testery : Softwarové projekty, ve kterých jsou v hlášeních chyb specifikovány nové požadavky
Správa konfigurace
- Závislé peklo : Problémy s verzemi požadovaných produktů
- DLL peklo : Nedostatečná správa dynamických knihoven (DLL), konkrétně v systému Microsoft Windows
- Konflikt rozšíření : Problémy s různými rozšířeními pro klasický Mac OS pokoušející se opravit stejné části operačního systému
- JAR peklo : Nadměrné využití více souborů JAR , obvykle způsobující problémy s verzováním a umístěním kvůli nepochopení modelu načítání třídy Java
Viz také
- Vůně kódu - symptom špatného programování
- Designová vůně
- Tmavý vzor
- Seznam filozofií vývoje softwaru - přístupy, styly, maxima a filozofie pro vývoj softwaru
- Seznam nástrojů pro statickou analýzu kódu
- Rotace softwaru
- Software Peterův princip
- Model nezralosti schopností
- ISO/IEC 29110 : Profily životního cyklu softwaru a pokyny pro velmi malé účetní jednotky (VSE)
- Dilema inovátora
Reference
Další čtení
- Laplante, Phillip A .; Neill, Colin J. (2005). Antipatterns: Identifikace, refaktoring a správa . Auerbach Publications. ISBN 0-8493-2994-9.
- Brown, William J .; Malveau, Raphael C .; McCormick, Hays W .; Thomas, Scott W. (2000). Hudson, Theresa Hudson (ed.). Anti-Patterns v řízení projektů . John Wiley & Sons . ISBN 0-471-36366-9.