Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ~~REVEAL~~ ====== Modelowanie systemu i badanie architektury systemów ====== ===== ===== * Modelowanie systemu * inżynieria w przód: specyfikacja -> model -> implementacja * UML, modele warstwowe * generowanie kodu z modelu * Analiza złożoności systemów * inżynieria wstecz: \\ oprogramowanie -> model i specyfikacja * walidacja poprawności modelu i zrealizowanego systemu * wizualizacja zależności w kodzie, systemie * eksplorator architektury, mapy kodu, grafy zależności ===== Modelowanie systemów ===== * Model obrazuje przyszły lub istniejący system * Jest zawsze przybliżeniem, nigdy w pełni nie odpowiada rzeczywistości * Uwypukla tylko wybrane aspekty systemu i pomija inne * Zunifikowany język: UML ===== Unified Modeling Language ===== {{ zajecia:npr:uml_logo.png?200|}} * Język do modelowania systemów nie tylko informatycznych. Semantyka i notacja pozwalająca opisywać szerokie spektrum problemów. * Zasady modelowania obiektowego jednak niezależne od języków programowania * Skalowany, do małych i dużych projektów, od ogólnych modeli do bardzo szczegółowych * 1997 styczeń zatwierdzenie języka UML (wersja 1.0) przez Object Menagement Group (prace nad ujednoliceniem od 1994) * obecnie versja 2.5, 14 diagramów głównych + 2 abstrakcyjne * [[wp>Unified Modeling Language]] ===== UML nie jest ... ===== * językiem programowania, chociaż istnieje możliwość generowania kodu z niektórych diagramów * narzędziem, choć zawiera specyfikacje dla narzędzi * metodyką, nie definiuje procesu tworzenia oprogramowania, chociaż istnieją metodyki bazujące na UML * nie jest sposobem na analizę i projektowanie systemów komputerowych ===== Rodzaje diagramów ===== {{ zajecia:npr:uml_diagram_types.png }} ===== Diagramy struktur ===== * [[wppl>Diagram_klas|Diagram klas]] (//[[wp>Class_diagram|class diagram]]//) * [[wppl>Diagram_obiektów|Obiektów]] (//[[wp>Object_diagram|object diagram]]//) * [[wppl>Diagram_komponentów|Komponentów]] (//component diagram//) * Wdrożenia (//deployment diagram//) * Struktur złożonych (//composite structure diagram//) <wrap lo>UML 2.0</wrap> * Pakietów (//package diagram//) <wrap lo>UML 2.0</wrap> * Profili (//profile diagram//) <wrap lo>UML 2.2</wrap> ===== Diagramy zachowań ===== * [[wppl>Diagram_czynności|Czynności]] (//[[wp>Activity_diagram|activity diagram]]//) * [[wppl>Diagram_przypadków_użycia|Przypadków użycia]] (//[[wp>Use_case_diagram|use case diagram]]//) * [[wppl>Diagram_stanów|Maszyny stanów]] (// state machine diagram//) \\ <wrap lo>(dla UML 1.x Stanów, //statechart diagram//)</wrap> * [[wppl>Diagram_interakcji|Interakcji]] (diagram abstrakcyjny) * Komunikacji (//communication diagram//) \\ <wrap lo>(dla UML 1.x Współdziałania, //collaboration diagram//) </wrap> * Sekwencji (//[[wp>Sequence_diagram|sequence diagram]]//) * Czasowy, harmonogramowania (//timing diagram//) <wrap lo>UML 2.0</wrap> * Sterowania interakcji (//interaction overview diagram//) <wrap lo>UML 2.0</wrap> ===== Projektowanie oprogramowania ===== * **Projekt architektury**: wyodrębnienie podsystemów, modułów, komponentów i relacji między nimi * diagramy: komponentów , pakietów, warstw (nie UML) * **Specyfikacja abstrakcji** (oprogramowania): wyszczególnienie dostarczanych **usług** i **ograniczeń** dla każdego podsystemu (środowisko, biblioteki, technologie, itp.) * diagramy: przypadków użycia * **Specyfikacja interfejsu** dla każdego podsystemu * diagram: pakietów, komponentów ===== ===== * **Specyfikacja komponentu** * usługi komponentu: diagram przypadków użycia, sekwencji, itp. * budowa komponentu: diagram klas * **Specyfikacja danych**: opis struktur danych * diagramy: klas * **Specyfikacja algorytmu** * diagramy: sekwencji, aktywności ===== Najważniejsze diagramy ===== Projektując system informatyczny, rozpoczyna się przeważnie od tworzenia diagramów w następującej kolejności: - Przypadków użycia - Sekwencji - Klas - Aktywności Są to najczęściej wykorzystywane diagramy. Pozostałe bywają pomijane, zwłaszcza przy budowaniu niedużych systemów informatycznych. ===== UML w Visual Studio ===== {{zajecia:npr:uml:vs_uml_diagrams.png?600}} ===== ===== * od VS 2010 ultimate * **Diagram klas:** typy i relacje między nimi * **Diagram przypadków użycia:** opis funkcjonalności * **Diagram aktywności:** sekwencyjny (lub współbieżny) przepływ informacji miedzy obiektami * **Diagram komponentów:** relacje komponentów i ich interfejsów, * **Diagram sekwencji:** interakcje między obiektami, komponentami i aktorami ===== UML Modeling Project ===== * Rysowanie, edycja diagramów * Import diagramów w formacie XMI * Przeszukiwanie diagramów * Elementy diagramów mogą być współdzielone pomiędzy diagramami * Eksport diagramów jako obrazy, możliwe kopiowanie diagramów do Worda i PP * Możliwe rozszerzenie funkcjonalności narzędzi UML * Łącznie elementów diagramów lub całych diagramów ze zgłoszeniami TFS ===== Odkrywanie modelu w VS ===== * **Diagramy warstw:** ogólna budowa systemu, walidacja zgodności modelu z kodem * **Diagramy zależności** (dependency graph): wizualizacja zależności w kodzie, (VS 2013 Ultimate, także Resharper) * **Mapy kodu** (code maps), VS 2013 Ultimate * Generowane z kodu **diagramy klas**, brak w VS2015 * **Diagramy sekwencji** dla metod, brak w VS2015 ===== Inne narzędzia ===== * [[http://argouml.tigris.org/|ArgoUML]] (OpenSource, Linux/Wndows/Mac OS) UML 1.4, generowanie kodu dla wielu języków * [[http://www.eclipse.org/modeling/mdt/?project=uml2|Eclipse UML2 Tools]] (Eclipse Modeling Framework, EMF), [[http://www.acceleo.org/pages/introduction/en|Acceleo]] - system generacji kodu oparty o EMF * [[http://live.gnome.org/Dia|Dia]] (GTK, GPL, Linux/Win/Mac) + Dia2code, cpp2dia * [[http://creately.com/|Creately]] diagramming & collaboration * [[http://uml.sourceforge.net/|Umbrello UML Modeller]] (KDE) * StarUML (Win), GNU GPL, inżynieria w przód i wstecz kodu w Javie, C#, C%%++%% * [[http://www.ibm.com/software/rational|IBM Rational Software]] * MS Visio * [[wp>List_of_UML_tools|List of UML tools]] ===== UML Diagram klas - podstawy ===== {{ zajecia:po_2013_1:10_cs_figury:10_cs_figury.png?400}} **Diagram klas** statyczny, koncepcyjny widok projektowanej aplikacji. Prezentuje strukturę klas i relacji miedzy nimi. ===== ===== * Pozwala na sformalizowanie specyfikacji danych i zestawu metod * Wizualizacja szczegółów implementacji klas * Tylko statyczne relacja, model zachowania może być opisany diagramem stanów * Realizację diagramu klas obrazuje diagram obiektów (odwzorowanie systemu w w wybranym momencie działania) * Narzędzia projektowe zgodne ze specyfikacją UML umożliwiają, na podstawie diagramów klas, generowanie elementów źródeł w popularnych językach obiektowych, takich (C%%++%%,Java, C#) ===== Opis klasy ===== * Klasy: nazwa, atrybuty (pola), operacje (metody) <code>[widocznosc] nazwa [:typ] [wielokrotnosc][= wartosc domyslna] [widocznosc] nazwa [( lista parametrow )] [:typ zwracany] </code> {{zajecia:npr:uml_class.png?500| }} ===== Zakres ===== * poziom widoczności * - prywatne, tylko w obrębie klasy * + publiczne, dostęp globalny * # chronione, dostęp przez dziedziczenie * ~ zakres pakietu * zakres * __klasowy__ (classifier), wspólny dla klas, pola i metody statyczne (podkreślenie) * instancji, tylko w zakresie obiektu * //Klasy abstrakcyjne//, //metody abstrakcyjne// (kursywa) ===== Asocjacje (relacje) ===== * **Asocjacja** - trwałe powiązanie pomiędzy obiektami lub klasami (np. firma i pracownicy). * Jednokierunkowa (ze strzałką), dwukierunkowa, agregacje (kompozycje) * Asocjacja może posiadać nazwą, na końcach połączeń może być określona rola oraz powiązania ilościowe {{ http://upload.wikimedia.org/wikipedia/commons/4/4d/UML_role_example.gif?800 }} ===== Agregacja ===== * **agregacja** (zawieranie obiektów), wiązek typu całość-część, relacja posiadania, elementy częściowe mogą należeć do większej całości, jednak również mogą istnieć bez niej. {{ zajecia:npr:uml_class_agregacja.png?800 }} ===== Kompozycja ===== * **kompozycja** (złożenie), związek typu całość-część, części należą tylko do jednej całości, a ich okres życia jest wspólny — razem z całością niszczone są również części. {{ http://agilemodeling.com/images/models/classDiagramComposition.jpg?800 }} ===== Generalizacja ===== * **generalizacja** (dziedziczenie), oznacza się za pomocą niewypełnionego trójkąta symbolizującego strzałkę (skierowaną od klasy pochodnej do klasy bazowej). {{ zajecia:npr:uml_class_generaliacja.png?800 |}} ===== Powiązania ilościowe ===== {{ http://agilemodeling.com/images/models/classDiagramAssocationNotation.jpg?600}} | 1 | tylko 1 | | 0..1 | 0 lub 1 | | 0..* | 0 lub więcej | | 1..n | od 1 do n | | n..m | od n do m | ===== Interfejsy ===== * Do UML 1.4: interfejsy realizowane za pomocą klas abstrakcyjnych * UML 2: słowa ''<<class>>'', ''<<interface>>'' {{ http://www.uml-diagrams.org/class-diagrams/class-interface-compartments.png?400 }} ===== ===== * Implementacja interfejsu | {{http://www.uml-diagrams.org/class-diagrams/class-interface-realization-ball.png?400}}|{{http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/bell_fig10.gif?400 }}| ===== Diagram klas w VS ===== {{ zajecia:npr:vs_class_diagram.png?800 }} ===== Elementy diagramu klas ===== {{ zajecia:npr:vs_uml_class_elementy.png?400 }} ===== Generowanie kodu ===== {{ zajecia:npr:vs_class_diagram_generate.png?600 }} ===== Generowanie diagramów klas ===== * Dostępne w VS2013, brak w VS2015 * Diagram klas UML można utworzyć przeciągając wybrane elementy Architecture Explorer do projektu z diagramem klas * **View -> View Class Diagram** tworzy diagram zbliżony do diagramu klas UML w solucji projektu. Daje możliwość edycji zawartości klas. {{zajecia:po:figury1.png?400}}{{zajecia:npr:uml:vs_view_class_diagram2.png?200}} ===== UML Diagram przypadków użycia ===== * **Diagram przypadków użycia** (ang. use-case diagram) opisuje system z punktu widzenia użytkownika (modeluje funkcjonalności) {{ zajecia:npr:uml_use_case_example.png?500 }} * Szczegółowy opis przypadków użycia -> diagram aktywności, diagramy stanów ===== Aktorzy ===== * **aktorzy** – osoby, grupy osób lub elementy otoczenia systemu wchodzące w interakcje z systemem i odgrywający pewną rolę (jedna osoba może być reprezentowana przez kilku aktorów odgrywających różne role) {{zajecia:npr:uml_use_case1.png?200}} {{zajecia:npr:uml_use_case2.png?200}} ===== Przypadki użycia ===== * **przypadki użycia** – sekwencja możliwych czynności, które system może wykonać * pojedynczy przypadek użycia {{ http://upload.wikimedia.org/wikipedia/commons/thumb/8/87/Use_case_diagram_use_case.svg/320px-Use_case_diagram_use_case.svg.png?300 }} ===== Powiązania ===== * **związki** – połączenie między elementami systemu * nie posiadają nazw * asocjacje dwukierunkowe lub jednokierunkowe, uogólnienia, zależność, realizacja * związki nie określają kierunku przepływu informacji * generalizacja, jak w diagramie klas (rodzaje aktorów i przypadków użycia) {{http://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Use_case_diagram_association.svg/640px-Use_case_diagram_association.svg.png?300}} ===== Zawieranie i rozszerzenie ===== * **zawieranie** (includes) - wydzielenie przypadku użycia w celu uproszczenia modelu (przypadek może jest wielokrotnie użyty). Przypadek wydzielony jest zawsze realizowany wraz z przypadkiem bazowym. * **rozszerzenie** (extend) - wydziela przypadek użycia, który występuje opcjonalnie ===== ===== {{http://agilemodeling.com/images/models/useCaseReuse.gif?600}} <wrap lo>Źródło: http://www.agilemodeling.com/essays/useCaseReuse.htm</wrap> ===== Diagram przypadków użycia w VS ===== {{zajecia:npr:uml:vs_use_case_toolbox.png?250}}{{zajecia:npr:use_case_diagram_example.png?650}} ===== UML Diagram sekwencji ===== {{ http://upload.wikimedia.org/wikipedia/commons/thumb/9/9b/CheckEmail.svg/775px-CheckEmail.svg.png?600 }} ===== ===== * modelowanie zachowania systemu, realizacja przypadków użycia * opisuje interakcje pomiędzy częściami systemu w postaci sekwencji komunikatów wymienianych między nimi ===== Elementy diagramu ===== * **Komunikaty** * komunikaty asynchroniczne (strzałka) * wywołanie funkcji (strzałka z wypełnionym grotem) * powrót z funkcji (strzałka przerywaną linią) * **Linie życia obiektów** (ang. lifelines) - pionowe linie, reprezentują czas. Białe prostokąty umieszczone na linii życia obiektu oznaczają, że obiekt jest zajęty wykonywaniem pewnej czynności (natomiast nie mają bezpośredniego związku z istnieniem obiektu). * Tworzenie obiektów (konstruktory) i ich niszczenie (znak X) ===== Regiony ===== * Regiony (ramki) (//ang. interaction use//) umożliwiają zapis takich aspektów realizacji programu jak instrukcje warunkowe czy pętle. {{http://www.tracemodeler.com/articles/a_quick_introduction_to_uml_sequence_diagrams/images/loop%20combined%20fragment.png?700}} <wrap lo>Źródło: [[http://www.tracemodeler.com/articles/a_quick_introduction_to_uml_sequence_diagrams/|http://www.tracemodeler.com]]</wrap> ===== ===== * inne: opt (optional), alt (alternative), ref (reference), loop, assert, ... {{http://www.tracemodeler.com/articles/a_quick_introduction_to_uml_sequence_diagrams/images/alt%20combined%20fragment.png?700}} <wrap lo>Źródło: [[http://www.tracemodeler.com/articles/a_quick_introduction_to_uml_sequence_diagrams/|http://www.tracemodeler.com]]</wrap> ===== ===== {{ http://www.uml-diagrams.org/sequence-diagrams/sequence-diagram-overview.png?700 }} <wrap lo>http://www.uml-diagrams.org/</wrap> ===== Diagram sekwencji w VS ===== {{ zajecia:npr:uml:vs_sequence_diagram.png?700 }} ===== Generowanie diagramu sekwencji ===== * Dla dowolnej metody w kodzie PKM -> ''Generate Sequence Diagram'' * brak w VS 2015 {{zajecia:npr:uml:vs_sequence_diagram_config.png?400}} ===== ===== * Zmiany w kodzie i w diagramie nie są synchronizowane * Nawigacja od linii czasowych i komunikatów do linii w kodzie * Diagram nie powstaje w osobnym projekcie modelu ale można go (lub jego fragmenty) przekekopiować ===== UML Diagram aktywności ===== * **Diagram aktywności** (diagram czynności), przedstawia sekwencję kroków wykonywanych przez modelowany fragment (rodzaj schematu blokowego) * W odróżnieniu od diagramu stanu nie opisuje działań związanych z jednym obiektem a wieloma, pomiędzy którymi może występować komunikacja przy wykonywaniu czynności ===== ===== {{ https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Activity_conducting.svg/1000px-Activity_conducting.svg.png?600 }} ===== Elementy diagramu aktywności ===== {{https://upload.wikimedia.org/wikipedia/commons/0/06/For-loop-diagram.png?200}} <wrap lo>Źródło: wikipedia.org</wrap> ===== ===== * Stan początkowy i końcowy (czarne kółka) * Akcja wraz z etykietą (zaokrąglony prostokąt) * Przejście przepływu sterowania (ciągła strzałka) * Przejście przepływu obiektów (przerywana strzałka) * Decyzje (romb) * Współbieżność (poziome belki) ===== Diagram aktywności w VS ===== {{zajecia:npr:uml:vs_activity_toolbox.png?270}}{{http://gunnarpeipman.com/wp-content/uploads/2013/05/visual-studio-2010-activity-diagram_thumb.png?550}} ===== Diagram komponentów ===== * **Diagram komponentów** - ogólna struktura systemu (lub jego fragmentu) oraz opis udostępnianych interfejsów * Opis sposobu oddziaływania na siebie wydzielonych części systemu {{ https://i-msdn.sec.s-msft.com/dynimg/IC307297.png?500 }} ===== Elementy diagramu komponentów ===== * **Komponent** - fragment systemu, udostępnia interfejs, może zawierać inne komponenty * **Udostępniony port interfejsu** - zestaw wywołań jakie implementuje komponent * **Wymagany port interfejsu** - zestaw wywołań jakie musi udostępniać komponent * **Zależność** - połączenie //wymaganego interfejsu// z //udostępnionym interfejsem// innego komponentu * **Część** - wewnętrzna składowa komponentu * **Delegat** - połączenie portu interfejsu z //częścią// * **Uogólnienie** * **Komentarz** ===== Diagram komponentów w VS ===== {{zajecia:npr:uml:vs_component_toolbox.png?300}}{{https://i-msdn.sec.s-msft.com/dynimg/IC307297.png?600}} ===== Diagram warstw ===== * Używany do obrazowania wysokopoziomowej, logicznej architektury systemu. * Organizuje fizyczne zadania, obiekty w logiczne, abstrakcyjne grupy zwane warstwami. * Za ich pomocą obrazowane są zadania jakie pełnią obiekty, lub fizyczne elementy systemu. * Każda warstwa może się składać z wielu podwarstw. * Organizacja kodu w warstwy opisujące oddzielne role i funkcje systemu pozwala lepiej zorganizować kod ===== Warstwy w VS ===== {{ zajecia:npr:vs_leyers.png?800 }} ===== Elementy diagramu warstw ===== {{https://i-msdn.sec.s-msft.com/dynimg/IC372823.png?600}} ===== ===== * **warstwa**: logiczna lub fizyczna część systemu (namespace, klasa, metoda) * **zależność**: określa która warstwa korzysta z funkcjonalności innej warstwy * Jednokierunkwa, dwukierunkowa * komentarze i połączenia z komentarzami ===== Generowanie z kodu ===== * Generowanie diagramu warstw poprzez przeciąganie elementów z: Solution Explorer, Architecture Explorer, Dependency graphs * Walidacja zgodności modelu (diagramu) z rzeczywistym projektem, elementy projektu (artefakty) są powiązane automatycznie z elementami diagramu * Można definiować połączenia artefaktów (klasy, przestrzenie nazw, pliki) z warstwami. Forbidden/Required Namespaces - określenie czy dany artefakt jest dozwolony w przestrzeni nazw * Elementy diagramu można powiązać z innymi przedmiotami (np. dokumenty worda) ===== ===== * Grupy artefaktów mogą tworzyć pojedynczą warstwę lub mogą być rozseparowane na osobne warstwy * Warstwy mogą być zagnieżdżone * Liczba połączeń z warstwą widoczna na diagramie * Generate Dependencies - wsteczna inżynieria istniejących zależności (tylko dla elementów które można walidować) ===== Analiza architektury ===== {{ zajecia:npr:uml:vs_menu_architecture.png?600}} * Architecture explorer * Layer explorer * Diagramy klas i sekwencji * Mapy kodu (code maps) i grafu zależności (dependency graphs) ===== Mapy kodu (code maps) ===== * tworzenie map tylko VS 2013/15 Ultimate * wizualizacja powiązań pomiędzy obiektami (odwołania do obiektów) i metodami (wywołanie metod) * mapy pozwalają z łatwością nawigować po kodzie {{ https://i-msdn.sec.s-msft.com/dynimg/IC630823.png?600 }} ===== ===== * Show on Code Map: * dla pliku źródłowego lub binarnego, * dla obiektu lub klasy * w czasie odpluskwiania (pause) * Architecture -> Dependency Graph ===== ===== * informacje o obiektach i połączeniach {{ https://i-msdn.sec.s-msft.com/dynimg/IC629200.png?700 }} ===== ===== * Oznaczanie elementów oraz dodawanie komentarzy {{ https://i-msdn.sec.s-msft.com/dynimg/IC630130.png?700 }} ===== Dependency graph ===== * tylko VS 2013/15 Ultimate * ułatwia zrozumienie kodu i zależności w nim zawartych * zależności dla całej solucji, projektu, pliku, klasy, ... * zależności pomiędzy plikami (np. pliki źródowe i nagłowkowe) ===== Zależności modułów ===== {{ https://i-msdn.sec.s-msft.com/dynimg/IC743102.png?600 }} ===== Zależności wewnątrz modułów i klas ===== {{ https://i-msdn.sec.s-msft.com/dynimg/IC752255.png?500 }} ===== Powiązanie plików C++ ===== {{ https://i-msdn.sec.s-msft.com/dynimg/IC552248.png?500 }} ===== Analizator ===== * wykrywanie problemów: pętle i cykle w grafie, zbyt głębokie zależności, brak zależności * Legend -> Add -> Analyzers * Circular Reference - cykle * Find Hubs - 25% węzłow posiadających najwięcej połączeń * Unreferenced Nodes * analizatory działają automatycznie dopóki nie zostaną usunięte ===== Architecture Explorer ===== {{ https://i-msdn.sec.s-msft.com/dynimg/IC588261.png?700 }} ===== ===== * Pozwala odnaleźć specyficzny fragment kodu poruszając się wgłąb hierarchii projektu: od widoku (klas, solucji), przez węzły, typy węzłów * W każdej kolejnej kolumnie pojawiają się elementy logicznie powiązane z aktualnym zaznaczeniem * Class view: logiczna struktura, przestrzenie nazw, klasy, elementy klas * Solution view: fizyczna struktura, projekty, pliki * Możliwość filtrowania i grupowania wyników * działa także dla plików binarnych ===== Połączenie modelu do TFS ===== * Elementy diagramów (np. obiekty i relacje) można połączyć z zadaniami TFS (work items) \\ **UML Model Explorer -> Create Eork Item/ Link to Work Item** * Diagramy powinny być dodane do repozytorium * Przykłady: * ''user story'' + ''diagram aktywności'' -> opis możliwych sekwencji operacji * ''przypadek użycia'' + ''test case'' -> weryfikacja poprawności implementacji przypadku użycia * element diagramu klas + ''bug'' -> informacja o błędach w implementacji klasy * ''komponent'' + ''zadanie (task)'' -> możliwość śledzenia postępów prac nad komponentem ===== Źródła ===== * [[https://msdn.microsoft.com/en-us/library/57b85fsc.aspx|Modeling the Application (MSDN)]] * http://creately.com/diagram-type/use-case * [[http://creately.com/|Creately]] diagramming & collaboration * [[http://www.michalwolski.pl/diagramy-uml/|Diagramy UML]] Michał Wolski * http://www.uml-diagrams.org/