Wstęp Inżynieria oprogramowania

Transkrypt

Wstęp Inżynieria oprogramowania
Wstęp
Podstawy inżynierii oprogramowania
Slajdy na podstawie podręcznika:
Iana Sommerville’a
Inżynieria oprogramowania
Slajd 1
Inżynieria oprogramowania
Gospodarki wszystkich rozwiniętych krajów zależą od
oprogramowania
Coraz więcej i więcej systemów wymaga niezawodnego
oprogramowania
Inżynieria oprogramowania zajmuje się teorią, metodami i
narzędziami związanymi z wytwarzaniem
oprogramowania
Obecnie wytwarzanie oprogramowania jest poważną
gałęzią gospodarki narodowej rozwiniętego kraju
Slajd 2
Koszty oprogramowania
Koszty oprogramowania są często dominującym
składnikiem kosztów całego systemu. Zdarza się, że koszt
oprogramowania znacznie przekracza samą wartość
sprzętu komputerowego np. komputera osobistego.
Koszt utrzymania i konserwacji oprogramowania jest
większy niż koszt jego wytworzenia. Wieloletnia
konserwacja oprogramowania może kosztować
wielokrotnie więcej niż jego zakup.
Inżynieria oprogramowania zajmuje się efektywnymi
metodami wytwarzania i implementowania
oprogramowania.
Slajd 3
Co to jest oprogramowanie ?
Są to programy komputerowe, cała związana z
nimi dokumentacja i dane konfiguracyjne
Rodzaje produktów oprogramowania
•
•
Powszechne
Dostosowane (na zamówienie)
Slajd 4
Co to jest inżynieria oprogramowania?
Jest to dziedzina inżynierii, która obejmuje
wszystkie aspekty tworzenia oprogramowania od
fazy początkowej do jego pielęgnacji
Inżynierowie oprogramowania pracują w sposób
systematyczny i uporządkowany ponieważ jest to
najskuteczniejszy sposób tworzenia
oprogramowania wysokiej jakości
Slajd 5
Jaka jest różnica pomiędzy inżynierią
oprogramowania a informatyka ?
Zasadniczo informatyka obejmuje teorie i
podstawowe zasady działania komputerów.
Inżynieria oprogramowania obejmuje praktyczne
problemy związane z tworzeniem
oprogramowania
Byłoby dobrze gdyby inżynier programowania
znał teorie informatyczne, z drugiej strony nie
zawsze przystają one do rzeczywistości
Slajd 6
Jaka jest różnica pomiędzy inżynierią
oprogramowania a inżynierią systemów?
Inżynieria systemów komputerowych obejmuje
wszystkie aspekty tworzenia i ewolucji systemów
komputerowych, w których oprogramowanie
odgrywa zasadniczą rolę.
Inżynierowie systemów biorą udział w
specyfikacji systemu i definiowania jego ogólnej
architektury
Slajd 7
Co to jest proces tworzenia
oprogramowania ?
Jest to zbiór czynności i związanych z nimi
wyników, które zmierzają do opracowania
produktu programowego
Zasadnicze czynności wspólne dla wszystkich
procesów
•
•
•
•
Specyfikacja oprogramowania
Tworzenie oprogramowania
Zatwierdzenie oprogramowania
Ewolucja oprogramowania
Slajd 8
Co to jest model procesu tworzenia
oprogramowania?
Jest to uproszczona prezentacja procesu tworzenia
oprogramowania. Modele ze swej natury są
uproszczeniami
Przykłady takich modeli:
•
•
•
Model przepływu prac
Model przepływu danych (lub model czynności)
Model rola-akcja
Przykłady ogólnych modeli (paradygmatów) tworzenia
oprogramowania
•
•
•
•
Model kaskadowy
Tworzenie ewolucyjne
Formalne przekształcenia
Składanie systemu z komponentów ponownego użycia
Slajd 9
Jakie są koszty inżynierii oprogramowania?
Koszty wytworzenia oprogramowania można w
przybliżeniu określić na 60%, natomiast 40%
stanowią koszty testowania. Ewolucja
oprogramowania może przewyższyć koszty jego
wytworzenia
Koszty zmian oprogramowania użytkowanego
przez długi okres czasu mogą kilkukrotnie
przekroczyć koszty jego wytworzenia
Koszty zależą od stosowanego modelu
Slajd 10
Co to są metody inżynierii
oprogramowania?
To jest uporządkowane podejście do tworzenia
oprogramowania, które obejmuje
Opisy modeli systemu
•
Np. Modele obiektów, modele przepływu itp.
Reguły
•
Ograniczenia, którym podlegają modele systemu
Zalecenia
•
Heurystyki, które określają dobre zwyczaje projektantów
Poradnictwo
•
Opisy czynności, które należy wykonać
Slajd 11
Co to jest CASE (Computer-Aided
Software Engineering)
CASE obejmuje rożne programy wykorzystane
do wspomagania czynności procesu tworzenia
oprogramowania (np. edytory notacji, generatory
kodów)
Upper-CASE
•
Związane z początkowymi fazami tworzenia oprogramowania
Lower-CASE
•
Wspomagają implementowanie i testowanie
Slajd 12
Jakie właściwości ma dobre
oprogramowanie?
Konkretny zbiór właściwości zależy od zastosowania,
niemniej można podąć ogólny zbiór właściwości
Zdolność do pielęgnacji
•
Zdolność do ewolucji zgodnie z potrzebami klientów
Niezawodność
•
Nie powinno powodować fizycznych lub ekonomicznych katastrof w
przypadku awarii
Efektywność
•
Nie powinno marnotrawić zasobów systemu takich jak pamięć czy
czas procesora
Użyteczność
•
Powinno być użyteczne, bez zbędnego wysiłku ze strony użytkownika
(np. interfejsy)
Slajd 13
Inżynieria systemów
komputerowych
•
Inżynieria systemów to czynność
specyfikowania, projektowania,
implementowania, weryfikowania,
wdrażania i pielęgnacji systemów
postrzegana jako całość.
Slajd 14
Co to jest system?
•
•
•
System jest celową kolekcją powiązanych ze sobą
komponentów, które współpracują, aby osiągnąć pewien
cel.
Bardzo prosty system, na przykład pióro, jest zrobiony z
trzech lub czterech komponentów sprzętowych.
System kontroli lotów składa się z tysięcy komponentów
programowych i sprzętowych oraz użytkowników, którzy
podejmują decyzje na podstawie informacji otrzymanej z
systemu.
Slajd 15
Problemy instrukcji systemów
• Duże systemy są z reguły przeznaczone do
rozwiązywania skomplikowanych zadań
• Inżynieria systemowa wymaga dużego wysiłku
koordynacyjnego
•
•
Wzajemne związki pomiędzy komponentami
Wymóg zrozumienia innych dziedzin inżynierii
• Systemy muszą być trwałe
Slajd 16
Oprogramowanie, a inżynieria
systemowa
• Wzrasta rola oprogramowania np. w powszechnie
stosowanych urządzeniach elektronicznych.
• Ogólnie rzec biorąc problemy inżynierii
systemów są podobne do problemów inżynierii
oprogramowania.
• Przez nieporozumienie problem oprogramowania
jest spostrzegany jako problem inżynierii
systemowej.
Slajd 17
Właściwości systemów
•
•
•
Systemy charakteryzują się tym, że właściwości i
zachowania ich komponentów są nierozerwalnie ze sobą
splecione.
Poprawne działanie każdego z komponentów systemu
zależy od funkcjonowania kilku innych komponentów.
Złożone zależności między komponentami systemu
oznaczają, że system jest czymś więcej niż tylko sumą
swoich części. Te pojawiające się właściwości
(Checkland, 1981) nie mogą być przypisane żadnej części
systemu.
Slajd 18
Przykłady
• Całkowity ciężar systemu
•
jest przykładem pojawiającej się właściwości, którą można
wyznaczyć z właściwości poszczególnych komponentów .
• Niezawodność systemu
•
zależy od niezawodności komponentów systemu i związków
między nimi.
• Użyteczność systemu
•
jest bardzo złożoną właściwością, która nie zależy jedynie od
oprogramowania i sprzętu, ale także od operatorów systemu i
środowiska, w którym się go używa .
Slajd 19
Typy pojawiających się
właściwości:
• Właściwości niefunkcjonalne,
•
takie jak niezawodność, efektywność, bezpieczeństwo i
zabezpieczenia. Są związane z zachowaniem systemu w jego
środowisku pracy. Często są zasadnicze dla systemów
komputerowych, ponieważ niepowodzenie w osiągnięciu
pewnego zdefiniowanego minimalnego ich poziomu może
sprawić, że system będzie bezużyteczny.
• Właściwości funkcjonalne,
•
które są widoczne, gdy wszystkie części systemu współpracują,
aby osiągnąć pewien cel. Rower ma na przykład cechę
funkcjonalną bycia środkiem transportu, gdy scali się go z jego
części.
Slajd 20
Niezawodność systemu
•
•
•
•
Niezawodność jest złożonym pojęciem, które zawsze
należy badać na poziomie systemu, a nie jego
poszczególnych komponentów.
Komponenty w systemie są od siebie zależne, a zatem
awarie w jednym z nich mogą przenosić się na cały
system i mieć wpływ na operacje innych systemów.
Często projektanci systemu nie są w stanie przewidzieć,
jak konsekwencje awarii przenoszą się na cały system
Nie mogą zatem podać wiarygodnych oszacowań
niezawodności systemu.
Slajd 21
Czynniki wpływające na
niezawodność całego systemu
• Niezawodność sprzętu
•
Jakie
jest
prawdopodobieństwo
awarii
sprzętowego i jak długi jest czas jego naprawy?
komponentu
• Niezawodność oprogramowania
•
Jakie jest prawdopodobieństwo wytworzenia przez komponent
programowy błędnych danych wyjściowych? Awarie
oprogramowania istotnie różnią się od awarii sprzętu, ponieważ
oprogramowanie nie zużywa się.
• Niezawodność operatora
•
Jakie jest prawdopodobieństwo błędu operatora systemu?
Slajd 22
Czynniki niezawodności
•
•
•
Awarie sprzętu mogą spowodować wysłanie fałszywych
sygnałów, które są poza zakresem danych wejściowych
spodziewanych przez oprogramowanie. W takim
wypadku oprogramowanie może zachować się w sposób
nieprzewidywalny.
Błąd operatora jest najbardziej prawdopodobny w
sytuacjach stresowych. Dochodzi do tego najczęściej
wówczas, gdy system ulega awarii. Błędy operatora mogą
mogą mieć wpływ na działanie sprzętu, co prowadzi do
dalszych błędów i tak dalej, i tak dalej.
Awaria jednego podsystemu, która można by łatwo
naprawić, przeradza się w poważny problem wymagający
całkowitego wyłączenia systemu.
Slajd 23
Efektywność i użyteczność
•
•
•
Są trudne do oceny, można je jednak zmierzyć
po uruchomieniu systemu.
Mamy do czynienia nie z atrybutem ogólnego
zachowania systemu, ale z zachowania systemu,
które nie powinno mieć miejsca.
System zabezpieczony to taki, który nie
dopuszcza nieuprawnionego dostępu do swoich
danych.
Slajd 24
Systemy i ich środowiska
• Systemy nie są niezależnymi bytami, ale istnieją
w pewnym środowisku.
• Środowisko to ma wpływ na funkcjonowanie i
efektywność systemu.
• Czasem środowisko można uważać za system
sam w sobie.
• W ogólniejszym wypadku składa się ono z
pewnej liczby oddziałujących na siebie
systemów.
Slajd 25
Hierarchia systemów
Miasto
Ulica
Budynek
System
wodno-
System
ogrzewania
kanalizacyjny
System
energetyczny
zsypów
oświetlenia
System
System
System
zabezpieczeń
na śmieci
Slajd 26
Ludzkie i organizacyjne czynniki
obecne w środowisku systemu
• Zmiany procesu
•
Czy system wymaga zmian w procesach pracy wykonywanej w
środowisku?
• Zmiany zawodu
•
Czy system zmniejsza umiejętności użytkowników i sprawia, że
muszą zmienić swój styl pracy?
• Zmiany organizacyjne
•
Czy system zmienia strukturę ośrodków władzy politycznej w
organizacji?
Slajd 27
Modelowanie systemu
• W trakcie czynności spisywania wymagań i
projektowania musi powstać model systemu jako
zbioru komponentów i związków między nimi.
• Architektura systemu jest zwykle prezentowana
jako diagram blokowy, obrazujący najważniejsze
podsystemy i połączenia między nimi.
• Każdy podsystem jest rysowany w postaci
prostokąta na diagramie blokowym.
Slajd 28
Prosty system antywłamaniowy
Detektory ruchu
Detektory
drzwiowe
Centralka alarmu
Syrena
Syntezator mowy
Automat dzwoniący
Zewnętrzne centrum
monitoringu
Slajd 29
Typy komponentów systemu
antywłamaniowego
•
Detektor
•
•
Efektor
•
•
automat dzwoniący
Koordynacja
•
•
syrena
Komunikacja
•
•
detektor ruchu, detektor drzwiowy
centralka alarmu
Interfejs
•
syntezator mowy
Slajd 30
Komponenty funkcjonalne
systemu
•
•
•
•
•
•
Komponenty detektorowe
Komponenty efektorowe (uruchamiające)
Komponenty obliczeniowe
Komponenty komunikacyjne
Komponenty koordynujące
Komponenty interfejsu
Slajd 31
Komponenty funkcjonalne
systemu
•
Komponenty detektorowe
•
•
Komponenty efektorowe (uruchamiające)
•
•
Zbierają informacje ze środowiska systemu. Przykładami takich
komponentów są radary w systemie kontroli lotów, detektory papieru
w drukarkach laserowych i termopara w piecu.
Powodują zmiany w środowisku systemu. Przykładami takich
komponentów są zawory, które otwierają się i zamykają, aby
zwiększyć lub zmniejszyć przepływ cieczy w rurze, stateczniki
samolotu, które wyznaczają kierunek lotu, i mechanizm wciągania
papieru do drukarki, który przesuwa papier za detektor papieru.
Komponenty obliczeniowe
•
Pobierają dane wejściowe, wykonują na nich pewne obliczenia i
wytwarzają wyniki. Przykładem takiego komponentu jest procesor
zmiennopozycyjny, który wykonuje obliczenia na liczbach
rzeczywistych.
Slajd 32
Komponenty funkcjonalne
systemu
•
Komponenty komunikacyjne
•
Umożliwiają komunikację innym komponentom systemu. Przykładem
takiego komponentu jest sieć łącząca różne komputery wewnątrz
budynku.
•
Komponenty koordynujące
•
Komponenty interfejsu
•
•
Koordynują operacje innych komponentów.
Przetwarzają dane w reprezentacji używanej przez jedne komponenty
na reprezentacje używane przez inne komponenty. Przykładem może
być komponent interfejsu do komunikacji z człowiekiem, który pobiera
pewien model systemu i wyświetla go operatorowi. Innym przykładem
jest przetwornik analogowo-cyfrowy, który zamienia wejście
analogowe na wyjście cyfrowe.
Slajd 33
Proces inżynierii systemów
• Interdyscyplinarna zawiłość
•
Wiele różnych dziedzin inżynierii wchodzi w skład inżynierii
systemów.
• Ograniczona możliwość modyfikacji w trakcie
tworzenia systemu.
•
Jedną z przyczyn znaczenia oprogramowania w systemach jest
jego elastyczność.
Slajd 34
Proces inżynierii systemów
Likwidacja
systemu
Definicja
wymagań
Ewolucja
systemu
Projektowanie
systemu
Tworzenie
Instalacja
systemu
podsystemów
Integracja
systemu
Slajd 35
Interdyscyplinarna zawiłość
inżynierii systemów
Inżynieria oprogramowania
Inżynieria strukturalna
Inżynieria elektroniczna
Inżynieria systemu
kontroli lotów
Inżynieria mechaniczna
Projektowanie
interfejsu użytkownika
Inżynieria lądowa
Inżynieria elektryczna
Architektura
Slajd 36
Definicja wymagań systemowych
• Trzy rodzaje wymagań
•
•
•
Abstrakcyjne wymagania funkcjonalne: podstawowe
funkcje, które system ma wypełniać są definiowane na
wysokim poziomie abstrakcji.
Właściwości systemu: są to niefunkcjonalne, pojawiające się
właściwości systemu.
Cechy, których system ma nie mieć: czasem
wyspecyfikowanie tego, czego systemowi nie wolno robić,
jest tak samo ważne, jak określenie tego, co system powinien
robić.
• Ważną częścią fazy definicji wymagań jest
ustalenie zbioru ogólnych celów, które system ma
osiągnąć.
Slajd 37
Cele systemu
• Funkcjonalność systemu
•
Dostarczyć antywłamaniowy i przeciwpożarowy system
alarmowy biurowca, który na zewnątrz i we wnętrzu wyemituje
ostrzeżenie o pożarze lub włamaniu.
• Cele organizacyjne
•
Zapewnić, aby normalna praca w biurowcu nie była poważnie
zakłócona przez pożary i włamania.
Slajd 38
Trudność z określaniem
wymagań stawianych systemowi
• Problemy, w których rozwiązaniu mają pomóc
budowane złożone systemy są zwykle
„problemami złośliwymi” (Rittel i Webber,
1973). „Problem złośliwy” to taki
skomplikowany problem, w którym jest tak wiele
powiązanych ze sobą bytów, że nie istnieje jego
ostateczna specyfikacja.
• Prawdziwy charakter problemu objawia się
dopiero w miarę opracowywania rozwiązania.
Slajd 39
Projektowanie systemu
•
Podziel wymagania
•
•
Zidentyfikuj podsystemy
•
•
Przypisuje się wymagania do podsystemów. Teoretycznie powinno to
być bardzo proste, o ile do identyfikacji podsystemów użyto
grupowania wymagań.
Określ funkcjonalność podsystemów
•
•
Identyfikuje się różne podsystemy, które samodzielnie lub zespołowo
spełniają wymagania.
Przypisz wymagania podsystemom
•
•
Analizuje się i łączy w grupy powiązane ze sobą wymagania. Zwykle
istnieje kilka możliwych sposobów podziału.
Specyfikuje się poszczególne funkcje realizowane przez podsystemy.
Zdefiniuj interfejsy podsystemów
•
Definiuje się interfejsy oferowane i wymagane przez poszczególne
podsystemy.
Slajd 40
Proces projektowania systemu
Podziel
wymagania
Zdefiniuj interfejsy
podsystemów
Zidentyfikuj
podsystemy
Określ funkcjonalność
podsystemów
Przypisz wymagania
podsystemom
Slajd 41
Trudności przy projektowaniu
• Objęcie wymaganiami całego zakresu rozwiązań
z rożnymi kombinacjami sprzętu,
oprogramowania i pracy ludzkiej.
• Oczekiwanie, ze system będzie od razu
funkcjonował bez zarzutu.
• Czynniki natury organizacyjnej i politycznej maja
istotny wpływ na wybór rozwiązania.
Slajd 42
Tworzenie podsystemów
•
•
•
W czasie tworzenia podsystemów implementuje się
podsystemy zidentyfikowane w trakcie projektowania.
Proces tworzenia rzadko będzie polegał na budowie
wszystkich podsystemów od zera. Na ogół część
podsystemów będzie jednak komercyjnymi systemami z
półki (Commercial, Off-The-Shelf, COTS) zakupionymi
w celu integracji z naszym systemem.
Różne systemy są zwykle tworzone równolegle.
Slajd 43
Integracja systemu
•
•
•
•
Z powodów technicznych i menedżerskich najlepiej jest
jednak integrować przyrostowo, tzn. w jednym kroku jest
integrowany jeden system.
Zwykle nie da się ustalić harmonogramów budowania
wszystkich podsystemów tak, aby kończyły się w tym
samym czasie.
Integracja przyrostowa zmniejsza koszty wykrywania
błędów.
Awarie podsystemów , które są konsekwencjami
niewłaściwych założeń o innych podsystemach, są zwykle
wykrywane w trakcie integracji systemu.
Slajd 44
Problemy instalacji
• Środowisko, w którym system ma być
zainstalowany, jest inne niż to, które zakładali
twórcy systemu.
• Potencjalni użytkownicy systemu mogą być
wrogami jego wprowadzenia.
• Nowy system ma koegzystować z istniejącym
systemem do czasu przekonania firmy, że nowy
system pracuje poprawnie.
• Mogą wystąpić fizyczne problemy z instalacją.
Slajd 45
Działanie systemu
•
•
•
Uruchomienie systemu może wymagać organizacji sesji
szkoleniowych dla operatorów i zmiany normalnego toku
pracy.
Nie wykryte problemy mogą pojawić się w tej fazie,
ponieważ specyfikacja systemu mogła zawierać błędy i
opuszczenia.
Współpraca nowego systemu z istniejącymi już
systemami
•
•
Niekompatybilność
Zwiększenie liczby błędów operatora, poprzez mylenie poleceń
dostępnych w różnych interfejsach.
Slajd 46
Ewolucja systemu
•
•
Czas życia wielkich złożonych systemów jest bardzo
długi. W trakcie swego działania systemy te musza
ewoluować.
Ewolucja oprogramowania jest ze swej natury kosztowna
•
•
•
•
Proponowane zmiany muszą być bardzo starannie rozważone z
punktu widzenia przedsiębiorstwa i technologii.
Podsystemy nigdy nie są całkowicie niezależne.
Przyczyny pierwotnych decyzji projektowych zwykle nie są
zapisywane.
W miarę starzenia się systemu jego struktura staje się coraz
bardziej skomplikowana przez zmiany.
Slajd 47
Likwidacja systemu
• Likwidacja systemu oznacza wycofanie go po
okresie jego pożytecznego użytkowania.
• Utylizacja substancji systemu.
• W wypadku oprogramowania nie ma mowy o
żadnych fizycznych problemach z likwidacją.
Slajd 48
Zaopatrywanie w system
• Klientami kupującymi złożone systemy
komputerowe są zwykle duże przedsiębiorstwa,
np. instytucje wojskowe, rządowe i służby
ratownicze.
• System może być kupiony jako całość, a także
jako zestaw oddzielnych części, które potem się
integruje, specyficznie projektuje i wytwarza.
• W wypadku wielkich systemów podjęcie decyzji,
którą z tych opcji wybrać, może trwać miesiące, a
nawet lata.
Slajd 49
Proces zaopatrywania w system
Systemy z półki
są dostępne
Zaadaptuj wymagania
Wybierz system
Ogłoś przetarg
Wybierz
dostawcę
Zbadaj rynek w
poszukiwaniu istniejących
systemów
Wyślij zapytanie ofertowe
Wybierz
ofertę
Negocjuj kontrakt
Podpisz kontrakt
na budowanie
Wymagany jest system
na zamówienie
Slajd 50
Problemy zaopatrywania
•
•
•
Komponenty z półki zwykle nie spełniają wymagań
idealnie, chyba że napisano te wymagania z myślą o tych
właśnie komponentach.
Gdy system będzie budowany na zamówienie,
specyfikacja wymagań jest podstawą kontraktu na
zamówienie w system.
Po wybraniu wykonawcy systemu następuje okres
negocjacji kontraktu, w trakcie którego uzgadnia się
dalsze zmiany wymagań i omawia różne sprawy, np.
koszt zmian.
Slajd 51
Wykonawcy i podwykonawcy
•
•
•
Bardzo wiele firm może samodzielnie projektować,
tworzyć i przetestować wszystkie komponenty wielkiego
złożonego systemu.
Wykonawca, którego zwykle nazywamy generalnym,
może podpisać kontrakt na zbudowanie rozmaitych
podsystemów z pewna liczbą podwykonawców.
Takie konsorcjum powinno być zdolne do wykonania
wszystkich prac związanych z tym typem systemu.
Slajd 52
Model wykonawca podwykonawca
Klient potrzebujący systemu
Generalny wykonawca
Podwykonawca 1
Podwykonawca 2
Podwykonawca 3
Slajd 53
Proces tworzenia
oprogramowania
Proces tworzenia oprogramowania jest
zbiorem czynności i związanych z nimi
wyników, które prowadzą do powstania
produktu programowego. Może to być
tworzenie oprogramowania od zera, ale
coraz częściej nowe oprogramowanie
powstaje przez rozszerzanie i
modyfikowanie istniejących systemów.
Slajd 54
Zasadnicze czynności
Specyfikowanie oprogramowania. Funkcjonalność
oprogramowania i ograniczenia jego działania musza
być zdefiniowane.
Projektowanie i implementowanie oprogramowania.
Oprogramowanie, które spełnia specyfikację, musi być
stworzone.
Zatwierdzenie oprogramowania. Oprogramowanie
musi być zweryfikowane, aby zapewnić, że robi to,
czego oczekiwał klient.
Ewolucja oprogramowania. Oprogramowanie musi
ewoluować, aby spełniać zmieniające się potrzeby
użytkowników.
Slajd 55
Ogólne modele systemów
Model kaskadowy
•
W tym modelu podstawowe czynności specyfikowania, tworzenia,
zatwierdzania i ewolucji są odrębnymi fazami procesu.
Tworzenie ewolucyjne
•
W tym procesie czynności specyfikowania, projektowania i
zatwierdzania przeplatają się.
Tworzenie formalne systemu
•
To podejście jest oparte na budowaniu formalnych matematycznych
specyfikacji systemu i przekształcaniu tych specyfikacji w program za
pomocą metod matematycznych.
Tworzenie z użyciem wielokrotnym
•
W tym podejściu zakłada się istnienie dużej liczby komponentów
zdatnych do ponownego użycia.
Slajd 56
Model kaskadowy
Definiowanie
wymagań
Definiowanie wymagań
Projektowanie systemu
i oprogramowania
Implementacja i testowanie
jednostek
Integracja i testowanie
systemu
Działanie i pielęgnacja
Slajd 57
Fazy modelu kaskadowego
•
•
•
•
•
Definiowanie i analiza wymagań
Projektowanie systemu i analiza wymagań
Implementacja i testowanie jednostek
Integracja i testowanie systemu
Działanie i pielęgnacja
Slajd 58
Problemy modelu kaskadowego
•
•
•
•
Następnej fazy nie powinno się rozpoczynać, jeśli
poprzednia się nie zakończy.
Koszty opracowania i akceptacji dokumentów są
wysokie i dlatego iteracje są również kosztowne
oraz wymagają powtarzania wielu prac.
Wada modelu kaskadowego jest zawarty w nim
nieelastyczny podział na rozłączne etapy.
Model kaskadowy powinien być używany
jedynie wówczas, gdy wymagania są jasne i
zrozumiałe.
Slajd 59
Tworzenie ewolucyjne
• Tworzenie badawcze
•
Celem procesu jest praca z klientem, polegająca na badaniu
wymagań i dostarczeniu ostatecznego systemu. Tworzenie
rozpoczyna się od tych części systemu, które są dobrze
rozpoznane. System ewoluuje przez dodawanie nowych cech,
które proponuje klient.
• Prototypowanie z porzuceniem
•
Celem procesu tworzenia ewolucyjnego jest zrozumienie
wymagań klienta i wypracowanie lepszej definicji wymagań
stawianych systemowi. Budowanie prototypu ma głównie na
celu eksperymentowanie z tymi wymaganiami użytkownika,
które są niejasne.
Slajd 60
Tworzenie ewolucyjne
Równolegle czynności
Specyfikacja
Tworzenie
Ogólny opis
Zatwierdzenie
Wersja
początkow
a
Wersje pośrednie
Wersja końcowa
Slajd 61
Tworzenie ewolucyjne
• Problemy
•
•
•
Proces nie jest widoczny
System ma nieelastyczną strukturę
Konieczne mogą być specjalne narzędzia i techniki
• Stosowanie
•
•
W wypadku systemów małych (mniej niż 100 000 wierszy
kodu) lub średnich (do 500 000 wierszy kodu) z krótkim czasem
życia podejście ewolucyjne jest najlepsze.
W wypadku dużych systemów o długim czasie życia wady
tworzenia ewolucyjnego ujawniają się jednak z całą ostrością.
Slajd 62
Tworzenie formalne systemów
Tworzenie formalne systemów jest podejściem, które ma wiele
wspólnego z modelem kaskadowym. Proces tworzenia jest tu
jednak oparty na matematycznych przekształceniach specyfikacji
systemu w program wykonywalny.
W procesie przekształcania formalna matematyczna reprezentacja
systemu jest metodycznie przekształcana w bardziej szczegółowe,
ale wciąż matematycznie poprawne reprezentacje systemu.
Podejście z przekształceniem złożone z ciągu małych kroków jest
łatwiejsze w użyciu. Wybór, które przekształcenie zastosować,
wymaga jednak dużych umiejętności.
Najlepiej znanym przykładem takiego formalnego procesu
tworzenia jest Cleanroom, pierwotnie opracowany przez IBM
(Proces Cleanroom jest oparty na przyrostowym tworzeniu
oprogramowania, gdy formalnie wykonuje się każdy krok i
dowodzi jego poprawności.)
Slajd 63
Tworzenie formalne systemów
Definicja
wymagań
Specyfikacja
formalna
Przekształcenie
formalne
Integracja i testowanie
systemu
Slajd 64
Przekształcenie formalne
Przekształcenie formalne
T1
T2
R1
Specyfikacja
formalna
T3
R2
T4
Program
R3
wykonywalny
P1
P2
P3
P4
sformationcorrectness
Proofs of tran
Slajd 65
Problemy i stosowalność
•
•
•
Oprócz specjalistycznych dziedzin procesy oparte
na przekształceniach formalnych są używane
rzadko.
Wymagają specjalistycznej wiedzy i w praktyce
okazuje się, że w wypadku większości systemów
nie powodują zmniejszenia kosztów lub
polepszenia jakości w porównaniu z innymi
podejściami.
Interakcje systemów nie poddają się łatwo
specyfikowaniu formalnemu.
Slajd 66
Tworzenie z użyciem
wielokrotnym
• W większości przedsięwzięć programistycznych
występuje użycie wielokrotne oprogramowania.
• Etapy procesu
•
•
•
•
Analiza komponentów
Modyfikacja wymagań
Projektowanie systemu z użyciem wielokrotnym
Tworzenie i integracja
• Zakłada się istnienie wielkiego zbioru dostępnych
komponentów programowych użycia
wielokrotnego oraz integrującej je struktury.
Slajd 67
Tworzenie z użyciem
wielokrotnym
Specyfikacja
wymagań
Analiza
komponentów
Modyfikacja
wymagań
Tworzenie i
integracja
Projekt systemu z
użyciem
wielokrotnym
Zatwierdzeni
e
systemu
Slajd 68
Iteracja procesu
• Potrzebne jest wspomaganie iteracji procesu,
która polega na powtarzaniu fragmentu w miarę
ewolucji wymagań stawianych systemowi.
• Prace projektowe i implementacyjne musza być
ponownie wykonane, aby spełnić zmienione
wymagania.
• Dwa hybrydowe modele
•
•
Tworzenie przyrostowe
Tworzenie spiralne
Slajd 69
Tworzenie przyrostowe
Podejście przyrostowe do tworzenia zaproponował Mills jako
sposób na ograniczenie powtarzania prac w procesie tworzenia
oraz danie klientom pewnych możliwości odkładania decyzji o
szczegółowych wymaganiach do czasu, aż zdobędą pewne
doświadczenia w pracy z systemem.
W procesie przyrostowym klienci identyfikują w zarysie usługi,
które system ma oferować. Wskazują, które z nich są dla nich
najważniejsze, a które najmniej ważne. Definiuje się następnie
pewną liczbę przyrostów, które maja być dostarczone.
Gdy przyrost jest już gotowy i dostarczony, klienci mogą go
uruchomić. Oznacza to, że szybko otrzymują część
funkcjonalności systemu
Slajd 70
Tworzenie przyrostowe
Zdefiniuj zarys
wymagań
Przypisz wymagania
do przyrostów
Wytwórz przyrost
systemu
Zweryfikuj
przyrost
Zaprojektuj
architekturę systemu
Zintegruj system
Zweryfikuj system
System
końcowy
System nie ukończony
Slajd 71
Zalety procesu tworzenia
przyrostowego
Klienci nie musza czekać na dostarczenie całego
systemu, zanim zaczną czerpać z niego korzyść.
Klienci mogą używać wstępnych przyrostów jako
rodzaju prototypu i zdobywać doświadczenia, które
inspirują wymagania wobec późniejszych przyrostów.
Ryzyko całkowitej porażki przedsięwzięcia jest
mniejsze.
Usługi o najwyższym priorytecie będą dostarczane jako
pierwsze.
Slajd 72
Programowanie ekstremalne
• Opiera się ono na tworzeniu i dostarczaniu
bardzo małych przyrostów funkcjonalności.
• Ustawiczne poprawianie kodu i programowanie
pozbawione indywidualizmu.
Slajd 73
Tworzenie spiralne
•
•
Każda pętla spirali reprezentuje jedną fazę
procesu.
Najbardziej wewnętrzna pętla może być
poświęcona wykonalności systemu, następna
definicji wymagań stawianych systemowi,
kolejna projektowaniu itd..
Slajd 74
Model spiralny procesu tworzenia
oprogramowania
Określ cele,
inne strategie
i ograniczenia
Oceń inne strategie,
rozpoznaj i zmniejsz
zagrożenia
Analiza zagrożeń
Analiza zagrożeń
Analiza zagrożeń
RECENZJA
Plan wymagań
Plan cyklu życia
Plan tworzenia
Plan testowania
i integracji
Zaplanuj następną
fazę
Analiza
zagrożeń
Prototyp 1
Prototyp 3
Działający
prototyp
Prototyp 2
Sposób
postępowania
Symulacje, modele, miary odniesienia
Szczegółowe
projektoWymagania
Projektowanie
S/W
wanie
kodowanie
Zatwierdzenie
produktu
Testy
wymagań
jednostek
Weryfikacja i
Testy
zatwierdzenie
integracji
Testy
akceptacji
Utwórz, zweryfikuj
działanie
produkt następnego
poziomu
Slajd 75
Każda pętla spirali jest
podzielona na cztery sektory:
Ustalanie celów
•
Definiuje się konkretne cele tej fazy przedsięwzięcia. Identyfikuje się
ograniczenia, którym podlega proces i produkt.
Rozpoznanie i redukcja zagrożeń
•
Przeprowadza się szczegółową analizę każdego z rozpoznanych
zagrożeń przedsięwzięcia.
Tworzenie i zatwierdzanie
•
Po ocenie zagrożeń wybiera się model tworzenia systemu.
Planowanie
•
Recenzuje się przedsięwzięcie i podejmuje decyzję, czy rozpoczynać
następną pętlę spirali.
Slajd 76
Specyfikowanie oprogramowania
Ma na celu określenie, jakich usług wymaga się od
systemu i jakim ograniczeniom podlega tworzenie i
działanie oprogramowania. Ta czynność jest obecnie
bardzo często nazywana inżynieria wymagań.
W procesie inżynierii wymagań możemy wyróżnić
cztery główne fazy:
•
•
•
•
Studium wykonalności
Określenie i analiza wymagań
Specyfikowanie wymagań
Zatwierdzanie wymagań
Slajd 77
Proces inżynierii wymagań
Studium
wykonalności
Określenie i analiza
wymagań
Specyfikacja
wymagań
Zatwierdzanie
wymagań
Raport o
wykonywalności
Modele
systemu
Wymagania
Modele użytkoModele
wnika
systemu
systemu
systemu
Dokumenta
Dokumentacja
cja
wymagań
wymagań
Slajd 78
Projektowanie i implementowanie
wymagań
Faza implementowania w tworzeniu oprogramowania
to proces przekształcania specyfikacji systemu w
działający system
Projekt oprogramowania to opis struktury
oprogramowania, które ma być zaimplementowane,
danych, które są częścią systemu, interfejsów między
komponentami systemu i użytych algorytmów.
Proces projektowania może obejmować opracowanie
kilku modeli systemu na różnych poziomach abstrakcji.
Slajd 79
Charakterystyczne czynności
procesu projektowania
•
•
•
•
•
•
Projektowanie architektury
Specyfikowanie abstrakcyjne
Projektowanie interfejsów
Projektowanie komponentów
Projektowanie struktur danych
Projektowanie algorytmów
Slajd 80
Ogólny model procesu
projektowania
Specyfikacja
wymagań
Projektowanie
architektury
Czynności projektowe
Specyfikowanie
abstrakcyjne
Architektura
systemu
Specyfikacja
programowania
Projektowanie
interfejsów
Specyfikacja
interffejsów
Projektowanie
komponentów
Specyfikacja
komponentów
Projektowanie
struktury danych
Specyfikacja
struktury
danych
Projektowanie
algorytmów
Specyfikacja
algorytmów
Slajd 81
Metody projektowania
Są zbiorami notacji i porad dla projektantów
oprogramowania.
Użycie metod strukturalnych polega zwykle na
opracowaniu graficznych modeli systemu i prowadzi
do ogromnej ilości dokumentacji projektowej.
Modele:
•
•
•
Model przepływu danych
Model strukturalny
Model obiektowy
Slajd 82
Projektowanie i wyszukiwanie
błędów
•
•
•
Programiści wykonują pewne testy kodu, który
napisali. Często prowadzi to do wykrycia błędów,
które należy usunąć z programu.
Testowanie usterek i usuwanie błędów to dwa
różne procesy.
Lokalizacja błędu może wymaga nowych
przypadków testowych.
Slajd 83
Proces usuwania błędów
Zlokalizuj
błąd
Zaprojektuj
naprawę błędu
Napra
Napraw
Napraw
w błąd błąd
błąd
Przetestuj program
ponownie
Slajd 84
Zatwierdzanie oprogramowania
Weryfikacja i zatwierdzenie (W&Z) mają wykazać, że
system jest zgodny ze swoją specyfikacją i spełnia
oczekiwania klienta, który go kupuje.
Obejmuje proces sprawdzania, m.in. kontrole i recenzje
w każdym kroku procesu tworzenia od definicji
wymagań użytkownika do pisania programów.
Większość kosztów zatwierdzania powstaje po
zaimplementowaniu, gdy testuje się działający system.
Slajd 85
Proces testowania
Testowanie
jednostek
Testowanie
modułów
Testowanie
podsystemów
Testowanie
systemów
Testowanie
komponentów
Testowanie
odbiorcze
Testowanie
integracji
Testowanie
przez użytkownika
Slajd 86
Fazy procesu testowania
Testowanie jednostek
•
Testuje się poszczególne komponenty, aby zapewnić, że działają poprawnie.
Testowanie modułów
•
Moduł jest kolekcją niezależnych komponentów takich jak klasy obiektów,
abstrakcyjne typy danych, albo bardziej luźną kolekcją procedur i funkcji.
Testowanie podsystemów
•
Ta faza obejmuje testowanie kolekcji modułów, które zintegrowano w
podsystemie.
Testowanie systemu
•
Podsystemy zintegrowano już w system. Ten proces testowania ma wykryć
błędy wynikające z nie przewidzianych interakcji między podsystemami i
problemów z interfejsami podsystemów.
Testowanie odbiorcze
•
Jest to końcowa faza procesu testowania przed przyjęciem systemu do
użytkowania.
Slajd 87
Fazy testowania
Specyfikacja
wymagań
Specyfikacja
systemu
Plan testów
odbiorczych
Działanie
Projekt
i
systemu
Plan testów
integracji systemu
Test odbiorczy
tTest integracji
systemu
Projekt
szczegółowy
Plan testów
integracji
podsystemów
Kod modułów
i jednostek
oraz ich test
Test integracji
podsystemu
Slajd 88
Ewolucja oprogramowania
•
•
•
Elastyczność systemów oprogramowania jest
jedną z głównych przyczyn, że coraz więcej i
więcej oprogramowania włącza się do wielkich,
złożonych systemów.
Zmiany mogą być wprowadzone w każdej chwili
tworzenia lub nawet po jego zakończeniu.
Koszt tych zmian może być bardzo wysoki, ale
wciąż będzie niższy niż odpowiednie zmiany w
sprzęcie systemu.
Slajd 89
Ewolucja systemu
Zidentyfikuj wymagania
stawiane systemowi
Zbadaj istniejące
systemy
Istniejące
systemy
Zaproponuj zmiany
systemów
Zmodyfikuj
system
Nowy system
Slajd 90
Zautomatyzowane wspomaganie
procesu
Komputerowo wspomagana inżynieria oprogramowania (CASE)
jest nazwą oprogramowania używanego do wspomagania
czynności procesu tworzenia oprogramowania, takich jak
inżynieria wymagań, projektowanie, programowanie i testowanie.
Czynności, które można zautomatyzować za pomocą CASE:
•
•
•
•
•
Oprogramowanie graficznych modeli systemu jako części specyfikacji
wymagań i projektu oprogramowania.
Czynności projektu za pomocą słownika danych, który przechowuje
informacje o encjach i związkach w projekcie.
Generowanie interfejsu użytkownika na podstawie graficznego opisu
interfejsu opracowanego interaktywnie przez użytkownika.
Śledzenie błędów przez udostępnienie informacji o wykonującym się
programie.
Automatyczne tłumaczenie programów ze starych wersji języków
programowania.
Slajd 91
Technologia CASE
Technologia CASE jest obecnie dostępna dla większości
rutynowych czynności procesu tworzenia oprogramowania.
Oprogramowanie jest głównie czynnością projektowania opartą
na kreatywnym myśleniu. Istniejący system CASE automatyzuje
rutynowe czynności, ale próby zastosowania sztucznej inteligencji
do wspomagania programowania nie były udane.
W większości firm inżynieria oprogramowania jest czynnością
zespołową. Inżynierowie spędzają więc sporo czasu na interakcji
z innymi członkami zespołu. Technologia CASE nie daje tu
żadnego wsparcia.
Slajd 92
Klasyfikacja CASE
Klasyfikacja CASE pomaga zrozumieć różne typy narzędzi CASE
oraz ich rolę we wspomaganiu czynności tworzenia
oprogramowania.
Perspektywa funkcjonalności, w której klasyfikuje się narzędzia
CASE względem ich specyficznej funkcji.
Perspektywa procesu, w której klasyfikuje się narzędzia CASE
względem wspomaganych przez nie czynności procesu.
Perspektywa integracji, w której klasyfikuje się narzędzia CASE
względem sposobu ich integracji w spójne jednostki, które oferują
wspomaganie jednej lub więcej czynności procesu.
Slajd 93
Klasyfikacja narzędzi CASE
względem ich funkcji
Narzędzia do planowania
•
Narzędzia PERT, narzędzia do szacowania, arkusze kalkulacyjne
Narzędzia do edycji
•
Edytory tekstowe, edytory diagramów, procesory tekstów
Narzędzia do zarządzania zmianami
•
Narzędzia do śledzenia wymagań, systemy kontroli zmian
Narzędzia do zarządzania konfiguracjami
•
System do zarządzania wersjami, narzędzia do budowania systemów
Narzędzia do prototypowania
•
Języki bardzo wysokiego poziomu, generatory interfejsu użytkownika
Narzędzia do wspomagania metod
•
Edytory projektów, słowniki danych i generatory kodów
Narzędzia do przetwarzania języków
•
Kompilatory, interpretatory
Slajd 94
Klasyfikacja narzędzi CASE
względem ich funkcji
Narzędzia do analizy programów
•
Generatory wzajemnych odwołań, analizatory statyczne, analizatory
dynamiczne
Narzędzia do testowania
•
Dane testowe, programy porównujące pliki
Narzędzia do usuwania błędów
•
Systemy interakcyjnego usuwania błędów
Narzędzia do dokumentowania
•
Programy składu, edytory rysunków
Narzędzia do wyszukiwania
•
Systemy wyszukiwania wzajemnych odwołań, programy do restrukturyzacji
systemów
Slajd 95
Podział systemów CASE
•
•
•
Narzędzia wspomagające poszczególne zadania
w ramach procesu, np. ssprawdzania spójności
projektu, kompilacji programu, porównywania
wyników testów itd.
Warsztaty wspomagają całe fazy procesów lub
czynności, np. specyfikowanie, projektowanie itd.
Środowiska wspomagają całość lub znaczną część
procesu tworzenia oprogramowania.
Slajd 96
Narzędzia, warsztaty i środowiska
Technologia
CASE
T
W
Narzędzia
Edytory
Kompilatory
Warsztaty
Narzędzia do po
równań plików
Analiza i pro
-jektowanie
Warsztaty do wielu
metod
Środowiska
zintegrowane
projektowanie
Warsztaty do
jednej metody
Środowiska
Środowiska zbudo
wane dla procesu
testowanie
Warsztaty ogólnego
przeznaczenia
Warsztaty do kon
-kretnego języka
Slajd 97
Główne tezy
Procesy tworzenia oprogramowania to czynności zmierzające do
wyprodukowania systemu. Modele procesów tworzenia
oprogramowania to abstrakcyjne reprezentacje tych procesów.
Wszystkie procesy tworzenia oprogramowania obejmują
specyfikowanie, projektowanie, implementację, zatwierdzanie i
ewolucje oprogramowania.
Ogólne modele procesów opisują organizację procesu tworzenia
oprogramowania. Przykładami takich modeli są: model
kaskadowy, tworzenie ewolucyjne, tworzenie formalne systemów
oraz tworzenie z użyciem wielokrotnym.
W modelach iteracyjnych procesów tworzenie oprogramowania
przedstawia się w postaci cyklu czynności. Zaletą tego podejścia
jest uniknięcie zbyt wczesnego zatwierdzenia specyfikacji lub
projektu. Przykładami modeli iteracyjnych są tworzenie
przyrostowe i model spiralny.
Slajd 98
Główne tezy
Inżynieria wymagań to proces opracowywania specyfikacji
oprogramowania. Obejmuje przygotowanie specyfikacji
zrozumiałej dla użytkowników systemu oraz bardziej
szczegółowej specyfikacji dla budowniczych systemu.
Proces projektowania i implementowania polega na
przekształceniu specyfikacji wymagań w działający system
oprogramowania. Metody systematycznego projektowania mogą
być elementem tego przekształcenia.
Zatwierdzenie oprogramowania to proces sprawdzania, czy
system jest zgodny ze swoją specyfikacją oraz czy spełnia
rzeczywiste potrzeby użytkowników.
Slajd 99
Główne tezy
Ewolucja oprogramowania polega na modyfikowaniu istniejącego
systemu oprogramowania, tak aby spełniał nowe wymagania.
Takie podejście staje się standardem tworzenia oprogramowania
w wypadku małych i średnich przedsięwzięć.
Technologia CASE zapewnia zautomatyzowane wspomaganie
procesu tworzenia oprogramowania. Narzędzia CASE
wspomagają poszczególne czynności procesu. Warsztaty CASE
wspomagają zbiory powiązanych czynności. Środowiska CASE
wspomagają większość lub nawet wszystkie czynności procesu
tworzenia oprogramowania.
Slajd 100

Podobne dokumenty