Incremental development (model przyrostowy, realizacja przyrostowa) Kowalski Piotr Programowanie i bazy danych PWSZ PŁOCK Podejście przyrostowe (incremental development) – [Mills i in., 1980] sposób na ograniczenie powtarzania całości prac w procesie tworzenia • możliwość odkładania decyzji –szczegółowe wymagania, do czasu zdobycia doświadczenia w pracy z systemem • tworzenie przyrostowe – pośrednie; łączy zalety podejścia kaskadowego i ewolucyjnego • stosuje się do przypadków, gdy dopuszczalna jest okrojona funkcjonalność systemu Model ten opiera się na podobnych założeniach jak model wodospadu jednak zasadnicza różnica jest taka, że projekt jest rozłożony na wiele małych faz/zadań, iteracji. Każda z nich zakończona jest powstaniem nowego modułu lub usprawnieniem/rozbudowaniem istniejącego. Poszczególne moduły zostają ułożone w większą strukturę i ta jako całość poddana jest testom. W modelu wielokrotnym istnieje podział na iteracje. Projekt może zostać podzielony na kilka osobnych iteracji trwających od jednego do czterech tygodni w zależności od specyfiki projektu. Tworzone oprogramowanie z zasady jest testowane na zakończenie każdej iteracji, rezultaty testów są wykorzystywane na koniec każdego cyklu testowego. Czas każdorazowej iteracji może być różny, ale nie powinien być dłuższy niż przyjęty na nią limit – z każdą iteracją wzrasta doświadczenie grupy projektowej więc czas potrzebny na wykonanie iteracji powinien być coraz krótszy. W każdej iteracji implementowane są nowe funkcjonalności jednak ich liczba w każdej z nich jest stosunkowo mała co powoduje, że wraz z przyrostem funkcjonalności aplikacji przyrasta również ilość wykonanych analiz testów do jej weryfikacji. To powoduje umiejętne rozłożenie „sił” w czasie zamiast testowania jednego dużego „organizmu” jednocześnie. W porównaniu z klasycznym modelem wodospadu faza projektowania, zbierania wymagań, dewelopmentu pojawia się jednokrotnie w całym czasie życia projektu, w modelu wielokrotnym pojawia się praktycznie w każdej iteracji co zwiększa doświadczenie i sprawność zespołu projektowego która to wiedza zaowocuje w kolejnych projektach. Model przyrostowy mimo niezaprzeczalnych zalet posiada jednak 3 dość duże wady o których mowa poniżej : bardzo rozbudowana i częsta komunikacja – każda iteracja wymaga podania feedbacku o rezultatach testów, dostarczonych rozwiązaniach, ilości wykonanej pracy na zadanie itp. – proces komunikacji konsumuje sporo czasu w odróżnienia od klasycznego modelu waterfall w praktyce nie ma możliwości zamrożenia wymagań funkcjonalnych gdyż w miarę tworzenia oprogramowania wzrastają wymogi klienta ; to powoduje opóźnienia i przekroczenie budżetu realizacja projektu wymaga posiadania bardzo sprawnego systemu zarządzania i monitorowania wprowadzanych zmian w każdej z iteracji Idea: • w procesie przyrostowym klienci identyfikują w zarysie usługi, które system ma oferować • wskazują hierarchię ważności usług • definiuje się pewną liczbę przyrostów, które mają być dostarczone • przyrost – część funkcjonalności systemu • przyporządkowanie usług do przyrostów, zależy od priorytetu tych usług • usługi najważniejsze dostarczane pierwsze gdy zdefiniuje się przyrosty, szczegółowo definiuje się wymagania stawiane usługom dostarczanym w pierwszym przyroście • przyrost jest tworzony za pomocą najbardziej odpowiedniego procesu, wybór modelu • w trakcie prowadzi się dalszą analizę wymagań dla następnych przyrostów • gdy przyrost gotowy – klienci uruchamiają: szybko – część funkcjonalności, ekperymenty • =>ustalanie nast.: wymagań i wersji przyrostu Fazy: • rozpoczyna się od: określenia całości wymagań, wykonania wstępnego, ogólnego projektu całości systemu; potem: • wybór pewnego podzbioru funkcji systemu, • następnie: szczegółowy projekt (wg modelu kaskadowego) oraz implementacja części systemu realizującej wybrane funkcje • testowanie zrealizowanego fragmentu i dostarczenie go klientowi • powtarzanie procesu Uwagi: • po zakończeniu prac nad kolejnymi wymaganiami, integracja z istniejącymi przyrostami • funkcjonalność systemu poprawia się z każdym dostarczonym przyrostem • najczęściej używane usługi – najwcześniej lub implementowane przyrostowo w miarę realizacji wymagań kolejnych przyrostów (first-things-first) • tworzenie przyrostu – najbardziej odpowiedni proces: wybór; specyfikacja usług staranna w pewnym przyroście => model kaskadowy; niejasna => lepiej zastosować tworzenie ewolucyjne Zalety: • częste kontakty z klientem (skrócenie przerw por. model kaskadowy),używanie: dośw., szkolenia • brak konieczności zdef. z góry całości wymagań • wczesne wykorzystanie przez klienta fragmentów systemu (testowanie funkcjonal.), mniejsze ryzyko • pierwszy przyrost spełnia najważniejsze wymagania, można używać systemu (prototyp ?) • potencjalne opóźnienia: możliwość elastycznego reagowania – opóźnienie realizacji fragmentu – przyspieszenie prac nad inną/innymi częściami (sumarycznie – bez opóźnienia całości przedsięwzięcia projektowego) Wady: • przyrosty powinny być małe (nie więcej niż 20000 wierszy kodu) • każdy przyrost powinien dostarczać pewną funkcjonalność systemu=>może być trudno przypisać wymagania klienta do przyrostów, potencjalne trudności z wycinaniem podzbioru funkcji w pełni niezależnych • trudno zdefiniować wspólne udogodnienia potrzebne wszystkim przyrostom dodatkowy koszt konieczność implementacji szkieletów (interfejs zgodny z docelowym systemem) ryzyko nie wykrycia błędów w fazie testowania Konsekwencje: • Ewolucja podejścia przyrostowego doprowadziła do powstania „programowania ekstremalnego” [Beck, 1999] => tworzenie i dostarczanie bardzo małych przyrostów funkcjonalności włączenie klienta w cały proces ustawiczne poprawianie kodu programowanie pozbawione indywidualizmu (2-10) wymagania: słabo sprecyzowane lub szybko się zmieniające