background image

Inżynieria wymagań I

Ian Sommerville

Software Engineering, 9. 

wyd.

background image

Zawartość

Wymagania funkcjonalne i 
niefunkcjonalne

Dokumentowanie wymagań

Specyfikacja wymagań

Proces inżynierii wymagań

Wydobywanie i analizowanie wymagań

Zatwierdzanie wymagań

Zarządzanie wymaganiami

background image

Inżynieria wymagań

Proces ustalenia, analizowania oraz 

dokumentowania usług i 

ograniczeń stawianych 

oprogramowaniu.

Same wymagania to opis usług i 

ograniczeń oprogramowania  

ustalonych w procesie inżynierii 

wymagań.

W przemyśle informatycznym 

pojęcie wymagania nie jest 

stosowane konsekwentnie.

background image

Czym jest wymaganie?

Z jednej strony, wymagania mogą być 
postrzegane  jako zapisane na wysokim 
poziomie, abstrakcyjne określenie usług 
oferowanych przez system albo ograniczeń 
działania systemu.

Z drugiej strony, wymagania można 
postrzegać jako szczegółową matematycznie 
formalną definicję funkcji i ograniczeń 
systemu. 

Wybór jednego z powyższych poziomów opisu 
zależy od kontekstu, w jakim sformułowano 
wymagania.

background image

Rodzaje wymagań (Davis 
1993)

Jeśli firma chce podpisać kontrakt na wielkie 
przedsięwzięcie budowy oprogramowania, to musi 
najpierw określić swoje wymagania w odpowiednio 
abstrakcyjny sposób, aby z góry nie definiować 
rozwiązań. Wymagania muszą być spisane, aby 
różni wykonawcy mogli ubiegać się o ten kontrakt, 
być może oferując różne sposoby spełnienia 
oczekiwań firmy zamawiającej. Gdy kontrakt jest już 
podpisany, wykonawca musi zapisać dla klienta 
dokładniejszą definicję systemu, podając więcej 
szczegółów, aby klient mógł zrozumieć i 
zweryfikować działanie systemu. Oba te dokumenty 
mogą nosić nazwę dokumentacji wymagań 
stawianych systemowi.

background image

Rodzaje wymagań

Wymagania użytkownika 

Opis w języku naturalnym oraz  przy 
użyciu diagramów usług i ograniczeń 
systemu.

Wymagania systemowe 

Szczegółowo definiują wymagania 
użytkownika. Mogą służyć jako część 
kontraktu między nabywcą systemu, a 
jego wytwórcą.

background image

Wymagania użytkownika i 
wymagania systemowe

Definicja wymagań użytkownika 

Specyfikacja wymagań systemowych

1.

System powinien generować miesięczny raport zawierający 

sumaryczny koszt lekarstw  zapisanych przez każdą przychodnię 

obsługiwaną przez system

1.1

Ostatniego  roboczego dnia  każdego miesiąca należy wygenerować  spis 

wszystkich przepisanych leków i ich koszt . Z każdym lekiem należy związać 

listę przychodni, które zapisywały ten lek.

1.2

O 17:30 ostatniego dnia miesiąca należy  przygotować  wydruk miesięcznego 

raportu.

1.3

W raporcie, dla każdej  przychodni należy podać : listę leków,  które zostały 

zapisane, liczbę przepisanych porcji każdego leku,  i całkowity koszt każdego 

leku.

1.4

Powyższe informacje należy rozdzielić na poszczególne dawki leku.

1.5

Dostęp do informacji o lekach będzie ograniczony do  autoryzowanych 

użytkowników.

background image

Czytelnicy różnych rodzajów 
specyfikacji

Wymagania 
użytkownika

Mened

ż

erowie klienta

U

ż

ytkownicy systemu

Inżynierowie

 klienta

Mened

ż

erowie 

zleceniobiorcy
Architekci systemu

Wymagania 
systemowe

U

ż

ytkownicy systemu

In

ż

ynierowie klienta

Architekci systemu
Twórcy oprogramowania

background image

Wymagania funkcjonalne i 
niefunkcjonalne

Wymagania funkcjonalne

Określają, jakie usługi ma ofiarować system, jak ma 

reagować na określone dane wejściowe oraz jak ma się 

zachowywać w określonych sytuacjach. W niektórych 

przypadkach mogą określać, czego system nie powinien 

robić. 

Wymagania niefunkcjonalne

Ograniczają usługi i funkcje systemu. Obejmują 

ograniczenia czasowe, sprzętowe, ograniczenia dotyczące 

procesu tworzenia, standardy itp.

Wymagania dziedzinowe

Odzwierciedlają charakterystykę dziedziny systemu. Mogą 

być funkcjonalne lub niefunkcjonalne.

background image

Wymagania funkcjonalne

Opisują funkcjonalność lub usługi, które 
system powinien oferować.

Zależą od rodzaju tworzonego 
oprogramowania oraz spodziewanych 
użytkowników.

Jeśli mają postać wymagań 
użytkownika, ich opis jest stosunkowo 
ogólny.

Jeśli są to wymagania systemowe, 
szczegółowo definiują funkcje systemu, 
jego wejścia, wyjścia, wyjątki itp.

background image

Wymagania funkcjonalne (system 
zarządzania przychodniami 
leczniczymi

)

Użytkownik będzie mógł przeszukiwać 
listy przyjęć we wszystkich 
przychodniach.

Każdego dnia rano system będzie 
generował, dla każdej przychodni, listę 
zapisanych na ten dzień pacjentów.

Każdy użytkownik systemu będzie 
identyfikowany przy użyciu 8-cyfrowego 
numeru.

background image

Niejednoznaczność 
wymagań

Wymagania są często niejednoznaczne.

Często wykonawca sam rozwiązuje 
niejednoznaczność tak, aby implementacja była 
łatwiejsza.

Słowo „przeszukiwać” w wymaganiu pierwszym.

Intencja użytkownika: podaj nazwisko pacjenta 
i szukaj

Interpretacja zespołu wytwórczego: wybierz 
przychodnię, nazwiska pacjenta i szukaj

background image

Kompletność i spójność 
wymagań

Wymagania powinny być kompletne i spójne.

Kompletność:

Wszystkie potrzebne użytkownikowi usługi 
powinny być zdefiniowane

Spójność:

Wymagania nie powinny mieć sprzecznych 
definicji

W praktyce w wypadku wielkich systemów 
osiągnięcie kompletności i spójności jest 
niemożliwe.

background image

Wymagania 
niefunkcjonalne

Definiują właściwości systemu, takie jak 

niezawodność, czas reakcji, wymagania 

pamięciowe. 

Mogą także definiować ograniczenia systemu, takie 

jak możliwości urządzeń wejścia-wyjścia, 

reprezentacje danych używane przez interfejsy 

systemu, język programowania, metodologia 

tworzenia oprogramowania.

Wymagania niefunkcjonalne na ogół dotyczą 

całości systemu, a nie jego poszczególnych funkcji. 

Oznacza to, że są one bardziej istotne niż 

wymagania funkcjonalne. Niespełnienie wymagania 

niefunkcjonalnego może często spowodować, że 

system staje się całkowicie bezużyteczny.

background image

Funkcjonalne vs. 
niefunkcjonalne wymagania

Na ogół łatwo ustalić komponent systemu realizujący 
konkretne wymaganie funkcjonalne. 

W przypadku wymagania niefunkcjonalnego może to być 
dużo trudniejsze.

Wymaganie niefunkcjonalne na ogół dotyczy wielu 
komponentów. Na przykład wymogi niezawodności 
systemu mogą wymuszać minimalizację komunikacji 
pomiędzy komponentami.

Pojedyncze wymaganie niefunkcjonalne może generować 
wiele wymagań funkcjonalnych. Np. wymóg 
bezpieczeństwa systemu może wymusić konieczność 
zapewnienia przywracania systemu.

background image

Typy wymagań 
niefunkcjonalnych

Wymagania

niefunkcjonalne

Wymagania 
produktowe

Wymagania 

organizacyjne

Wymagania
zewnętrzne

background image

Wymagania produktowe

Określają zachowanie produktu. 

Wymagania sprawnościowe. Dotyczą szybkości 
działania produktu i jego zapotrzebowania na 
pamięć.

Wymagania niezawodności. Dotyczą miar 
związanych z awariami i dostępnością, np. 
prawdopodobieństwa awarii przy zleceniu, 
częstotliwości występowania awarii, średniego czasu 
do awarii lub dostępności usługi.

Wymagania przenośności. Dotyczą możliwości 
użycia systemu na różnych platformach 
sprzętowych i systemach operacyjnych.

Wymagania użytkowe. Dotyczą wizualnych 
aspektów oprogramowania, takich jak estetyka 
interfejsu.

background image

Wymagania organizacyjne

Wynikają ze strategii i procedur w firmie klienta i 
firmie wytwórcy. 

Wymagania standardów. Dotyczą standardów 
obowiązujących w firmie, takich jak wygląd 
interfejsu czy schematu dokumentacji.

Wymagania implementacyjne. Dotyczą 
aspektów związanych z implementacją 
systemu, takich jak język programowania czy  
metoda projektowania.

Wymagania dostawy. Określają termin 
dostarczenia oprogramowania i dokumentacji.

background image

Wymagania zewnętrzne

Ta szeroka kategoria mieści  wszystkie 
wymagania wynikające z czynników 
zewnętrznych dla systemu i procesu jego 
tworzenia.

Wymagania współpracy. Definiują interakcje systemu 
z systemami innych firm.

Wymagania prawne. Definiują wymagania, które 
należy spełnić, aby system działał zgodnie z prawem, 
takie jak ochrona prywatności czy wymagania 
zabezpieczeń.

Wymagania etyczne. Zapewniają akceptację 
systemu przez jego użytkowników i społeczeństwo. 

background image

Przykłady wymagań 
niefunkcjonalnych

Wymaganie produktowe 

System musi być dostępny od poniedziałku do 

piątku od 8:00 do 20:00, a czas przestoju 

systemu nie może przekroczyć 60 sekund 

(wymaganie niezawodności)

Wymaganie organizacyjne

Końcowa dokumentacja powinna być zgodna 

ze standardem D-STAN-35 (wymaganie 

standardowe)

Wymaganie zewnętrzne

System nie powinien ujawniać poufnych 

danych osobowych klientów (wymaganie 

prawne)

background image

Cele i wymagania

Wymagania niefunkcjonalne mogą być trudne do 
formalnego zdefiniowania i często trudno je 
zweryfikować.

Cel

Ogólna intencja użytkownika, np. łatwość 
użycia

Weryfikowalne wymaganie niefunkcjonalne

Wymaganie zawierające jakąś miarę, którą 
można przetestować

Cele, choć na ogół mało precyzyjne, są 
wartościowe, ponieważ opisują ogólną intencję 
użytkownika. 

background image

Cel i weryfikowalne 
wymaganie

Cel systemu

System powinien być łatwy w użyciu dla 
doświadczonych kontrolerów, a sposób jego 
organizacji powinien minimalizować liczbę błędów 
użytkownika.

Weryfikowalne wymaganie niefunkcjonalne

Doświadczeni użytkownicy powinni móc używać 
wszystkich funkcji systemu po szkoleniu 
trwającym 4 godziny. Po tym szkoleniu średnia 
liczba błędów robionych przez doświadczonych 
użytkowników nie powinna przekroczyć dwóch 
dziennie

background image

Miary do specyfikowania 
wymagań niefunkcjonalnych

Właściwość

Miara

Szybkość

Liczba przetworzonych transakcji na sekundę

Czas reakcji na zdarzenie wywołane przez 

użytkownika

Czas odświeżenia ekranu

Rozmiar

Kilobajty

Liczba układów pamięci RAM

Łatwość 

użycia

Czas szkolenia

Liczba okien pomocy

Niezawodność Średni czas bez awarii

Częstość błędów

Prawdopodobieństwo niedostępności usługi

Solidność

Czas uruchomienia po awarii

Prawdopodobieństwo zniszczenia danych po awarii

Przenośność

Procent poleceń zależnych od platformy

Liczba docelowych platform sprzętowych

background image

Wymagania dziedzinowe

Wynikają z dziedziny zastosowania systemu

Na przykład system wspomagający pracę 
maszynisty musi uwzględnić różne 
charakterystyki hamowania w zależności od 
warunków atmosferycznych

Wymagania dziedzinowe mogą być nowymi 
wymaganiami funkcjonalnymi, mogą 
ograniczać istniejące wymagania funkcjonalne 
lub ustalać sposób wykonywania konkretnych 
obliczeń.

Jeśli wymagania dziedzinowe nie są spełnione, 
system może się nie nadawać do użycia.

background image

System bezpieczeństwa 
ruchu pociągów

Tempo hamowania pociągu wyraża się wzorem

       D

pociągu 

=  D

sterowania 

 +  D

nachylenia

przy czym 

 

D

nachylenia

= 9.81*α, gdzie α zależy   od 

typu pociągu

Dla niespecjalisty powyższy wzór może być mało 
zrozumiały. Ponadto może nie być jasne, jak wzór 
oddziałuje na inne wymagania

background image

Problemy z wymaganiami 
dziedziny

Zrozumiałość

Wymagania dziedziny są często 
wyrażane w języku tej dziedziny. Ten 
język może być niezrozumiały dla 
twórców systemu

Domyślność

Eksperci dziedziny dobrze ją 
rozumieją. Dlatego może im nie 
przyjść do głowy, aby pewne fakty 
sformułować explicite.

background image

Dokumentacja wymagań 
stawianych oprogramowaniu

Dokumentacja wymagań (specyfikacja 

wymagań) jest oficjalną deklaracją tego, co 

jest wymagane od wytwórców 

oprogramowania.

Powinna zawierać zarówno wymagania 

użytkownika, jak i szczegółowy opis wymagań 

systemowych.

Wymagania użytkownika stanowią na ogół 

wstęp do wymagań systemowych. 

Dokumentacja wymagań nie jest dokumentem 

projektowym!! Powinna opisywać usługi 

systemu, nie precyzując jak mają być 

zrealizowane.

background image

Wymagania w metodach 
zwinnych

Większość metod zwinnych zakłada, że 

dokumentacja wymagań jest zbędna, 

ponieważ często się zmieniają.

Metody zwinne realizują przyrostową inżynierię 

wymagań.

Takie rozwiązanie może być słuszne w 

przypadku niewielkich systemów o charakterze 

technologiczno-biznesowym. Staje się jednak 

problematyczne w przypadku systemów 

wymagających głębokiej analizy przed budową 

(systemy krytyczne) lub wielkich systemów 

tworzonych przez wiele zespołów.

background image

Użytkownicy dokumentacji 
wymagań

Użytkownicy

Sposób korzystania

Klienci systemu

Określają wymagania i czytają je, aby 
sprawdzić, czy odpowiadają ich 
potrzebom. Określają także zmiany 
wymagań

Menedżerowie

Używają dokumentacji wymagań do 

planowania oferty budowy systemu i do 
planowania procesu jego tworzenia

Inżynierowie 
systemów

Używają wymagań, aby zrozumieć, jaki 
system ma być zbudowany

Inżynierowie 
testów systemów

Używają wymagań, aby opracować testy 
zatwierdzające system

Inżynierowie 

pielęgnacji 
systemów

Używają wymagań jako pomocy w 

zrozumieniu systemu i związków między 
jego częściami

background image

Różnorodność dokumentacji 
wymagań

Wielu potencjalnych czytelników dokumentacji 
wymagań sprawia, że musi ona być pewnym 
kompromisem pomiędzy komunikowaniem wymagań 
użytkownikom, a ich dokładną definicją potrzebną 
osobom tworzącym, testującym i pielęgnującym 
oprogramowanie.

Informacje zawarte w dokumentacji wymagań zależą 
również od rodzaju oprogramowania oraz metodologii 
jego wytwórstwa. Dokumentacja wymagań dla 
systemów budowanych przyrostowo jest  często  niezbyt 
precyzyjna.

Istnieją standardy dokumentowania wymagań. 
(Departament Obrony Stanów Zjednoczonych,  IEEE)

background image

Struktura dokumentacji 
wymagań (IEEE 1998)

Rozdział

Opis

Przedmowa Należy w niej określić, dla jakich czytelników jest ten 

dokument oraz opisać historię jego wersji wraz z 

uzasadnieniem ich tworzenia oraz zmian wprowadzonych w 

kolejnych wersjach

Wstęp

Należy w niej wyjaśnić, dlaczego ten system jest potrzebny. 

Należy krótko opisać usługi systemu i sposób jego 

współpracy z innymi systemami. Należy również wyjaśnić, 

jak system przystaje do celów gospodarczych i 

strategicznych firmy, która go kupuje.

Słownik

Należy tu zdefiniować techniczne pojęcia występujące w 

dokumencie. Nie należy nic zakładać o doświadczeniu i 

wiedzy czytelnika

Opis 

wymagań 

użytkownik

a

W tym punkcie należy opisać usługi dostarczane 

użytkownikowi i wymagania niefunkcjonalne systemu. W 

opisie można się posłużyć językiem naturalnym, 

diagramami lub inną notacją zrozumiałą dla klientów. 

Powinno się też określić wymagane standardy dotyczące 

produktu i/lub procesu. 

background image

Struktura dokumentacji 
wymagań (IEEE 1998)

Rozdział

Opis

Architektu

ra 

systemu

W tym rozdziale należy podać krótki opis architektury 

systemu  z uwzględnieniem zależności pomiędzy 

konkretnymi usługami  a konkretnymi komponentami. 

Należy wizualnie wyróżnić komponenty wielokrotnego 

użycia.

Wymagan

ia 

systemow

e

Tu należy bardziej szczegółowo opisać wymagania 

funkcjonalne i niefunkcjonalne. Jeśli jest to konieczne 

pewne wymagania niefunkcjonalne mogą zostać 

uszczegółowione poprzez wprowadzenie miar.

Modele 

systemu

Tu należy podać jeden lub więcej modeli systemu, w 

których odzwierciedlono związki między systemem, jego 

komponentami oraz środowiskiem. Mogą to być modele 

obiektowe, modele przepływu danych lub modele 

semantyczne.

background image

Struktura dokumentacji 
wymagań (IEEE 1998)

Rozdział

Opis

Ewolucja 

systemu

Powinno się tu opisać główne założenia systemu i 

przewidywane modyfikacje, które mogą wystąpić  w 

wyniku ewolucji sprzętu, zmiany potrzeb użytkowników 

itd.

Dodatki

Należy tu przedstawić szczegółową, specyficzną 

informację związaną z budowanym oprogramowaniem. 

Przykładami dodatków są opisy sprzętu i opisy bazy 

danych. W wymaganiach sprzętowych  definiuje się 

konfigurację minimalną i optymalną. W wymaganiach 

bazy danych określa się logiczną organizację  danych 

używanych przez system i związki między tymi danymi

Skorowidz

Do dokumentu można dołączyć kilka skorowidzów.  

Oprócz skorowidza alfabetycznego może to być 

skorowidz diagramów, skorowidz usług itd. 

background image

Specyfikacja wymagań

Specyfikacja wymagań jest to proces 

sformułowania funkcjonalnych i 

niefunkcjonalnych wymagań systemu i 

zapisania ich w dokumentacji wymagań.

Wymagania użytkownika powinny być 

zrozumiałe dla osób bez przygotowania 

technicznego.

Wymagania systemowe mogą być bardziej 

formalne i mogą zawierać informacje 

techniczne.

Dokumentacja wymagań stanowi często jeden 

z fragmentów umowy między zleceniobiorcą i 

zleceniodawcą. Dlatego ważna jest jej 

kompletność.

background image

Notacje specyfikacji 
wymagań

Notacja

Opis

Język 

naturalny

Wymagania zapisujemy używając numerowanych zdań w 

języku naturalnym. Jedno zdanie odpowiada jednemu 

wymaganiu.

Strukturalny 

język 

naturalny

Używamy języka naturalnego, ale używamy standardowych 

formularzy do wyrażania wymagań.  Każde pole formularza 

dotyczy jednego aspektu opisu wymagania

Języki opisu 

projektu

W tym podejściu używa się języka podobnego do języka 

programowania, ale bardziej abstrakcyjnego. Notacja rzadko 

używana, choć dobrze nadaje się do specyfikowania interfejsu

Notacje 

graficzne

Wymagania zapisujemy w postaci diagramów. Obecnie 

najbardziej znaną notacją graficzną są diagramy przypadków 

użycia w języku UML

Specyfikacje 

matematyczn

e

Są to notacje czysto formalne oparte na pojęciach 

matematycznych takich jak maszyny stanowe czy zbiory. 

Zapewniają jednoznaczność specyfikacji.  Większość klientów 

nie rozumie jednak formalnych specyfikacji i jest niechętna 

przyjęciu ich jako  fragmentu kontraktu na budowę 

oprogramowania.

background image

Wymagania i 
projektowanie

Wymagania i projekt powinny być odseparowane. 

Wymagania definiują usługi systemu, projekt 

wskazuje, jak te usługi zostaną zrealizowane.

W praktyce rozdzielenie wymagań od projektu 

jest bardzo trudne

Szkic architektury systemu może być 

konieczny, aby ustrukturalizować wymagania

System może współpracować z innymi 

systemami, co może prowadzić do wymagań 

architektonicznych.

Użycie konkretnej architektury może wynikać z 

wymagań dziedziny lub regulacji zewnętrznych

background image

Wymagania w języku 
naturalnym

Używamy języka naturalnego wspomaganego 
tabelami, diagramami itp.

Język naturalny jest prawie zawsze używany w 
przypadku wymagań użytkownika. Często  
używa się go również do zapisu wymagań 
systemowych.

Atrakcyjność  języka naturalnego jako 
narzędzia do opisu wymagań wynika z  jego 
uniwersalności intuicyjności i ogromnej sile 
ekspresji.

background image

Wskazówki dotyczące 
definiowania wymagań w języku 
naturalnym

Przyjmij jakiś standardowy format i używaj go 

do opisu wszystkich wymagań.

Używaj języka w sposób spójny. Rozróżniaj 

pomiędzy „powinien” (dotyczy  pożądanych 

wymagań) i „będzie” (dotyczy obligatoryjnych 

wymagań).

Wyróżniaj najważniejsze fragmenty tekstu 

(kursywa, pogrubienie, kolor itp.)

Unikaj żargonu informatycznego.

Jeśli możliwe, uzasadniaj dlaczego dane 

wymaganie jest ważne. 

background image

Wady języka naturalnego 
jako notacji do opisu 
wymagań

Brak jednoznaczności

Bardzo trudno o precyzję, jeśli dokument 

ma być łatwy do czytania.

Zrozumienie języka naturalnego w 

ogromnej mierze zależy od tego, czy 

czytelnicy autorzy specyfikacji używają 

tych samych słów do oznaczenia tych 

samych pojęć

Istnieje tendencja mieszania wymagań 

funkcjonalnych z niefunkcjonalnymi.

Tendencja do łączenia

Często następuje nieświadome złączenie 

kilku wymagań w jedno

background image

Przykładowe wymagania 
dotyczące pompy insulinowej

3.2 System będzie mierzył poziom cukru we krwi 

co 10 minut i jeśli potrzeba wstrzykiwał insulinę. 

(Zmiany poziomu cukru są relatywnie wolne, 

zatem nie ma potrzeby mierzyć częściej. 

Rzadsze pomiary mogłyby spowodować zbytnie 

podwyższenie poziomu cukru.)

3.5 Co 1 minutę system będzie przeprowadzał 

test aparatury i podejmował ewentualne 

działanie, jak opisano w Tabeli 1. (To pozwoli 

poinformować użytkownika o ewentualnej awarii 

pompy.)

background image

Strukturalny język naturalny 
do opisu wymagań 

Istotą tego podejścia jest 
standaryzacja definiowania 
wymagań poprzez stosowanie 
odpowiednich formularzy.

To podejście dobrze działa dla 
pewnych zastosowań, na przykład 
w przypadku systemów 
wbudowanych.  Dla wielu 
systemów o charakterze 
biznesowym podejście to jest zbyt 
sztywne.

background image

Zawartość formularza 
definiującego wymaganie

Opis specyfikowanej funkcji lub bytu

Opis jej danych wejściowych i źródło ich 
pochodzenia

Opis jej danych wyjściowych i źródło ich 
przeznaczenia

Określenie innych bytów z których korzysta funkcja 
specyfikowana

Warunek początkowy, który musi być spełniony 
przed wywołaniem funkcji (jeśli się stosuje)

Warunek  końcowy, który będzie zachodził po 
wywołaniu funkcji (jeśli się stosuje)

Opis efektów ubocznych (jeśli występują)

background image

Specyfikacja wymagania dla 
pompy insulinowej z użyciem 
formularza

Pompa insulinowa W 3.2
Funkcja 
Oblicz dawkę

Opis Oblicza dawkę insuliny do podania w przypadku kiedy aktualny poziom 

cukru we krwi jest w bezpiecznej strefie między 3 i 7 jednostek

Wejście  Bieżący odczyt cukru (r2) i dwa odczyty poprzednie, r0 i r1

Źródło  Źródłem r2 jest sensor; r0 i r1 pochodzą z pamięci pompy

Wyjście CompDose – dawka insuliny do wstrzyknięcia

Przeznaczenie  Główna pętla sterująca pompą

Działanie Jeśli poziom cukru jest stabilny lub się obniża lub się podwyższa, ale 

szybkość podwyższania się spada, to CompDose=0. W przeciwnym przypadku 

podziel różnicę pomiędzy obecnym i poprzednim poziomem cukru przez 4 i 

zaokrąglij do liczby całkowitej.  Jeśli otrzymałeś 0, to CompDose= minimalna 

dawka, którą można podać

Wymagania Dwa poprzednie odczyty

Warunek wstępny Zbiornik pompy zawiera co najmniej maksymalną 

możliwą dawkę insuliny

Warunek końcowy r0 zostaje zastąpione przez r1;  r1 zostaje zastąpione 

przez r2

Efekty uboczne Brak

background image

Tabelaryzacja specyfikacji

Uzupełnia tekst w języku naturalnym.

Szczególnie przydatna w przypadku, 
kiedy mamy do czynienia z wieloma 
alternatywnymi działaniami.

Pompa insulinowa opiera swoje 
obliczenia na trzech pomiarach poziomu 
cukru we krwi. Użycie tabeli znacznie 
upraszcza rachunki opisane w języku 
naturalnym. 

background image

Tabelaryczna specyfikacja  
obliczenia dla pompy 
insulinowej

Warunek

Działanie

Opadający poziom cukru (r2<r1)

CompDose=0

Stabilny poziom cukru (r2=r1)

CompDose=0

Poziom cukru rosnący i  szybkość 

wzrostu malejąca  (r2>r1) i (r2-

r1)<(r1-r0)

CompDose=0

Poziom cukru rosnący i szybkość 

wzrostu rosnąca lub stabilna 

(r2>r1) i (r2-r1)≥(r1-r0)

CompDose= round((r2-r1)/4)

If CompDose=0 then 

CompDose=MinDose

background image

Podsumowanie

Wymagania definiują usługi systemu i właściwości  
jakim musi podlegać.

Wymagania funkcjonalne określają usługi systemu. 

Wymagania niefunkcjonalne określają właściwości 
systemu. 

Dokumentacja wymagań (specyfikacja wymagań) 
jest oficjalną deklaracją tego, co jest wymagane od 
wytwórców systemu. Powinna zawierać zarówno 
wymagania użytkownika, jak i szczegółowy opis 
wymagań systemowych.

Podstawowe notacje do opisu wymagań to  język 
naturalny, strukturalny język naturalny, języki opisu 
projektu, notacje graficzne i języki formalne.

background image

Inżynieria wymagań II

Ian Sommerville

Software Engineering, 9. 

wyd.

background image

Proces inżynierii wymagań

Procesy inżynierii wymagań mogą się różnić w zależności od 
dziedziny tworzonego oprogramowania, przyjętej metodologii 
tworzenia i firmy  tworzącej. Tym niemniej cztery czynności 
występują w każdym  takim procesie.

Studium wykonalności – czy warto zaczynać budowę 
systemu?

Określenie i analizowanie wymagań – wyodrębnienie 
wszystkich istotnych wymagań

Specyfikowanie wymagań – zapisanie wyodrębnionych 
wymagań w jakiejś standardowej postaci

Zatwierdzenie wymagań --  sprawdzenie, że wymagania 
definiują system oczekiwany przez klienta

background image

(Uproszczony) proces 
inżynierii wymagań

Studium 

wykonalności

Określania

I analiza

wymagań

Specyfikowanie

wymagań

Zatwierdzanie

wymagań

Raport o

wykonalności

Model

systemu

Wymagania użytkownika

I wymagania systemowe

Dokumentacja

wymagań

background image

Studium wykonalności

Punktem startowym tego etapu jest ogólny opis systemu i jego 
wykorzystanie w ramach przedsiębiorstwa zleceniodawcy.

Wynikiem studium wykonalności jest raport, który zaleca lub 
odradza kontynuowanie prac związanych z procesem tworzenia 
systemu. W raporcie można też zaproponować zmiany zakresu 
systemu, budżetu lub harmonogramu.

 W trakcie tego etapu  należy odpowiedzieć na trzy pytania

Czy system przyczyni się do realizacji zakładanych celów 
przedsiębiorstwa?

Czy system można zbudować z użyciem dostępnych 
technologii, w ramach ustalonego budżetu i ograniczeń 
czasowych?

Czy system może być zintegrowany z istniejącymi 
systemami, które już zainstalowano?

background image

Określanie i analizowanie 
wymagań

W trakcie tego etapu inżynierowie budowy 

oprogramowania pracują z klientami i 

użytkownikami systemu nad badaniem 

dziedziny zastosowania i usług, które system 

ma oferować, pożądanej efektywności, 

wymagań sprzętowych itd. 

W etapie tym biorą udział osoby z różnych 

stanowisk w firmie zlecającej: użytkownicy, 

którzy będą pracować z systemem, 

inżynierowie budujący lub pielęgnujący inne 

powiązane systemy, menedżerowie 

przedsiębiorstwa, eksperci z różnych dziedzin. 

Wszystkie te osoby nazywamy 

użytkownikami.

background image

Problemy związane z 
określaniem i analizą 
wymagań

Użytkownicy często nie wiedzą czego oczekują od 

systemu poza ogólnikami. Mogą stawiać nierealne 

żądania efektywnościowe lub dotyczące kosztu.

Użytkownicy często używają własnej technicznej 

terminologii.

Wymagania stawiane przez różnych użytkowników są 

często sprzeczne.

Czynniki polityczne w firmie mogą mieć wpływ na 

system. Mogą pochodzić od menedżerów żądających 

konkretnych wymogów, które umożliwią zwiększenie ich 

wpływów.

Środowisko ekonomiczne i gospodarcze, w którym 

prowadzi się analizę jest dynamiczne. Mogą się pojawić 

nowe wymagania pochodzące od nowych użytkowników.

background image

Określanie i analiza 
wymagań

Proces określania i analizy wymagań 
może się nieznacznie różnić w różnych 
firmach. Tym niemniej powinien 
zawierać następujące etapy:

Rozpoznanie wymagań

Klasyfikacja i organizacja wymagań

Nadawanie priorytetów i usuwanie 
sprzeczności

Specyfikacja wymagań

background image

Proces określania i analizy 
wymagań

Rozpoznanie

wymagań

Klasyfikacja

i organizacja

wymagań

Nadawanie priorytetów

 i usuwanie sprzeczności

Specyfikacja
wymagań

background image

Etapy procesu

Rozpoznanie wymagań

Współpraca z  użytkownikami w celu rozpoznania 

ich wymagań. Na tym etapie zbiera się również 

wymagania dotyczące dziedziny.

Klasyfikacja i organizacja wymagań

Polega na podzieleniu  nieustrukturalizowanego 

zbioru wymagań na spójne grupy

Nadawanie priorytetów i usuwanie 

sprzeczności

Wymagania formułowane przez wielu użytkowników 

są zazwyczaj sprzeczne. Nadanie priorytetów 

poszczególnym wymaganiom pozwala te 

sprzeczności usunąć. Etap ten wymaga  na ogół 

negocjacji z  użytkownikami.

Specyfikacja wymagań

Udokumentowanie dotychczas rozpoznanych 

wymagań

background image

Rozpoznanie wymagań

Rozpoznanie (wydobycie) wymagań polega na 
zbieraniu informacji o tworzonym systemie i 
podobnych działających systemach oraz użycie 
tej informacji w celu zdefiniowania wymagań 
użytkownika i wymagań systemowych.

Źródłem informacji służącej do specyfikacji 
wymagań są użytkownicy oraz dokumentacje 
podobnych

 

systemów informatycznych.

background image

Użytkownicy  systemu 
wspomagającego pracę kliniki 
medycznej

Pacjenci, których dane znajdują się w systemie.

Lekarze odpowiedzialni za diagnozowanie i leczenie 
pacjentów.

Pielęgniarki koordynujące konsultacje pacjentów z 
lekarzami i wykonujące zabiegi.

Pracownicy rejestracji zapisujący pacjentów na wizyty.

Zespół techniczny odpowiedzialny za zarządzanie 
sprzętem i oprogramowaniem w klinice.

Osoba odpowiedzialna za przestrzeganie norm 
etycznych związanych z pacjentami.

Dyrekcja kliniki, wykorzystująca system do zarządzania 
kliniką.

Zespół archiwizujący odpowiedzialny za 
przechowywanie informacji

background image

Rozmowy z użytkownikami 

Mniej lub bardziej formalne rozmowy z 
użytkownikami są częścią większości procesów 
inżynierii wymagań.

Rodzaje rozmów

Zamknięte, oparte na liście wcześniej 
przygotowanych pytań

Otwarte, gdzie pytania tworzone są dynamicznie

Cechy dobrego prowadzenia rozmowy

Otwartość na nowe pomysły, umiejętność 
słuchania innych

Umiejętne zachęcanie do dyskusji (poprzez 
formułowanie ciekawych pytań lub precyzowania 
gotowych wymagań).

background image

Rozmowy w praktyce

W praktyce rozmowy z użytkownikami są 
mieszanką rozmów zamkniętych i otwartych.

Rozmowy stanowią dobrą technikę uzyskania 
ogólnego obrazu na temat działalności 
użytkowników i ich potencjalnej  interakcji z 
systemem.

Rozmowy nie są dobrym narzędziem do 
wyrobienia opinii o wymaganiach dziedziny

.

Eksperci  z firmy zamawiającej na ogół używają 
terminologii niezrozumiałej dla osób z zewnątrz

Co gorsze, na ogół nie są w stanie tego zmienić

background image

Scenariusze

Scenariusze modelują rzeczywiste użycie 

systemu.

Są szczególnie przydatne przy 

uszczegółowianiu istniejących wymagań.

Scenariusz powinien opisywać jedną 

(wyjątkowo kilka) interakcji użytkownik-

system.

Scenariusz powinien zawierać:

Opis stanu systemu na początku 

scenariusza

Opis normalnego następstwa zdarzeń 

scenariusza

Opis tego, co może pójść źle, i jak to jest 

obsługiwane

Informacje o innych czynnościach, które 

można wykonywać w tym samym czasie

Opis stanu systemu po zakończeniu 

scenariusza

background image

Scenariusz edycji karty 
pacjenta 

Stan początkowy. Pacjent widział jak rejestratorka 
tworzy jego kartę choroby, wprowadzając  dane 
osobowe: imię, nazwisko, adres itd. Do systemu 
zalogowana jest aktualnie pielęgniarka, której zadaniem 
jest  uzupełnienie karty o dane medyczne.

Działanie normalne. Pielęgniarka wyszukuje kartę 
pacjenta  posługując się nazwiskiem. W przypadku kilku 
pacjentów o tym samym nazwisku, bierze pod uwagę 
imię i ewentualnie datę urodzenia.

      Po znalezieniu karty pacjenta, pielęgniarka wybiera 

zakładkę  

      „dodaj informacje medyczne”.

background image

Scenariusz edycji karty 
pacjenta 

Działanie normalne (cd.)  Wybierając odpowiednie 
zakładki, pielęgniarka wprowadza różne informacje: 
informacje dotyczące aktualnego stanu pacjenta 
(formularz),  konsultacje w innych klinikach (formularz), 
alergie (zwykły tekst), lista przyjmowanych leków 
(wybór z listy)

Co może się nie udać. W bazie nie ma karty pacjenta. 
Pielęgniarka powinna utworzyć nową kartę i zapisać w 
niej dane osobowe. 

Lek przyjmowany przez pacjenta nie  znajduje się na 
liście. Należy wybrać  zakładkę „brak leku” i wpisać jako 
zwykły tekst.

       

                                                            

                                              

background image

Scenariusz edycji karty 
pacjenta 

Co może się nie udać (cd.) Pacjent nie chce podać 
istotnych informacji. Należy wydrukować standardowe 
pismo o odmowie, które pacjent musi podpisać.

Inne czynności. Podczas wprowadzania informacji, 
inne upoważnione osoby mogą przeglądać kartę 
pacjenta, ale nie mogą jej edytować.

Stan końcowy. Użytkownik jest zalogowany. Dane 
medyczne zostały wprowadzone. W rejestrze zdarzeń 
systemu zapisano godzinę rozpoczęcia, godzinę 
zakończenia sesji oraz identyfikator pielęgniarki 
wprowadzającej dane.

background image

Przypadki użycia

Wchodzą w skład języka UML. Stanowią bardzo 
popularną graficzną technikę rozpoznawania 
wymagań. 

W najprostszej postaci przypadek użycia 
definiuje aktora zaangażowanego w interakcję 
z systemem nadaje tej interakcji nazwę. Aktor 
to człowiek lub inny system.

Nie ma jednoznacznej zgody, czy przypadek 
użycia jest scenariuszem, czy zbiorem 
scenariuszy.

background image

Przypadki użycia kliniki 
medycznej

Rejestratorka

Pielęgniarka

Lekarz

Kierownik

kliniki

Rejestracja

Ogląd danych

osobowych

Ogląd karty

pacjenta

Edycja karty

pacjenta

Zapis na

wizytę

Generowanie

karty wypisu

Generowanie

raportu

zewnętrznego

background image

Etnografia

Systemy informatyczne nie istnieją w izolacji. Są 
użytkowane w środowisku społecznym i organizacyjnym.

Etnografia to metoda obserwacji, która może służyć do 
rozpoznawania wymagań społecznych i 
organizacyjnych.

Zaletą etnografii jest to,  że pomaga rozpoznać niejawne 
wymagania systemowe odzwierciedlające rzeczywiste, a 
nie formalne procesy, w których biorą udział ludzie. 

Te niejawne wymagania są bardzo trudne do uzyskania 
inną drogą niż obserwacja. Wynika to z faktu, że wiele 
czynności związanych z pracą wykonuje się w sposób 
automatyczny.

background image

Zakres etnografii

Etnografia jest szczególnie przydatna do znajdowania dwóch 

typów wymagań

Wymagania wynikające z rzeczywistego sposobu pracy osób, 

a nie ze sposobu zalecanego przez formalne definicje 

procesów. Kontrolerzy lotów mogą wyłączać pewne 

podsystemy używanego systemu, pomimo, że procedury 

tego zabraniają. 

Wymagania, które wynikają z kooperacji i świadomości 

czynności innych osób. Kontrolerzy lotów mogą 

zmodyfikować swoją strategię na podstawie liczby 

samolotów w sąsiednich sektorach. W takim przypadku 

system kontroli lotów powinien umożliwiać kontrolerom 

podglądanie sąsiednich sektorów.

Etnografia jest użyteczna, aby zrozumieć i poprawić szczegóły 

istniejących procesów. Nie nadaje się do wykrycia zupełnie 

nowych wymagań.

background image

Zatwierdzanie wymagań

Polega na sprawdzeniu, że wymagania 

definiują system zgodny z oczekiwaniami 

klienta. 

Koszt błędów związanych z wymaganiami jest 

dużo większy niż błędy implementacyjne. 

Dzieje się tak, ponieważ duże zmiany 

wymagań często pociągają duże zmiany 

projektowo-implementacyjne i dodatkowo 

konieczność ponownego testowania.

background image

Sprawdzanie wymagań

Trafność.

 Czy zbiór wymagań jest optymalny z punktu 

widzenia  wszystkich użytkowników mających często różne , 
być może sprzeczne, potrzeby.

Niesprzeczność. 

Czy istnieją konflikty pomiędzy 

wymaganiami?

Kompletność. 

Czy uwzględniono wszystkie istotne 

wymagania?

Realność. 

Czy zdefiniowane wymagania mogą być 

zaimplementowane biorąc pod uwagę stan współczesnej 
technologii oraz przeznaczony czas i budżet?

Weryfikowalność. 

Czy opracowano metodę sprawdzenia, że 

zdefiniowane wymagania zostały poprawnie 
zaimplementowane?

background image

Techniki zatwierdzania 
wymagań

Przegląd wymagań.

Systematyczna ręczna analiza wymagań

Prototypowanie.

Konstruowanie wykonywalnego modelu 

systemu

Generowanie testów.

Częścią zatwierdzania wymagań może być 

przygotowanie testów dla wymagań. Jeśli 

sprawia to trudność,  istnieje duże 

prawdopodobieństwo, że będą problemy w 

czasie implementacji.

background image

Przeglądy wymagań

Jest to ręczny proces, w którym przedstawiciele 

klienta oraz wytwórców sprawdzają ręcznie 

dokumentację wymagań w celu znalezienia błędów.

Przegląd powinien mieć miejsce od razu po 

zdefiniowaniu wymagań.

Przeglądy mogą być nieformalne i formalne.

Podczas przeglądu nieformalnego wytwórcy 

rozmawiają z jak największą grupą użytkowników.

W czasie przeglądu formalnego zespół wytwórczy 

prezentuje klientowi wszystkie wymagania 

systemowe i wyjaśnia konsekwencje każdego 

wymagania.

background image

Formalne przeglądy 
wymagań

W czasie formalnego przeglądu wymagań, poza 

niesprzecznością i kompletnością,  należy 

sprawdzić:

Możliwość weryfikacji. 

Czy wymaganie 

zdefiniowano tak, że będzie można je 

sprawdzić?

Zrozumiałość. 

Czy użytkownicy właściwie 

zrozumieli wymaganie?

Pochodzenie.

 Czy jawnie zaznaczono źródło, z 

którego pochodzi wymaganie? Źródło może być 

istotne, gdy chcemy ocenić wpływ zmiany. 

Elastyczność. 

Czy wymaganie może być 

zmienione bez znaczącego wpływu na inne 

wymagania?

background image

Zarządzanie wymaganiami

Jest to proces rozpoznawania i panowania nad 
zmianami wymagań systemowych.

Nowe wymagania mogą pojawić się w trakcie 
tworzenia systemu i na ogół zawsze pojawiają 
się w czasie jego użytkowania.

Należy ustawicznie śledzić powiązania 
pomiędzy wymaganiami, aby je uwzględnić 
przy zmianach.

background image

Powody zmian wymagań

Z wielkich systemów korzystają na ogół różni 

użytkownicy, przypisujący wymaganiom różne 

priorytety. Ostateczne wymagania systemowe są z 

konieczności pewnym kompromisem. W miarę 

tworzenia/użytkowania systemu może się okazać, że 

bilans wspomagania różnych użytkowników musi być 

zmieniony.

Ludzie płacący za system i użytkownicy faktyczni to na 

ogół różni klienci.  Wymagania osób płacących mogą 

być sprzeczne z wymaganiami użytkowników z powodu 

ograniczeń organizacyjno-budżetowych.

Zmienia się otoczenie technologiczne i gospodarcze 

mogące wymuszać zmiany wymagań.

background image

Wymagania stałe i 
zmienne

Wymagania stałe 

to względnie stabilne 

wymagania systemowe, które wynikają z 

podstawowej działalności firmy i bezpośrednio 

odnoszą się do dziedziny systemu. W szpitalu 

zawsze będą wymagania dotyczące lekarzy, 

pielęgniarek, pacjentów, terapii itp.

Wymagania zmienne 

to wymagania, które 

łatwo mogą ulec zmianie w trakcie tworzenia 

systemu lub w trakcie jego pielęgnacji.  Takimi 

wymaganiami są na przykład wymagania, 

które wynikają z polityki zdrowotnej rządu.

background image

Ewolucja wymagań

Wstępne
rozumienie
problemu

Wstępne

wymagania

Zmienione

rozumienie

problemu

Zmienione 
wymagania

Czas

background image

Planowanie zarządzania 
wymaganiami

W trakcie tej fazy zarządzania wymaganiami należy 

podjąć decyzje dotyczące następujących zagadnień:

Identyfikowanie wymagań. 

Każde wymaganie musi 

być unikatowo oznakowane, tak aby można się było 

do niego odwoływać.

Proces zarządzania zmianami. 

Jest to zbiór czynności 

szacowania wpływu i kosztu zmian.

Strategia śledzenia pochodzenia. 

Definiują zależności 

między wymaganiami oraz między wymaganiami a 

systemem oraz sposób gromadzenia tych zależności.

Użycie narzędzi CASE. 

Narzędzia, które mogą być 

użyte to wyspecjalizowane systemy zarządzania 

wymaganiami, arkusze kalkulacyjne czy proste bazy 

danych.

background image

Pochodzenie wymagań

Warto gromadzić trzy typy informacji o pochodzeniu 
wymagań

Informacje o pochodzeniu 

wiążą wymaganie z 

użytkownikiem, które je zaproponował. Warto z nim 
skonsultować zmianę.

Informacje o uzależnieniu wymagań 

definiują związki 

pomiędzy wymaganiami, które od siebie zależą. Ta 
informacja pozwala oszacować koszt zmiany.

Informacje o uzależnieniu projektu 

wiążą wymagania z 

modułami, które je implementują. Ta informacja jest 
używana do oszacowania wpływu zmian na projekt systemu 
i jego implementację.

background image

Zarządzanie zmianami 
wymagań

Analiza problemu

i specyfikacja

zmiany

Analiza zmiany

i ocena kosztów

Implementacja

zmiany

Rozpoznany

problem

Skorygowane

wymagania

background image

Zarządzanie zmianami 
wymagań

Kroki procesu zarządzania zmianami

Analiza problemu i specyfikacja zmiany

. Proces 

rozpoczyna się od rozpoznania problemu z 

wymaganiem lub od konkretnej propozycji zmiany. 

Postulat jest sprawdzany pod względem słuszności.

Analiza zmiany i ocena kosztów. 

Korzystając z 

informacji o uzależnieniu wymagania szacuje się 

wpływ zmiany na system i jej koszt. W kroku tym 

podejmuje się decyzję, czy kontynuować zmianę.

Implementacja zmiany. 

Modyfikuje się dokumentację 

wymagań oraz, jeśli potrzeba, również projekt i 

implementację systemu.

background image

Podsumowanie

Proces inżynierii wymagań ma charakter 

iteracyjny. Składa się z  określenia i analizy 

wymagań,  specyfikowania wymagań 

,zatwierdzenia wymagań i zarządzania 

wymaganiami.

Analizowanie wymagań obejmuje rozpoznanie 

wymagań, ich klasyfikację i strukturalizację, 

nadawanie priorytetów i usuwanie 

sprzeczności.

Zatwierdzanie wymagań polega na 

sprawdzeniu, że wymagania definiują system 

zgodny z oczekiwaniami klienta. 

background image

Inżynieria wymagań III 
(Specyfikacja formalna)

Ian Sommerville

Software Engineering, 9 

wyd.

background image

Zawartość

Specyfikacja formalna w procesie 
tworzenia oprogramowania

Specyfikacja interfejsu

Specyfikacja zachowania

background image

Metody formalne

Specyfikacja formalna wchodzi w skład 
technik występujących pod nazwą metody 
formalne.

Podstawą metod formalnych jest 
matematyka.

Metody formalne obejmują kilka czynności 
związanych z wytwarzaniem 
oprogramowania

.

Formalne specyfikowanie systemu

Analizowanie i weryfikację specyfikacji

Proces tworzenia programowania z 
przekształceniem

Dowodzenie poprawności programów

background image

Metody formalne w inżynierii 
oprogramowania

W latach osiemdziesiątych ubiegłego wieku panowało 
przekonanie, że metody formalne wyprą inne techniki 
wytwarzania oprogramowania. Tak się jednak nie stało.

Inne techniki okazały się skuteczne dla poprawienia jakości 
oprogramowania (programowanie strukturalne, zarządzanie 
konfiguracjami, ukrywanie informacji).

O ile kiedyś  głównym problemem było zapewnienie jakości 
oprogramowania, o tyle dzisiaj często ważniejsza jest 
szybkość  jego dostarczenia.  Metody formalne zwiększają 
czas utworzenia oprogramowania.

Zakres metod formalnych jest ograniczony. Metody te nie są 
dobrze dostosowane do specyfikowania interfejsu 
użytkownika, który jest kluczowy w wielu zastosowaniach.  
Ponadto metody formalne nie skalują się dobrze.

background image

Zakres metod formalnych

Główną korzyścią ze  metod formalnych jest 

redukcja błędów. Zaobserwowano to we 

wszystkich udanych przedsięwzięciach, w 

których zastosowano te metody.

Naturalną dziedziną dla metod formalnych jest 

wytwórstwo systemów krytycznych.

Jest to prawdopodobnie jedyna dziedzina, 

gdzie koszt błędów jest większy niż koszt 

związany ze stosowaniem metod formalnych.

background image

Specyfikowanie i 
projektowanie

Rosnący udział zleceniobiorcy

Malejący udział klienta

Definiowanie

wymagań

użytkownika

Specyfikowanie

wymagań 

systemowych

Projektowanie

architektury

Specyfikowanie

formalne

Projektowanie

szczegółowe

Specyfikowanie

Projektowanie

background image

Zalety i wady specyfikacji 
formalnej

W miarę opracowywania szczegółów 

specyfikacji zwiększa się jej zrozumienie  przez 

autora. Skorzystanie ze specyfikacji formalnej 

zmusza do drobiazgowej analizy systemu, 

ponieważ wszystkie wymagania muszą być 

opisane językiem formalnym o dobrze 

zbadanych i zrozumiałych właściwościach 

matematycznych.

Ta drobiazgowa analiza redukuje liczbę błędów 

podczas specyfikowania systemu.

Wadą tego podejścia jest zwiększony koszt 

specyfikowania, częściowo zredukowany 

mniejszymi nakładami na zatwierdzanie 

oprogramowania. 

background image

Koszty budowy oprogramowania  ze 
specyfikacją normalną

Koszt

S -- Specyfikowanie

S

PiI

Z

PiI

S

Z

PiI --  Projektowanie
 i implementacja

Z -- zatwierdzanie

Bez specyfikacji formalnej

Ze specyfikacją formalną

background image

Techniki specyfikacji 
formalnej

Podejście algebraiczne

W którym zapisuje się system w 
kategoriach operacji i ich związków

Podejście oparte na modelach

W którym buduje się model systemu 
za pomocą pojęć matematycznych, 
takich jak zbiory i ciągi. Operacje 
systemu definiuje się przez 
wywoływane przez nie zmiany stanu 
systemu

background image

Specyfikacja interfejsu

Wielkie systemy składają się z 

podsystemów. Aby podsystemy te mogły 

być budowane niezależnie wymagane są 

interfejsy między nimi. 

Interfejsy podsystemów zwykle definiuje 

się jako zbiór abstrakcyjnych typów danych 

lub obiektów, które opisują dane i operacje 

dostępne przez interfejsy tych 

podsystemów.

Jasne i jednoznaczne specyfikacje 

interfejsów podsystemów zmniejszają 

prawdopodobieństwo nieporozumień 

między podsystemami oferującymi pewne 

usługi a podsystemami korzystającymi z 

tych usług.

background image

Interfejsy podsystemów

Podsystem

A

Podsystem 

B

Obiekty

interfejsu

background image

Struktura specyfikacji 
algebraicznej

      <NAZWA SPECYFIKACJI>{<PARAMETRY>}

  typ <nazwa>
  imports <LISTA NAZW SPECYFIKACJI>
  Nieformalny opis typu i jego operacji

  Sygnatury operacji zdefiniowanych  typie 
<nazwa> ustalające  

  ich  nazwy i typy parametrów
  Aksjomaty definiujące operacje  typie <nazwa>

background image

Składniki specyfikacji

Wstęp

Określa nazwę typu i inne typy, które będą 

używane

Opis typu

Nieformalny opis operacji związanych ze 

specyfikowanym typem

Sygnatury

Definiuje składnię tych operacji i ich 

parametry

Aksjomaty

Definiują semantykę poprzez podanie 

aksjomatów charakteryzujących 

poszczególne operacje

background image

Proces budowy specyfikacji 
formalnej interfejsu

Strukturalizacja specyfikacji

Uporządkuj nieformalną specyfikację interfejsu, 

nadając jej formę zbioru abstrakcyjnych typów 

danych lub klas obiektów. Nieformalnie zdefiniuj 

operacje związane z każdą klasą

Nazwanie specyfikacji

Nadaj nazwę każdej specyfikacji abstrakcyjnego 

typu. Ustal, czy powinna mieć parametry ogólne i 

nadaj nazwę każdemu zidentyfikowanemu typowi.

Wybór operacji

Określ zbiór operacji dla każdej specyfikacji na 

podstawie rozpoznanej funkcjonalności interfejsu. 

Powinieneś uwzględnić operacje do tworzenia 

egzemplarzy, do modyfikowania wartości 

egzemplarzy.  Być może, będziesz musiał dodać 

nowe operacje do tych zdefiniowanych nieformalnie 

wcześniej

background image

Proces budowy specyfikacji 
formalnej interfejsu

Specyfikowanie nieformalne operacji

Napisz specyfikację nieformalną każdej operacji. 
Powinna ona opisywać wpływ operacji na 
definiowany typ.

Definiowanie składni

Zdefiniuj składnię operacji i ich parametrów. Będzie 
to część sygnaturowa specyfikacji formalnej. Jeśli to 
konieczne, zaaktualizuj specyfikację nieformalną

Definiowanie aksjomatów

Zdefiniuj semantykę operacji, opisując warunki , 
które są zawsze prawdziwe dla różnych kombinacji 
operacji

background image

Prosta specyfikacja listy 

LISTA(Elem)

    typ Lista

    imports INTEGER

Definiuje listę, do której dodaje się elementy na końcu, a usuwa na początku. 

Operacje to 

Utwórz

, która powoduje utworzenie pustej listy, 

Cons

, która dodaje 

element na koniec listy, 

Długość

, która oblicza długość listy, 

Głowa

, która podaje 

pierwszy element na liście i 

Ogon

, która tworzy nową listę przez usunięcie głowy ze 

swojej listy. 

Niezdefiniowane

 reprezentuje niezdefiniowaną wartość  typu Elem.

Utwórz  Lista

Cons(Lista, Elem)  Lista

Głowa(Lista)  Elem

Długość(Lista)  Integer

Ogon(Lista)  Lista
Głowa(Utwórz)= Niezdefiniowane exception (lista pusta)

Głowa(Cons(L,w))= if L=Utwórz then w else Głowa(L)

Długość(Utwórz)=0  

Długość(Cons(L,w))= Długość(L)+1

Ogon(Utwórz)=Utwórz

Ogon(Cons(L,w))=if L=Utwórz then Utwórz else Cons(Ogon(L),w)

background image

Operacje specyfikacji

Operacje konstruktorowe (konstruktory)

Tworzą lub modyfikują byty typu definiowanego w 

specyfikacji. W przykładzie listy są to Utwórz, Cons i 

Ogon

Operacje inspekcyjne

Obliczają atrybutu typu zdefiniowanego w 

specyfikacji. W przykładzie listy są to Głowa i 

Długość.

Należy zdefiniować aksjomaty dla każdej operacji 

inspekcyjnej względem każdego konstruktora 

podstawowego, czyli konstruktora,  którego  nie można 

zdefiniować przy użyciu innych konstruktorów.  Dla 

konstruktorów nie podstawowych należy dodać 

odpowiednie definicje. W przykładzie z listami Utwórz i 

Cons są konstruktorami podstawowymi. Przy ich 

pomocy można zdefiniować Ogon.

background image

Specyfikacja interfejsu w 
systemie krytycznym

W systemie kontroli lotów 
zaproponowano obiekty reprezentujące 
sektory  kontrolowanej przestrzeni 
powietrznej.

Każdy sektor może zawierać kilka 
samolotów, ale muszą być one 
oddzielone.

W przykładzie przyjmujemy odległość co 
najmniej 300 metrów w pionie.

System powinien zawiadomić kontrolera 
lotów jeśli umieszczenie samolotu 
łamałoby tę regułę.

background image

Obiekt sektor

Na obiekcie określone są operacje:

Wejdź. 

Dodaje samolot do sektora na 

podanej wysokości (obowiązuje reguła 300 

m)

Wyjdź. 

Usuwa samolot z sektora

Przesuń. 

Przesuwa samolot z jednej 

wysokości na inną (obowiązuje reguła 300  

m)

Znajdź. 

Podaje wysokość samolotu

Parametrem (jednym z parametrów) każdej 

operacji jest identyfikator reprezentujący 

samolot.

background image

Operacje pomocnicze

W celu uproszczenia specyfikacji wprowadzamy 
operacje pomocnicze.

Utwórz. 

 Tworzy pusty sektor

Umieść. 

 Uproszczona wersja operacji Wejdź. Dodaje 

samolot do sektora nie sprawdzając warunku 300 m

W-przestrzeni.  

Dla zadanego sektora zwraca 

wartość true  jeśli samolot jest w sektorze  (wpp 
false)

Zajęta. 

Dla zadanej wysokości zwraca wartość true  

jeśli w trzystumetrowym otoczeniu znajduje się jakiś 
samolot (wpp false)

background image

Specyfikacja kontrolowanego 
sektora

     SEKTOR

typ  Sektor

 imports INTEGER,BOOLEAN

Wejdź – dodaje samolot do sektora, o ile spełniona jest reguła trzystu metrów

Wyjdź – usuwa samolot z sektora

Przesuń – zmienia wysokość samolotu, o ile spełniona jest reguła trzystu 

metrów

Znajdź – podaje wysokość samolotu w sektorze

Utwórz

 – tworzy pusty sektor

Umieść

 – dodaje samolot do sektora bez sprawdzania reguły trzystu metrów

W_przestrzeni 

– sprawdza, czy samolot jest w sektorze

Zajęta

 – sprawdza, czy podana wysokość jest dostępna

Wejdź(Sektor, Samolot, Wysokość)  Sektor

Wyjdź(Sektor, Samolot)  Sektor

Przesuń(Sektor, Samolot, Wysokość)  Sektor

Znajdź(Sektor, Samolot)  Wysokość

Utwórz  Sektor

Umieść(Sektor, Samolot, Wysokość) Sektor

W_przestrzeni(Sektor, Samolot)  Boolean

Zajęta(Sektor, Wysokość)  Boolean

background image

Specyfikacja kontrolowanego 
sektora

Wejdź(sek, sam, w)= if  W-przestrzeni(sek, sam) then  sek 

      else if Zajęta(sek,w) then   sek)  else Umieść(sek,sam,w) 

Wyjdź(Utwórz, sam)=Utwórz 

Wyjdź(Umieść(sek,sam1,w1),sam)= if sam=sam1 then sek 

      else Umieść(Wyjdź(sek,sam),sam1,w1)

Przesuń(sek,sam,w)= if sek=Utwórz then Utwórz else if not W_przestrzeni 

(sek,sam) then 

       sek else   if Zajęta(sek,w) then sek  else Umieść(Wyjdź(sek,sam),sam,w)  

Znajdź(Utwórz,sam)=0 (oznacza, że samolotu nie ma w sektorze)

Znajdź(Umieść(sek,sam1,w1),sam)= 

if 

 

sam=sam1 

then 

w1 

else 

Znajdź(sek,sam)

Zajęta(Utwórz, W)=false

Zajęta(Umieść(sek,sam1,w1),w)=

       if abs(w1-w)≤300 then true else Zajęta(sek,w)

W_przestrzeni(Utwórz, sam)= false

W_przestrzeni(Umieść,(sek,sam1,w1),sam)= 

        if sam=sam1 then true else W_przestrzeni(sek,sam)

                    

background image

Specyfikacja zachowania

Specyfikacje algebraiczne są niewygodne, jeśli 
 wyniki operacji zależą od wyników 
poprzednich operacji.

W takim przypadku można użyć specyfikacji 
opartej na modelach. W tym podejściu 
specyfikacja modelu ma postać stanu 
systemu, a operacje systemu definiuje się 
przez ich wpływ na stan systemu.

Jedną z formalnych specyfikacji modelowych 
jest notacja Z (ang. Z notation).

background image

Strukura schematu Z

Zbiornik

zawartość: N

pojemność: N
zawartość  ≤ pojemność

Nazwa schematu

Sygnatura schematu

Predykat schematu

background image

Diagram blokowy pompy 
insulinowej

Igła

Pompa

Zegar

Miernik

Sterownik

Alarm

Wyświetlacz

1

Wyświetlacz

2

background image

Schemat pompy 
insulinowejo

POMPA INSULINOWA

odczyt? : N //wartość poziomu glukozy odczytana  z miernika

dawka, dawka_min, dawka_całkowita: N //dawka do wstrzyknięcia, 

dawka minimalna i dawka z pewnego okresu

r0,r1,r2: N // ostatnie trzy odczyty

zapas: N // zapas insuliny w zbiorniku pompy

alarm! : {włączony, wyłączony} // reprezentuje stan wyjątkowy

pompa! : N // liczba reprezentująca sygnał wysłany do zestawu 

pompującego

wyświetlacz1!, wyświetlacz2!: STRING // pierwszy wyświetla 

komunikaty;  drugi 

                                                                         podawaną dawkę 

insuliny
(dawka ≤ zapas)  Ʌ (dawka  ≤ 5) Ʌ (dawka_całkowita ≤ 50)

(zapas ≥ 40) => wyświetlacz1! = ` `//komunikat pusty

(zapas < 40) Ʌ (zapas ≥ 10)  => wyświetlacz1! =` Niski poziom 

insuliny’

(zapas < 10) => (alarm! = włączony) Ʌ wyświetlacz1! =` Bardzo 

niski poziom insuliny’

o2 = odczyt

background image

Schemat DAWKOWANIE

DAWKOWANIE

Δ  POMPA INSULINOWA

(r2<r1) => dawka = 0

r2 = r1 => dawka = 0

[(r2 > r1) Ʌ  [(r2-r1) < (r1-r0)]] => dawka=0

[(r2 > r1) Ʌ  [(r2-r1) < (r1-r0)] Ʌ round((r2-r1)/4)=0] => 

dawka=dawka_min

[(r2 > r1) Ʌ  [(r2-r1) < (r1-r0)] Ʌ round((r2-r1)/4)>0] => dawka= 

round((r2-r1)/4)

zapas’ =zapas – dawka

dawka_całkowita = dawka_całkowita + dawka 

(r0’ = r1) Ʌ (r1’ = r2)

background image

Schematy wyjściowe

WYŚWIETLANIE

Δ POMPA INSULINOWA

wyświetlacz2!’ = Liczba_na_napis(dawka) Ʌ

(odczyt? <3 => wyświetlacz1!’ = `Niski poziom 

cukru’) Ʌ

(odczyt? >30 => wyświetlacz1!’ = `Wysoki poziom 

cukru’) Ʌ

(odczyt? ≥ 3) Ʌ (odczyt? ≤ 30) => wyświetlacz1!’ = 

`OK.’

ALARM

Δ POMPA INSULINOWA

[(odczyt? < 3)  v (odczyt? > 30)] => alarm!’ = 

włączony

[(odczyt? ≥ 3)  Ʌ (odczyt? ≤ 30)] => alarm!’ = 

wyłączony

background image

Podsumowanie

Metody specyfikacji formalnej uzupełniają 
metody specyfikacji nieformalnej.

Specyfikacje formalne są dokładne i 
jednoznaczne. Niespecjaliści mogą mieć 
jednak trudności z ich zrozumieniem. Ponadto 
łatwo jest popełnić błędy.

Zasadniczą korzyścią ze stosowania metod 
formalnych w procesie budowy 
oprogramowania jest wymuszenie analizy 
wymagań systemowych już we wczesnej fazie. 

background image

Podsumowanie

Metody specyfikacji formalnej najbardziej przydają się przy 
budowie systemów krytycznych.

Metody algebraiczne specyfikacji formalnej są szczególnie 
przydatne do specyfikowania interfejsów, przy czym przez 
interfejs rozumie się zbiór klas obiektów lub abstrakcyjny 
typ danych. W tych metodach ukrywa się stan systemu, a 
system specyfikuje się w kategoriach związków między 
operacjami interfejsu.

W metodach opartych na modelach system przedstawia się 
za pomocą pojęć matematycznych, takich jak  zbiory i 
funkcje. Można w nich odwoływać się do stanu systemu, co 
upraszcza niektóre  rodzaje specyfikacji zachowania. 


Document Outline