Proces wytwarzania oprogramowania

Transkrypt

Proces wytwarzania oprogramowania
Proces wytwarzania
oprogramowania
Proces wytwarzania
oprogramowania
• Proces wytwarzania oprogramowania (zwany również
cyklem wytwarzania oprogramowania) to proces tworzenia
lub rekonstrukcji systemu informatycznego wraz z modelami
i metodologiami używanymi w jego realizacji
• Wybrane etapy procesu wytwarzania oprogramowania:
–
–
–
–
–
–
Specyfikacja wymagań
Analiza
Projektowanie
Implementacja
Testowanie
Wdrożenie i pielęgnacja
Motywacja
• Programy z początku ery informatyki były nieskomplikowane,
tworzone zazwyczaj do celów naukowych przez przyszłych
użytkowników
• Rozwój sprzętu komputerowego i języków programowania
sprawił, że zaczęto tworzyć bardziej złożone systemy
przeznaczone dla szerszego grona odbiorców
• Na pewnym etapie zauważono, że o sukcesie projektu
informatycznego decydują nie tylko umiejętności programistów,
ale i praca całego zespołu oraz w dużej mierze organizacja
samego procesu wytwarzania oprogramowania
Motywacja
• Konkurencja wymusiła poszukiwanie nowych sposobów na
poprawę efektywności procesu wytwarzania
oprogramowania
• W efekcie powstało wiele modeli opisujących cykl życia
systemu informatycznego i sposób realizacji procesu
wytwórczego
• Na bazie tych modeli powstały tzw. metodyki projektowe
(zestaw metod i procedur pozwalających zespołowi
projektowemu realizować cykl życia systemu)
Cykle życia i wytwarzania
• Cykl życia systemu informatycznego – szereg wzajemnie
zależnych etapów, począwszy od ujawnienia potrzeby budowy
systemu informatycznego, prezentacji jego idei, konstrukcję,
użytkowanie, przystosowane do ewentualnych zmian
funkcjonowania a kończąc na wycofaniu z eksploatacji
• Cykl wytwarzania systemu informatycznego – fragment cyklu
życia SI związany z procesem wytwórczym oprogramowania
• Cykl życia projektu – okres od początku do zakończenia
projektu informatycznego
Przeznaczenie modeli cyklu
wytwarzania SI
• Formalnie określony sposób realizacji projektu (plan
projektu, metodologia budowy systemu)
• Uporządkowanie przebiegu prac
• Ułatwienie planowania zadań
• Monitorowanie przebiegu realizacji zadań
Podstawowe modele cyklu
życia SI
•
•
•
•
•
•
Kaskadowy
Przyrostowy
Spiralny
Prototypowanie
Programowanie odkrywcze
Montaż z gotowych elementów
Model kaskadowy
(wodospadu)
Specyfikacja
wymagań
Analiza
Projektowanie
Implementacja
Testowanie
Wdrożenie
Model kaskadowy
(wodospadu)
• Stosowany w projektach o dobrze zdefiniowanych
wymaganiach
• Etapy realizowane są w ściśle określonej kolejności
• Etap musi być zakończony przed przejściem do następnego
• Modele, projekty, kod lub dokumentacja wytworzone w
danym etapie przekazywane są do następnego etapu
Model kaskadowy
Zalety
• Naturalny zrozumiały i
dobrze zdefiniowany ciąg
kroków oraz dokumentów
i produktów, które należy
wytworzyć w każdym
kroku
• Łatwość zarządzania
projektem (ułatwia
planowanie,
harmonogramowanie
oraz monitorowanie)
Wady
• Silnie zależy od
stabilności wymagań
• Weryfikacja zgodności z
wymaganiami dopiero w
końcowych etapach
• Marginalizacja roli klienta
• Wysokie koszty naprawy
błędów
Model kaskadowy z
iteracjami
Specyfikacja
wymagań
W modelu kaskadowym z
iteracjami jest możliwość
powrotu do każdego z
wcześniejszych etapów.
Zaleca się by iteracje były z góry
zaplanowane
Analiza
Projektowanie
Implementacja
Testowanie
Wdrożenie
Model kaskadowy kierowany
dokumentami
•
•
•
•
Model opracowany przez armię amerykańską
Bazuje na modelu kaskadowym
Każdy etap kończy się opracowaniem dokumentacji
W tradycyjnym modelu kaskadowym dokumentacja jest
warunkiem przejścia do kolejnego etapu
• W modelu kierowanym dokumentami potrzebna jest jeszcze
akceptacja klienta
• Dodatkową zaletą jest możliwość przerwania realizacji projektu w
jednej firmie i wznowienie realizacji w innej (po przekazaniu jej
kompletu dokumentów)
• Dodatkowe wady polegają na przestojach związanych z analizą
dokumentacji przez klienta oraz dużym nakładzie pracy na
opracowanie dokumentów
Model przyrostowy
• Rozpoczyna się od specyfikacji wymagań i wykonania
wstępnego projektu (architektury)
• Następnie wybierany jest pewien podzbiór wymagań i
następuje jego realizacja (przyrost), czyli szczegółowa
analiza, projektowanie, implementacja i testowanie
• W efekcie powstaje wersja systemu, która może być
dostarczona i wdrożona u klienta
• W kolejnej iteracji wybierany jest kolejny podzbiór wymagań
i następuje jego realizacja
• Iterację wykonywane są do momentu realizacji wszystkich
wymagań
Model przyrostowy
Proces realizowany
iteracyjnie
Określenie wymagań
Projekt ogólny
Wybór podzbioru
funkcji
Projekt szczegółowy,
implementacja i testy
Dostarczenie
zrealizowanej
części systemu
Model przyrostowy
Zalety
• Szybka implementacja
funkcjonalności
priorytetowych lub
obarczonych dużym
ryzykiem
• Możliwość wczesnego
wdrożenie
• Skrócenie przerw w
kontaktach z klientem w
porównaniu do modelu
kaskadowego
Wady
• Problem z
wyodrębnieniem w miarę
niezależnych grup
funkcjonalności
• Konieczność wytworzenia
dodatkowych modułów
niezbędnych do działania
kolejnej wersji
Model spiralny
• Planowanie – nakreślenie możliwych opcji (alternatyw)
kolejnego wydania systemu na podstawie wymagań
wstępnych lub celów wyznaczonych przez klienta
• Analiza ryzyka – identyfikacja źródeł ryzyka i szacownie
wielkości ryzyka dla każdej z możliwych alternatyw
kolejnego wydania systemu
• Konstrukcja – wytworzenie kolejnego wydania systemu
(„mały” wodospad – analiza, projektowanie, implementacja,
test i wdrożenie)
• Testowanie – ocena kolejnego wydania systemu i
wskazanie nowych wymagań lub modyfikacja istniejących
Model spiralny
PLANOWANIE
ANALIZA RYZYKA
Wymagania
początkowe
Planowanie na
podstawie wyniku
oceny klienta
Ocena klienta
TESTOWANIE
Analiza ryzyka dla
wymagań początkowych
Analiza ryzyka w
oparciu o reakcję
klienta
Kolejne wydania
KONSTRUKCJA
(„mini” model kaskadowy)
Model spiralny
Zalety
• Szybka reakcja na
pojawiające się ryzyka i
oczekiwania klienta
• Ciągła weryfikacja
produktu przez klienta
zwiększa szanse na
wytworzenie
satysfakcjonującego
rozwiązania
Wady
• Wymagana umiejętność
szacowania ryzyka
projektu informatycznego
Prototypowanie
• Polega na budowaniu kolejnych przybliżeń systemu aż
prototyp stanie się w pełni funkcjonalnym systemem
• Każdy kolejny prototyp jest oceniany przez klienta i wynik tej
oceny trafia do projektantów
• Po akceptacji prototypu przez klienta następuje pełna
specyfikacja wymagań i realizacja systemu w modelu
kaskadowym
• Ponieważ podstawowym zadaniem prototypu jest pomoc w
lepszym określeniu wymagań, budowę i weryfikację
prototypu można uznać za specyficzny sposób realizacji
fazy określania wymagań tradycyjnego modelu
kaskadowego.
Prototypowanie
Ogólne określenie
wymagań
Budowa
prototypu
nie
Weryfikacja
przez klienta
tak
Pełne określenie
wymagań
Realizacja pełnego
systemu
Prototypowanie
Zalety
Wady
• Pozwala uściślić wymagania i
uniknąć błędu ich niewłaściwej
specyfikacji
• Możliwe do stosowania w
przypadku, gdy są problemy w
jednoznacznym ustaleniu
wymagań
• Wczesne wykrycie
ewentualnych nieporozumień
pomiędzy klientem a wytwórcą
• Dodatkowy koszt budowy
prototypu (tylko niewielkie
fragmenty prototypu można
wykorzystać w właściwym
systemie)
• Nieporozumienia z klientem
wynikające z długiego czasu
oczekiwania na działający
system w porównaniu z bardzo
krótkim okresem wytwarzania
prototypu
Metody budowy prototypu
• Realizacja tylko „trudnych” funkcjonalności
• Języki wysokiego poziomu (Lisp, Smalltalk, Prolog) i
specjalizowane języki prototypowania
• Wykorzystanie gotowych komponentów
• Generatory interfejsu użytkownika, generatory
oprogramowania, narzędzia typu CASE,
• Szybkie programowanie, tj. tylko kod, bez testowania
Programowanie odkrywcze
•
•
•
•
Rozpoczyna się od bardzo ogólnego określenia wymagań
Następnie budowany jest system (nie prototyp!)
System jest weryfikowany przez klienta
W przypadku negatywnej oceny tworzona jest nowa wersja
na bazie poprzedniej
• Proces kończy się z chwilą gdy jedna z wersji zostanie
zaakceptowana przez klienta
Programowanie odkrywcze
Ogólne określenie
wymagań
Budowa
systemu
Przetestuj
system
nie
System
działa
poprawnie
tak
Dostarcz system
Programowania odkrywcze
Zalety
• Możliwość stosowania
nawet w przypadku
trudności w ustaleniu
wstępnych wymagań
Wady
• Problem z zachowaniem
sensownej struktury
systemu praktycznie
uniemożliwia realizację
większych, niezawodnych
systemów
• Konieczność testowania
przy współudziale klienta,
bo model nie przewiduje
pełnego określenia
wymagań
Montaż z gotowych
elementów
• Polega na wykorzystywaniu gotowych elementów w
tworzonym systemie
• Gotowe elementy mogą być wykorzystywane na dowolnym
etapie projektu
• Zwykle gotowe elementy wykorzystuje się na etapie
implementacji
• Istnieje również możliwość wykorzystania gotowych modeli
funkcjonowania pewnych typów organizacji (tzw.
designware)
• Gotowym elementem mogą być modele, projekty,
komponenty stworzone w ramach wcześniejszych projektów
• Gotowe elementy można też nabyć od innych dostawców
Montaż z gotowych elementów
Zalety
• Wysoka niezawodność
• Redukcja kosztów
• Efektywne wykorzystanie
specjalistów
Wady
• Konieczność
przygotowania gotowego
elementu do użycia w
nowym systemie
• Możliwość uzależnienia
od dostawcy gotowego
elementu
Który model wybrać?
• Model odkrywczy – prosty problem, system na własny
użytek
• Model kaskadowy lub montaż z gotowych elementów –
wymagania dobrze wyspecyfikowane, doświadczenie w
realizacji podobnych projektów
• Prototypowanie – problem ze specyfikacją wymagań
Rational Unified Process
• Rational Unified Process (RUP) to proces iteracyjnego
wytwarzania oprogramowania opracowany przez firmę
Rational Software Corporation (firma została obecnie
przejęta przez IBM)
• Proces RUP nie jest pojedynczym, ściśle określonym
procesem, ale raczej szablonem procesu
Rational Unified Process
• Został zaprojektowany w celu przystosowania do charakteru
konkretnej organizacji, konkretnego zespołu projektowego
lub nawet charakteru konkretnego projektu
• Z szablonu RUP można wybrać elementy w zależności od
konkretnych potrzeb
Rational Unified Process
• Rational Unified Process (RUP) to także nazwa
oprogramowania, opracowanego przez Rational Software
(obecnie dostępnego w IBM) zawierającego hipertekstową
bazę wiedzy z przykładowymi artefaktami oraz
szczegółowymi opisami wielu typów czynności
• Process RUP definiowany jest także w produkcie Rational
Method Composer (RMC), który pozwala na tworzenie
spersonalizowanych wersji RUP
Iteracyjne wytwarzanie
oprogramowania
• Wytwarzanie oprogramowania w kolejnych iteracjach,
pozwala skupić się w pierwszej kolejności na obszarach
najbardziej ryzykownych (np. najmniej rozpoznanych)
• W idealnym przypadku każda iteracja kończy się
stworzeniem wykonywalnego artefaktu - pomaga to
zredukować ryzyko w projekcie, otrzymujemy szybciej
opinie od odbiorców oprogramowania a programistom
pozwalamy skupić się na węższej dziedzinie
Architektura bazująca na
komponentach
• Pozwala na stworzenie systemu, który jest łatwo
rozszerzalny, intuicyjnie zrozumiały i wspomaga ponowne
użycie (komponent to zbiór powiązanych obiektów)
• RUP skupia się na stworzeniu prostej architektury w
początkowych iteracjach
• Ewoluuje ona w każdej iteracji zbliżając się do architektury
finalnej
• Poprzez iteracyjne wytwarzanie oprogramowania zyskujemy
możliwość stopniowej identyfikacji komponentów, które
mogą być w dalszej części: zakupione, zbudowane, lub
użyte ponownie
Wizualne modelowanie
oprogramowania
• Abstrakcja projektowania od kodu i przedstawienie
koncepcji za pomocą bloków graficznych może być
efektywnym sposobem aby pokazać perspektywę
rozwiązania
• Reprezentacja graficzna jest produktem pośrednim
pomiędzy analizą procesu biznesowego, a implementacją
• Model w tym kontekście jest formą wizualizacji oraz
uproszczeniem bardziej skomplikowanego projektu
• RUP specyfikuje wymagane modele i opisuje dlaczego są
wymagane
Kontrola i weryfikacja
jakości oprogramowania
• Ocena jakości jest najczęstszym słabym punktem projektów
programistycznych ponieważ jest często planowana po
fakcie budowy systemu i czasami obsługiwana przez inny
zespół
• RUP pomaga w planowaniu kontroli jakości i jej ocenie
poprzez wbudowanie jej w cały proces i zaangażowanie w
nią wszystkich członków zespołu
• Proces koncentruje się na spełnieniu wymaganego poziomu
jakości i zapewnia mechanizmy do pomiaru tego poziomu
Zarządzanie zmianami w
oprogramowaniu
• RUP definiuje metody śledzenia, ewidencji i kontroli zmian
• Zdefiniowane są także tzw. secure workspaces (bezpieczne
przestrzenie robocze), które pozwalają na
zagwarantowanie, że zmiany w innych systemach nie
wpłyną na system tworzony
• Koncepcja ta jest ściśle powiązana z tworzeniem
architektury zorientowanej komponentowo
Struktura organizacyjna
• RUP proponuje strukturę zespołów w dwóch obszarach
– biznesowym (business unit)
– projektowym
• Zadaniem zespołu biznesowego jest koordynowanie funkcji i
zasobów wykorzystywanych w wielu projektach z
zastosowaniem wspólnej technologii i zasad
Zalety RUP
• RUP jest procesem iteracyjnym zakładającym budowanie
systemu w kolejnych przebiegach
• Po zakończeniu iteracji produkowany jest fragment systemu
spełniający wymagania klienta, jest on następnie
udostępniany
• W ten sposób zespół analityczno-projektowy otrzymuje
szybko sygnał zwrotny od klienta, który umożliwia bieżącą
ocenę ryzyka niepowodzenia projektu jak również pozwala
stwierdzić czy zespół analityczno-projektowy dobrze
zrozumiał wymagania klienta wobec systemu
Zalety RUP
• W razie wystąpienia problemów zostaną one szybko
wykryte i zespół analityczno-projektowy będzie mógł
wdrożyć odpowiednie postępowanie zaradcze
• Podejście iteracyjne powoduje gwałtowną redukcję ryzyka
niepowodzenia projektu już po zakończeniu pierwszej
iteracji
Wady RUP
•
•
•
•
•
Rup to metodyka ciężka i kosztowna
Wymaga obszernego dokumentowania procesu
Ogranicza inicjatywę i samodzielność
Wysokie koszty administracyjne
Sztywne procedury (np. audytu)
Metodyka PRINCE2
• Projects in a Controlled Environment tzn. Projekty w
sterowanym środowisku
• 1989 - brytyjska agenda rządowa Central Computer and
Telecommunications Agency (CCTA) opublikowało standard
pod nową nazwą – PRINCE
• 1996 - PRINCE2 opublikowany jako ogólna metoda
zarządzania projektami niezależna od dziedziny biznesowej
zastosowania
• 2005 - ostatnie zmiany opublikowane przez Office for
Government Commerce (OGC) – następcę CCTA
Uruchamianie projektu
• Przygotowanie projektu do uruchomienia
• Ma zapewnić, że projekt będzie wart ponoszonych kosztów i
że da się go zrealizować
• Informacją wejściową dla procesu jest Zlecenie
Przygotowania Projektu (Project Mandate)
• W proces zaangażowane jest wyższe kierownictwo
organizacji, które ustanawia i wybiera Komitet Sterujący
(Project Board), który nadzoruje projekt i wybiera
Kierownika Projektu
Zarządzanie strategiczne
projektem
• Realizuje funkcje, za które odpowiedzialny jest Komitet
Sterujący
• Kierownik Projektu informuje Komitet Sterujący w raportach
okresowych o stanie projektu
• Bieżące zarządzanie pozostawione jest w wyłącznej
kompetencji Kierownika Projektu
Zarządzanie wytwarzaniem
produktów
• PRINCE2 to metodyka oparta na produktach; produktem
może być rzecz materialna np. książka
• Może nim być też rzecz bardziej niematerialna np. poziom
usług serwisowych
• W zasadzie wszystko, co zostało wytworzone przez projekt
zgodny z PRINCE2, włączając w to dokumenty jest
produktem
• Produkt może być wytworzony przez kogokolwiek, także
przez zewnętrznego dostawcę.
Zamykanie projektu
• Według metodyki PRINCE2 projekty muszą być zamykane
w sposób uporządkowany i kontrolowany
• Wszystkie doświadczenia zdobyte w trakcie prowadzenia
projektu są rejestrowane, tworzony jest dokument
przekazania i planowany jest przegląd powdrożeniowy
• Po zakończeniu projektu w zaplanowanym momencie
pozwalającym na należytą ocenę skutków biznesowych
projektu przeprowadzany jest przegląd poprojektowy
Jakość w środowisku
projektowym
• Celem projektu jest wytworzenie produktów, zgodnych z ich
przeznaczeniem, zaspokajających potrzeby oraz
oczekiwania jakościowe klienta
• Oczekiwania jakościowe są określone w Zleceniu Projektu
(Project Mandate), Założeniach Projektu (Project Brief) oraz
Dokumencie Inicjującym Projekt (Project Initiation
Document)
Sterowanie zmianami
• W PRINCE2 wszystkie zmiany są traktowane jako
zagadnienia projektowe:
– wnioski o zmianę – dotyczące zmiany w wymaganiach albo
produkcie
– odstępstwo – rejestrowane kiedy produkt nie spełnia wymagań.
– sugestie
– zapytania
– zagadnienia ogólne
Sterowanie zmianami
• Obsługa wszystkich zagadnień projektowych jest w gestii Kierownika
Projektu
• Ich zgłoszenia muszą być udokumentowane w Rejestrze zagadnień
(Issue Log)
• Wnioski o zmianę muszą być zaakceptowane przez Komitet Sterujący
lub Komitet ds. zmian (Change Authority)
• Przed akceptacją zmiany musi być wykonana analiza wpływu zmiany
• Odstępstwa (Off specification) mogą być załatwiane w ramach działań
korygujących przez Kierownika Projektu o ile nie wykraczają one poza
określone dla projektu granice tolerancji
• Komitet Sterujący może zaakceptować odstępstwa bez uruchamiania
działań korygujących definiując je jako ustępstwo
Mocne strony PRINCE2
• Stosowanie tej metodyki zapewnia wysoką standaryzację i
powtarzalność projektów o wspólnym podejściu, terminologii
i dokumentacji co zapewnia możliwość doskonalenia
kompetencji
• Metodyka w sposób racjonalny opiera się na najlepszych
praktykach w zarządzaniu projektami
• Wprowadza management by exception jako podstawową
zasadę, która zapewnia Kierownikowi Projektów swobodę
działania bez zbędnej ingerencji, zapewniając jednocześnie
zaangażowanie wyższego kierownictwa, wtedy kiedy projekt
jest zagrożony wykroczeniem poza granice tolerancji lub
przestaje realizować uzasadnienie biznesowe
Mocne strony PRINCE2
• Sprawuje kontrolę nad startem, realizacją i końcem projektu
• Każdy z dokumentów wymaganych przez PRINCE2 jest
dostarczony jako szablon zawierający wymagane metrykę,
rozdziały i pola informacyjne co zapewnia przejrzystość,
standaryzację i kompletność dokumentacji
• Przewiduje możliwość adaptacji do specjalnych potrzeb
organizacji, programu lub projektu
• Jej stosowanie nie wymaga opłat autorskich
• Materiały PRINCE2 są opublikowane i szeroko dostępne co
ogranicza prace nad wypracowywaniem własnych
standardów i przygotowaniem materiałów szkoleniowych
Słabości PRINCE2
• Dużo organizacji cierpi na syndrom PINO (Prince In Name
Only tzn. PRINCE2 tylko z nazwy), wybierając bez głębszej
analizy tylko niektóre składniki metodyki nie zwracając
uwagi na podstawowe zasady
• PRINCE2 kładzie duży nacisk na dokumentowanie jako
narzędzie sprawnej kontroli sposobu realizacji projektu
• W niektórych organizacjach dokumenty stają się jednak
celem samym w sobie, a rzeczywiste projekty kończą się
niepowodzeniem
Słabości PRINCE2
• Podobnie uwaga jaką zwraca PRINCE2 na potrzebę dobrej
organizacji i regularną wymianę informacji pomiędzy
zainteresowanymi odbierana jest niesłusznie jako zachęta
do ciągłych bezproduktywnych spotkań zabierających czas
niezbędny na rzeczywistą pracę
• PRINCE2 nie definiuje wprost analizy wymagań tak więc
może prowadzić do niepowodzenia projektu z uwagi na
przyjęcie fałszywych założeń (z drugiej strony jasno jest
określone, kto ponosi odpowiedzialność za przyjęcie złych
założeń i akceptację nietrafnego uzasadnienia biznesowego
a przesłanki tych decyzji są udokumentowane i mogą
stanowić nauczkę na przyszłość)
Słabości PRINCE2
• Zbyt ścisłe przestrzeganie PRINCE2 bez odpowiedniej
adaptacji do realiów biznesowych może być zbyt
pracochłonne w zastosowaniu do małych projektów
• Niezbyt "zwinna"
Krytyka podejścia
zorientowanego na procedury
i dokumenty
• Zbyt dużo czasu poświęca się na tzw. „papierkową robotę”
zamiast na tworzenie oprogramowania
• Dokumenty nie zawsze odzwierciedlają stan faktyczny,
powstają tylko dlatego że są wymagane
• Pracownicy koncentrują się na realizacji procesu a nie na
poprawie jakości tworzonego produktu
• Brak możliwości (lub zbyt duże koszty) zmian procedur (np.
po uzyskaniu określonego certyfikatu)
• Dyscyplina zabija inicjatywę i elastyczność
Narodziny programowania
ekstremalnego (XP)
• Jak odchudzić procesy wytwarzania oprogramowania przy
zachowaniu lub nawet polepszeniu jakości tworzonego
systemu?
• Powstanie lekkich (zwinnych, ang. Agile) metodyk rozwoju
oprogramowania
• Programowanie Ekstremalne (ang. Extreme Programming)
jako przykład lekkiej metodyki – Kent Beck – 1996-99
Charakterystyka lekkich
metodyk
• XP i inne lekkie podejścia, wyrosły na pragmatycznym
gruncie sukcesu tzw. "dobrych praktyk" programistycznych
• Praktyki te obejmują m. in.:
– aktywny udział klienta w pracach rozwojowych
– szybkie sprzężenie zwrotne pomiędzy formułowaniem wymagań
biznesowych a ich realizacją
– nieustanną pielęgnację jakości wytwarzanego oprogramowania
poprzez intensywne testowanie
– refaktoryzację* oraz konstrukcję efektywnego zespołu
Manifest zwinności (rok
2001)
• Kent Beck - twórca metody kart CRC stosowanej podczas
analizy obiektowej, autor narzędzi xUnit - wspomagających
testowanie jednostkowe oraz twórca XP
• Alistair Cockburn - autor rodziny zwinnych metodyk
Crystal, oraz książek poświęconych inżynierii wymagań
(głównie przypadkom użycia)
• Martin Fowler - twórca pomysłu refaktoryzacji, autor
świetnej książki „UML Distilled” (UML w kropelce)
• i inni…
Manifest zwinności
• Jednostki i interakcje są ważniejsze niż procesy i narzędzia
• Działające oprogramowanie jest ważniejsze niż obszerna
dokumentacja
• Współpraca z klientem jest ważniejsza niż negocjacja
kontraktu
• Nadążanie ze zmianami jest ważniejsze niż trzymanie się
planu
Wartości XP
•
•
•
•
•
Komunikacja
Prostota
Sprzężenie zwrotne
Odwaga
Szacunek
Komunikacja
• Budowanie systemów informatycznych wymaga
przekazania wymagań od klienta do programistów
• W tradycyjnych metodykach wykorzystuje się w tym celu
dokumenty (specyfikację wymagań)
• XP posługuje się komunikacją werbalną, dzięki czemu
wiedza o systemie bardzo szybko rozprzestrzenia się w
zespole
• Dzięki komunikacji wszyscy członkowie zespołu mają takie
samo wyobrażenie przyszłego systemu i wiedzą w jakim
kierunku projekt dąży
Prostota
• XP zachęca do rozpoczęcia najprostszym możliwym
rozwiązaniem problemu (minimalnym, spełniającym pewne
początkowe wymagania)
• Dopiero kiedy się upewnimy że idziemy w prawidłowym
kierunku, na tej podstawie dobudowujemy resztę
• Dzięki refaktoryzacji jakość produktu jest stale na
najwyższym poziomie
• Dzięki prostocie programiści skupiają się na projektowaniu i
kodowaniu na potrzeby bieżącego dnia, a nie robią nic na
wyrost
Sprzężenie zwrotne
• System – ważna jest odpowiedź systemu, otrzymywana w
procesie testowania jednostkowego
• Klient – przygotowuje testy akceptacyjne wraz z testerem;
dzięki takim testom można sprawdzić w jakim stanie
znajduje się aktualnie budowany system
• Zespół – w momencie kiedy klient proponuje nowe
wymagania zespół podaje szacunki ile czasu zajmie ich
zaimplementowanie; dzięki temu klient może podjąć
decyzje, czy wymaganie będzie realizowane od razu, w
przyszłości lub też w ogóle
Odwaga
• Odwaga jest potrzebna, aby przestrzegać zasady
projektowania i kodowania wg aktualnych potrzeb, bez
zastanawiania się co będzie potrzebne w przyszłości
• Odwaga, aby nie angażować się za bardzo w projektowanie
i od razu przejść do kodowania
• Odwaga jest potrzebna, aby zrefaktoryzować kod, wtedy
kiedy to jest potrzebne, aby nie bać się refaktoryzacji
• Jeżeli okaże się, że pewien fragment kodu jest już
nieprzydatny, lub musi zostać zmieniony, do podjęcia
decyzji o wyrzuceniu takiego kodu potrzeba dużo odwagi
Szacunek
• Nie można wysyłać do repozytorium zmian, które nie dają
się skompilować lub powodują błędy w testach
jednostkowych, gdyż przez to praca innych osób będzie
utrudniona, lub niemożliwa i stracą one dużo czasu
• Dzięki dążeniu do najwyższej jakości i szukanie najlepszych
rozwiązań projektowych (dzięki refaktoryzacji) innym
osobom będzie dużo łatwiej wykorzystać kod napisany
przez nas
Struktura zespołu
• XP nie pokazuje wprost struktury zespołu
• Dwie główne role w zespole pełnią:
– programiści
– klient
• Klient uważany jest za członka zespołu, więc musi przez
cały czas pracować razem z informatykami (w jednym
pomieszczeniu); czasem nie występuje w tej roli osobiście,
lecz za pośrednictwem przedstawiciela klienta
Struktura zespołu
• Role pomocnicze pełnią:
– tester, którego zadaniem jest napisanie skryptów testowych na
podstawie rozmów z klientem
– coach, to osoba, która pomaga rozwiązywać napotkane problemy
– tracker natomiast zbiera statystyki dotyczące wykonanych zadań,
czasu pracy i tworzy podsumowania postępów projektu
Opowieści użytkowników
• Przedstawiciel klienta jest ciągłym źródłem wymagań
• Wymagania są dyskutowane z nim na bieżąco, natomiast
ślad z tych dyskusji jest przechowywany w formie opowieści
użytkowników
• Każda opowieść jest zapisana w kilku zdaniach na małej
kartce papieru
• Może być oznaczona dodatkowymi atrybutami (np. data
utworzenia, typ, numer, rozmiar)
Przykład opowieści
Numer opowieści: 102
OPOWIEŚĆ: System przechowuje artykuły w formacie PDF. Umożliwia
ich dodawanie, listowanie, a także pobieranie.
Rozmiar: 3 dni
•
•
•
•
Opowieści są krótkie
Opisują funkcję systemu
Mają wartość dla klienta
Są testowalne
Hydrodynamiczny model
projektu
Hydrodynamiczny model
projektu
Cykl życia
Cykl życia w XP
Wydania i przyrosty
• Każde wydanie ma wartość użytkową i trafia do
użytkowników końcowych, dzięki czemu programiści dostają
sprzężenie zwrotne
• Należy stosować częste i krótkie wydania
• Przyrosty mają charakter wewnętrzny
• Pośrednie przyrosty niekoniecznie stanowią produkt, z
którego klient byłby w stanie skorzystać
• Każdy przyrost powinien trwać 2-3 tygodnie, oraz zawierać
kilka opowieści użytkownika
Planowanie
• Na początku podczas rozmów dotyczących wymagań
systemu klient spisuje opowieści użytkownika
• Informatycy szacują rozmiar opowieści, podając liczbę
osobo-dni potrzebnych do jej zrealizowania
• Jeżeli opowieść jest za duża (np. wykracza poza jeden
przyrost), wówczas dzieli się ją na mniejsze
• Jeżeli opowieść jest też zbyt mała wtedy łączy się ją z inną
opowieścią
Planowanie
• W momencie kiedy spisane są wstępne opowieści i
oszacowane przez informatyków, klient wybiera zakres
kolejnych przyrostów
• Klient zna koszt każdej opowieści i może zadecydować czy
będzie ona realizowana czy też nie, oraz kiedy będzie
realizowana, czyli do którego dwutygodniowego przyrostu
należy ją przypisać
Zarządzanie zmianami
• Klient w dowolnym momencie może zmienić zdanie i
zaproponować zmianę wymagań
• Klient płaci na bieżąco za wykonaną pracę i wie, że zmiana
elementów już zaimplementowanych będzie go kosztowała
dodatkowo
• Działa to również w drugą stronę - jeżeli programiści
dostrzegą pewien problem i zaproponują rozwiązanie, które
zmienia wymagania - klient ma do nich zaufanie i również
zgadza się na przedstawione rozwiązanie
Zapewnienie jakości
• XP stawia na prostotę rozwiązań (optymalizować kod należy
tylko wtedy, gdy jest to konieczne)
• Przed rozpoczęciem kodowania należy przygotować
przypadki testowe (ang. test-first-coding)
• Tak przygotowane testy są następnie jak najczęściej
wykonywane automatycznie - dzięki czemu na bieżąco
wychwytywane są błędy
• Do poprawy czytelności kodu stosuje się refaktoryzację
Zapewnienie jakości
• Zanim udostępni się zmiany dla innych programistów,
należy dokładnie przetestować go za pomocą testów
jednostkowych
• Klient przygotowuje testy akceptacyjne w których dokładnie
określa, jak system musi się zachować w określonych
warunkach, aby zaspokoić jego potrzeby
• Na podstawie stopnia wykonania testów akceptacyjnych
można ocenić postęp prac
Programowanie parami
• W tym podejściu, przy jednym komputerze siedzą 2 osoby
jednocześnie: autor i recenzent
• Autor pisze kod, natomiast recenzent na bieżąco go
przegląda i wychwytuje defekty
• Autor jest bardzo skupiony na tworzeniu kodu, a recenzent
ma więcej czasu na myślenie; może się okazać zatem, że
znajdzie lepszy sposób na rozwiązanie problemu, lub np.
dostrzeże problemy związane z testowaniem obecnego
kodu, lub po prostu wychwyci błąd w programie
Programowanie parami
• XP zaleca, żeby każdy fragment kodu powstał poprzez
programowanie parami
• Potrzebny jest wspólny standard kodowania dla całego
zespołu
• XP zakłada, że będą następować częste zmiany w parach,
tak aby każda osoba pracowała nad każdym fragmentem
systemu co ma dodatkową zaletę w postaci przepływania
wiedzy pomiędzy poszczególnymi programistami
• Dodatkowo w momencie kiedy jeden programista odejdzie
z zespołu, dla każdego fragmentu kodu znajdziemy inną
osobę, która będzie znała ten fragment
Programowanie parami
• W XP nie ma osoby odpowiedzialnej za każdą część kodu kod jest własnością całego zespołu
• Nie da się wydajnie pracować parami, jeżeli nie ma w firmie
systemu zarządzania wersjami, np. CVS
• Wymagana jest również otwarta przestrzeń pracy dla
zespołu - aby poszczególne osoby mogły się łatwo
komunikować
Czynniki ryzyka
• Założenie, że klient przez cały czas pracuje z zespołem
może się okazać nierealne - rzadko który klient może sobie
pozwolić na oddelegowanie jednego pracownika na kilka
miesięcy (gdyż tyle może trwać projekt)
• Brak dokumentacji z jednej strony powoduje przyspieszenie
projektu, lecz czasem może się okazać, że po pewnym
czasie trzeba wrócić do prac nad systemem (np. dodać
nową funkcjonalność); wtedy, bez odpowiedniej
dokumentacji, trudno przypomnieć sobie za co
poszczególne fragmenty kodu były odpowiedzialne
Czynniki ryzyka
• Niektórzy zarzucają również brak fazy projektowania twierdzą, że rozwiązania powstają za bardzo ad hoc
• Krótka perspektywa planowania (planuje się tylko kolejne
wydanie) nie pozwala przewidzieć, kiedy system będzie
ukończony
Literatura
• K. Beck: Extreme Programming Explained, AddisonWesley, 1999
• Andrzej Jaszkiewicz: Inżynieria oprogramowania, Helion,
1997
• Wykłady z inżynierii oprogramowania:
http://wazniak.mimuw.edu.pl/images/3/31/Io-12-wyk-bw.pdf