Automatyzacja w procesie wytwarzania oprogramowania

Automatyzacja w procesie wytwarzania oprogramowania
Przy obecnym stanie wiedzy nie da się zautomatyzować wszystkiego, ale wszystkie czynności w procesie wytwarzania mają silne wsparcie narzędziowe i duże zakusy do pełnej automatyzacji.

Patrząc na proces wytwórczy (SDLC) z perspektywy jakościowej, najczęściej automatyzacja kojarzy nam się z testowaniem. Jednak każdy etap wytwarzania oprogramowania ma w mniejszym lub większym stopniu jakiś element automatyzacji. Przyjrzyjmy się najciekawszym praktykom oraz trendom.

automatyzacja

Co prawda automatyzacja jest wpisana na stałe we wszystkie modele wytwarzania, to właśnie DevOps spiął te praktyki niemalże w pełni zrobotyzowany proces. Dlatego też zdecydował się zmapować praktyki bezpośrednio właśnie na tę kulturę tworzenia produktów softwareowych. 

Przyjrzyjmy się poszczególnym etapom i wybranym praktykom z ich obszaru. Pamiętajmy jednocześnie, że praktyki nie są przypisane na stałe tylko do jednego obszaru, a ich umieszczenie na modelu wynika raczej z częstotliwości i wolumenu występowania. Definiując aktywności w ramach automatyzacji pamiętajmy, że prawie wszystkie z tych czynności mogą być automatyzowane, ale również automatycznie uruchamiane. 

PLAN (planowanie)

Czynność ta ma szerokie wsparcie narzędziowe, ale produkty końcowe wytwarzane są zazwyczaj ręcznie. Wymagają one analizy, jak i decyzji podjętych przez człowieka. 

CODE (kodowanie)

Jedną z pierwszych technik automatyzacji jaka przychodzi do głowy będzie zapewne TDD, ale w mojej opinii testy jednostkowe, zarezerwowane są raczej do obszaru testów. Co prawda lwia ich część będzie udziałem fazy kodowania, ale główny zakres uruchomienia będzie właśnie przy testach. Ewentualnie można tę praktykę wcisnąć między końcówką kodowania i początkiem budowania wersji. 

Zdecydowałem się umieścić tutaj BDD ze względu na właściwości samej specyfikacji, powstającej w ramach tej praktyki, która jest kodem, przykładem użycia i ostatecznie uruchamialnym weryfikatorem. 

Również tu pojawi się pierwsza przymiarka do analizy statycznej kodu. Wiele informacji o nim wyciągniemy bez konieczności jego uruchomienia. Ta praktyka będzie kontynuowana przez fazę budowania, aż po testowanie. 

BUILD (budowanie)

Budowanie wersji dla języków kompilowanych lub interpretowanych w dużej mierze opiera się na poskładaniu oprogramowania z całego repozytorium plików. Udane / nieudane zbudowanie wersji będzie opisane raportem z wynikami sprawdzenia m.in. reguł kodowania.

TEST (testowanie)

Zgodnie z piramidą testów, na tym etapie będziemy mieli zbiór testów, które można relatywnie łatwo zautomatyzować. Od testowania jednostkowego, poprzez testowanie integracji (z API) oraz testach na UI.  

RELEASE (wydawanie)

Przygotowanie wersji w modelu ciągłym (CI) i udostępnienie (CD) jest praktyką, którą niektóre zespoły zautomatyzowały praktycznie w całości, sprowadzając wyniki tylko do konfiguracji i parametryzacji końcowych produktów. 

DEPLOY (wdrożenie na produkcję)

Tu pojawiają się dwie praktyki związane z:

  • kontenerami, w których otrzymujemy w sposób automatyczny końcowe, oczekiwane środowisko, 
  • produktem i jego instalacją na zdefiniowanym środowisku. 

Automatyzacja znów jest tu praktycznie pełna. 

OPERATE (użytkowanie) 

Na tym etapie automatyzacja wspiera mocno administratorów serwerów produkcyjnych, którzy konfigurują  i stawiają środowiska. Dzięki wcześniejszej praktyce konteneryzacji praca ta sprowadza się do pojedynczej komendy, a nie do ręcznego instalowania wielu składowych środowiska. 

MONITOR (monitorowanie)

Ta praktyka zyskała na wadze właśnie wraz z DevOps. Przez zaakceptowanie faktu, że produkt końcowy nigdy nie będzie doskonały rozpoczęło się badanie jego zachowania już po wdrożeniu. Dzięki uniwersalnym narzędziom monitoringu oraz własnym skryptom logującym otrzymujemy zbiór danych, które pozwalają nam potwierdzić, że produkt działa jak powinien lub diagnozować wyjątki, wąskie gardła, niestabilności czy też problemy w użytkowaniu. 

INNE praktyki 

DevOps to jeszcze kilka innych czynności / obszarów, które podlegają silnej automatyzacji. Należą do nich: 

  • automatyzacja tworzenia dokumentacji, która w środowisku ciągłego wytwarzania jest niemal absolutną koniecznością,
  • wsparcie dla  zarządzania projektem (Project Management), które sprowadza się do dashboardu z informacją o aktualnym stanie projektu,
  • komunikacja w czasie rzeczywistym (real-time communication), która pozwala członkom zespołu wiedzieć w jakim stanie jest w danym momencie każda z wersji produktu - deweloperska, testerska, preprodukcyjna czy produkcyjna.

Jak w takim razie będą wyglądały trendy przyszłości?

Automatyzacja będzie postępowała, próbując wyeliminować możliwie najwięcej błędów człowieka. Obszarem, który chyba najbardziej czeka na automatyzację jest generowanie wysokiej jakości kodu źródłowego. Realność tej praktyki oczywiście jest dyskusyjna, ale nie zmienia to faktu, że prace nad narzędziami i technikami postępują. 

Machine learning jest dziedziną, która coraz odważniej wchodzi w każdą z praktyk opisanych powyżej. Co prawda na razie jest to tylko skromne wspieranie praktyk w doborze danych lub analizowaniu logów, ale docelowo może być to dominujący łącznik miedzy pracą ludzką a sztuczną inteligencją (AI), która ludzką pracę ma zastąpić.

Jeśli szukacie narzędzi wspierających konkretne etapy tworzenia oprogramowania oraz wynikające z nich automaty to zacząć można od grafiki poniżej:

Lub dużo większego zbioru:

Źródła:
http://www.jamesbowman.me/post/continuous-delivery-tool-landscape/

To powinno Cię zainteresować