Programowanie ekstremalne a SCRUM | XP kontra SCRUM
Na przestrzeni lat w branży oprogramowania stosowano wiele różnych metodologii tworzenia oprogramowania, takich jak metoda tworzenia wodospadów, V-Model, RUP i kilka innych metod liniowych, iteracyjnych i połączonych liniowo-iteracyjnych. Model zwinny (lub, bardziej poprawnie, grupa metodologii) to nowszy model rozwoju oprogramowania wprowadzony przez manifest Agile w celu usunięcia niedociągnięć znalezionych w tych tradycyjnych metodologiach tworzenia oprogramowania.
Metody zwinne opierają się na iteracyjnym rozwoju i wykorzystują informacje zwrotne od użytkowników jako główny mechanizm kontroli. Agile można nazwać podejściem zorientowanym na ludzi niż tradycyjne metody. Model zwinny dostarcza działającą wersję produktu bardzo wcześnie, dzieląc system na bardzo małe i łatwe w zarządzaniu części, tak aby klient mógł wcześnie zrealizować niektóre korzyści. Czas cyklu testowego Agile jest stosunkowo krótki w porównaniu z tradycyjnymi metodami, ponieważ testowanie odbywa się równolegle z rozwojem. Ze względu na wszystkie te zalety metody Agile są obecnie preferowane nad tradycyjnymi metodologiami. Programowanie Scrum i Extreme to dwie najpopularniejsze odmiany metod Agile.
Co to jest SCRUM?
Jak wspomniano powyżej, SCRUM to przyrostowy i iteracyjny proces zarządzania projektami, który należy do rodziny metod Agile. SCRUM opiera się na nadaniu wysokiego priorytetu uczestnictwu klienta na wczesnym etapie cyklu rozwoju. Zaleca się włączenie testów przez klienta wcześnie i tak często, jak to możliwe. Testowanie odbywa się w każdym momencie, gdy dostępna jest stabilna wersja. Fundament SCRUM opiera się na rozpoczęciu testowania od początku projektu i kontynuowaniu go do końca.
Kluczową wartością SCRUM jest „jakość to odpowiedzialność zespołu”, co podkreśla, że za jakość oprogramowania odpowiada cały zespół (nie tylko zespół testujący). Innym ważnym aspektem SCRUM jest rozbicie oprogramowania na mniejsze, łatwe w zarządzaniu części i bardzo szybkie dostarczenie ich do klienta. Dostarczenie działającego produktu ma ogromne znaczenie. Następnie zespół kontynuuje ulepszanie oprogramowania i ciągłe dostarczanie na każdym głównym etapie. Osiąga się to poprzez bardzo krótkie cykle wydawnicze (nazywane sprintami) i otrzymywanie informacji zwrotnych dotyczących poprawy na końcu każdego cyklu.
SCRUM definiuje kilka kluczowych ról dla sprawnego działania zespołu programistów. Są to Product Owner (który reprezentuje klienta i utrzymuje backlog produktu), Scrum master (który pełni rolę organizatora i koordynatora zespołu prowadząc spotkania scrumowe, utrzymując sprint backlog i wykresy wypalania) oraz inni członkowie zespołu. Zespół może składać się z tradycyjnych ról, ale najczęściej są to zespoły samozarządzające. Główne artefakty Scruma to Rejestr produktów/backlog wydania (lista życzeń), Rejestry Sprintu/ Rejestry defektów (zadania w każdej iteracji), Wykresy spalania (praca pozostała w stosunku do daty). Główne ceremonie SCRUM to spotkanie dotyczące backlogu produktu, spotkanie sprintu i spotkanie retrospektywne.
Co to jest programowanie ekstremalne?
Programowanie ekstremalne (w skrócie XP) to metodologia tworzenia oprogramowania należąca do modelu Agile. Programowanie ekstremalne wykonuje fazy w bardzo małych, ciągłych krokach (w porównaniu z tradycyjnymi metodami). Pierwsza przepustka, która zajmuje tylko dzień lub tydzień, jest celowo niekompletna. Aby zapewnić konkretne cele rozwoju oprogramowania, na początku pisane są testy automatyczne. Następnie programiści wykonują kodowanie. Nacisk kładziony jest na programowanie w parach. Po przejściu wszystkich testów kodowanie uznaje się za zakończone. Kolejna faza to projektowanie i architektura, która zajmuje się refaktoryzacją kodu przez ten sam zestaw programistów. Pod koniec tej fazy, niekompletny (ale funkcjonalny) produkt jest prezentowany interesariuszom. Zaraz po tym rozpoczyna się kolejna faza (która skupia się na kolejnym zestawie najważniejszych funkcji).
Jaka jest różnica między programowaniem ekstremalnym a SCRUM?
Programowanie ekstremalne i SCRUM są, co zrozumiałe, bardzo podobnymi i dopasowanymi metodologiami. Istnieją jednak subtelne, ale ważne różnice między tymi dwiema metodami. Sprinty SCRUM trwają 2-4 tygodnie, podczas gdy typowe iteracje XP są krótsze (ostatnie 1-2 tygodnie). Zazwyczaj zespoły SCRUM nie pozwalają na zmiany w sprintach, ale zespoły XP są nieco bardziej elastyczne w stosunku do zmian w iteracjach. Na przykład, po zaplanowaniu sprintu, zestaw elementów tego sprintu pozostaje niezmieniony, ale funkcja, nad którą nie zaczęła działać, może w każdej chwili zostać zamieniona na inną funkcję w XP. Kolejną różnicą między XP a SCRUM jest to, że kolejność funkcji opracowanych w XP jest ściśle priorytetowa dla klienta, podczas gdy zespół SCRUM decyduje o kolejności elementów (po nadawaniu zaległości produktowej przez właściciela produktu SCRUM).
W przeciwieństwie do XP, SCRUM nie określa żadnych praktyk inżynierskich. Na przykład XP jest napędzany praktykami, takimi jak programowanie sterowane testami (TDD), programowanie w parach, refaktoryzacja itp. Jednak niektórzy uważają, że nakazanie zestawu praktyk samoorganizującym się zespołom może mieć negatywny wpływ i można to rozważyć brak XP. Inną wadą programowania ekstremalnego jest to, że niedoświadczone zespoły mogą mieć tendencję do refaktoryzacji bez żadnych automatycznych testów lub TDD (lub po prostu hakowania). Dlatego niektórzy sugerują, że SCRUM jest lepszy do gapienia się (ponieważ przynosi duże ulepszenia po prostu poprzez skoncentrowane iteracje ograniczone czasowo), a XP jest odpowiedni dla nieco dojrzałych zespołów, które odkryły wartość wyżej wymienionych praktyk (zamiast ich używać, ponieważ zostali o to poproszeni aby to zrobić).