W poprzednim wpisie opisałem modelowanie przypadków użycia (Use Case) w oparciu o Structured Scenarios. Dzisiaj uzupełnimy ten przykład w taki sposób, aby przypadku użycia opisujące daną funkcjonalność wzbogacić o szereg aspektów technicznych, których zamodelowanie jest niezbędne dla wytworzenia oprogramowania wysokiej jakości.
Logowanie zdarzeń
Model domeny logów
Na pierwszy ogień spróbujmy zidentyfikować i zamodelować logi jakie w naszym systemie będą odkładane. Poniższy diagram klas prezentuje klasę Log po której dziedziczą pozostałe typy logów zawierające specyficzne atrybuty:

Log Techniczny – zawiera komplet informacji technicznych umożliwiających diagnozę i śledzenie działania aplikacji na najniższym poziomie. Szczególnie przydatny na środowiskach innych niż produkcja.
Log Audytu – zawiera informacje biznesowe pozwalające osobie przeglądającej dzienniki zdarzeń zrozumieć działanie wykonywanych przez system operacji. Prawidłowo zamodelowane logi audytu powinny dawać możliwość dokładnego prześledzenia i skorelowania każdego obsłużonego requestu. W naszym przykładzie identyfikatorem korelacji jest atrybut przechowujący identyfikatorZdarzeniaInicjującego. W zależności od systemu, może być konieczność zapewnienia wyższego poziomu bezpieczeństwa odkładanym dziennikom zdarzeń, dlatego już na etapie wytwarzania oprogramowania warto zadbać o zapewnienie integralności odkładanych logów. O ile przy logach technicznych nie ma to sensu, o tyle dla logów audytu warto rozważyć implementację podpisu elektronicznego pod skrótem z poprzedniego logu (hashPoprzedniegoLogu). Pamiętajmy, że wytwarzamy oprogramowanie zwinnie, dlatego zapewnienie tak wysokiego poziomu bezpieczeństwa logów powinno być wprost zdefiniowane przez Product Owera (PO), a nie przez zespół wytwórczy, który akurat wpadł na taki pomysł i uznał, że należy taką implementację wykonać.
Log Danych Osobowych – zawiera informacje pozwalające jednoznacznie zidentyfikować moment pozyskania lub udostępnienia danych osobowych. Powinien zawierać pełne i szczegółowe metadane opisujące dane osobowe, ale sam w sobie nie powinien ich zawierać. Czyli na przykład w logu danych osobowych możemy znaleźć informacje, że dla danego identyfikatora XYZ, zostały pozyskane następujące dane osobowe: imię, nazwisko, adres e-mail oraz numer telefonu.
Modelowanie logów audytu
Posiadając w miarę generyczny model logów zdarzeń, warto uzupełnić przygotowany w poprzednim wpisie przypadek użycia (UC.UiA.0001) o konkretne logi audytu. W tym celu tworzymy nowy diagram klas reprezentujący logiczny model danych w domenie logów (przeciągamy UC.UiA.0001 Logowanie na diagram jako Link), a następnie znajdujemy klasę LogAudytu i przeciągamy ją na utworzony przed chwilą diagram wybierając ustawienia Instance (Object) tak jak na rysunku poniżej:

Następnie zaznaczamy utworzony obiekt logu audytu i wpisujemy jego nazwę (Properties > Name): LA.MUiA.0001 – krok 3. Teraz mając oba artefakty (UC oraz instancję logu audytu) na diagramie, linkujemy je relacją Dependency. Możemy przystąpić do wpisywania konkretnych wartości (Properties > Run States)jakie powinny odłożyć się podczas realizacji kroku 3 wspomnianego przypadku użycia:

Po zidentyfikowaniu i opisaniu wszystkich potencjalnych logów audytu, diagram powinien wyglądać następująco:

Do kompletnego zamodelowania logów, brakuje jeszcze tylko uzupełnienia kroków przypadku użycia o nowo powstałe instancje logów audytu. Dodanie odnośników realizujemy ustawiając kursor w kolumnie Results i z menu prawego przycisku myszy wybierając Insert context reference:

W wyświetlonym oknie wybieramy odpowiedni log audytu:

Finalnie powinniśmy otrzymać następujący wygląd przypadku użycia UC.UiA.0001 Logowanie: 
We wcześniejszych wpisach przedstawiłem:
W następnych wpisach będę chciał przedstawić kolejno:
- Modelowanie komunikatów oraz innych obiektów takich jak np. okna GUI
- Modelowanie interfejsów i mapowanie UC na operacje
- Wywołanie operacji na diagramach sekwencji
- Przygotowanie modelu architektury i jej widoku wdrożeniowego w wariancie HA
- Generowanie definicji operacji REST (Swagger) na podstawie zamodelowanego interfejsu
You must be logged in to post a comment.