Wprowadzenie

Projekt obejmuje zagadninia związane z przeszukiwaniem diagramów bpmn. Głownym celem projektu jest znelezienie wzorców oraz ich późniejsze zliczenie. Wzorce zostały wybrane spośród puli wzorców Van der Alsta podanych w pliku pniżej:

process_modeling_notations_and_workflow_patterns_-_white_1_.pdf

Wybrane wzorce, działajace w programie:

pararel splits

sequneces

synchronizing merges

multiple merges

dicriminators

synchronizations

Exclusive Choices

simple merges

multiple choices

Działanie programu

Program na wejściu pobiera plik XPDL (jest to standardowy format xml przeznaczony do celów zapisu Buisness Proces Diagramów ), który zostaje wygenerowany z diagramu bpmn. Przykładowe modele bpmn:

Model składający się z bloczków activities:

Model składający się dodatkowo z bloczków assocciations:

Następnie program buduje wewnętrzny model, reprezentujacy diagram. Jest to struktura danych, która zawiera wszystkie informacje potrzebne do pozniejszego przeszukiwania w celu znalezienia wzorców. Po zbudowaniu diagramu, zaimplementowany algorytm przeszukuje go, sprawdzajac zaleznosci miedzy bloczkami i oceniajac jakie wzorce zostaly zawarte w diagramie. Na wyjsciu dostajemy liczbe wystapien wszystkich poszukiwanych wzorców.

Budowa modelu

Model zostaje zbudowany w ten sposób, że plik xpdl jest parsowany tak aby wyluskac wszystkie wiadomosci na temat zawartych w nim bloczkow activities oraz polaczen miedzy nimi transitions. Specjalny parser przechodzi po pliku, zapisujac odpowiednie informacje do klas Activity oraz Transition. Po przejsciu przez caly plik xpdl nastepuj przypasowanie wszystkich połączeń transitions do poszczególnych activities. W ten sposób budowany jest dwukierunkowy graf będacy reprezentacją schematu bpmn w pamieci komputera. Finalnie dostajemy strukture danych, złożoną z klas Activites, w ktorym kazda klasa zawiera liste polaczen z innymi bloczkami (w obydwu kierunkach) oraz wszystkie inne informacje niezbęde do późniejszego przeszukiwania i zapisu informacji.

Model został stworzony w taki sposób aby dodawanie nowych patternów do wyszukiwania nie stanowiło problemu.

Najważniejsze funkcje w programie

Check() parsuje plik xpdl przesuzkujac go pod kątem słów kluczowych activities, transitions oraz associations. Zapisuje informacje na temat kazdego z tych elementow (takie jak id, type etc.) diagramu w odpowiadajacyh im klasach (Activity, Transition, Association). W dalszej częsci programu operuje tylko na klasach Activity oraz Transition. Bloczki Association zostaja zapisane tylko w celach możliwej późniejszej rozbudowy programu o kolejne funkcjonalności związne z bloczkami association.

graphBuilder(LinkedList<Activity> ActivityList, LinkedList<Transition> TransitionList) za pomoca dwuch list → listy bloczkow , oraz listy powiazan miedzy bloczkami; funkcja buduje graf dwukierunkowy pomiedzy bloczkami acivities.

bfs (Activity startActivity,LinkedList<Activity> activities,LinkedList<Activity> visitedActivities) jest to funkcja przeszukiwania grafu wszerz. Dzieki niej zbieram informacje na temat poszczeglnych polaczen miedzy bloczkami i porownuje ich do patternow za pomoca funkcji patternFinder(Activity exp,LinkedList<Activity> activities) w ktorej dodatkowo zliczam wystapienia wszystkich wysatpien patternow i zapisuje do singletonu PatternCounter.

printGraph() - jest to funkcja opcjonalna, służącą do wypisania grafu na ekran. Pokazuje wszystkie połączenia miedzy bloczkami oraz wszystkie informacje na ich temat. Domyślnie jest zakomentowana aby nie zaśmiecać outputa.

Kod posiada wiele linijek do wypisania na ekran co sie w danej chwili dzieje (w celach debugowania). Zostały te części zakomentowane bo w jasny sposób pokazują co się w danej chwili w programie dzieje (pełnią funkcje komentarzy). Głowna część kodu (funkcja main) została dokładnie okomentowana.

Przykłady działania programu

Wejscie:

Wyjscie:

Number of merges = 0

Number of pararel splits = 0

Number of sequneces = 1

Number od synchronizing merges = 0

Number of multiple merges = 0

Number of dicriminators = 0

Number of synchronizations = 0

Number of Exclusive Choices = 2

Number of simple merges = 0

Number of multiple choices = 0

Opis:

Program odnalazl sekwencje (3 bloczki poczatkowe) oraz 2 exclusive choice (czyli dwie bramy o rozgalezieniu z warunkiem logicznym).

* Bloczek startowy i koncowy (start/end event) moze byc brany pod uwage jako czesc patternu lub nie - jest to zalezne od interpetacji. Program jest tak napisany aby dało sie w prosty sposob wykluczyc uwzglenianie tych bloczkow w czasie przeszukiwnaia grafu. Aby wykluczyc te bloczki z poszukiwan wystarczy dopisac jeden warunek logiczny w miejscu odpowiedzialnym za wyszukiwanie wzorcow. Kazdy bloczek zawiera zapisana informacje, czy jest zwykly czy typu start/end event.

Zaznaczono znaleziono wzorce poniżej:

Kazdy z patternów znajduje sie we wnetrzu wieloboku o innym kolorze.

czerwony → sekwencja,

niebieski oraz fioletowy → exclusive choice

** Bywa tak, ze jedne patterny sa czescia innych (w szczegolnosci jesli chodzi o patterny typu multiple merges). Program został tak napisany zeby zliczac zarówno czesci składowe jak i te wieksze patterny (zatem znalezienie multiple merges bedzie rowniez oznaczało znalezienie splitu i merga). W razie potrzeby można w zupełnie prosty sposób zmienić taki sposób liczenia (np. dodajac warunek ze w przypadku znalezienia multiple merges, dekrementuje sie ilosc splitow i mergów).

Kompilacja, uruchomienie, środowisko

Przykladowe pliki wejsciowe: allpatterns.zip Program: miw.zip

Program został napisany w Javie za pomocą narzędzia Eclipse.

Aby skompilować program na swoim komputerze należy w Eclipsie wybrać Run configuration i jako parametr wskazać ścieżkę z plikiem xpdl.

Aby uruchomić program z linii komend należy podać na wejsciu plik xml → java Parser sciezka_do_pliku_xml

pl/dydaktyka/miw/2011/bpmnpatterns1/start.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0