Zwinnie pracujemy – Agile, Scrum i wszystkie takie dziwne słowa

Opublikowane przez Piotr Wachulec w dniu

Oi! (port.)

Witam Cię w tę właściwie już poniedziałkową noc. Zeszły tydzień upłynął pod znakiem targów pracy i innych rewolucji życiowych, dlatego też pojawił się tylko wpis o Inżynierskich Targach Pracy. Ale nadrabiamy zaległości i w tym tygodniu może się uda wypuścić 3 posty, żeby nadrobić zaległości w DSP, a tematów jest cała masa! 🙂 Zaczynamy!

Żeby móc z Wami rozmawiać (tutaj te słowa kieruję do osób, które gdzieś tam zaczynają swoją przygodę z programowaniem, bo ludzie “z branży” na pewno to znają, ale może powstanie jakaś ciekawa dyskusja, do czego zachęcam!) musimy porozmawiać o tzw. zwinnym programowaniu.

Słowo wstępne

Na początku projektu zdefiniowaliśmy sobie pojęcie inżynierii oprogramowania oraz modeli, w jaki sposób można rozwijać oprogramowanie. Założyłem, że na czas trwania konkursu, przyjmę model wodospadowy (ang. waterfall) z możliwością przejścia w model spiralny realizowany przyrostowo. Dlatego też zaczynam od zdefiniowania wymagań i funkcjonalności, które system ma zapewniać oraz zebranie tego w odpowiednich dokumentach. Dla wielu pasjonatów bariera tworzenia dokumentacji jest nie do przejścia (kto by to pisał, sic!), jednak ja uważam, że warto jest to tworzyć, bo życie potem staje się prostsze. Ale tworzyć w sposób mądry.

Oczywiście to o czym będziemy mówili, nie tyczy się tylko tworzenia dokumentacji ale życia całego projektu.

Programowanie zwinne

Z czym kojarzy się słowo zwinny? Słowo zwinny według słownika języka polskiego oznacza skoczny, zwrotny, zręczny, poruszający się sprawnie. A jak odnosi się to do tworzenia oprogramowania? Zwinność ta odnosi się do obserwacji zachowań klienta. Wymagania klienta, funkcjonalności, jakie system ma dostarczać, często ewoluują zmieniają się w czasie trwania samego projektu. Dlatego należy często dokonywać przeglądu wymagań klienta i dynamicznie modyfikować dostarczane oprogramowanie. Programowanie zwinne, z ang. agile software development to zbiór metodyk umożliwiających realizację częstych przeglądów. Metodyki te opierają się na modelu spiralnym i realizacji przyrostowej.

Agile

W 2001 roku zdefiniowano tzw. manifest agile, który zbiera najważniejsze zasady będące sednem idei programowania zwinnego. Są one następujące:

  1. Ludzie i interakcje ponad procesy i narzędzia
  2. Działające oprogramowanie ponad obszerną dokumentację
  3. Współpracę z klientem ponad formalne ustalenia
  4. Reagowanie na zmiany ponad podążanie za planem

Jak można wywnioskować, zwinność polega na złagodzeniu sztywnych więz narzuconych przez określone modele. Lepiej rozmawiać ze sobą, niż wypełniać formularze, lepiej być elastycznym w stosunku do zmieniających wymagań, niż sztywno trzymać się zapisów. Jednak należy zauważyć, że słowo ponad nie znaczy zamiast. Dobry przykład? Działające oprogramowanie ponad obszerną dokumentację – niestety zdarzają się zespoły, które interpretują to jako nie tworzenie dokumentacji w ogóle, co jest oczywistym błędem! Jest to główne nieporozumienie związane z zastosowaniem agile w pracy zespołu. Ten punkt znaczy tyle, że dokumentacja nie ma być książką o 5000 stron, tylko ma zawierać punkty odniesienia, filary projektu, nie dające się wyczytać bezpośrednio z kodu. Zapewnia to jej elastyczność, łatwo się utrzymuje i będzie ona aktualna.

Podstawą do pracowania w ten sposób, jest praca w niewielkich, łatwozarządzalnych grupach ludzi.

Scrum

Scrum jest jedną z metodyk zgodnych z manifestem Agile. Polega na podzieleniu docelowego produktu na mniejsze partie, tak by można było je wykonać w krótkich okresach czasu, tzw. sprintach. Każdy sprint kończy się wydaniem działającej wersji oprogramowania, która może być oddana do użytku, zatem zmiany wprowadzone w każdym sprincie muszą być “klikalne”.

Sprint jest przygotowywany: planowana jest lista wymagań użytkownika, która ma zostać w danym etapie wprowadzona, szacowany jest czas (należy w tym uwzględnić “pożary” na produkcji), planowany jest przebieg sprintu. Ważna jest ciągła współpraca z klientem, co pozwala na rozwój oprogramowania zgodnie z oczekiwaniem. Dobrą praktyką podczas pracy w Scrumie są retrospekcje na koniec sprintu. Dzięki temu programista jest w stanie przemyśleć, co było fajne, co było złe, nad czym trzeba popracować. Ponadto podział projektu na podprojekty realizowane jako sprinty dobrze wpływa na myślenie człowieka – wolimy wykonywać drobniejsze zadania i szybciej się z nich “czyścić”. Ponadto po każdym sprincie zebrany feedback od klienta umożliwia dopracowywanie aplikacji w każdym calu. I w tym momencie możemy zacząć mówić o zarządzaniu zmianą.

Dla klienta ważny jest widoczny rozwój aplikacji, której na początku został wykreślony tylko ogólny kształt. Może on zacząć korzystać z jakiejś części funkcjonalności.

Narzędzia

Ciekawym i bardzo przydatnym narzędziem w pracy z metodyką Scrum są tak zwane daily stand-up meettings. Są to spotkania krótkie, “na stojaka”, trwające 15 – 20 minut, w których każdy członek zespołu opowiada, co udało mu się zrobić dnia poprzedniego, jakie problemy napotkał. Przy czym staramy się opowiadać o funkcjonalnościach, jakie zrealizowaliśmy a nie, że napisałem 3 klasy i 4 interfejsy, bo to nie ma żadnej wartości dla pozostałych członków zespołu i nie pokazuje wymiaru pracy, jaki został ukończony.

Jeżeli chodzi o jakieś narzędzia typowo przeznaczone do wspomagania pracy programistów oraz kierowników zespołów, są to narzędzia klasy ALM (Application Lifecycle Management). Ułatwiają zarządzanie całym cyklem życia oprogramowania: projektowaniem, implementowaniem i utrzymaniem. Przykładami takich narzędzi są Team Foundation Server od Microsoftu albo Jira.

Podsumowanie

Dwa często wymawiane pojęcia, niebywale ważne w dzisiejszym świecie developmentu. Wprowadzenie metodyk zwinnych zmieniło diametralnie podejście do tworzenia oprogramowania. Dzisiaj znakomita większość zespołów pracuje wykorzystując metodyki tego rodzaju, sam pracowałem w zespole Scrumowym (pozdrawiam zespół oprogramowania w dziale badawczo-rozwojowym w Trumpf Huettinger w Zielonce!), co było mega fajnym i uczącym doświadczeniem.

I to chyba tyle wstępu do kolejnego, mega ciekawego w mojej ocenie wpisu, który już się przygotowuje w mojej głowie i mam nadzieję pojawi się bardzo szybko! 🙂 Miłego czytania i zapraszam do komentowania! Dobranoc 🙂