czwartek, 2 stycznia 2014

Złożoność EA (6) - Partycjonowanie architektury przy pomocy relacji równoważności

Po przerwie kontynuuję temat dot. złożoności architektury korporacyjnej. Dla przypomnienia - mówimy tutaj o złożoności architektury korporacyjnej w ujęciu atrybutowym (złożoności logiki „ułożenia” komponentów organizacji). Mówimy o metodach radzenia sobie z tą złożonością podczas projektowania architektury.

W pierwszej części tego cyklu przyjęliśmy, że estymatorem złożoności systemu / układu jest liczba znaczących stanów, w których może się on znaleźć. Im więcej możliwych stanów, tym większa złożoność. Zmniejszanie złożoności będzie więc polegało na zmniejszaniu liczby stanów tego systemu / układu.

Pierwszym opisanym sposobem zmniejszania liczby stanów układu było upraszczanie. Drugim opisanym sposobem było partycjonowanie. Dzisiaj piszę o szczególnym rodzaju partycjonowania - partycjonowaniu generującym układ o najmniejszej możliwej złożoności.

Partycjonowanie

Dla przypomnienia - partycjonowanie polega na podziale układu na niezależne podukłady. Przedstawiony w poprzednim wpisie przykład partycjonowania układu 4-rech systemów dzielił go na dwie partycje, z których każda zawierała po dwa systemy, plus usługi partycji sąsiedniej. Jednak jest to tylko jeden z 15 możliwych sposób podziału takiego układu.

W ogólności liczba możliwych podziałów zbioru elementów zależy od liczności tego zbioru i jest wyrażona liczbą Bella Bn, dla której zdefiniowano następujący wzór rekurencyjny:

Wzór rekurencyjny na liczbę Bella.

Pierwszych 11 wartości liczby Bella, to: B0 = 1, B1 = 1, B2 = 2, B3 = 5, B4 = 15, B5 = 52, B6 = 203, B7 = 877, B8 = 4140, B9 = 21147, B10 = 115975. Widać, że liczba możliwych sposobów podziału zbioru rośnie bardzo szybko wraz ze wzrostem liczby jego elementów. Układ tylko 6-ciu kostek można podzielić na 207 sposobów. Dla dużego systemu informatycznego, w którym liczba funkcjonalności jest duża, liczba możliwych podziałów na podsystemy będzie ogromna. Podobnie z procesami biznesowymi - liczba możliwych podziałów zbioru punktów decyzyjnych niezbyt skomplikowanego procesu będzie bardzo duża (np. B42 = 35742549198872617291353508656626642567).

Dodatkową trudnością przy partycjonowaniu funkcjonalności systemów informatycznych czy punktów decyzyjnych procesów biznesowych jest to, że poszczególne elementy systemu czy procesu są od siebie zależne. Tak więc przy poszukiwaniu najlepszego sposobu podziału, trzeba te zależności dodatkowo uwzględniać.

Partycjonowanie przy pomocy relacji równoważności

Z pomocą w wyborze jednego, najlepszego dla danego zastosowania sposobu podziału, przychodzi nam relacja równoważności. Relacja równoważności, to relacja dwuargumentowa, określona na pewnym zbiorze elementów, utożsamiająca ze sobą w pewien sposób jego elementy. Relacja równoważności R określona na zbiorze X posiada następujące cechy:
  • jest zwrotna: dla wszystkich x należących do X mamy, że x R x
  • jest symetryczna: dla dowolnych x, y należących do X z faktu, że x R y wynika, że y R x)
  • jest przechodnia: dla wszystkich x, y, z należących do X zachodzi wynikanie: jeżeli x R y oraz y R z, to x R z
Określenie relacji równoważności dla danego zbioru powoduje, że taka relacja ustanawia podział tego zbioru na rozłączne podzbiory (klasy równoważności) według tej relacji. Np. w zbiorze ubrań w sklepie relacją równoważności mogłaby być relacja kosztuje tyle samo. Taka relacja spowoduje podział całego zbioru ubrań w sklepie na podzbiory ubrań kosztujących tyle samo. Każde z ubrań znajdzie się w dokładnie jednym takim podzbiorze.

Partycjonowanie przy pomocy relacji synergiczności

Wracając do złożoności - szukając najprostszego układu funkcji biznesowych / funkcjonalności systemów (układu o najmniejszej złożoności), szukamy de-facto relacji równoważności na zbiorze tych funkcji / funkcjonalności, która wygeneruje układ o maksymalnej liczbie partycji i jednocześnie minimalnej liczbie zależności pomiędzy nimi. Relacją generującą taki układ jest relacja synergiczności.

Dwie funkcje przedsiębiorstwa są synergiczne, jeśli jedna potrzebuje drugiej a druga potrzebuje pierwszej do tego, aby działać efektywnie (relacja synergiczności jest relacją równoważności, więc jest zwrotna). Albo inaczej - dwie funkcje przedsiębiorstwa są synergiczne, jeśli nie można sobie wyobrazić sytuacji, gdy jedna z funkcji została użyta a druga nie została użyta.

Przykład:
Weźmy układ 8 funkcji biznesowych A..H, gdzie AxC, AxF, AxG, GxF, F/B, BxE, BxD, BxH, DxH oraz ExD („x” oznacza zależność w obie strony, czyli AxC oznacza, że A zależy od C a C zależy od A; „/” oznacza zależność w jedną stronę, czyli F/B oznacza, że F zależy od B).

Układ tych funkcji zamkniętych w jednej partycji przedstawia poniższy rysunek (zależności funkcji wewnątrz partycji nie są pokazane).

Układ ośmiu funkcji zamkniętych w jednej partycji.

Zgodnie ze wzorami na złożoność Sessions’a (patrz wpis Złożoność EA (2) - miary złożoności IT) złożoność takiego układu wynosi 644 SCU:
  • C(8 funkcji, 0 zależności między partycjami) = 8^3.11 + 0^3.11 = 644 SCU

Jeden z 4140 możliwych podziałów tych funkcji na partycje przedstawia poniższy rysunek (zależności funkcji wewnątrz partycji nie są pokazane; zależności funkcji pomiędzy partycjami reprezentuje strzałka; grubsza strzałka, to zależność w obie strony, cieńsza – w jedną stronę).

Jeden z 4140 możliwych podziałów 8 funkcji na partycje.

Zgodnie z ww. wzorami, złożoność takiego układu wynosi 562 SCU:
  • Lewa partycja: C(4, 6) = 4^3.11 + 6^3.11 = 338 SCU
  • Prawa partycja: C(4, 5) = 4^3.11 + 5^3.11 = 224 SCU
  • Złożoność całego układu: 338 + 224 = 562 SCU

Zatem po zastosowaniu partycjonowania (w sposób przypadkowy) uzyskaliśmy blisko 13% zmniejszenie złożoności układu początkowego. Jednak po wysokiej liczbie zależności pomiędzy partycjami można wnioskować, że nie jest to podział optymalny.

Po zastosowaniu metody partycjonowania za pomocą relacji synergiczności uzyskamy układ przedstawiony na poniższym rysunku (zależności funkcji wewnątrz partycji nie są pokazane; zależności funkcji pomiędzy partycjami reprezentuje strzałka):
.
Spartycjonowanie układu 8 funkcji przy użyciu relacji synergiczności.

Jest to układ o największej możliwej liczbie partycji i najmniejszej możliwej liczbie zależności między nimi - jest to układ o najmniejszej możliwej złożoności. Zgodnie ww. wzorami, złożoność takiego układu wynosi 149 SCU:
  • Lewa partycja: C(4, 1) = 4^3.11 + 1^3.11 = 75 SCU
  • Prawa partycja: C(4, 0) = 4^3.11 + 0^3.11 = 74 SCU
  • Złożoność całego układu: 75 + 74 = 149 SCU

Po zastosowaniu metody partycjonowania za pomocą relacji synergiczności uzyskaliśmy układ o złożoności blisko 77% mniejszej od złożoności układu wyjściowego. Żaden inny podział wyjściowego zbioru funkcji nie da lepszego rezultatu.

Cechy partycjonowania przy pomocy relacji synergiczności

Używając relacji synergiczności zdefiniowanej na zbiorze funkcji przedsiębiorstwa do partycjonowania jego architektury korporacyjnej uzyskujemy układ o najmniejszej możliwej złożoności. Dalsze zmniejszanie lub zwiększanie rozmiarów partycji będzie już powodowało wzrost złożoności z powodu rosnących zależności pomiędzy partycjami.

Używając relacji synergiczności zdefiniowanej na zbiorze funkcji przedsiębiorstwa do partycjonowania jego architektury korporacyjnej uzyskujemy również jedyny najprostszy możliwy układ. Oznacza to, że proces projektowania architektury przy użyciu relacji synergiczności funkcji biznesowych staje się powtarzalny. Może więc być walidowany i sprowadza się do podejmowania decyzji, czy dane dwie funkcje biznesowe są synergiczne, czy nie.

Przyjęcie takiego podejścia daje także dodatkowe korzyści: znakomicie zmniejsza liczbę dyskusji, które pojawiają się podczas projektowania architektury. Nie dyskutuje się już wtedy o formacie rekordów bazy danych, preferencjach technologicznych czy infrastrukturze komunikatów. Dyskusje sprowadzają się wtedy do ustalenia, czy dwie funkcje biznesowe są ze sobą synergiczne, czy nie (np. sprzedaż i biling). Dyskusje skupiają się na rzeczach naprawdę istotnych a stawiane problemy są łatwiejsze do rozwiązania, gdyż dyskusje stają się bardziej rodzajem współpracy niż konfrontacji.

Ostatnią ważną cechą partycjonowania architektury za pomocą relacji synergiczności jest to, że jeśli tę metodę stosujemy iteracyjnie lub pojawiają się nowe elementy, które trzeba do układu dołączyć, to struktura podziału się nie zmienia. Nigdy nie zajdzie sytuacja, że raz wykonany podział zostanie zmieniony. Nigdy nie zdarzy się, że:
  • daną partycję trzeba będzie usunąć,
  • daną partycję trzeba będzie podzielić,
  • dane dwie partycje trzeba będzie połączyć.

W praktyce okazuje się, że zbadanie synergiczności dla ok. 35% funkcji z pełnego zbioru funkcji przedsiębiorstwa powoduje wygenerowanie 90% docelowego struktury podziału.

Podsumowanie

W efekcie stosowania przedstawionych w tym cyklu metod upraszczania i partycjonowania daje się uzyskiwać zmniejszenie złożoności nawet do 99%. W praktyce tak ogromne rezultaty nie są osiągane i należy je raczej traktować jako teoretyczne maksima. W praktyce po zastosowaniu przedstawionych metod, udaje się osiągać ~80-90% zmniejszenie złożoności budowanych rozwiązań, co z kolei przekłada się na porównywalne zmniejszanie kosztów rozwoju IT.

Należy jednak pamiętać, że zmniejszanie złożoności architektury jest jedynie środkiem / narzędziem / enablerem a nie celem samym w sobie. Złożoność zmniejszamy m.in. po to, aby działanie i rozwój funkcji biznesowych / systemów kosztował nas mniej i był obarczony mniejszym ryzykiem. Ze zmniejszania złożoności nic nam nie przyjdzie jeśli pomimo to będziemy wciąż wykonywać tyle samo analizy czy tyle samo testów. Dlatego ostatnim ale równie ważnym krokiem jest zmiana sposobu rozwijania systemów utylizująca efekty zmniejszania złożoności architektury IT. Ale o tym już w następnym odcinku.

Bibliografia