Krótka historia modeli wytwarzania oprogramowania i kilka słów o przyczynach królowania modeli zwinnych
OPUBLIKOWANY March 29, 2023 PRZEZ Amelia Walter-Dzikowska
SDLC Agile Waterfall metodyki
4 min CZYTANIA
Podczas przeglądania ofert pracy z branży IT niemal od razu rzuca się w oczy popularny obecnie wymóg umiejętności pracy w Scrumie lub w innych metodykach zwinnych. Uh, metodyki zwinne, o co w ogóle tu chodzi? By to zrozumieć, warto cofnąć się do korzeni.
Proces wytwarzania aplikacji składa się z wielu etapów, jest kosztowny, wymaga planowania i udziału specjalistów z kilku dziedzin. Nic więc dziwnego, że powstało wiele modeli zarządzania tego rodzaju procesami. Metodyki wytwarzania oprogramowania przez ostatnie kilkadziesiąt lat przeszły swoistą ewolucję. Generalnie można je podzielić na dwa rodzaje: kaskadowy i przyrostowy (inaczej iteracyjny). Model kaskadowy powstał wcześniej, w latach 70., jest więc bardziej tradycyjnym - i obecnie przez niektórych uważanym za przestarzały - sposobem. Polega na przeprowadzaniu każdego etapu wytwarzania oprogramowania (planowanie, analiza, projekt, implementacja, testy, wdrożenie…) osobno, od początku od końca, jako niezależną fazę. Warunkiem rozpoczęcia kolejnej fazy jest zakończenie poprzedniej. Wady? Długi czas potrzebny na wdrożenie aplikacji – jest ona udostępniana klientom dopiero po całkowitym ukończeniu. Niewielka elastyczność – jeśli dopiero na etapie testów lub wdrożenia aplikacji okaże się, że działa ona niezgodnie z oczekiwaniami użytkowników, twórcy zostają postawieni przed dużym i kosztownym wyzwaniem przerobienia oprogramowania lub wręcz wytworzenia go od nowa. Oprócz klasycznego Waterfalla istnieją inne modele mieszczące się w kategorii kaskadowych, takie jak przykładowo V-model, w którym fazy częściowo pokrywają się czasowo. Nie zapewniają one jednak całkowitej ucieczki od problemów związanych z brakiem elastyczności, tak bardzo potrzebnej we współczesnym, zmieniającym się jak w kalejdoskopie świecie.
Wraz z początkiem XXI wieku na rynek IT weszła szturmem koncepcja zwinnego wytwarzania oprogramowania. W 2001 roku został opublikowany tzw. Agile Manifesto, który stanowi:
Odkrywamy nowe metody programowania dzięki praktyce w programowaniu
i wspieraniu w nim innych.
W wyniku naszej pracy, zaczęliśmy bardziej cenić:
Ludzi i interakcje od procesów i narzędzi
Działające oprogramowanie od szczegółowej dokumentacji
Współpracę z klientem od negocjacji umów
Reagowanie na zmiany od realizacji założonego planu.
Oznacza to, że elementy wypisane po prawej są wartościowe,
ale większą wartość mają dla nas te, które wypisano po lewej.
Głównymi celami są uproszczenie pracy i pragmatyczne podejście do zadań oraz pozbycie się nadmiaru dokumentacji i sztywnych ram uniemożliwiających reagowanie na potrzeby rynku. Ponadto formalności czy procedury nie powinny nigdy przesłaniać nadrzędnego celu jakim jest działające oprogramowanie. A co oznacza iteracyjny (przyrostowy)? W kontraście do modelu kaskadowego, każda faza w zwinnych modelach konsoliduje kilka etapów wytwarzania oprogramowania, które odbywają się równolegle – przykładowo tester zamiast czekać na całkowite zakończenie pracy dewelopera testuje już część kodu, podczas gdy deweloper pracuje nad kolejnymi jego częściami. Każda faza, czyli iteracja, która może zakończyć się udostępnieniem kolejnego kawałka oprogramowania użytkownikom. Ci z kolei mają szansę udzielić natychmiastowego feedbacku, który jest dla twórców aplikacji wskazówką, czy podążają za potrzebami rynku i w jakim kierunku powinni działać podczas kolejnych iteracji. Warto dodać, że iteracje trwają zwykle od dwóch tygodni do miesiąca. Manifest Agile zakłada elastyczność i adaptację, nie nakłada on więc na zespoły szczególnych ograniczeń czy ścisłych wytycznych. Wręcz przeciwnie, zakłada on jak największe dopasowanie do bieżącej sytuacji oraz samoorganizujące się zespoły. Podobnie jak w przypadku tradycyjnych metodyk kaskadowych, i w obrębie Agile’a powstało wiele bardziej szczegółowych modeli czy frameworków (czyli ramowo określonych sposobów działania), spośród których jednymi z najbardziej znanych są Scrum czy Kanban. Jednak nawet poszczególne frameworki zawierają stosunkowo ogólne zasady i schematy działania, które nie powinny być traktowane jak dogmaty, a mogą - czy wręcz powinny być - modyfikowane i dostosowywane w zależności od potrzeb. Scrum jest oparty na założeniach spisanych w kilkustronicowym Scrum Guide, natomiast Kanban został zainspirowany japońską koncepcją organizowania procesu produkcji i w wielu przypadkach czerpie z niej wybrane elementy - głównie sposób wizualnego przedstawiania zadań w formie charakterystycznej tablicy.
Czy zwinność jest lekarstwem na wszystkie bolączki wytwarzania oprogramowania? Oczywiście, że nie. Nie eliminuje ona całkowicie nieporozumień na linii dostawca oprogramowania-klient, nawet jeśli pomaga je szybciej rozwiązywać. Nie zawsze sprawdza się idealnie przy tworzeniu skomplikowanych aplikacji z obszernymi funkcjonalnościami, których tworzenie trudno rozbić na mniejsze iteracje, trwające krócej niż miesiąc. Zmniejszenie ilości dokumentacji wprowadzone w Agile jako udoskonalenie może okazać się mieczem obosiecznym, gdy jest jej zbyt mało i brakuje wiedzy o tym, jak powinna działać aplikacja. Metodyki wytwarzania oprogramowania cały czas ewoluują i próbują nadążyć za dynamicznie zmieniającym się rynkiem oraz wyzwaniami takimi jak postępująca digitalizacja czy popularność pracy zdalnej.