Software Design
Transkrypt
Software Design
Proces tworzenia projektu systemu informatycznego Semestr IV Inżynieria Oprogramowania WSZiB Zagadnienia Proces projektowania systemu Metody tworzenia projektu Strategie projektowania Semestr IV Podejście obiektowe Dekompozycja funkcjonalna Cechy jakościowe projektu systemu Inżynieria Oprogramowania WSZiB Projektowanie – co to jest? Semestr IV Inżynieria Oprogramowania WSZiB Projektowanie – co to jest? „... Proces polegający na zastosowaniu różnorodnych technik oraz wytycznych w celu zdefiniowania systemu na takim poziomie szczegółowości aby możliwa była jego fizyczna realizacja ...” Jako przykład... Semestr IV Architekci (nie inżynierowie) budowlani odpowiadają za ogólny kształt budynku Architektura i inżynieria uzupełniają się wzajemnie Inżynier odgrywa kluczową rolę w procesie budowania domu; ale kierunek prac pochodzi od architekta Jeśli chcemy zaprojektować dom radzimy się architekta a nie inżyniera Inżynieria Oprogramowania WSZiB Etapy tworzenia projektu Zrozumienie problemu Identyfikacja możliwych rozwiązań Opis komponentów projektu za pomocą jednej bądź wielu notacji: graficznej, formalnej, ... Proces ten powtarza się dla każdego zidentyfikowanego komponentu Semestr IV Ewaluacja zidentyfikowanych rozwiązań oraz wybór najodpowiedniejszego; to ostatnie jest wynikiem doświadczenia projektanta oraz dostępnych zasobów Opis rozwiązania Konieczne jest rozpatrzenie wielu różnych punktów widzenia aby zidentyfikować wymagania projektu Aż będzie możliwe stworzenie szczegółowej specyfikacji każdego komponentu Kryterium stopu ? Inżynieria Oprogramowania WSZiB Proces projektowania Semestr IV Każdy projekt można modelować za pomocą skierowanego grafu – wierzchołkami są powiązane relacjami komponenty z atrybutami System powinien posiadać opis na kilku różnych poziomach abstrakcji Zwykle projektowanie odbywa się w postaci częściowo pokrywających się faz (iteracji). Wynikiem kolejnych faz są coraz bardziej szczegółowe opisy systemu. Inżynieria Oprogramowania WSZiB Proces formalizacji projektu Nieformalny szkic projektu Nieformalny projekt Sformalizowany projekt Koñcowa postaæ projeku Semestr IV Inżynieria Oprogramowania WSZiB Fazy projektowania Semestr IV Projekt architektury Identyfikacja podsystemów Abstrakcyjna specyfikacja Specyfikacja podsystemów Projekt interfejsów Opis interfejsów podsystemów Projekt komponentów Podział podsystemów na komponenty Projekt struktur danych Projekt struktur danych przechowujących informacje Projekt algorytmów Dla poszczególnych funkcji systemu Inżynieria Oprogramowania WSZiB Produkty poszczególnych faz Semestr IV Faza Produkt wyjściowy Projekt architektury Architektura systemu Abstrakcyjna specyfikacja Specyfikacja systemu Projekt interfejsów Specyfikacja interfejsów Projekt komponentów Specyfikacja komponentów Projekt struktur danych Specyfkacja struktur danych Projekt algorytmów Specyfikacja algorytmów Inżynieria Oprogramowania WSZiB Hierarchiczna struktura projektu System level Sub-system level (C) 1995 Ian Somerville Semestr IV Inżynieria Oprogramowania WSZiB Projektowanie metodą top-down W założeniu projektowanie rozpoczyna się od najwyższych komponentów w hierarchii i podąża w “dół” kolejnymi poziomami W praktyce duże systemy nigdy nie są projektowane ściśle za pomocą metody top-down Semestr IV Projektanci wykorzystują wielokrotnie doświadczenie jak i komponenty w trakcie procesu projektowania W podejściu obiektowym często gotowe obiekty stanowią szkielet w oparciu o który powstaje projekt systemu. Nie występuje tu pojęcie pojedynczego „wierzchołka” od którego zaczyna się projekt Inżynieria Oprogramowania WSZiB Metodyki projektowania Metodyka projektowa To zestaw technik, notacji, strategii oraz modeli wspierających proces modelowania (odwzorowania świata rzeczywistego na model software’owy) Określa systematyczny sposób „wywodzenia” projektu z danych wymagań Metodyki można dzielić używając Ogólnej klasyfikacji (strukturalna, OO, oparta o diagram stanów) określającej Podziału na specyficzne metodyki/notacje (OMT, Booch, Coad-Yourdon) określającego Semestr IV podstawową zawartość dokumentów projektowych i wymagań poszczególne, wykorzystywane formy reprezentacji Inżynieria Oprogramowania WSZiB Metodyki projektowania Metodyki strukturalne to zestawy notacji służące do opisu projektu jak i wytyczne dot. tworzenia projektu Przykład: Structured Design (Yourdon) Są stosowane z powodzeniem ponieważ opierają się o standardową notację i wymuszają zgodność projektu z określonym standardem Wspierane przez narzędzia CASE Semestr IV Często oferują one możliwość generacji kodu na podstawie projektu Inżynieria Oprogramowania WSZiB Metodyki komponentowe Semestr IV Różne metodyki/notacje obrazują dany system z różnych perspektyw Diagramy przepływu danych (data flow diagrams) demonstrują operacje na danych Diagramy entity-relation opisują logiczne struktury danych Diagramy strukturalne opisują komponenty systemu oraz ich wzajemne interakcje Inżynieria Oprogramowania WSZiB Niedoskonałości metodyk Są to raczej ogólne wytyczne, nie ścisłe metody postępowania. Różni projektanci stworzą zupełnie różne projekty w oparciu o tą samą specyfikację i metodykę W początkowej (twórczej) fazie projektu nie są zbyt pomocne. Oferują za to pomoc w strukturyzowaniu i dokumentowaniu projektu file:///D:/Utils/ClipArts/PRESEN ~1.JPG file:///D:/Utils/ClipAr ts/INFLAT~1.JPG Wiedza, doświadczenie Metodyka Semestr IV Rozwiązanie/projekt Inżynieria Oprogramowania WSZiB Sposoby opisu projektu Semestr IV Notacje graficzne. Wykorzystywane do prezentacji zależności pomiędzy komponentami Języki opisu programu. (ang. Program Description Languages) Rodzaj pseudokodu na tyle elastycznego aby móc wyrażać w nim abstrakcyjne idee Nieformalny tekst. Opis w języku naturalnym Przy projektowaniu dużych i złożonych systemów mogą być wykorzystywane wszystkie te notacje Inżynieria Oprogramowania WSZiB Strategie projektowania Podejście funkcjonalne Podejście obiektowe Semestr IV Projekt systemu powstaje w oparciu o funkcjonalny punkt widzenia. Stan systemu jest scentralizowany i współdzielony przez wszystkie funkcje operujące w danym stanie System jest prezentowany jako zbiór oddziaływujących ze sobą obiektów. Stan systemu jest zdecentralizowany, każdy obiekt zarządza swoim własnym stanem. Obiekty są to instancje odpowiednich klas, komunikacja odbywa się poprzez wymianę komunikatów Inżynieria Oprogramowania WSZiB Przykład: kompilator, podejście funkcjonalne Source program Tokens Scan source Syntax tree Tokens Build symbol table Symbols Analyse Symbols Object code Generate code Error indicator Symbol table Output errors Error messages Semestr IV Inżynieria Oprogramowania WSZiB Przykład: kompilator, podejście obiektowe Scan Source program Add Token stream Symbol table Check Syntax tree Get Grammar Build Print Error messages Generate Object code Abstract code Generate Semestr IV Inżynieria Oprogramowania WSZiB Strategia mieszana Semestr IV Pomimo pojawiających się co jakiś czas sugestii że dane podejście projektowe jest najlepsze w praktyce oba podejścia: funkcjonalne i obiektowe uzupełniają się wzajemnie Doświadczeni praktycy wybierają najodpowiedniejsze podejście dla każdego z osobna projektowanego podsystemu Inżynieria Oprogramowania WSZiB Jakość projektu Jakość projektu systemu jest pojęciem względnym jest wypadkową specyficznych priorytetów dla danej organizacji Pojęcie dobrego jakościowo projektu może oznaczać projekt systemu najtańszego, najwydajniejszego, najbardziej niezawodnego, itp. Omawiane dalej atrybuty jakości dotyczą pielęgnowalności projektu Omawiane atrybuty odnoszą się do projektów tworzonych za pomocą różnych podejść Semestr IV Projekt powinien dać się “łatwo modyfikować i rozszerzać” Obiektowego jak i funkcjonalnego Inżynieria Oprogramowania WSZiB Spójność Semestr IV Mówi o tym w jakim stopniu dany komponent tworzy logiczną całość Dany komponent powinien implementować pojedynczą logiczną strukturę bądź funkcję Spójność jest pożądaną cechą projektu gdyż w przypadku konieczności zmiany danej funkcjonalności zmiana ta będzie umiejscowiona w jednym miejscu Identyfikuje się 7 różnych poziomów spójności (Constantine & Yourdon, 1979) Inżynieria Oprogramowania WSZiB Poziomy spójności Spójność przypadkowa (słaba) Powiązanie logiczne (słabe) Komponenty aktywowane w tym samym czasie są zgrupowane razem Spójność proceduralna (słaba) Semestr IV Składowe wykonujące podobne funkcje (zadania) są zgrupowane razem Spójność czasowa (słaba) Składowe danego komponentu zebrane razem bez żadnego kryterium Elementy danego komponentu tworzą pojedynczą sekwencję sterującą Inżynieria Oprogramowania WSZiB Poziomy spójności (c.d.) Spójność komunikacyjna (średnia) Spójność sekwencyjna (średnia) Dane wyjściowe składowej komponentu są danymi wejściowymi innej składowej Spójność funkcjonalna (silna) Semestr IV Wszystkie składowe komponentu operują na tych samych danych wejściowych bądź produkują te same dane wyjściowe Do wykonania pojedynczej funkcji potrzebna jest każda ze składowych komponentu Inżynieria Oprogramowania WSZiB Poziomy spójności (c.d.) Bazowa Spójność Pochodna 1 W odniesieniu do systemów OO można zdefiniować jeszcze jedną klasę spójności Spójność obiektowa (silna) W przypadku występowania dziedziczenia spójność obiektu ulega obniżeniu Pochodna 2 Semestr IV Każda operacja dostarcza funkcjonalność która umożliwa modyfikowanie bądź odczytywanie atrybutów obiektu Nie można postrzegać obiektu klasy jako odrębnej jednostki izolowanej od otoczenia Do pełnego zrozumienia funkcjonalności danej klasy konieczne jest zapoznanie się z wszystkimi nadklasami Szczególnie złożone w przypadku występowania wielokrotnego dziedziczenia Inżynieria Oprogramowania WSZiB Powiązanie Semestr IV Miara tego jak mocno połączone są ze sobą poszczególne komponenty systemu Luźne powiązanie (ang. loose coupling) oznacza że zmiany wprowadzone w danym komponencie nie mają wpływu na pozostałe Luźne powiązanie można osiągnąć poprzez decentralizację stanu systemu (jak w podejściu OO) oraz zaprojektowanie komunikacji pomiędzy komponentami w postaci przekazywania komunikatów bądź parametrów Zmienne dzielone bądź wymiana informacji sterujących prowadzi do mocnego powiązania (ang. tight coupling) Inżynieria Oprogramowania 28 WSZiB Mocne powiązanie Semestr IV Inżynieria Oprogramowania WSZiB Luźne powiązanie Semestr IV Inżynieria Oprogramowania WSZiB Powiązanie a dziedziczenie Semestr IV Systemy OO są luźno powiązane ze swojej natury ponieważ nie występują stany dzielone oraz obiekty komunikują się między sobą używając mechanizmu przekazywania komunikatów Z drugiej strony klasa danego obiektu jest ściśle powiązana ze swoją nadklasą. Zmiany wprowadzone w danej nadklasie propagują się do wszyskich jej podklas. Tego typu zmiany powinny być szczególnie uważnie weryfikowane! Inżynieria Oprogramowania WSZiB Zrozumiałość Powiązana z innymi cechami projektu Semestr IV Spójność. Czy komponent może być zrozumiany w izolacji? Nazewnictwo. Czy używane nazwy są znaczące? Dokumentacja. Czy projekt jest dobrze udokumentowany? Złożoność. Czy wykorzystywane są złożone algorytmy? Bardziej nieformalnie przez złożoność rozumie się wiele powiązań pomiędzy różnymi częściami projektu. Przez to projekt staje się trudny do zrozumienia Większość metryk powiązanych z projektami to miary złożoności Inżynieria Oprogramowania 32 WSZiB Adaptowalność Projekt jest adaptowalny jeśli: Semestr IV Jego komponenty są luźno ze sobą powiązane Jest dobrze udokumentowany oraz dokumentacja jest aktualna (!) Występuje czytelna relacja pomiędzy poziomami projektu o różnym stopniu szczegółowości (czytelność projektu) Każdy z komponentów jest izolowanym obiektem (spójność) Przy adaptacji projektu musi istnieć możliwość śledzenia powiązań pomiędzy poszczególnymi komponentami projektu tak aby można było przeanalizować konsekwencje wprowadzenia danej zmiany (ang. traceability) Inżynieria Oprogramowania 33 WSZiB Możliwość śledzenia zmian w projekcie (ang. traceability) C F B D A Poziom interakcji obiektów D P O R Poziom dekompozycji obiektów Semestr IV Inżynieria Oprogramowania WSZiB Adaptowalność a dziedziczenie Dziedziczenie znacząco ulepsza adaptowalność projektu. Poszczególne komponenty mogą być adaptowane poprzez utworzenie podklasy oraz jej modyfikację W miarę rozrastania się hierarchii klas staje się ona coraz bardziej złożona, w krańcowych przypadkach – nieczytelna oraz duplikująca poszczególne funkcjonalności. Semestr IV Taka hierarchia powinna być okresowo przeglądana i restrukturyzowana Inżynieria Oprogramowania 35 WSZiB Podsumowanie (1/2) Semestr IV Projektowanie jest procesem twórczym Główne aktywności projektowe to: projekt architektury, specyfikacja systemu, projekt komponentów, projekt struktur danych oraz projekt algorytmów Stosując dekompozycję funkcjonalną rozpatruje się system jako zbiór jednostek funkcjonalnych Stosując dekompozycję obiektową rozpatruje się system jako zbiór obiektów Projektowanie funkcjonalne oraz obiektowe są nawzajem uzupełniającymi się technikami. Na różnych poziomach abstrakcji projektu zwykle wykorzystuje się różne techniki Inżynieria Oprogramowania 36 WSZiB Podsumowanie (2/2) Semestr IV Spójność mówi nam jak silnie są z sobą powiązane składowe danego komponentu. Powiązanie informuje o tym jak silnie są ze sobą połączone różne komponenty. Przy tworzeniu projektu należy dążyć do silnej spójności i powstania luźnych powiązań. Inżynieria Oprogramowania 36 WSZiB