Wodospadowy model wytwarzania oprogramowania zakłada długą

advertisement
Temat : zwinne programowanie - Agile software development
Programowanie zwinne – grupa metodyk wytwarzania oprogramowania opartego na
programowaniu iteracyjno-przyrostowym. Wymagania oraz rozwiązania ewoluują przy
współpracy samozarządzalnych zespołów, których celem jest przeprowadzanie procesów
wytwarzania oprogramowania. Pojęcie zwinnego programowania zostało zaproponowane w
2001 w Agile Manifesto.
Metodyka i Ogólna informacja na temat zespołów
Generalnie metodyka oparta jest na zdyscyplinowanym zarządzaniu projektem, które
zakłada częste inspekcje wymagań i rozwiązań wraz z procesami adaptacji zarówno
specyfikacji jak i oprogramowania. Metodyka ta najczęściej znajduje zastosowanie w małych
zespołach programistycznych, w których nie występuje problem komunikacji, przez co nie
trzeba tworzyć rozbudowanej dokumentacji kodu. Kolejne etapy wytwarzania
oprogramowania zamknięte są w iteracjach, w których za każdym razem przeprowadza się
testowanie wytworzonego kodu, zebranie wymagań, planowanie rozwiązań itd. Metoda
nastawiona jest na szybkie wytwarzanie oprogramowania wysokiej jakości.
Skład zespołów jest zazwyczaj wielofunkcyjny oraz samozarządzalny, bez
zastosowania jakiejkolwiek hierarchii korporacyjnej. Członkowie zespołu biorą
odpowiedzialność za zadania postawione w każdej iteracji. Sami decydują jak osiągnąć
postawione cele.
Metoda nastawiona jest na bezpośrednią komunikację pomiędzy członkami zespołu,
minimalizując potrzebę tworzenia dokumentacji. Jeśli członkowie zespołu są w różnych
lokalizacjach, to planuje się codzienne kontakty za pośrednictwem dostępnych kanałów
komunikacji wideokonferencja, e-mail itp.
Ciekawostka
Warto dodać, że bez względu na wymaganą dyscyplinę rozwoju każdy zespół Agile
musi posiadać w swoim składzie przedstawiciela klienta. Osoba ta jest powoływana przez
zainteresowane strony do działania w ich imieniu i sprawia, że są oni jakby osobiście
zaangażowani i są dostępni dla programistów, aby odpowiedzieć na mnożące się w trakcie
iteracji pytania. Na końcu każdej iteracji, interesariusze oraz przedstawiciele klienta
dokonują przeglądu postępów oraz ponowną ocenę priorytetów w celu optymalizacji tzw.
zwrotu z inwestycji (ROI) i zapewniają dostosowanie do potrzeb klientów i celów firmy.
Cele jakie spełniają zwinne metodyki
Główne cele i zasady, jakie spełniają zwinne metodyki zostały spisane Manifeście
Agile, który uważany jest obecnie za główne źródło wiedzy. Poniżej prezentujemy kompilację
głównych celów i zasad przyświecająca stosowaniu zwinnych metodyk w ramach zarządzania
projektami:







tworzenie wartościowych i innowacyjnych rozwiązań zarówno dla firmy jak i
konsumentów na każdym etapie projektowania;
minimalizacja kosztów m.in. dzięki skróceniu harmonogramów procesu wytwarzania;
koncentracja na członkach zespołu projektowego, wzrost motywacji wśród
pracowników i bezstresowa realizacja projektów;
ścisła współpraca z klientem - preferowany jest kontakt bezpośredni;
prostota i samo-organizujące się zespoły;
satysfakcja klientów dzięki szybkiemu i regularnemu dostarczaniu wartościowego
produktu;
minimalizacja ryzyka.
Współpraca z klientem ponad negocjowanie kontraktów
W klasycznym podejściu kontakt z klientem docelowym następuje na początku i na
końcu cyklu wytwarzania oprogramowania. Zakłada się, że na początku zbiera się wymagania
klienta, które pozostają niezmienne aż do samego końca. Natomiast na końcu projektu
następuje walidacja wytworzonego oprogramowania. Niestety świat, a tym bardziej świat
oprogramowania nie jest statyczny i w ciągu trwania projektu klient często zmienia swoje
wymagania. Źródłem zmiany wymagań klienta jest potrzeba adaptacji do zmian w jego
środowisko, np.: wejście w życie nowej ustawy, wdrożenie nowego systemu lub procesu... W
efekcie końcowym okazuje się, że wytworzone oprogramowanie nie spełnia, częściowo lub w
całości "nowych" wymagań klienta. Ponadto okazuje się, że część funkcjonalności, która na
początku wydawała się ważna przestała być potrzebna. Wszystko to prowadzi do
renegocjacji kontraktu lub dodatkowych zobowiązań ze strony wytwórcy oprogramowania
celem utrzymania dobrych stosunków z klientem, co z kolei odbija się na budżetach
wytwórcy oprogramowania jak i klienta.
Zwinne metodologie bazują na zaangażowaniu i ciągłej współpracy z klientem oraz
walidacji jego wymagań w czasie trwania projektu. Ma to na celu wyeliminowanie
nieaktualnych, bądź mało istotnych wymagań przy jednoczesnym utrzymaniu budżetu
projektu. Ciągła współpraca z klientem realizowana jest poprzez dostarczanie klientowi w
regularnych odstępach czasu działającego oprogramowania zawierającego najbardziej
wymagane funkcjonalności, a następnie analizowaniu informacji zwrotnej w celu aktualizacji
priorytetów na liście pozostałych wymagań. Jednym ze sposobów dostarczenia
oprogramowania klientowi jest przeprowadzenie dema najnowszej funkcjonalności lub
wdrożenie jej bezpośrednio u klienta. Aby dostarczać działające oprogramowanie
zawierające najbardziej wymagane funkcjonalności w regularnych odstępach czasu, zwinne
metodologie zalecają implementowanie nowych funkcjonalności w stałych odstępach
czasowych trwających od 1 do 4 tygodni (iteracje) oraz integrowanie ich z
funkcjonalnościami poprzednio stworzonymi inkrementacje.
Reakcja na zmianę
O sukcesie bądź porażce decyduje zdolność częstego i szybkiego reagowania na
zmiany. Tworząc plan realizacji projektu, powinniśmy się upewnić, że harmonogram
umożliwia wprowadzanie zmian(zarówno technologicznych jak i biznesowych). Projektu
informatycznego nie uda się zaplanować szczegółowo. Trzeba liczyć się ze zmianą otoczenia
biznesowego, które wpłynie na stawiane wymagania. Oprócz tego możemy być pewni, że
kiedy system zacznie działać, to klienci zaczną wspominać o zmianach dotyczących wymagań.
Nawet gdybyśmy mieli 100% pewność, że wymagania się nie zmienią, to i tak nie jesteśmy w
stanie oszacować czasu ich realizacji. Niektórzy menadżerowie nanoszą projekt na arkusze
papieru, które później rozklejają na ścianach. W ten sposób można łatwo śledzić wybrane
zadania, wykreślać wykonane, obserwować daty realizacji zadań, a także reagować na
odstępstwa w harmonogramie. Mimo przytaczanych zalet jest też i wada:
Taka struktura szybko się zdezaktualizuje. Wraz ze wzrostem wiedzy zespołu dotyczącej
budowanego systemu, rośnie także wiedza klienta o potrzebach samego zespołu, a część
zadań staje się po prostu zbędna. W tym czasie można odkryć inne zadania, których zabrakło
w schemacie i należy je dodać.
Zmianie więc ulega nie tylko zadania ale także czas ich realizacji. O wiele lepszym
rozwiązaniem jest tworzenie szczegółowych harmonogramów na następny tydzień i bardzo
ogólnych planów na przyszłość. Zatem powinniśmy dokładnie wiedzieć o stawianych
wymaganiach jakie będziemy, realizować w najbliższym tygodniu, szkice wymagań jakie będą
realizowane w ciągu kilku miesięcy oraz mieć zarys o tworzonym systemie. Dzięki temu
podejściu, więcej czasu poświęcamy na szczegółowe opisanie zadań, które będą realizowane
w najbliższym czasie. Modyfikowanie raz opracowanego, szczegółowego planu jest trudne,
bo w jego tworzeniu i zatwierdzaniu był zaangażowany cały zespół. Ponieważ taki plan
dotyczy tylko najbliższego tygodnia, pozostałe zadania są elastyczne.
Najbardziej popularne odmiany zwinnych metodologii







SCRUM
Extreme Programming (XP)
Feature Driven Development (FDD)
Lean Software Development
Rational Unified Process
Crystal
Dynamic Systems Development Method (DSDM)
Działające oprogramowanie ponad obszerną dokumentację
Wodospadowy model wytwarzania oprogramowania zakłada długą fazę analizy
wymagań oraz projektowania całości systemu, która owocuje dużą ilością dokumentacji
opisującą implementację w bardzo szczegółowy sposób. Niestety, na etapie planowania
bardzo często umysł ludzki nie jest w stanie ogarnąć wszystkich aspektów złożoności
oprogramowania jak i ograniczeń wybranej technologii. Kiedy przychodzi do fazy
wytwarzania oprogramowania okazuje się, że cześć udokumentowanego projektu jest
niemożliwa, bądź bardzo trudna do implementacji, co wymusza zmiany zarówno w projekcie,
jak i w istniejącej już dokumentacji, co z kolei powoduje dodatkowy narzut czasowy.
Dodatkowo, zazwyczaj zmiany architektury projektu w jednym miejscu pociągają za sobą
zmiany w innej, zależnej części. To z kolei sprawia, że czas potrzebny na aktualizację
dokumentacji znacząco się wydłuża. Ostatecznie okazuje się, że nie jesteśmy w stanie
odzwierciedlić w dokumentacji wszystkich zmian architektonicznych, co czyni ją nieaktualną,
a czas poświęcony na szczegółowe projektowanie jest czasem zmarnowanym nie mamy ani
aktualnej dokumentacji ani działającego kodu.
Zasady:
Jak najszybsze spełnienie oczekiwań klienta poprzez wczesne dostarczanie
działającego oprogramowania. Im mniej funkcjonalny będzie początkowy dostarczony
fragment systemu, tym wyższa będzie jakość wersji końcowej. Im częściej przekazujemy
klientowi gotowy fragment funkcjonalności, tym wyższa będzie jakość produktu końcowego.
W podejściu programowania zwinnego wymaga się wczesne i częste dostarczanie
fragmentów programu. Od czasu przekazania pierwszej skromnej wersji oprogramowania,
powinniśmy co kilka tygodni dostarczać klientowi coraz bardziej funkcjonalne warianty. W
tym czasie możemy także otrzymywać wykaz oczekiwanych zmian.

 Traktujmy zmiany wymagań ze zrozumieniem nawet jeśli następują w późnych
fazach wytwarzania oprogramowania. W tym podejściu programowania następują zmiany
wraz ze zmieniającym się uwarunkowaniami biznesowymi, w której funkcjonuje strona
zamawiająca. Uczestnicy procesów zwinnych nie powinni obawiać się zmian, ponieważ
prowadzą one do lepszego zrozumienia oczekiwań klienta. Zespół powinien utrzymywać i
przeznaczać czas na elastyczną strukturę oprogramowania, dzięki której można zniwelować
wpływ zmian wymagań na kształt budowanego systemu.

Działające oprogramowanie należy dostarczać klientowi możliwie często.
Powinno się jak to tylko możliwe przekazywać klientowi pierwszą wersję przygotowanego
oprogramowania i kontynuować ten proces na wszystkich etapach realizacji projektu. Nie
wystarcza przekazanie tylko dokumentacji. Żaden dokument nie zastąpi, nawet cząstkowej
funkcjonalności systemu. Przecież ostatecznym celem jest dostarczenie oprogramowania
które spełnia oczekiwania klienta.
 Ludzie biznesu powinni ściśle współpracować z programistami na wszystkich etapach
projektu.
 Projekty należy planować wokół dobrze umotywowanych programistów. Należy im
zorganizować niezbędne środowisko pracy, a także obdarzyć ich potrzebny, zaufaniem. To
ludzie są najważniejszym czynnikiem, który decyduje o sukcesie, inne czynniki środowiska i
sposób zarządzania maja drugorzędne znaczenie i są dostosowywane do potrzeb ludzi
będących w zespole.
 Najlepszą metodą do przekazywania informacji ( w obie strony) jest rozmowa w
cztery oczy.
W programowaniu zwinnym projekt podlegają na rozmowach prowadzonych członków
zespołu. Zazwyczaj wystarczają bezpośrednie kontakty programistów, ewentualnie można
spisać dokumenty i aktualizować je równolegle do rozmów.

Podstawowym miernikiem postępu prac nad projektem jest ilość i jakość
działającego oprogramowania. Czyli miarę oprogramowania jest ilość zatwierdzonych przez
klienta fragmentów systemu. O postępie możemy mówić, tylko wtedy, gdy funkcjonalność
działa i spotyka się z akceptacją ze strony klienta.
 Procesy zwinne ułatwiają utrzymywanie ciągłości wytwarzania. Programiści powinni
utrzymywać wysoką ale stałą szybkość pracy, zamiast od razu próbować osiągnąć
maksymalną wydajność. Narzucenie zbyt wysokiego tempa spowoduje wypalenie
psychiczne, a nawet upadek projektu. Stale tempo pracy umożliwia realizację najwyższej
jakości standardów przez cały okres.
 Pozytywny wpływ na zwinność projektu ma stałą dbałość o doskonałość techniczną i
właściwy projekt. Wysoką jakość jest kluczem do dużej wydajności. Można to uzyskać
poprzez przemyślaną i prostą strukturę oprogramowania. Wszyscy powinni koncentrować się
na tworzeniu najwyższej jakości, na jakie pozwalają im umiejętności. Powinno eliminować
źródła potencjalnych opóźnień w zarodku.

Kluczowym elementem pomyślnego zakończenia projekt jest prostata, czyli sztuka
maksymalizacji ilości pracy, której nie wykonujemy. Staranie dochodzenia do celu możliwie
najkrótszą drogą.
Podsumowanie :
Faza określania wymagań jest niezwykle istotnym elementem procesu tworzenia
oprogramowania i żadna z metodologii rozwijania oprogramowania jej nie pomija,
Różne metodologie różnie podchodzą do określania wymagań, zwłaszcza jeśli chodzi o
formalizację procesu odkrywania i specyfikacji wymagań oraz o sposób dokumentacji
wymagań.
Wybór podejścia do określania wymagań powinien zależeć od charakteru projektu czy
system jest mały, średni czy duży, czy jest tworzony przez różne firmy na podstawie jednego
lub wielu kontraktów, czy musi gwarantować wysoki poziom niezawodności i
bezpieczeństwa.
Download