Design antiparents Antywzorce projektowe

Download Report

Transcript Design antiparents Antywzorce projektowe

Metoda i Analiza Systemów
Prezentację przygotowali:
Jacek Klimaszewski
Krzysztof Czerwonka
1
Antywzorzec to opis złej praktyki - błędu
popełnianego na tyle często, iż został
zidentyfikowany, nazwany i udokumentowany.
Podczas gdy wzorce projektowe prezentują
poprawne
rozwiązania
pewnych
klas
problemów, antywzorce wykorzystujemy w
celu identyfikacji błędów w sztuce.
2
Człowiek jest na tyle skomplikowany, iż łatwiej
zapamiętuje przykłady negatywne niż pozytywne - z
tego też powodu antywzorce są poręcznym narzędziem
dydaktycznym.
Antywzorzec nie byłby przydatny, gdyby zawierał
tylko opis błędu. Antywzorce to także działania, które
należy podjąć, aby naprawić popełniony błąd.
Większość antywzorców jest efektem konkretnej
postawy
członków
zespołu
prowadzące
do
powstawania złych praktyk między innymi duma,
lenistwo, zachłanność, pycha czy ignorancja.
3
Spojrzenie
programisty
na
rozwiązywanie problemów z kodem będzie
inne od podejścia reprezentowanego przez
architekta lub menadżera projektu. Każda z
tych osób będzie postrzegała błędy w
projekcie informatycznym ze swojego
punktu widzenia.
4
1)
2)
3)
5
Antywzorce programistyczne
Antywzorce achitektoniczne
Antywzorce w zarządzaniu
Pierwszą grupę stanowią antywzorce
programistyczne ponieważ to do programisty
należy odszukanie najlepszej drogi do
rozwiązania problemu.
6
Następną kategorią są antywzorce dotyczące
architektury programu. Wówczas to struktura
systemu i konsekwencje jej zastosowania
powodują że dane rozwiązania należy poddać
refactoringowi.
Refactoring - to pojęcie związane z
wytwarzaniem systemów informatycznych, w
szczególności z programowaniem. Jest to proces
wprowadzania zmian w projekcie/programie, w
wyniku którego zasadniczo nie zmienia się
funkcjonalność.
7
Ostatnią
z
wyodrębnionych
grup
antywzorców są błędy popełnione podczas
zarządzania projektem. Ten typ wzorców
bezpośrednio dotyczy członków zespołu
tworzącego oprogramowanie oraz ich ról, jest
także bezpośrednio związany z technicznymi
aspektami projektu (zarządzanie kodem,
dokumentacja).
8
9







10
Pośpiech
Lenistwo
Ignorancja
Apatia
Zachłanność
Duma
Filisterstwo
Okrojony do minimum czas poświęcony na
poszczególne zadania powoduje bardzo niską
jakość stworzonego oprogramowania, błędy w
kodzie powodujące niestabilność, niską
wydajność oraz częste problemy z jej
bezpieczeństwem.
11
Programiści, menadżerowie, a nawet
architekci często podejmują decyzje szukając
najprostszej drogi do celu, przy czym często
nie szukają alternatywnych rozwiązań.
12
Szukając szybkiego rozwiązania, często
możemy sobie nie zdawać sprawy z jego
konsekwencji w kontekście architektury całego
systemu lub jego przyszłego rozwoju. Brak
przemyślanego rozwiązania może również do
dużych opóźnień oraz niskiej jakości
oprogramowania.
13
Z
punktu
widzenia
projektowania
zorientowanego obiektowo, apatia to niechęć
do stworzenia odpowiedniego podziału
systemu na komponenty, które można łatwo
wymieniać, a każda zamiana nie powoduje
konieczności przebudowywania systemu.
14
Niemożliwość
pohamowania
chęci
stworzenia
rozwiązania
najlepszego,
najwydajniejszego, najbardziej skalowalnego
prowadzi do powstania bardzo złożonych i
szczegółowych projektów, skomplikowanych w
implementacji, integracji, rozwoju czy nawet
testowaniu.
15
Tworząc funkcje, których nikt nie wymagał,
budując
imponujące
i
nad
wyraz
skomplikowane projekty architektoniczne
stwarzamy potencjalne ryzyko dla powodzenia
projektu. Wykorzystanie nowych technologii,
przyjmowanie nierealnych wyzwań często
prowadzi do nieświadomego budowania
antywzorcowego.
16
Brak znajomości wielu technologii przez
programistę lub architekta, który jawnie
odrzuca poprawne rozwiązania forsując
jednocześnie swoje podejście do problemu
staje się przyczyną powstawania błędnych
rozwiązań.
17
18



19
Magiczna atrapa (ang. Smoke and mirrors, od triku magicznego):
Antywzorzec dotyczy najczęściej oprogramowania, które nie ma
zaimplementowanej funkcjonalności, chociaż udaje, że ją ma (np. nie
działające formularze, opcje konfiguracyjne). Termin ten używany jest
także w kontekście prezentowania możliwości firmy - wykonawcy
klientowi, tak, aby ten myślał, że firma jest w stanie wykonać zleconą
pracę.
Eksplozja oprogramowania (ang. Software bloat): Przydzielanie kolejnym
wersjom oprogramowania coraz większej ilości zasobów z powodu jego
nadmiernego rozrostu. Oprogramowanie jest często rozwijane poprzez
dodawanie kolejnych funkcjonalności, bez ulepszania istniejących, co
zwiększa zarówno jego wymagania, jak i liczbę osób potrzebnych do jego
utrzymywania.
Zarządzanie poprzez bzdury (ang. Bullshit Management): Zarządzanie
projektem bez odpowiedniej wiedzy na temat przedmiotu projektu. Nazwa
wzięła się od kierowników, którzy są przekonani, że aby dobrze zarządzać
projektem nie trzeba mieć wiedzy, wystarczy sprawiać dobre wrażenie,
wygłaszając mądrze brzmiące opinie.





20
Zamiana funkcjonalności, Inwersja abstrakcji (ang. Abstraction inversion):
Brak implementacji funkcjonalności wymaganej wprost przez
użytkowników (na odpowiednio wysokim poziomie abstrakcji) zmusza ich
do stosowania obejść i składania jej z innych (zazwyczaj prostszych) funkcji
systemu.
Niejednoznaczny punkt odniesienia (ang. Ambiguous viewpoint):
Obiektowe modele systemu są prezentowane bez wskazania do czego się
odnoszą (bez określenia w jakim kontekście są ukazane).
Błotna bryła (ang. Big ball of mud): Dotyczy systemu o trudnej do
wyodrębnienia i zrozumienia strukturze. Modyfikowanie takiego systemu
jest ryzykowne, gdyż nie sposób jest przewidzieć skutków zmian, kod
przypomina spagetti.
Petrochemia (ang. Gas factory): Zbyt skomplikowany, uciążliwie
drobiazgowy projekt systemu lub funkcjonalność.
Interfejs gigant (ang. Interface bloat): Tworzenie rozbudowanych i ciężkich
interfejsów (w sensie diagramu klas) tak, że stają się one ciężkie do
implementacji.



21
Paraliż analityczny (ang. Analysis paralysis): zjawisko to zachodzi wtedy,
gdy koszty poniesione na analizę decyzji przekraczają korzyści wynikające z
podjęcia tej decyzji. Często analiza zagadnienia zagłębia się do takiego
poziomu szczegółowości, że trudno jest ją ogarnąć, zidentyfikować
problemy, a kontekst zagadnienia jest tracony.
Dojna krowa (ang. Cash cow): pojęcie określające bardzo dochodowy
produkt, w rynku sprzedaży którego firma ma duży udział, jest zarazem
nazwą antywzorca. Jest nim wtedy gdy firma skupiająca swoją uwagę na
sprzedaży dochodowego produktu, nie pracuje jednocześnie nad nowymi
produktami. Dochodowy produkt może w niedługim czasie okazać się
przestarzały, a firma z powodu braku nowości wypadnie z rynku.
Ciągła przestarzałość (ang. Continuous obsolescence): Zjawisko, kiedy
firma poświęca więcej uwagi na przenoszenie istniejącego systemu na
nowe platformy i środowiska, niż nad poprawą jego funkcjonalności.
Dziękuję z uwagę
22