Politechnika warszawska 2008 SWOBODNE METODYKI PROJEKTOWANIA SI „agile software development methods” - charakterystyka, przegląd, zasadność użycia Maciej Socha Prowadzący: dr G. Protaziuk PLAN PREZENTACJI Wprowadzenie Specyfika swobodnych metodologii Cykl życia systemu zgodny z IOP Metody tworzenia SI zgodne z IOP Ryzyko tradycyjnych metod Manifest swobodnych metodyk Przegląd metodologii FDD SCRUM XP Cykl życia zgodny z IOP 1. Inicjalizacja systemu i wstępne planowanie: Znalezienie potencjalnego obszaru zastosowania systemu informatycznego, który wspomoże lub zastąpi dotychczasowe metody przetwarzania informacji. 2. Analiza wymagań i specyfikacja wymagań: Identyfikacja problemów, które nowy system informacyjny ma rozwiązać. Zarysowanie właściwości operacyjnych systemu, wydajności i zasobów sprzętowych niezbędnych do użytkowania i konserwowania systemu. 3. Specyfikacja funkcjonalna i prototypowanie: Identyfikacja i formalizacja obiektów obliczeń, ich atrybutów i zależności. Specyfikacja transformacji, którym obiekty będą podlegać. 4. Dekompozycja problemu: Podział systemu na logiczne podsystemy na podstawie wymagań i specyfikacji. Analiza logicznych podsystemów pod kątem użycia już istniejących komponentów informatycznych. Selekcja rozwiązań: wykonać samodzielnie, kupić, wykorzystać już istniejące. Cykl życia zgodny z IOP cd. 5. Projekt architekturalny i specyfikacja konfiguracji: Określenie zależności pomiędzy podsystemami, komponentami i modułami w sposób uwzględniający szczegóły ich budowy i wymagania wobec nich. 6. Szczegółowe projektowanie i specyfikacja komponentów: Opracowanie i kodyfikowanie metod przetwarzania informacji w komponentach 7. Implementacja komponentów i usuwanie błędów: Wytwarzanie kodu źródłowego komponentów na podstawie uprzednich specyfikacji. Testowanie podstawowych funkcji komponentów. 8. Asemblacja systemu i testowanie: Weryfikacja komponentów pod kątem kompletności i zgodności ze specyfikacją. Asemblacja produktu z komponentów, weryfikacja wydajności podsystemów systemu jako całości. Cykl życia zgodny z IOP cd. 9. Przegląd dokumentacji i dostarczenie systemu: Opracowywanie i systematyzowanie dokumentacji powstałej w trakcie prowadzenia projektu pod kątem raportów dla odbiorcy. 10. Opracowanie procedur instalacyjnych i instalacja: Opracowanie dokumentacji instalacyjnej opisującej sposób instalacji systemu. 11. Szkolenie dla użytkowników: Zapoznanie użytkowników z systemem. Zapoznanie ich z możliwościami i ograniczeniami systemu. 12. Użytkowanie i konserwacja oprogramowania: Użytkowanie, usuwanie błędów dostrzeżonych w trakcie użytkowania, rozbudowywanie systemu o nowe właściwości, poprawa wydajności systemu. Metody tworzenia SI zgodne z IOP Model Model Model Model Model Model kaskadowy przyrostowy spiralny komponentowy formalnego konstruowania prototypowania Ryzyko stosowania metod IOP Luka formalna w dziedzinie poznania Od ogółu do szczegółu Zagadnienia zaliczające się do luki poznawczej, nie są w trakcie analizy dostrzegane i nie zostaną wyczerpująco opracowane, można więc określać je mianem ryzykownych punktów projektu. Na tym poziomie pojawiające się problemy umykają z powodu natłoku szczegółów w projekcie Od szczegółu do ogółu Problemy stają się zbyt ogólne dla zespołów zajmujących się zagadnieniami podstawowymi Idee metodyk: Tradycyjne metody prowadzenia projektu mają w zamyśle sprzedać produkt – gotowe oprogramowanie Realizacja produktu dla klienta Sukces – dobrze wynegocjowany kontrakt Bardzo sformalizowany cykl życia produktu Nowe techniki zarządzania projektem ukierunkowane są na usługę. Realizacja produktu dla i przy pomocy klienta Człowiek – użytkownik, jako czynnik sukcesu. Elastyczne traktowanie planu realizacji. Specyfika swobodnych metodyk Techniki zakładają ścisłą współpracę z użytkownikiem czy odbiorcą. Właściwie postuluje się włączenie użytkownika w proces projektowania oprogramowania. Sprzedawana jest usługa tworzenia oprogramowania a nie gotowy produkt -oprogramowanie, tak więc użytkownik jest tym, kto podejmuje decyzje co i w jakiej kolejności będzie w projekcie wykonywane. Istotną wagę przywiązuje się do poprawnego szacowania kosztów prac, tak by inwestor/użytkownik mógł świadomie planować swe wydatki na rozwój oprogramowania. Specyfika swobodnych metodyk cd. Zobowiązuje się wytwórcę oprogramowania do tego, że każdym swym działaniem powinien udowadniać inwestorowi efektywne wykorzystanie czasu i powierzonych mu środków. Sprzedając usługę programowania rezygnuje się z zysków z ponownego użycia kodu i modeli analitycznych, bo prace odniesione są do niepowtarzalnego projektu. Przy takim założeniu rozległa dokumentacja projektowa staje się zbędnym kosztem obciążającym użytkownika i unika się jej. Uproszczenia dokumentacyjne wymuszają specyficzny sposób porozumiewania się z użytkownikiem. W trakcie tworzenia oprogramowania często (na bieżąco) zadaje się mu pytania i prośby o potwierdzenie dotyczące niewielkiego zakresu funkcjonalności. Stąd wynikają inkrementalny sposób dostarczania oprogramowania oraz krótkie iteracje implementacyjne. Specyfika swobodnych metodyk cd. Nie specyfikuje się formalnych punktów kontrolnych w projekcie - nie są one potrzebne, gdyż zakończenie każdej iteracji jest punktem kontrolnym samym w sobie. Z drugiej strony wprowadzenie sformalizowanych punktów kontrolnych nie we wszystkich technikach jest możliwe. Sekwencyjna realizacja wymagań użytkownika powoduje częste zmiany w architekturze systemu i konieczność przebudowy kodu. W nowych metodykach zadanie przebudowy kodu postrzega się nie jako wyjątek, lecz jako regułę. Manifest swobodnych metodyk ludzie, ich kontakty, zdolność do rozwiązywania problemów są ważniejsze niż sztywne procedury i narzędzia zarządzania, wynikiem projektu jest pracujące oprogramowanie a nie dokumentacja, z użytkownikiem się współpracuje a nie negocjuje kontrakt, ważniejsza jest umiejętność reagowania na zmieniające się warunki otoczenia niż podążanie za opracowanym na wstępie planem. METODOLOGIE ZWINNE FDD FUTURE DRIVEN DEVELOPMENT FDD - charakterystyka metodyka tworzenia oprogramowania, wspomagająca zarządzanie fazami analiz, projektowania i konstrukcji oprogramowania jest projektowaniem zorientowanym na właściwości prace rozpoczynają się od określenia „ogólnego modelu systemu”. określana jest domena projektu i iteracyjnie dzielona na coraz to mniejsze znaczeniowo obszary. każdy niepodzielny obszar znaczeniowy jest opracowywany przez przypisaną do niego grupę projektantów, w wyniku czego powstaje model szczegółowy, będący składnikiem całościowego modelu systemu. zespół projektantów korzysta z opracowanych wcześniej wymagań systemowych i przypadków użycia. FDD – dobre praktyki IOP oparcie procesu o wymagania klienta architektura systemu krótkie iteracje indywidualna odpowiedzialność za kod inspekcje FDD – pojęcie cechy Zasadniczym elementem procesu FDD jest cecha (feature) produktu. Cechą jest mały fragment funkcjonalności produktu. Cecha w SI dostarcza klientowi interesujące go wyniki. Opisuje wymagania funkcjonalne wg schematu: <action>the<result><by|of|to|from|for>a(n)<object> Grupuje się w zbiory cech wg schematu: <action>-ing<buisness deliverable><by|of|to|from|for>a(n)<object> FDD – role w zespole Menadżer projektu Eksperci dziedzinowi Główny architekt Menadżer programistów Główni programiści Właściciele klas FDD – realizacja metody założeniem jest inkrementacyjne opracowywanie poszczególnych funkcjonalności systemu projekt w myśl FDD składa się z pięciu sekwencyjnie następujących etapów. Opracowanie ogólnego modelu Określenie listy funkcjonalności Planowanie na podstawie funkcjonalności Projektowanie na podstawie funkcjonalności Wykonywanie w oparciu o funkcjonalności FDD – faza I stworzenia zespołu projektowego pod kierownictwem Głównego Architekta, przeprowadzenia przeglądu dziedziny problemu, studiowanie dokumentów z wymaganiami i z dziedziny problemu, przygotowanie alternatywnych modeli w oddzielnych małych grupach projektowych, wypracowanie wspólnego modelu, Zatwierdzenie ogólnego modelu, Zdokumentowanie istotnych założeń dotyczących projektu i alternatywnych rozwiązań. Opracowanie ogólnego modelu Określenie listy funkcjonalności Planowanie na podstawie funkcjonalności Projektowanie na podstawie funkcjonalności Wykonywanie w oparciu o funkcjonalności FDD – faza II na podstawie specyfikacji wymagań systemowych oraz opracowanego modelu/modeli opracowywanie są list funkcjonalności Listy mają charakter hierarchiczny i zawierają funkcjonalności główne Rozdrabnianie funkcjonalności na coraz niższe poziomy Przeglądanie list przez użytkowników i inwestorów w celu kontroli poprawności i kompletności Opracowanie ogólnego modelu Określenie listy funkcjonalności Planowanie na podstawie funkcjonalności Projektowanie na podstawie funkcjonalności Wykonywanie w oparciu o funkcjonalności FDD – faza III sformowania zespołu planującego określenia kolejności implementacji przypisania zbioru cech głównym programistom przypisania klas do programistów Opracowanie ogólnego modelu Określenie listy funkcjonalności Planowanie na podstawie funkcjonalności Projektowanie na podstawie funkcjonalności Wykonywanie w oparciu o funkcjonalności FDD – faza IV sformowania zespołu programistów pod kierunkiem Głównego Programisty. opcjonalnego przeglądu dziedziny problemu i studiowania dokumentów referencyjnych stworzenia diagramów sekwencji uszczegółowienia modelu obiektowego zapisania nagłówków klas i metod inspekcji projektu Opracowanie ogólnego modelu Określenie listy funkcjonalności Planowanie na podstawie funkcjonalności Projektowanie na podstawie funkcjonalności Wykonywanie w oparciu o funkcjonalności FDD - faza V implementacja kodu klas przeprowadzenia inspekcji kodu testowania jednostkowego integracji nowego kodu z produktem Opracowanie ogólnego modelu Określenie listy funkcjonalności Planowanie na podstawie funkcjonalności Projektowanie na podstawie funkcjonalności Wykonywanie w oparciu o funkcjonalności METODOLOGIE ZWINNE SCRUM Taktyka Młyna SCRUM - charakterystyka Istotą metody Scrum jest adaptacyjny, samoorganizujący się proces wytwarzania oprogramowania. Zakłada ewolucyjny styl tworzenia oprogramowania. Koncentrując się na zadaniach zarządzania pozostawia wolny wybór w wyborze technik prowadzenia prac programistycznych. Ewolucyjny styl to generalnie iteracja, a pojedynczy cykl to w istocie podprojekt kaskadowy składający się z opracowania wymagań, analizy, projektowania, kodowania i wdrożenia trwający nie dłużej niż 30 dni. ROLE „Pig” i „Chicken” Produkt Owner Scrum Master The Team Users Klient Managers Scrum Master Nie Nie Nie Nie jest liderem, planuje, kontroluje, przydziela Usuwa przeszkody stwarzające problemy w pracy zespołu Zapewnia zgodność pracy nad projektem z celami biznesowymi klienta Zapewnia zdążanie do celu Reprezentuje zespół Product Owner Gwarant prac we właściwym kierunku Zajmuje się: Tworzeniem wymagań użytownika (User stories) Nadawaniem priorytetów dla wymagań Budowaniem rejestru wymagań (Product Backlog) SCRUM – realizacja metody rozpoczęcie gry (pregame), faza produkcji (development phase), gra na zakończenie (postgame). SCRUM - zarządzanie Rozpoczęcie prac związane jest ze Spotkaniem Planowania Cyklu (Sprint planning meeting), Zakończenie prac z nieformalnym Spotkaniem Przeglądowym (Scrum Review meeting). Są również Codzienne Spotkania Zespołu projektantów i programistów (Daily Scrum meeting). SCRUM - kontrola Scrum przewiduje częste działania zarządcze skupiające się na identyfikowaniu problemów i przeszkód w pracach inżynieryjnych Bieżąca samokontrola całego zespołu, codzienne spotkania, (Daily scrum meeting) 15 minut, 1. 2. 3. Co robiłem wczoraj? Co będę robił dzisiaj? Co mi przeszkadza w pracy? W trakcie spotkania omawiane są problemy oraz planowane są posunięcia z nich wynikające. SCRUM – planowanie cyklu Spotkanie poprzedzające rozpoczęcie cyklu – organizacja działań. Zdejmowanie cech z rejestru zadań. Stworzenie rejestru zadań przebiegu. Obejmuje wszystkich członków zespołu (prosiaki i kurczaki). Chicken określają cel przebiegu. Pig uściślają rejestr zgodnie z określonym celem. SCRUM - dokumentacja Rejestr zadań (Product backlog) Historyjki klienta (User stories) Must be Should be Nice to have Rejestr zadań przebiegu (Sprint product backlog) Wykres spalania (Burn down) – wykres pracochłonności SCRUM – tworzenie rejestru przebiegu rozbicie życzeń klienta, na elementarne czynności techniczne, konieczne do realizacji analizowanego celu oszacowanie każdej czynności technicznej na koszt robotogodziny potrzebnej do zrealizowania funkcjonalności przyporządkowanie odpowiednich czynności do realizacji osobom najbardziej kompetentnym do jej wykonania, co ustala sam zespół, nie kierownik, zsumowanie wszystkich roboto-godzin z wszystkich wybranych czynności i sprawdzeniu czy łączna ich liczba przekracza, czy nie zapełnia godzin jednego pełnego cyklu, dopełnienie lub ujecie wybranych czynności, aby możliwie jak najdokładniej zmieścić się czasowo w przebiegu jednego cyklu, czyli 30 dni. SCRUM - pregame obejmuje czynności planowania i opracowania zarysu architektury systemu. W trakcie tej fazy wszystkie znane wymagania są spisywane i opracowywana jest lista wymagań (Product backlog). Źródłem wymagań są przede wszystkim użytkownicy, ale również dział marketingu i sprzedaży, dział obsługi klienta oraz sam zespół projektantów-programistów. Wymaganiom zestawionym na liście przypisywane są priorytety. Na podstawie listy opracowywana jest architektura systemu. Finalnie, w ramach oddzielnego spotkania, tworzony jest podzbiór listy wymagań. Ustalany jest cel przebiegu. SCRUM – faza produkcji (Product backlog). Lista ta jest otwarta, a zadania do realizacji dopisywane są do niej w trakcie całego procesu tworzenia oprogramowania. (sprint backlog list). Zawarte tam wymagania są realizowane w ramach aktualnej iteracji Rozpatrywane są zmiany w architekturze systemu wynikłe z wprowadzenia nowych wymagań. Kontrola procesu wytwórczego estymacją wykresu pracochłonności SCRUM - pracochłonność Proces estymacji pracochłonności polega na gromadzeniu informacji statystycznych o przebiegu projektu i wyznaczaniu kosztu prac na ich podstawie. Każdego dnia aktualizowana jest pozostała do realizacji liczba robotogodzin Aproksymacja pokazuje przybliżony termin zakończenia przebiegu w odniesieniu do osiągniętego tempa prac Na jego podstawie aktualizuje się rejestr przebiegu. SCRUM - przebieg SCRUM – postgame rozpoczyna się wraz z ustaleniem pomiędzy użytkownikiem a projektantami, że wymagania są zrealizowane (lista wymagań jest pusta). System jest przygotowany do instalacji. W tej fazie wykonywana jest ostateczna integracja modułów i testowanie, a także przygotowuje się dokumentację. Spotkanie podsumowujące (Scrum Review Meeting) Omawiane są na nim postępy prac oraz formułowane są wnioski, nowe wpisy do listy wymagań lub postulowane są generalne zmiany w architekturze systemu. METODOLOGIE ZWINNE XP Extreme Programming XP - charakterystyka Ewolucyjne podejście do projektowania i programowania Praktyka bardzo krótkich cyklów wytwarzania oprogramowania zmuszająca do szybkich odpowiedzi klienta Ciągłe zainteresowanie pracami klienta Ekstremalnie ścisła współpraca z klientem nie ma uniwersalnej metody prowadzenia projektu informatycznego. praktyki XP powinny być przystosowywane do aktualnych potrzeb i specyfiki projektu. XP – cykl życia projektu eksploracji, planowania, iteracji wykonawczych, przygotowania do produkcji, utrzymania w ruchu, zakończenia projektu. Iter acje produkcyjne Ciągły przegląd Programowanie w parac h TestoAnaliza Pro jek- Plany towanie testo wania wan ie Ocena pra cochłonności Priorytety “Opowieści” uży tkownika Informacja zwrotna Testy Faza zakończe nia “Opowieści” użytkownika do realizacji w bieżącej iteracji Regularne uaktualnienia Faza planowania Faza konserwacji Faza eksplorac ji Faza przygotowania do wdrożenia XP – schemat cyklu życia Cią gła integ racja modułów Baza kodów systemu Uakt ualnienie system u Uaktualnienia produkcyjne Finalna wersja systemu XP – faza eksploracji zespół projektowy zapoznaje się z tematem prac i pozyskuje podstawowe informacje od użytkownika. Użytkownik przedstawia sposób użytkowania systemu poprzez opowiadania („story”), na podstawie historyjek budowany jest zarys architektury systemu budowana jest lista funkcjonalności. W tym czasie projektanci testują wybraną technologię tworząc niezbędne prototypy oraz zapoznają się z używanymi narzędziami XP – faza planowania Opowiadania przedstawione przez użytkownika są analizowane i nadawane są im priorytety. W porozumieniu z użytkownikiem zestawiana jest lista funkcjonalności, które mają być opracowane. Programiści oceniają czas realizacji zadań i ustalany jest harmonogram prac i termin zakończenia prac. XP – faza iteracji wykonawczych Składa się z jedno lub kilkutygodniowych mini cykli implementujących kolejne właściwości systemu. Wykonywane są działania analityczne, projektowe, kodowanie i testowanie. Na końcu każdego mini cyklu wykonywane są testy oprogramowania zaplanowane przez użytkownika. XP – faza przygotowania do produkcji W tej fazie system zawierający uzgodnioną porcję funkcjonalności jest przygotowywany do wdrożenia. Pojawiające się uwagi użytkownika są implementowane lub przeznaczane do implementacji w następnej wersji oprogramowania. Wykonywane są dodatkowe gruntowne testy. XP – faza konserwacji Użytkownik jest wyposażony w działającą wersję oprogramowania, która wymaga opieki i nadzoru. Zespół projektowy w tym samym czasie wykonuje kolejną wersję oprogramowania. W trakcie pracy z oprogramowaniem odbiorca formułuje kolejne postulaty dla zespołu projektowego. Wysiłek poświęcany na utrzymanie w ruchu wersji produkcyjnej wpływa na zmniejszenie prędkości opracowywania nowej wersji oprogramowania. XP – zakończenie projektu Gdy użytkownik nie jest już zainteresowany dodawaniem funkcjonalności do oprogramowania, tempo współpracy z użytkownikiem spada, formułowane wnioski o rozszerzenie funkcjonalności mają charakter drugorzędny i często nie są wdrażane z powodów ekonomicznych. W tej fazie zespół projektowy podejmuje decyzję o zakończeniu projektu, blokuje zmiany w architekturze systemu i kodzie źródłowym, opracowuje dokumentację systemu i projektu, ostateczne wersje instrukcji użytkownika oraz instrukcje konserwacji. XP - praktyki Programowanie parami Ciagłe testowanie Ciągłe planowanie Ciągłe integrowanie Refactoring kodu Utrzymywanie standardu kodowania Zbiorowa własność kodu Prostota rozwiązań XP – etapy powstania wersji Dziękuję za uwagę.