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:

  1. 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
  2. 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

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

Viz také

Reference

Další čtení

  1. Laplante, Phillip A .; Neill, Colin J. (2005). Antipatterns: Identifikace, refaktoring a správa . Auerbach Publications. ISBN 0-8493-2994-9.
  2. 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.

externí odkazy