Hej, dzisiaj opowiemy Wam trochę o tym, czym jest kultura DevOps, SDLC oraz CI/CD. Jeśli jesteście zainteresowani rozwojem swojej kariery jako DevOps lub chcecie się dowiedzieć, jakie różnice zaszły w ostatnich kilkunastu latach jeśli chodzi o wdrażanie oprogramowania, to serdecznie zapraszamy do lektury.

 

SDLC

SDLC (ang. software development lifecycle) to model opisujący jak powinien przebiegać cały proces wytwarzania oprogramowania - od planowania, aż po testowanie, wdrożenie czy utrzymanie. W zależności od modelu, którego używamy w naszej firmie, możemy wyróżnić od 6 nawet do 9 kroków wytwarzania oprogramowania. Jeśli używamy modelu o niższej liczbie to nie oznacza to jednak zawsze pominięcia czynności związanych z danym krokiem, a raczej przeniesieniem ich do innego kroku. 


A graph showing stages of Software Development Life Cycle

Rysunek 1 - 8 kroków produkcji oprogramowania, źródło:savvyprogrammer.io

 

Planowanie - etap ten obejmuje definiowanie zakresu projektu, głównych założeń, dostępnych zasobów, a także określenie horyzontu czasowego jaki przewidujemy na projekt.  Etap ten także dotyczy zdefiniowania potencjalnego ryzyka jakie niesie za sobą projekt.

Pozyskanie wymagań -  w skład tego etapu wchodzi analiza wymagań funkcjonalnych oraz niefunkcjonalnych które ma klient wobec aplikacji. Wydobycie wymagań od klienta jest jednym z kluczowych etapów projektu. Aby, projekt był prawidłowo wykonany musimy dowiedzieć się jakie są oczekiwania klienta oraz ustalić wspólny język, to znaczy upewnić się, że te same pojęcia i definicje rozumiemy w taki sam sposób. Inżynier, który pozyskuje wymagania musi często dowiedzieć się więcej o dziedzinie problemowej jakiej aplikacja ma dotyczyć. W tym etapie wytarza się dokumenty dotyczące user stories oraz dokumenty dotyczące szczegółowych wymagań.

Analiza i projektowanie - Ten etap polega na zaprojektowaniu odpowiedniej architektury oprogramowanie na podstawie pozyskanych wymagań funkcjonalnych oraz niefunkcyjnych.  

Zwykle te drugie mają kluczowy wpływ na architekturę jak np. wymagania wydajnościowe klasyfikowane jako niefunkcjonalne mogą powodować potrzebę horyzontalnego skalowania aplikacji, które już może wymagać specjalnej architektury. W tym etapie wytwarza się także dokumenty opisujące projekt bazy danych, system, czy interfejs użytkownika oraz niezbędne diagramy.

Rozwój oprogramowania i dokumentacja  - dopiero w tym momencie następuje faza w której specyfikacja staje się kodem, który implementuje deweloper. Ważne, aby kod był wykonany z odpowiednim standardem i brał pod uwagę zarówno przyjętą architekturę jak i dobre praktyki jak zasady SOLID. W tym temacie polecamy nasz artykuł.

Ważne, aby tworzyć solidną dokumentację zarówno w przypadku kodu (poprzez dokumentację endpointów czy system kontroli wersji), a także narzucając odpowiednie konwencje nazewnicze czy produkując odpowiednie dokumenty i diagramy związane z oprogramowaniem. Rzetelne przygotowanie na tym etapie pozwala zminimalizować zarówno ewentualnych przyszłych problemów z rozwijaniem projektu, jak i trudności z wdrażaniem go w firmach klienta.

Testowanie -  jest to faza projektu polegająca na weryfikacji, czy to powstało zgadza się ze wyspecyfikowanymi wcześniej wymaganiami. Wyróżniamy między innymi testy jednostkowe, integracyjne, systemowe, E2E, a także akceptacyjne.

Wdrożenie - jest to etap w którym oprogramowanie trafia na tzw. “produkcję”, czyli serwer z którego korzystają klienci. Proces ten bywa w dzisiejszych czasach zautomatyzowany poprzez tzw. pipeline’y. W tym kroku należy zaplanować jak ma wyglądać rollback (cofnięcie zmian do poprzedniej wersji), migracja danych oraz środowisko produkcyjne. Na tym etapie też nierzadko przeprowadza się różnego rodzaju instruktaże w firmach klienckich.

Konserwacja i monitorowanie - jest to faza po wdrożeniu oprogramowania polegająca na ciągłym monitorowaniu, naprawianiu błędów, update’ach oraz ulepszaniu i optymalizacji aplikacji. Nie należy także zapominać o wsparciu użytkownika, który może mieć problemy z obsługą nowego oprogramowania.

Należy także zauważyć, że wszystkie te etapy występują w cyklu. Nie jest to model waterfall’owy, a raczej zwinny, w którym iteracyjne staramy się produkować oprogramowanie i dostarczać je do klienta. 

 

Czym jest DevOps?

DevOps jest kulturą, która obejmuje dobre praktyki i zestaw narzędzi wpływający na cały proces produkcji oprogramowania. Zwiększa efektywność poprzez automatyzację procesów, integrację oraz współpracę. Termin tradycyjnie wywodzi się z podziału, który istniał pomiędzy deweloperami (dev) oraz działem operacyjnym (ops). Wprowadzenie takiej kultury oraz ludzi odpowiedzialnych za współpracę pomiędzy deweloperami oraz ludźmi od infrastruktury i systemów poprawia niezawodność i jakość wdrożeń, a tym samym jakość samej aplikacji.

DevOps

Rysunek 2 - Elementy DevOps wraz z konkretnymi zastosowaniami, źródło: solarwinds.com

 

Jak DevOps działa w różnych etapach SDLC?

W większości etapów, niezależnie od modelu SDLC, który przyjmiemy, możemy zaobserwować jak coraz częściej na rynku wchodzą tam elementy DevOps. Spójrzmy na kolejne kroki SDLC jeszcze raz:

W fazie planowania i pozyskiwania wymagań można dostrzec DevOps w nacisku na bliską współpracę i komunikację, a także wspólne spotkania organizowane w celu zrozumienia wspólnych założeń i wymagań między drużynami deweloperskimi, operacyjnymi i interesariuszami. POmaga to stworzyć spójny plan projektu nastawiony na zrozumienie potrzeb klienta. Można także wykorzystać narzędzia i praktyki DevOps do automatyzacji procesów planowania.

Analiza i Projektowanie - Zespół odpowiedzialny za DevOps powinien uczestniczyć we wspólnych sesjach projektowych, gdzie elementem dyskusji powinny być  wymagania niefunkcjonalne takie jak skalowalność, dostępność. Te wymagania szeroko wpływają zarówno na architekturę oprogramowania, jak i na zestawy narzędzi jakie muszą być stosowane przez DevOpsów.

Jeżeli chodzi o fazę rozwoju oprogramowania i dokumentacji, to tu wdrożenie praktyk Continuous Integration (CI), gdzie kod jest regularnie wypychany do zdalnego repozytorium GIT, jest bardzo istotnym elementem DevOps.

Testowanie - Tutaj kultura DevOps objawia się w implementacji praktyk Continuous Testing (CT), które obejmują automatyzację testów na różnych poziomach, od jednostkowych po integracyjne, aby szybko identyfikować i naprawiać problemy. Deweloper, który wypycha kod do systemu kontroli wersji może szybko dostać feedback na temat tego czy jego zmiany działają czy nie. Testowanie może także obejmować sprawdzenie kodu i zależności z jakich korzysta pod względem poprawek bezpieczeństwa.

Wdrożenie - Wprowadzenie praktyk Continuous Delivery lub Deployment (CD), które automatyzują proces wdrażania oprogramowania, umożliwiając regularne i niezawodne dostarczanie nowych wersji oprogramowanie. Podejście IaC, czyli Infrastructure as a Code oraz traktowanie zdalnego repozytorium git jako tzw. single point of truth jest także znaczącym usprawnieniem, za jakie powinien odpowiadać zespół DevOps.

Ostatnia, ale nie mniej od poprzednich istotna faza - konserwacja i monitorowanie - tu kładzie się nacisk na implementację praktyk Continuous Monitoring (CM) w celu ciągłego monitorowania wydajności, dostępności i bezpieczeństwa systemu. Musimy wziąć pod uwagę, że w aplikacji nawet w trakcie działania mogą pojawić się problemy wydajnościowe, czy może zostać odkryta nowa podatność w module, którego używa nasza aplikacja.


Podsumowanie

Zarówno SDLC jak i DevOps są ważnymi elementami dzisiejszego kierunku w jakim idzie rozwój oprogramowania i zarządzanie projektami informatycznymi. Jeśli zainteresował Was DevOps, polecamy nasze artykuły dotyczące oprogramowania Terraform.

Do usłyszenia za tydzień!

Źródła:

 

Skorzystaj z naszego doświadczenia i umów się na darmowe konsultacje dotyczące kultury DevOps oraz SDLC ! Kliknij tutaj