io w11 zasady projektowania opr

background image

1

Inżynieria oprogramowania

wykład 11

Zasady projektowania oprogramowania

background image

2/26

Informacje podstawowe

projektowanie → jedna z najważniejszych
czynności procesu powstawania
oprogramowania, niezależnie od modelu procesu
wytwórczego

projekt → techniczna reprezentacja (model)
budowanego obiektu/systemu

projekt może być porównywany z wymaganiami
użytkownika oraz poddawany kontroli jakości wg
przyjętych kryteriów

background image

3/26

Główne zagadnienia projektu

projekt danych → przetworzenie informacji zawartych w
modelu danych na struktury danych, oparte na opisach
obiektów i związków między nimi

projekt architektury → opis zależności między
najważniejszymi częściami programu, przygotowany na
podstawie specyfikacji wymagań, modelu systemu i
związków między modułami oraz procedurami

projekt interfejsów → metody wymiany informacji między
modułami programu oraz z innymi systemami i
użytkownikami (oparte na diagramach przepływu danych)

projekt modułów i procedur → szczegółowy opis działania
procedur, oparty na specyfikacji przepływu sterowania i
diagramach STD

background image

4/26

Zasady projektowania
oprogramowania

architektura powinna być oparta na łatwych do określenia
wzorcach projektowych, zbudowana z modułów
spełniających kryteria jakości i umożliwiających
implementację i testowanie

projekt powinien cechować się modularnością (opis
podziału na moduły realizujące funkcje i podfunkcje)

oddzielny opis danych, architektury, modułów, interfejsów

struktury danych w projekcie powinny odpowiadać
strukturom obiektów systemu

najlepiej do tworzenia projektów wykorzystywać
sprawdzone metody

projekt powinien być oparty na ustaleniach sporządzonych
na etapie analizy wymagań

background image

5/26

Cechy dobrego projektu

jednorodność i spójność (dobrze opisane
związki między modułami i interfejsami)

struktura projektu powinna ułatwiać
wprowadzanie zmian

projekt powinien uwzględniać możliwość
wystąpienia nieprzewidzianych sytuacji

należy regularnie dokonywać oceny jakości
projektu i poddawać przeglądom (w celu
uniknięcia błędów, zgodność z założeniami)

background image

6/26

Pojęcia związane z projektowaniem

abstrakcja

uściślanie

modularność

architektura oprogramowania

hierarchia sterowania

dzielenie na części

struktury danych

procedury

ukrywanie informacji

background image

7/26

Abstrakcja

definicja

uproszczenie rozpatrywanego problemu, polegające na ograniczeniu
zakresu cech manipulowanych obiektów wyłącznie do cech kluczowych
dla algorytmu, a jednocześnie niezależnych od implementacji (wg
pl.wikipedia.org
)

pozwala rozważać problemy na wybranym poziomie szczegółowości, bez
wnikania w nieistotne szczegóły (A.Wasserman: Principles of systematic
data design and implementation, Software design techniques, IEEE
Computer SocietyPress, 1983)

rodzaje

abstrakcja proceduralna → nazwany ciąg zadań, pozwalający wykonać
pewne zadanie

abstrakcja danych → nazwany zestaw informacji opisujących obiekt
danych, języki programowania udostępniają możliwość definiowania
abstrakcyjnych typów danych (szablony)

abstrakcja przepływu sterowania → opis sterowania bez szczegółów

background image

8/26

Uściślanie

jest procesem wyjaśniania działania programu

jest metodą projektowania typu „od ogółu do
szczegółu”

polega na stopniowym zmniejszaniu poziomu
abstrakcji poprzez uściślanie i dekompozycję aż
do instrukcji w języku programowania
(najniższy poziom) *

uściślanie i abstrakcja uzupełniają się
wzajemnie

* N. Wirth: Program development by stepwise refinement, CACM, 1971

background image

9/26

Modularność

podział programu na moduły – oddzielne składniki realizujące pewne
zadania, ale tworzące razem spójną całość

podejście człowieka do rozwiązywania problemów

wykorzystuje się tu metodę „dziel i zwyciężaj” – skomplikowany
problem łatwiej rozwiązać dzieląc go na mniejsze (przykład:
rekurencja – sortowanie przez scalanie oraz szybkie, wyszukiwanie
połówkowe), typowe podejście człowieka: złożony problem
składający się z połączonych podproblemów wydaje się bardziej
trudny do rozwiązania niż podproblemy oddzielnie

dzielenie programu na moduły ma sens ale tylko w pewnym zakresie

background image

10/26

Wpływ modularności na koszty
tworzenia oprogramowania

zakres minimalnych

kosztów

koszt całkowity

koszt integracji

koszt modułu

liczba modułów

p

ra

c

o

c

h

ło

n

n

o

ś

ć

lu

b

k

o

s

z

t

background image

11/26

Wpływ modularności na koszty
tworzenia oprogramowania - analiza

koszt tworzenia oprogramowania związany z podziałem
na moduły składa się z 2 głównych składników

koszt wytworzenia modułów

koszt integracji modułów

koszt wytworzenia modułów zmniejsza się przy
wzroście liczby modułów, głównie dzięki zmniejszaniu
wielkości modułów

koszt integracji rośnie przy wzroście liczby modułów,
zwiększa się pracochłonności integracji

koszt całkowity posiada pewien optymalny zakres ze
względu na liczbę modułów

należy unikać zbyt małej oraz zbyt dużej liczby
modułów

background image

12/26

Architektura oprogramowania

ogólna struktura oprogramowania i sposób powiązania
części w integralny system *

projekt architektury oprogramowania powinien zawierać: *

cechy strukturalne → składniki systemu (moduły, obiekty,
zapytania), sposoby ich połączenia i wymiany informacji

cechy pozafunkcjonalne → opis wpływu struktury na spełnienie
wymagań związanych z efektywnością, niezawodnością,
bezpieczeństwem, łatwością ewentualnej modyfikacji, itp.

rodziny podobnych systemów → wykorzystanie sprawdzonych
wzorców stosowanych do projektowania podobnych systemów,
uwzględnienie ponownego wykorzystania składników architektury

* M. Show, D. Garlan: Formulations and formalisms in software architecture, Lecture
Notes in Computer Science, Springer-Verlag, 1995

background image

13/26

Modele opisu architektury
oprogramowania

modele strukturalne → opis programu jako zestawu
pewnych składników

modele wzorców → opis systemów na wyższym
poziomie abstrakcji jako struktury składającej się z
wzorców projektowych występujących w podobnych
systemach

modele dynamiczne → opis zmian w strukturze lub
konfiguracji systemu w zależności od zdarzeń
zewnętrznych

modele procesów → projektowanie procesów i
procedur postępowania

modele funkcji → opis hierarchii funkcji realizowanych
przez system

modele mogą być tworzone za pomocą języków opisu architektury (ADL)

background image

14/26

Hierarchia sterowania

nazywana strukturą programu

stanowi opis połączenia modułów programu z którego
wynika hierarchiczna struktura przepływu sterowania

nie uwzględnia: kolejności wykonywanych zadań,
podejmowanych decyzji, operacji wykonywanych
wielokrotnie

sposoby przedstawiania:

diagramy drzewiaste

notacja Warniera-Orra

diagramy Jacksona

background image

15/26

Diagram drzewiasty hierarchii
przepływu sterowania - przykład

M

a

b

e

d

c

f

h

g

i

j

l

k

n

m

o

p

szerokość (zasięg sterowania)

g

łę

b

o

k

o

ś

ć

lic

z

b

a

p

o

z

io

m

ó

w

s

te

ro

w

a

n

ia

rozgałęzienie wyjściowe –

liczba wywoływanych

modułów

rozgałęzienie

wejściowe-liczba

modułów

wywołujących

dany moduł

moduł c jest

nadrzędny dla

modułów k i l

background image

16/26

Poziomy i pionowy podział architektury
hierarchicznej na części

poziomy → podział na funkcje wykonujące różne zadania
( np.: wczytywanie danych wejściowych, przetwarzanie
danych, zwracanie, danych wyjściowych), ułatwia
testowanie, pielęgnację, zmniejsza negatywne skutki
błędów, ułatwia rozszerzanie programu

pionowy (faktoryzacja) → podział na moduły na
sterujące (rzadko przetwarzają dane) i „robocze”
(przyjmują dane, przetwarzają i zwracają), pozwala unikać
zbyt wielu skutków ubocznych zmian (zmiany w modułach
podrzędnych powodują małą ilość skutków ubocznych,
zmiany w modułach umiejscowionych wysoko mogą
powodować skutki uboczne w modułach niżej w hierarchii)

background image

17/26

Podział poziomy - przykład

M

a

b

e

d

c

f

h

g

j

l

k

n

m

n

funkcja 1

funkcja 2

funkcja 3

background image

18/26

Podział pionowy - przykład

M

a

b

e

d

c

f

h

g

j

l

k

n

m

n

moduły

sterujące

moduły

„robocze”

background image

19/26

Struktury danych

opis związków logicznych między danymi

określają organizację danych, metody dostępu i
sposoby przetwarzania danych

podstawowe struktury danych

skalary → pojedyncze elementy, dostęp poprzez podanie
adresu w pamięci, rozmiary zależne od środowiska
programistycznego (np. bool = 1B, int=4B itd.)

wektory → ciągi skalarów

tablice → wektory wielowymiarowe

listy → elementami są skalary, wektory lub tablice, w pamięci
niekoniecznie obok siebie, każdy element zawiera właściwe
dane i informacje o położeniu elementu następnego

drzewa → wielokrotnie powiązane listy (struktura
hierarchiczna)

background image

20/26

Procedury

opis sposobu przetwarzania informacji

zawiera: kolejność wykonywania zadań,
miejsca podejmowania decyzji, powtórzenia
wielokrotne czynności, czasem również
używane struktury danych

struktura procedur związana jest z architekturą
programu

projekt procedur powinien zawierać odniesienia
do procedur z modułów podrzędnych

background image

21/26

Ukrywanie informacji

moduły powinny być tak projektowane aby
procedury i dane tego danego moduły były
widoczne dla innych modułów tylko jeżeli jest to
konieczne

uwzględniając powyższe zapobiega się
powstawanie skomplikowanej sieci
niepotrzebnych zależności

korzyści z ukrywania informacji mogą pojawić się
przy wprowadzaniu zmian → skutki
ewentualnych błędów nie wpływają na działanie
całego systemu

background image

22/26

Projektowanie systemów
modularnych

niezależność funkcjonalna → małe moduły, nie
wymieniające zbyt dużej ilości informacji z innymi
modułami, odpowiedzialne za realizację jednej określonej
funkcji systemu, zalety: łatwy podział pracy zespołów,
łatwiejsze testowanie i pielęgnacja (ograniczone skutki
zmian), możliwość wielokrotnego użycia, niezależność
można mierzyć badając spoistość i sprzężenia

spoistość → moduł spoisty odpowiada za realizację
jednego konkretnego zadania i nie wymienia zbyt dużo
informacji z innymi modułami, nie przekłada się jednak
bezpośrednio na jakość projektu

sprzężenia → związki między modułami oprogramowania,
należy unikać zbyt wielu sprzężeń sprzyjających tzw.
przenoszeniu się błędu między modułami

background image

23/26

Rodzaje sprzężeń

brak → moduły podrzędne do różnych modułów nadrzędnych

informacyjne (słabe) → wywołanie modułu podrzędnego wraz
przekazanie pewnej listy argumentów

znacznikowe (słabe) → przekazywane dane mają pewną strukturę
przekazywaną wraz z danymi

sterujące (silniejsze) → przekazywane dane służą wyborowi dalszego
działania, występują bardzo często

zewnętrzne (silne) → powiązanie z urządzeniami zewnętrznymi,
protokołami komunikacyjnymi, itp., powinno być ich jak najmniej

globalne (silne) → moduły korzystają ze wspólnych danych,
przechowywanych np. w pamięci lub plikach dyskowych → trudne
diagnozowanie błędów

zawartości (najsilniejsze) → moduł korzysta z danych
przechowywanych w innym module lub wywołuje jego wewnętrzne
procedury z pominięciem interfejsów → należy ich unikać

background image

24/26

Heurystyka projektowania
modularnego - zasady

zmiana ustalonych struktur powinna powodować zwiększenie
spoistości i unikanie sprzężeń (podział i łączenie modułów w celu
poprawy niezależności funkcjonalnej)

unikanie szerokich rozgałęzień wyjściowych (płaska struktura),
wykorzystywanie rozgałęzień wejściowych na niższych poziomach
hierarchii

zasięg skutków działania modułu (moduły których działanie jest
uzależnione od działań danego modułu) nie powinien przekraczać
zasięgu sterowania (moduły pośrednio lub bezpośrednio podrzędne)
modułu

ograniczanie złożoności i nadmiarowości interfejsów modułów
(przyczyna błędów) i zapewnianie ich spójności

zwiększanie przewidywalności działania modułów (takie same dane
wejściowe powodują otrzymanie zawsze takich samych danych
wyjściowych

unikanie sprzężeń zawartości → łatwiejsza kontrola i pielęgnacja

background image

25/26

Dokumentacja projektowa

zakres prac projektowych → opracowany na podstawie
specyfikacji systemu i specyfikacji wymagań

projekt danych → struktura danych i plików zewnętrznych

projekt architektury → opracowany na podstawie modelu
analitycznego, zawiera diagramy hierarchii modułów

opis interfejsów

opis modułów, procedur i podprocedur

opis składników programu w połączeniu z wymaganiami
(sprawdzenie projektu pod kątem stawianych wymagań i
określenie kluczowych składników dla wymagań)

wstępna wersja zestawu testów

sposób wdrożenia systemu u klienta

dodatkowe dane → opisy algorytmów, zastępcze procedury
działania, wstępna wersja podręcznika użytkownika i inne
istotne

background image

26

Dziękuję za uwagę

źródło: „Praktyczne podejście do inżynierii oprogramowania”, R.S. Pressman


Wyszukiwarka

Podobne podstrony:
34 Zasady projektowania strefy wjazdowej do wsi
p 43 ZASADY PROJEKTOWANIA I KSZTAŁTOWANIA FUNDAMENTÓW POD MASZYNY
Zasady projektowania wymienników ciep
10 Przedstawić zasady projektowania sieci dostępowych i szkieletowych
Zasady projektowania zbieraczy
Drewniane, Zasady projektowania więźby dachowej, Zasady projektowania więźby dachowej
(Podstawowe zasady projektowani Nieznany
Zasady projektowania więźby dachowej, drzewa, konstrukcje drewniane, Technologia
Zasady projektowania SIZ [1]
ZASADY PROJEKTOWANIA ŚCIAN ZEWNĘTRZNYCH
zasady projektowania algorytmów
6 Zasady Projektowania id 43987 Nieznany (2)
Zasady projektowania układów kompensacji mocy biernej nn
Og�lne zasady projektowania kwestionariusza

więcej podobnych podstron