Tag Archive : Scott Ambler

Kolejna bardzo dobra książka z obszaru projektowania obiektowego. Poprzednia pozycja tego autora (Agile Modeling. Effective…) traktowała o tym kiedy, co i po co modelować. Ta, to bardzo dobry kurs UML na przykładach. Tak, Scott Ambler (nie on jeden) uważa, że modelowanie (szkicowanie) i testowanie pomysłów jest tańsze i szybsze na tablicy (papierze) niż w od razu w postaci kodu (przypomnę, że jest on jednym z sygnatariuszy Agile Manifesto).

Ta książka to jeden z lepszych kursów metod obiektowych i UML jaki miałem w rękach. Kluczem jest rozdział o paradygmacie obiektowym, zrozumienie obiektywności i opis bazujący na pojęciach a nie kodzie. Większość autorów tego typu książek, to ludzie o programistycznym rodowodzie lub aktywni programiści, obiektowość postrzegają przez pryzmat tak zwanego re-użycia kodu i konstrukcji kompilatorów, co jest kompletnym nieporozumieniem, gdyż to języki programowania i kompilatory (lepiej lub gorzej) implementują paradygmat obiektowy a nie odwrotnie.

Ale nie był bym sobą, gdybym nie miał kilku uwag a raczej uzupełnień, gdyż należy zwrócić uwagę, że książka została napisana w 2004 roku (o jej popularności mogą świadczyć dwa dodruki w 2005 roku). Ale po kolei.

Kilka uwag ode mnie

Popatrzmy na poniższe pojęcia:

relationship – stosunek do, powiązanie z (Oxford Dictionary: the way in which two or more things are connected), (SJP powiązanie: wzajemna zależność przyczyn i skutków).

association – dołączenie, skojarzenie (Oxford Dictionary: a connection between things where one is caused by the other), (SJP związek: stosunek między rzeczami, zjawiskami itp. połączonymi ze sobą w jakiś sposób, asocjacja – automatyczne skojarzenie myślowe)

Jest wiele nieporozumień związanych z tymi pojęciami, ich angielskie i polskie tłumaczenia są blisko spokrewnione, dlatego  warto tu sięgnąć do źródeł, czyli specyfikacji (https://www.omg.org/spec/UML/) a konkretnie do części  Infrastructure specification. Tam w rozdziale 11.3 Classes Diagram, znajdziemy modele pojęciowe między innymi związków i dowiemy się, że asocjacja (association) dziedziczy po związku (relationship).

Popatrzmy na rodzaje powiązań między klasami:

Model obiektowy asocjacja a użycie

Zostały one uszeregowane od góry od najogólniejszego. Nie będę używał słowa “relacja” bo w języku polskim kojarzy się (a ja zastrzegam to w swoich dokumentacjach) z modelem danych, diagramem ERD (entity relationship diagram). Dlatego w UML mamy (jak wyżej):

A. asocjacja, najogólniejsza jej forma, oznacza powiązanie dwóch klas (w modelach pojęciowych jakiekolwiek),
B. asocjacja skierowana, semantycznie pokazuje kierunek tego związku, można to interpretować tak, że klasa A wie o istnieniu B, a klasa B nie wie o istnieniu A (słowo “wie” można rozumieć także jako “ma w sobie zapisana taką informację”),
C. związek użycia (kolejny rodzaj związku), semantycznie oznacza współpracę klas, tu klasa A korzysta z usługi (wywołuje operację) klasy B,
D. związek generaliza ji, semantycznie oznacza, że klasa B jest specjalną formą (specjalizacją) klasy A, lub że klasa A jest uogólnieniem klasy B, w modelu pojęciowym pojęcie A to uogólnienie pojęcia B (pies jest uogólnieniem ratlerka, lub ratlerek, jest szczególnym przypadkiem psa, konkretny Burek, jest instancją – wystąpieniem: obiektem – klasy ratlerek),
E. związek realizacji, semantycznie oznacza, że klasa B jest specyfikacją (sposobem wykonania, realizacji) abstrakcji jaką jest klasa A (np. interfejs jest realizowany konkretną klasą lub komponentem), realizacja to nie jest forma dziedziczenia, jak twierdzą niektórzy wykładowcy i trenerzy :(.

Asocjacja jest najogólniejszym związkiem (bez żadnych dodatków reprezentuje jakikolwiek związek). Warto też wiedzieć, że związki te są inaczej realizowane. Asocjacje, jako trwałe powiązanie klas (obiektów), to zapis w atrybucie klasy. Związki użycia to wywołania operacji. Związki generalizacji i realizacji są związkami abstrakcyjnymi.

Przypadki użycia

UML to także związki generalizacji na diagramach Przypadków Użycia (UC, ang. Use Case). Używanie ich jednak ma sens czysto pojęciowy, mimo to często widuje koszmarki nazywane nie raz “diagram aktorów”, gdzie np. podwładni “dziedziczą” po swoim przełożonym, co jest kompletną bzdurą. Menedżer rzadko ma umiejętności swoich podwładnych, dotyczy to nie raz także uprawnień (szef zespołu prawników nie raz nie ma uprawnić radcowskich czy adwokackich, żaden mój szef nie miał uprawnień do informacji tajnej a ja mam od 2004 roku, itp.).

Kolejnym koszmarem jest stosowanie diagramów UC do modelowania uprawnień. Generalnie uprawnienia kogoś do czegoś to reguła a nie statystyczne trwałe powiązanie (nawet jeżeli jest to reguła dająca komuś do czegoś prawo, jest to reguła a nie stały związek dlatego, że uprawnienia to coś co zawsze można odebrać).

UML to także związki <extend> i <include>, a służą one do modelowania re-użycia kodu (o czym wspomina także Ambler w tej książce). Stosowanie ich na diagramach UC na etapie analizy i specyfikowania wymagań jest także bzdurą, gdyż o jakimkolwiek re-użyciu kodu można mówić najwcześniej na etapie projektowania implementacji. Po drugie mając w planie wykonanie modelu wewnętrznej struktury aplikacji (diagramy klas i komponentów) modelowanie re-użycia kodu czy nawet re-użycia scenariuszy UC, jest pozbawione sensu, bo jest nadmiarowe i przedwczesne. W razie wątpliwości proszę podjąć próbę skojarzenia diagramów sekwencji z odpowiadającymi im włączonymi (include) przypadkami użycia.

Dwa słowa na temat tak zwanych Systemowych przypadków użycia. Nie są to żadne wewnętrzne  UC. Z zasady UC to postrzegana z zewnątrz (przez aktora systemu) usługa systemu, można się spotkać z tym pojęciem (tu u Amblera także) ale w kontekście, takim że system w rozumieniu aplikacja, realizuje konkretne scenariuszowe cele użytkownika (aktora systemu). Innymi słowy usługą systemu jakim jest np. młotek (to prosty system, ma dwa elementy: obuch i trzonek :)) jest uderzanie, a wbijanie gwoździa, wybijanie szyby, uderzanie w dzwon itp. to konteksty aktora. Jednak z perspektywy definiowania aplikacji jest to jeden UC, ma jeden scenariusz: weź do ręki młotek, ustal miejsce uderzenia, uderz, jeżeli nie osiągnąłeś oczekiwanego rezultatu, powtórz.

Modelowanie tak zwanych “systemowych przypadków użycia” jest także pozbawione sensu, gdyż diagram UC nie służy do modelowanie wewnętrznej architektury systemu. Przypadki użycia to usługi aplikacji (pozycje w jej menu) i raczej jest jedna usługa np. “Konfiguracja” a nie Ustaw, Włącz, Wyłącz, Zmień, itp… Te celowe działania to treść modyfikowanego formularza.

Przypomnę, że książka ta powstała w 2004 roku (na co trzeba brać poprawkę czytając ją, pojawia się w niej dziedziczenie), w czasie gdy nie było jeszcze mowy o powszechnym użyciu notacji BPMN, a diagramy aktywności są dość ułomne i zarazem zbyt złożone do tego celu (o czym świadczy rosnąca stale popularność notacji BPMN i spadek popularności diagramów czynności do modelowania procesów biznesowych).

Niestety i w literaturze i w materiałach szkoleniowych, czy nawet dydaktycznych na uczelniach (o zgrozo) można się spotkać z takimi “antywzorcami” jak wyżej. Jednym z najbardziej kuriozalnych jest obecnie modelowanie danych z użyciem diagramu klas, nanosząc na nie np. jeszcze klucze główne (znalazłem coś takiego w pewnym podręczniku akademickim!). Niestety bardzo często autorzy tych materiałów, wykładowcy i trenerzy, zamiast korzystać ze źródeł, przepisują jeden od drugiego pogłębiając marazm w tej dziedzinie, a pierwowzorem wielu tych herezji są niestety materiały publikowane przez firmę SPARX (producent oprogramowania Enterprise Architect) jak choćby mój ulubieniec: czas jako Aktor systemu  (co opisałem tu).

Na zakończenie

Tak więc książkę Scott’a Amblera gorąco polecam, analitykom szczególnie, programistom także.

The Object Primer 3rd EditionAgile Model Driven Development with UML 2Cambridge University Press, 2004 ISBN#: 0-521-54018-6 (Źródło: The Object Primer 3rd Ed: Agile Model Driven Development (AMDD) with UML 2)

Co prawda książka ma 12 lat i trzeba brać na to lekka poprawkę, jednak jest to wartościowa, nafaszerowana diagramami UML, książka traktująca o tym, że zwinność nie oznacza bałaganu i pospolitego ruszenia. Scott Ambler to kolejny autorytet w inżynierii oprogramowania. I mimo, że nikogo nie ma sensu małpować, na pewno warto się uczyć…

Agile Modeling (AM) is a practice-based methodology for effective modeling and documentation of software-based systems. At a high level AM is a collection of best practices, depicted in the pattern language map below (click on the practice for information). At a more detailed level AM is a collection of values, principles, and practices for modeling software that can be applied on a software development project in an effective and light-weight manner. (Źródło: Agile Modeling (AM) Home Page: Effective Practices for Modeling and Documentation)

Po co modelować?

agileModeling

Co dają nam narzędzia? Same z siebie niewiele, bo to tylko narzędzia:

agileModelingTools

 

Te książkę dla odmiany polecam doświadczonym analitykom i projektantom. 12 lat to szmat czasu e tej branży, ale doświadczony czytelnik znajdzie w niej wiele cennych wskazówek, będzie w stanie porównać swoje doświadczenia z doświadczeniem autora i zapewne wyciągnie wiele wniosków…

Wczoraj podczas spotkania, miałem ciekawą rozmowę z przedstawicielami jednego z producentów systemów ERP. Okazało się, że mają bardzo podobne do moich doświadczenia i wnioski: podczas wdrożenia systemu ERP potrzebny im jest ktoś, jeden, kto zna i rozumie jak działa dana firma, a nie setki stron dokumentacji czy stenogramy z dziesiątków godzin warsztatów z przyszłymi użytkownikami. Do tego firma ta – nabywca systemu ERP – powinna mieć, nie szczegółowo opisane dziesiątki detalicznie opisanych procesów i ich wariantów, procedur czy setki i tysiące nie raz wymagań, a strategię i taktykę, z której wynika (da się wyczytać) rola oprogramowania ERP w firmie: taktykę czyli opis realizacji strategii firmy z pomocą planowanego do wdrożenia systemu ERP. Ta taktyka, to opis tego kiedy i po co oprogramowanie ma wspierać pracownikw organizacji. To, jak się to będzie odbywało w szczegółach, zostanie opracowane przez dostawcę (wykonawcę) konkretnego produktu, to dostawca gotowego oprogramowania opracowuje koncepcję wdrożenia, na podstawie dokumentu opisującego taktykę użycia tego oprogramowania i wymagania biznesowe (oprogramowanie dedykowane wymaga dodatkowo zaprojektowania i udokumentowania logiki biznesowej jaką ma ono realizować).

I co teraz? Teraz potrzebne jest źródło spójnej wiedzy o organizacji, jej strategii i taktyce w którą ma się wpasować oprogramowanie ERP. Któż jest tym źródłem? [[Product owner]].

Pytane teraz brzmi: kim jest i członkiem czyjego zespołu jest (powinien być) “product owner”? Tu zacytuję ostani akapit mojej ciepłej jeszcze recenzji książki:

…na ile wizja produktu uprawnia jej posiadacza do aktywnego kierowania projektem wraz z kierownikiem projektu (Scrum Master), ale to pozostawiam czytelnikom i praktykom. Jedno moim zdaniem jest pewne: nie ma sensu by zespół developera kontaktował się, z tabunem przyszłych ?userów?, ma sens by dostawał spójną wiedzę o tym co tak na prawdę ma powstać.

Źródło: Agile Product Management with Scrum | Jarosław Żeliński IT-Consulting

Autor powyższej książki nie  daje wprost odpowiedzi na to pytanie, jednak milcząco zakłada też, że to zespół dostawcy “walczy” ze zjawiskiem i product owner jest członkiem tego zespołu, nie zmienia to faktu, że wymagana od niego wiedza i zrozumienie tego, do czego user będzie używał oprogramowania, powinna być taka jak opisałem wyżej.

Co usłyszałem po raz kolejny (podobne rozmowy z dostawcami oprogramowania nie raz już prowadziłem) od przedstawicieli dostawcy systemu ERP? Potrzebują bardzo zwięzłej i spójnej dokumentacji (ale raczej 50-ciu stron niż setek, że nie wspomnę o kilku tysiącach (tak – widywałem takie) i po stronie klienta (jednej) osoby, która ten dokument zna, rozumie, ma dostęp do kluczowych osób w organizacji. Najchętniej do autora tego dokumentu… Dostawcy oprogramowania jak dostają listę setek pozycji wymagań podzielonych w mało zrozumiały sposób na funkcjonalne i poza funkcjonalne (i inne) raczej sobie z tych specyfikacji dworują niż cieszą się z ich otrzymania (pomijam, ze nie czytają w całości). Po co są więc robione? Bo zamawiający postrzega swoją pracę przez pryzmat jej złożoności, wariantowości, nie patrzy z perspektywy narzędzia a tym właśnie jest oprogramowanie. To tak jak by cieśla lub stolarz opisał wymagania na młotek ciesielski w postaci setek stron “user story” o tym jak, do czego i kiedy używa(łby) młotka.. dla analityka projektanta taki opis (a konkretnie jego skąpa część) ma sens, dla konstruktora – żadnego, ten raczej oczekuje rysunku technicznego wykonawczego.

The role of Product Owner (Scott Ambler, Agile Modeling)

The role of Product Owner (Scott Ambler, Agile Modeling)

Powyższy diagram to poglądowy model roli product ownera (PO) autorstwa jednego z moich ulubionych “zwinnych analityków”: Scott’a Amblera (Scott Ambler). Niewątpliwie można dywagować czy PO to “pracownik” dosatwcy czy kupującego ale tu chyba część wątpliwości rozwieją słowa jednego z moich klientów, postrzegam go jako jednego z lepiej zarządzających ryzykiem biznesowym, znanych mi, prezesów firm: “Panie Jarku nie wiem czy jest Pan lepszym czy gorszym specjalistą od ludzi dostawcy, zatrudniłem Pana bo przełożonym tamtych jest Prezes tamtej firmy”.

Where Do Product Owners Come From? The goods news is that there are several viable options for where Product Owners may come from: Business analyst.  Although a traditional business analyst could fill the role of product owner, there is a risk that they will fall into their old habits of communicating via documentation. Keep in mind that what agile teams really need are people with agile analysis skills who are empowered to make decisions. So, a better option is an empowered agile business analyst. (za The Product Owner Role: A Stakeholder Proxy for Agile Teams).

Tak więc nasuwa się wniosek, że rolę PO powinien pełnić ten człowiek, który właśnie skończył analizę biznesową i napisał raport z niej. Raport, który zawiera specyfikacją wymagań (najlepiej w formie jak opisana powyżej). W zasadzie nadzór autorski nad realizacją taktyki wdrożenia systemu ERP (oprogramowania w ogóle) to nic innego jak “bycie product ownerem” w projekcie na etapie jego realizacji a SCRUM faktycznie, na dzisiejsze czasy, wydaje się być najlepszą metodą zarządzania takimi projektami a utrzymywanie aktualności dokumentu analizy biznesowej i wymagań w toku projektu prowadzi do tego, że po zakończeniu projektu mamy “niechcący” kompletną i aktualną dokumentacje stanu uzyskanego w toku wdrożenia.

(książki Scotta Amblera czekają na recenzję ;))

Dom bez planów

Największy drewniany budynek zbudowany bez planów

Ciesze się, gdy pojawiają się polemiki z moimi artykułami, to znaczy, że ktoś je czyta i budzą one emocje. Czytamy na pewnym blogu (który gorąco polecam jako całość):

Zacznę od drobnej złośliwości. W maju, jako że sięgnąłem też do starszych wpisów, autor napisał: ?[…] ja już wyrosłem ze społecznych źródeł wiedzy jakim jest Wikipedia i przytoczę definicję z książek mających konkretnego autora […]?. A dzisiaj czytam, jak autor krytykuje praktyki Agile ? czerpiąc wiedzę na ich temat z tego społecznego źródła wiedzy. Kończąc złośliwość dodam adresując to do autora, że Wiki i Wikipedia to nie to samo i mają się do siebie tak ja klasa do obiektu. (źr. Zwinna analiza ? TouK).

Cóż, problem w tym, że Agile jest głównie na społecznych stronach definiowane więc nie miałem wielkiego wyboru: społeczna metodyka to i społeczna wiedza o niej…. (wiem czym jest i wiki i wikipedia, nie sądzę by tu tkwił problem).

Po drugie nie jestem wrogiem zwinności (agile a małej litery) bo sam dostosowuję metody pracy do projektu. Jednak jak by nie było manifest Agile mówi:

Poprzez wytwarzanie oprogramowania oraz pomaganie innym w tym zakresie odkrywamy lepsze sposoby realizowania tej pracy. W wyniku tych doświadczeń zaczęliśmy przedkładać:

  1. Ludzi i ich wzajemne interakcje(współdziałanie) ponad procedury i narzędzia.
  2. Działające oprogramowanie nad wyczerpującą dokumentację.
  3. Współpracę z klientem nad negocjację umów.
  4. Reagowanie na zmiany nad realizowanie planu.

Oznacza to, że wprawdzie doceniamy to co wymieniono po prawej stronie, to jednak bardziej cenimy to co wymieniono po lewej.

Ciekaw jestem np. pracy bez dobrze wynegocjowanej umowy (świat jest dla niektórych idealny… zazdrościć) i tego jak możńa coś większego zbudować bez planu (dokumentacji). Kolejny argument – IBM i czytamy:

według firmy IBM wydłużanie jej czasu przed fazą implementacji, tylko stosowanie zwinnych (agile) metodyk i choćby  w takim kierunku zmierza sztandarowy zestaw produktów tej firmy wspierających proces tworzenia oprogramowania ? IBM Rational

Popatrzyłem w opisy i cóż: Scott Ambler pisze, że trzeba próbować bo kluczowa faza pętli “szukania rozwiązania” to “Produce a potentially consumable solution” czyli tworzenie czegoś potencjalnie przydatnego… (potencjalnie). Idąc dalej, autor polemiki cytuje:

Scott Ambler (chief methodologist for Agile at IBM Rational) napisał kiedyś, że ?analiza jest tak ważna dla praktyków Agile, że robimy ją każdego dnia?

Po pierwsze metodyk od Agile w IBM (czyżby moda na Agile? Jak by nie było piewcy ciężkiego [[RUP]]’a będącego nadal podstawą w IBM)).  Powyższe to tak jak bym napisał, że “dla chirurgów plan operacji jest tak ważny, że planują co będą robić stale, nawet podczas trwania operacji”…

Agile w literaturze ma wiele znaczeń, jedno to adaptacyjność stosowanej metodyki pracy, inne to np. odkrywanie rozwiązania poprzez jego tworzenie.  Jeżeli w tym pierwszym rozumieniu jestem Agile, to jednak mam zasadę: najpierw projekt potem implementacja. Jakoś nie widzę się w projekcie, w którym drugie piętro jest dopiero planowane po wybudowaniu fundamentów, te zaś powstały bez wiedzy ile pięter powstanie.  Owszem, na pewno projekt lepiej uszczegóławiać dopiero gdy są potrzebne szczegóły, ale praca bez zbudowania szkieletu… to nie ja.

Na koniec zapytam: dlaczego zespoły “Agile” bardzo często rękami i nogami bronią się przed kontraktami “fixed price” czyli klasyczny trójkąt: czas, budżet, zakres, gdzie jest to z góry określone. Agile: zakres (to co powstanie) rodzi się podczas pracy? Czyli nie wiemy co powstanie … dopóki nie skończymy…

Cytat z komentarza:

Merry Poppendieck idzie w swoich rozważaniach dalej. Po co w ogóle robić analizę, produkować dokumenty i diagramy? Ich efektem będzie zamieszanie. Lepiej wyznaczyć cele i napisać działający kod.

Tak sobie pomyslałem: co bym miał gdybym tak właśnie podszedł do budowy domu… chociaż podobno tak się właśnie buduje na wsiach: bez planów budowlanych, budujemy i projektujemy w trakcie … a powodzie uczą pokory…

Nie jestem wrogiem Agile, jestem zwolennikiem innego autorytetu: Yourdona, który napisał w swojej książce o modelowaniu UML:

bez planów na pewno można z marszu zbić z desek np. budę dla psa bo jest mało skomplikowana i ogarnia ją wyobraźnia przeciętnego człowieka, ale dlaczego tak wielu ludzi próbuje tą metodą budować wielkie biurowce…