Proces tworzenia
oprogramowania i modele
cyklu życia oprogramowania
Co nazywamy procesem
wytwarzania oprogramowania ?
To uporządkowany zbiór aktywności związanych z
tworzeniem oprogramowania. Najważniejsze z nich to:
•
przygotowanie specyfikacji,
•
wykonanie projektu oprogramowania,
•
testowanie i walidacja,
•
wprowadzanie udoskonaleń i poprawek.
Przyjęty (założony) model procesu wytwarzania
oprogramowania można uważać za (w pewnym sensie
abstrakcyjnego) reprezentanta rzeczywistego procesu.
Dany model opisuje proces wytwarzania oprogramowania
z jakiegoś punktu widzenia (perspektywy).
To co nazywamy modelem procesu wytwarzania
oprogramowania jest również nazywane modelem cyklu
życia oprogramowania.
Modele cyklu życia
oprogramowania
Model kaskadowy (ang. waterfall model)
•
kolejne aktywności występujące w procesie wytwarzania
oprogramowania są „ułożone” w formie kaskady
Model ewolucyjny
•
aktywności: specyfikacja, pisanie kodu informatycznego, testowanie,
walidacja itd. przeplatają się ze sobą
Montaż z gotowych elementów
•
oprogramowanie jest tworzone z gotowych kawałków (modułów)
oprogramowania (poprzez ich scalanie w jedną całość)
Istnieje bardzo wiele wariantów i odmian powyższych modeli,
jak na przykład: naturalny model „buduj i poprawiaj”, model
kaskadowy z iteracjami, model spiralny, model „realizacji
przyrostowej”, model szybkiego prototypu, model RAD (ang.
Rapid Application Development) i model formalnych
transformacji
Przykład: model kaskadowy
Określeni
e
wymagań
Projektowani
e
Pisanie kodu
informatyczneg
o
Testowan
ie
Wprowadzanie
poprawek i
ulepszeń
Charakterystyka modelu
kaskadowego
Zalety:
ułatwia organizację (planowanie, harmonogramy,
monitorowanie etc.); zmusza do zdyscyplinowanego
podejścia, wymusza kończenie dokumentacji po każdej fazie
Wady:
narzuca ścisłą kolejność wykonywania prac, wysokie
koszty błędów popełnionych we wcześniejszych fazach, brak
weryfikacji i elastyczności, niedopasowanie – aktywności w
przedsięwzięciu są rzadko ułożone sekwencyjnie, realizatorzy
kolejnych faz muszą czekać na zakończenie wcześniejszych
Zalecenie:
stosować w projektach o dobrze zdefiniowanych
wymaganiach dla dobrze rozumianych zastosowań; rzadko
stosuje się go w czystej postaci; stanowi on bazę dla
doskonalszych modeli pochodnych
Ewolucyjny model cyklu życia
oprogramowania
Postępowanie eksploracyjne
• Zakłada się tutaj ścisłą współpracę z
użytkownikiem(ami). Tworzenie oprogramowania
rozpoczyna się od wstępnej specyfikacji i jej
realizacji i „dokłada się” kolejne funkcjonalności
(tak jak proponuje użytkownik(cy)). Wymagania
powinny być na każdym etapie dobrze
sprecyzowane.
Użycie prototypu
• Prototyp oprogramowania jest użyty w celu
rozpoznania i zrozumienia nieprecyzyjnie
sformułowanych wymagań użytkownika(ów).
Ewolucyjny sposób
postępowania
Współbieżne
aktywności
Walidacja
Wersja
końcowa
Pisanie kodu
informatycznego
Wersje
pośrednie
Specyfikacja
Wersja
początkowa
Szkicowy opis
Krótka charakterystyka ewolucyjnego
modelu cyklu życia oprogramowania
Problemy
• często występuje brak przejrzystości w procesie
postępowania według tego modelu,
• produkt końcowy (wersja końcowa oprogramowania)
jest często kiepsko ustrukturyzowany,
• w tym przypadku często są wymagane specjalne
umiejętności (np. specjalne języki programowania w
przypadku szybkiego prototypowania).
Zastosowanie
• do oprogramowania małych lub średniej wielkości
systemów interaktywnych,
• do oprogramowania części jakichś dużych systemów
(np. stworzenia interfejsów użytkownika),
• do oprogramowania systemów o stosunkowo krótkim
„czasie życia”.
Inżynieria oprogramowania bazująca
na montażu z gotowych elementów
Oparta jest na systematycznym i wielokrotnym
wykorzystywaniu pewnych modułów oprogramowania.
Gotowe, dostępne na rynku komponenty („z półki”, ang.
commercial-off-the-shelf components, COTS) są montowane
w jedną całość.
Części składowe takiego procesu:
•
analiza modułów oprogramowania (do czego można wykorzystać
dany moduł),
•
modyfikacja wymagań,
•
projektowanie oprogramowania z wielokrotnym wykorzystaniem
modułów software’owych,
•
montaż w jedną całość (integracja).
To podejście do inżynierii oprogramowania zyskuje na
znaczeniu wraz pojawieniem się standardów dla
komponentów COTS.
Iteracje w procesie tworzenia
oprogramowania
Wymagania systemowe ewoluują (zmieniają się) zawsze w
trakcie trwania projektu. Dlatego potrzebny jest proces iteracji,
w którym ponownie analizuje się wypracowane we
wcześniejszych krokach rzeczy i ewentualnie się je modyfikuje,
w szczególności w przypadku dużych systemów.
Iteracje mogą być dołączone de facto do każdego z modeli cyklu
życia oprogramowania (w niektórych z nich są wręcz
niezbędne).
Pewien sposób iterowania jest również widoczny w takich
podejściach jak:
•
dostarczanie oprogramowania „kawałek po kawałku” (ang.
incremental delivery),
•
„spiralny” sposób organizacji pisania kodu informatycznego (ang.
spiral development).
Dostarczanie oprogramowania „kawałek
po kawałku” (ang. incremental delivery)
Zamiast dostarczenia oprogramowania „w jednym rzucie”
proces jego tworzenia jest dzielony na kilka „przyrostów” -
i tym samym również proces jego instalacji. Każdy z
„przyrostów” związany jest z dostarczeniem modułu
oprogramowania realizującego jedną z „funkcjonalności”
(funkcji) systemu.
W tym sposobie poszczególne punkty specyfikacji
oprogramowania, które ma powstać, otrzymują swoje
priorytety. Punkty (specyfikacji) z najwyższymi priorytetami
są realizowane w najwcześniejszych „przyrostach”.
Jeżeli rozpoczyna się realizacja jakiegoś „przyrostu”, to w
tym momencie związane z nim punkty specyfikacji zostają
„zamrożone” (nie ulegają już zmianie). Nie dotyczy to
jednakże „przyrostów” późniejszych, które mogą
ewoluować (zostać zmodyfikowane).
Tworzenie oprogramowania „kawałek po
kawałku” (ang. incremental
development)
Walidacja kodu inform.
danego „przyrostu”
Pisanie kodu inform.
danego „przyrostu”
Projektowanie
architektury oprogr.
Integracja danego
danego „przyrostu”
Walidacja całości
oprogramowania
Przygotowanie
specyfikacji (spec)
Przyporządkowanie
punktów spec „
przyrostom
”
Oprogramowanie niekompletne
Oprogramowanie
kompletne
Zalety tworzenia oprogramowania
„kawałek po kawałku”
Klient otrzymuje kawałki („przyrosty”) oprogramowania, w
których zostały zaimplementowane kolejne funkcjonalności
całego oprogramowywanego systemu, na długo przed
zakończeniem projektu. Zatem może je oceniać jeszcze w czasie
jego trwania.
Wcześniej zrealizowane „przyrosty” oprogramowania mogą
posłużyć jako prototypy użyteczne w wyprowadzeniu lub
doprecyzowaniu wymagań dla „przyrostów” następnych.
W tym sposobie tworzenia oprogramowania ryzyko nieudania się
całego projektu jest znacznie mniejsze niż w innych przypadkach.
Tutaj implementowane usługi (oprogramowywanego) systemu,
którym nadano najwyższy priorytet, generują (w sposób
naturalny) największe potrzeby, jeżeli chodzi o testy. Wiadomo
zaś, że oprogramowanie, które przeszło przez więcej testów jest
bardziej niezawodne – czyli jest to zaleta.
Model spiralny cyklu życia
oprogramowania
Proces tworzenia oprogramowania jest tutaj
przedstawiony za pomocą spirali (nie jako sekwencja
aktywności z możliwościami powrotów).
Każdy obieg (pętla) w spirali reprezentuje fazę w
procesie tworzenia oprogramowania.
W spirali nie występują takie pętle jak np.
specyfikacyjna, projektowa itp. Procesy specyfikacji,
projektowania są „rozproszone”; ich części występują w
wielu pętlach spirali.
Zagrożenia są określane w sposób bezpośredni a
negatywne efekty związanych z nimi zjawisk (jeżeli
wystąpią) są usuwane w momencie ich wystąpienia.
Model spiralny dla procesu tworzenia
oprogramowania - ilustracja
Analiza
zagrożeń
Prototyp 3
Prototyp
operacyjny
Koncepcja
operacyjna
Symulacje, modele, pośrednie punkty docelowe
Określenie
wymagań
ogólnych
Wymagania
walidacyjne
Projekt realizacji
wymagań V&V
Projekt
produktu
Szczegółowy
projekt
Kod infor-
matyczny.
Test wstępny
Test
integracyjny
Test akceptacyjny
Usługa
Implementacja, weryfikacja, przejście do
następnego poziomu tworzenia programu
Ocena alternatyw, identyfikacja,
rozwiązywanie problemów
związanych z zagrożeniami
Określenie celów, zadań,
alternatyw i ograniczeń
Planowanie następnej fazy
Plan integracji i
testowania
Opracowanie
harmonogramu
Opracowanie wymagań i
określenie cyklu
życia oprogramowania
PRZEGLĄD
Analiza
zagrożeń
Analiza
zagrożeń
Analiza
zagrożeń
Prototyp 2
Prototyp1
Podstawowe aktywności występujące w
procesie tworzenia oprogramowania
SPECYFIKACJA
- Przygotowanie specyfikacji oprogramowania,
które mamy stworzyć (napisać)
PROJEKT
- Przygotowanie projektu oprogramowania – zgodnie
z otrzymanymi od klienta lub napisanymi przez siebie
specyfikacjami – i następnie realizacja tego projektu poprzez
napisanie odpowiadającego mu kodu informatycznego
WALIDACJA I TESTOWANIE
- Walidacja i testowanie napisanego
kodu informatycznego
EWOLUCJA
- Sprawowanie pieczy nad oprogramowaniem po
jego instalacji (tworzenie aktualizacji, tzw. service packs dla
obsługi błędów, jeżeli one wystąpią u użytkownika itp.)
Programowanie a operacja
debuggingu
Programowanie to zamiana opracowanego projektu (jakiegoś
programu) w kodu informatyczny. W skład tej czynności
wchodzi również usuwanie błędów programistycznych
(błędów w kodzie powstałych w wyniku nieprawidłowego
użycia zastosowanego języka programowania).
Programowanie to aktywność programistów (informatyków
specjalizujących się w programowaniu).
Programiści wymyślają testy w celu wykrycia błędów
polegających na nieprawidłowym działaniu programu. Błędy
tego typu usuwane są w procesie zwanym debuggingiem.
Operacja debuggingu -
ilustracja
Zlokalizuj
błąd
Wymyśl sposób
usunięcia błędu
Operacja usu-
nięcia błędu
Ponów test
poprawności
działania programu
Weryfikacja i walidacja
oprogramowania
W operacjach (aktywnościach) weryfikacji i walidacji (ang.
software verification and validation, V & V) sprawdza się, czy
oprogramowanie jest napisane zgodnie ze specyfikacjami
(weryfikacja) i czy spełnia oczekiwania klienta (walidacja).
(Weryfikacja nazywana jest również testowaniem.)
W powyższych aktywnościach mamy do czynienia z procesami
sprawdzania poprawności działania programu, jego przeglądu
pod kątem spełnienia oczekiwań i poddawania różnorakiego
rodzaju testom.
Testowanie programu (w sensie weryfikacja) polega na
sprawdzeniu poprawności jego działania w opracowanych przez
programistów scenariuszach testowych. Scenariusze te należy
wyprowadzić ze specyfikacji i przewidzieć w nich sprawdznie dla
wszystkich możliwych wartości danych (objętych specyfikacjami).
Proces testowania - ilustracja
Testowanie
komponentów
Testowanie
całego programu
Testowanie
pod kątem
akceptacji
Poziomy w operacji
testowania
Testowanie komponentów (modułów) programu
• Oddzielne komponenty są testowane niezależnie od
siebie.
• Komponenty – to mogą być funkcje w pojedynczych
obiektach lub w ich grupach.
Testowanie całego programu
• To testowanie zintegrowanych komponentów
(modułów) programu – jako całości. Testowanie
własności „reprezentatywnych” programu jest tutaj
szczególnie ważne.
Testowanie pod kątem akceptacji
• Testowanie na danych otrzymanych od klienta, aby
zorientować się, czy będą spełnione jego
oczekiwania.
Ewolucja oprogramowania
Oprogramowanie to takie dobro, w którym (z natury rzeczy)
stosunkowo łatwo daje się wprowadzać zmiany.
Przykład ewolucji oprogramowania: zmieniają się
uwarunkowania w prowadzeniu jakiegoś biznesu. Powoduje to
to, że oprogramowanie służące do prowadzenia tego biznesu
musi zostać zmienione i uzupełnione, dostosowane do
zaistniałych zmian.
Mimo że istnieje granica pomiędzy procesem tworzenia
oprogramowania i tym co dzieje się z oprogramowaniem po
instalacji, to w ostatnich czasach staje się ona coraz bardziej
rozmyta, gdyż coraz mniej programów pojawiających się na
rynku jest zupełnie nowych (od początku do końca).
Podsumowanie
Cztery główne aktywności (procesy) związane
z wytwarzaniem oprogramowania (cyklem
życia oprogramowania) to: przygotowanie
specyfikacji, przygotowanie projektu programu
i jego implementacja (czyli napisanie kodu
informatycznego), weryfikacja i walidacja
oprogramowania oraz jego ewolucja.
Poszczególne modele cyklu życia
oprogramowania przedstawiają różne sposoby
(warianty) połączeń pomiędzy procesami
związanymi z wytwarzaniem oprogramowania.
Przykładowe modele to: kaskadowy,
ewolucyjny i montażu z gotowych elementów.