220 likes | 391 Views
Anti-patterns alebo ako to nerobiť. Miroslav Sajko. Antipatterns. Autor: Andrew Koenig , 1995 Rozšírenie až v 1998 vďaka knihe AntiPatterns 4 autorov, ktorí dostali prezývku The Upstart Gang of Four
E N D
Anti-patternsalebo ako to nerobiť Miroslav Sajko
Antipatterns • Autor: AndrewKoenig, 1995 • Rozšírenie až v 1998 vďaka knihe AntiPatterns 4 autorov, ktorí dostali prezývku TheUpstart 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
Príčiny • 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)
1. Zhon • Obeťou je testovanie
2. Apatia • Nestaranie sa o riešenie známych problémov
3. Úzke zmýšľanie • Odmietanie praktických riešení, ktoré sú známe ako efektívne
4. Lenivosť • Ľahká odpoveď = dobrá odpoveď
5. Lakomosť • Zbytočná komplexnosť projektov
6. Ignorácia • Intelektuálna lenivosť
7. Pýcha • Znovuobjavovanie kolesa
Project managementantipatterns • Bystanderapathy – 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 • Deathmarch – tlak na zamestnancov kvôli neprimeranému deadlineu projektu • Analysisparalysis – venovanie priveľa úsilia k fáze analýzy projektu
Developmentantipatterns • Functionaldecomposition – procedurálny kód v objektovo-orientovanom jazyku • Boatanchor– (často drahá) časť SW/HW, ktorá nemá užitočné využitie v projekte • Cutand paste programming– kopírovanie zdrojového kódu namiesto black-boxingu • Big ballofmud– systém bez rozpoznateľnej štruktúry • DatabaseasIPC - komunikácia medzi procesmi riešená cez databázu, ak existuje ľahší a vhodnejší spôsob
Godclass • Označovaný aj ako Blob • „Toto je trieda, ktorá je srdcom architektúry“ • Trieda toho robí/vie priveľa • Designy, kde 1 trieda monopolizuje processinga ostatné zapúzdrujú dáta • Takmer procedurálny design • Nevhodné na testovanie a mizerná znovupoužiteľnosť
Lavaflow • Označovaný aj ako Deadcode • „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, ...
Poltergeist • 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
Goldenhammer • „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 chcem svoj produkt použiť všade, kde sa dá (alebo aj nedá)
Spaghetticode • „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
Developmentantipatterns • Inputkludge – neriešenie ošetrenia vstupov • Programming by permutation – hľadanie riešenia takmer náhodným menením kódu • Notinventedheresyndrome – ignorovanie existujúcich riešení)=znovuobjavenie kolesa • Inventedhere – používanie iba vlastných a triviálnych riešení, namiesto inovácie • Reinventingthesquarewheel – neschopnosť použitia jestvujúceho riešenia a používanie vlastného, menej efektívneho riešenia • A mnoho ďalších...
Záver • Šť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. (ElbertHubbard) • Expert je niekto, kto pozná niektoré najhoršie chyby, ktoré sa môžu prihodiť v jeho odbore a vie, ako sa im treba vyhnúť. (WernerKarlHeisenberg)
Zdroje • The "Upstart Gang of Four: AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis (1998) • http://en.wikipedia.org/wiki/Anti-pattern
Ďakujem za pozornosťOtázky? Kontakt: miroslav.sajko@student.upjs.sk