Autor: Andrew Koenig, 1995 Rozšírenie až v 1998 vďaka knihe
AntiPatterns 4 autorov, ktorí dostali prezývku The Upstart Gang of Four
Vzor riešenia, ktorý je bežne používaný, avšak jeho dôsledkami sú neefektivita alebo praktická kontraproduktívnosť
Nie každý zlozvyk je antipattern
Antipatterns
Antipattern je antipattern, akk:- na prvý pohľad vzorové riešenie má viac negatívnych ako pozitívnych dopadov- existuje známy vhodnejší vzor riešenia
Pattern = opakujúce sa riešenie Antipattern = opakujúci sa problém Softwarové inžinierstvo, biznis operácie
(projektový manažment), sociálne interakcie
Antipatterns
Prirovnanie k 7 smrteľným hriechom Zhon (haste) Apatia (apathy) Úzke zmýšľanie (narrow-mindedness) Lenivosť (sloth) Lakomosť (avarice) Ignorácia (ignorance) Pýcha (pride)
Príčiny
Bystander apathy – vidím chybu, ale neupozorním na ňu, pretože sa ma netýka
Smoke and mirrors – demonštrovanie produktu, ktorý ešte neexistuje
Overengineering - utrácanie zdrojov na zbytočné zkomplexnenie projektu
Death march – tlak na zamestnancov kvôli neprimeranému deadlineu projektu
Analysis paralysis – venovanie priveľa úsilia k fáze analýzy projektu
Project management antipatterns
Functional decomposition – procedurálny kód v objektovo-orientovanom jazyku
Boat anchor – (často drahá) časť SW/HW, ktorá nemá užitočné využitie v projekte
Cut and paste programming – kopírovanie zdrojového kódu namiesto black-boxingu
Big ball of mud – systém bez rozpoznateľnej štruktúry
Database as IPC - komunikácia medzi procesmi riešená cez databázu, ak existuje ľahší a vhodnejší spôsob
Development antipatterns
Označovaný aj ako Blob „Toto je trieda, ktorá je srdcom architektúry“
God class
Trieda toho robí/vie priveľa Designy, kde 1 trieda
monopolizuje processing a ostatné zapúzdrujú dáta
Takmer procedurálny design Nevhodné na testovanie a
mizerná znovupoužiteľnosť
Označovaný aj ako Dead code „Myslím, že sa to nikde
nepoužíva, ale istý si niesom, tak to tam radšej nechám“
Fragmenty kódu, ktorých funkcionalita a využívanosť v systéme nie je jasná
Časté v systémoch, kde research kód skončil v produkčnom kóde
Mŕtvy kód, haldy zakomentovaného kódu, slabo dokumentovaný kód, ...
Lava flow
Označovaný aj ako cigán „Neviem, čo táto trieda robí, ale
určite je dôležitá“ Triedy s obmedzenou zodpovednosťou a
rolou v systéme, ich efektívny životný cyklus je krátky
Väčšinou sú to triedy, ktoré sa na chvíľu zjavia, aby vyvolali ďalšiu činnosť a následne hneď aj zaniknú
Bezstavové triedy, objekty s krátkou životnosťou
Poltergeist
„Mám kladivo a všetko, čo vidím je klinec“ Zrejme najbežnejší antipattern Nevhodné používanie obľúbeného nástroja Rovnaké nástroje sú používané na širokú
paletu konceptuálne odlišných produktov Pri konzultácii so zákazníkom o novom
produkte odkláňanie požiadaviek smerom k už existujúcemu produktu
Po vysokých investíciách chcemsvoj produkt použiť všade, kde sa dá (alebo aj nedá)
Golden hammer
„Uvedomuješ si, že tento jazyk podporuje viac ako jednu metódu/funkciu?“
Zrejme najznámejší antipattern Systém, ktorý má veľmi slabú štruktúru Minimálne vzťahy medzi objektami Metódy sú procesne orientované, aj
objekty sa stávajú procesmi Vzor použitia objektov je predvídateľný Minimálna až nulová znovupoužiteľnosť Príčiny: neskúsenosť, žiadny mentoring,
žiadny design pred implementáciou
Spaghetti code
Input kludge – neriešenie ošetrenia vstupov Programming by permutation – hľadanie
riešenia takmer náhodným menením kódu Not invented here syndrome – ignorovanie
existujúcich riešení)=znovuobjavenie kolesa Invented here – používanie iba vlastných a
triviálnych riešení, namiesto inovácie Reinventing the square wheel – neschopnosť
použitia jestvujúceho riešenia a používanie vlastného, menej efektívneho riešenia
A mnoho ďalších...
Development antipatterns
Šťastný je človek, ktorého varuje cudzia chyba. (Jan Amos Komenský)
Najväčšia chyba, ktorú môžete v živote urobiť, je stále mať strach, že nejakú urobíte. (Elbert Hubbard)
Expert je niekto, kto pozná niektoré najhoršie chyby, ktoré sa môžu prihodiť v jeho odbore a vie, ako sa im treba vyhnúť. (Werner Karl Heisenberg)
Záver
The "Upstart Gang of Four: AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis (1998)
http://en.wikipedia.org/wiki/Anti-pattern
Zdroje