background image

Proces tworzenia 

oprogramowania i modele 

cyklu życia oprogramowania

 

background image

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. 

background image

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

background image

Przykład: model kaskadowy

Określeni

wymagań

Projektowani
e

Pisanie kodu 
informatyczneg
o

Testowan
ie

Wprowadzanie 
poprawek i 
ulepszeń

background image

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

background image

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).

background image

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

background image

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”.

background image

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.

background image

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).

background image

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).

background image

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

background image

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.

background image

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.

background image

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

background image

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.)

background image

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.

background image

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

background image

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).

background image

Proces testowania - ilustracja

Testowanie
komponentów

Testowanie
całego programu

Testowanie
pod kątem
akceptacji

background image

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.

background image

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). 

background image

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.


Document Outline