Ciągła integracja

Zwiększ zwinność swojego zespołu dzięki szybszemu uzyskiwaniu informacji zwrotnych. Ponieważ postępy zależą od sprawności przeprowadzania testów.

Dan Radigan Autor: Dan Radigan
Przeglądaj tematy

Nic wpływa w takim stopniu na zwinność, jak zaangażowanie zespołu w ciągłą integrację (CI). To może brzmieć złowieszczo (zwłaszcza jeśli Twój zespół dopiero wdraża CI), ale nie ma powodu do obaw. Niezależnie od technologii wykorzystywanych przez zespół, jest całkiem możliwie, że istnieje rozwiązanie do ciągłej integracji i testów zautomatyzowanych odpowiednie dla tworzonego przez nich kodu aplikacji.

Czym jest ciągła integracja?

Ciągła integracja to najlepsza praktyka w metodyce Agile i DevOps polegająca na rutynowym integrowaniu zmian w kodzie z główną gałęzią repozytorium i testowaniu ich, tak wcześnie i często, jak to możliwe. Jeśli to możliwe, programiści powinni integrować kod codziennie, a nawet kilka razy dziennie.

Zalety ciągłej integracji

Inwestowanie w CI pozwala uzyskać szybkie informacje zwrotne na temat zmian kodu. Nawet w ciągu kilku minut. Zespół, który polega głównie na testowaniu ręcznym, może otrzymać informacje zwrotne w ciągu kilku godzin, ale zazwyczaj kompleksowe dane z testów wracają dzień lub kilka dni po zmianie kodu. W międzyczasie wprowadzane są kolejne zmiany, a usuwanie błędów zamienia się w prawdziwą ekspedycję archeologiczną, podczas której programiści muszą przekopywać kilka warstw kodu, aby dotrzeć do źródła problemu.

To zdecydowanie nie jest szybki proces.

Dbaj o jakość dzięki ciągłemu kompilowaniu i automatyzacji testów

Ilu z nas pobrało najnowszy kod źródłowy tylko po to, aby stwierdzić, że nie można go skompilować lub zawiera poważny błąd? To zabija produktywność!

Tej sytuacji można uniknąć, stosując dwie procedury:

Ciągłe kompilowanie: Kompilowanie projektu od razu po wprowadzeniu zmiany. W idealnych warunkach różnicą pomiędzy poszczególnymi kompilacją powinien być jeden zestaw zmian.

Automatyzacja testów: Programowa weryfikacja oprogramowania w celu zapewnienia jakości. Testy mogą inicjować działania w oprogramowaniu po stronie interfejsu użytkownika (więcej na ten temat za chwilę) lub na poziomie back-endowej warstwy usług.

Wyobraź sobie, że te dwie procedury to truskawki i śmietana: osobno smakują dobrze, ale razem doskonale! Ciągła integracja to połączenie ciągłego kompilowania z automatyzacją testów, dzięki któremu przy okazji każdej kompilacji weryfikowana jest też jakość kodu aplikacji.

Pamiętaj jednak, że aby w pełni wykorzystać zalety tych procesów, zespół musi być na tyle zdyscyplinowany, aby od razu wstrzymywać prace programistyczne, gdy tylko pojawi się problem do rozwiązania. Energia, którą zespół inwestuje (a uwierzcie mi: jest to inwestycja) w tworzenie testów i konfigurowanie narzędzi do automatyzacji przepadnie, jeśli kompilacje wciąż będą uszkodzone. Ochrona inwestycji w CI i ochrona jakości kodu aplikacji to jedno i to samo.

Testowanie w procesie ciągłej integracji (CI): testy jednostkowe, API i funkcjonalne

Procesy CI mają dwie główne fazy. W kroku pierwszym upewniamy się, że kod można skompilować (czyli innymi słowy sprawdzamy, czy układanka nam się nie rozpada). W kroku drugim weryfikujemy, czy kod działa zgodnie z przeznaczeniem. Najpewniejszym sposobem na to jest przeprowadzenie serii zautomatyzowanych testów, które sprawdzą produkt na wszystkich poziomach.

Testy jednostkowe

Testy jednostkowe dotyczą obszarów zbliżonych do podstawowych komponentów kodu. Są pierwszą linią obrony w walce o jakość.

Korzyści: Łatwe do napisania, szybko działają, dobrze odwzorowują architekturę kodu aplikacji.

Wady: Testy jednostkowe weryfikują jedynie podstawowe komponenty oprogramowania. Nie odzwierciedlają przepływów pracy użytkowników, które często obejmują wykorzystanie kilku komponentów współpracujących ze sobą.

Testy jednostkowe wskazują, jak kod powinien działać, co oznacza, że programiści mogą je przeglądać, aby uzyskać aktualne informacje na temat danego obszaru kodu.

Testy API

Dobre oprogramowanie jest modułowe, co pozwala na wyraźne rozłożenie pracy na kilka aplikacji. Interfejsy API to punkty końcowe, za pomocą których poszczególne moduły komunikują się ze sobą. Można to zweryfikować za pomocą testów API, w ramach których wykonywane są połączenia pomiędzy modułami.

Korzyści: Dość łatwe do napisania, działają szybko i można łatwo za ich pomocą odwzorować, jak aplikacje będą ze sobą współdziałać.

Wady: W przypadku mniej złożonego kodu testy API mogą niewiele różnić się od niektórych testów jednostkowych.

Ponieważ interfejsy API stanowią połączenie pomiędzy komponentami aplikacji, są one szczególnie przydatne podczas przygotowywań do wydania. Jeśli kandydat do wydania przejdzie wszystkie testy API, zespół zyska więcej pewności, że kompilacja nadaje się do dostarczenia klientom.

Testy funkcjonalne

Testy funkcjonalne obejmują większe obszary kodu aplikacji i pozwalają na odzwierciedlenie przepływów pracy użytkowników. Na przykład w przypadku aplikacji internetowych, HttPunit i Selenium współdziałają bezpośrednio z interfejsem użytkownika, aby przetestować produkt.

Korzyści: Większa szansa na znalezienie błędów, ponieważ testy naśladują działania użytkowników i testują współdziałanie wielu komponentów.

Wady: Wolniejsze niż testy jednostkowe, czasami zgłaszają fałszywe problemy z powodu opóźnienia sieci lub chwilowej awarii gdzieś w pakiecie technologii.

Zespoły często obserwują, że im bliżej rzeczywistego przepływu pracy użytkownika, tym testy zautomatyzowane działają wolniej. Rozwiązanie HTTPUnit jest szybsze, ponieważ nie jest pełnoprawną przeglądarką internetową. Narzędzie Selenium jest ograniczone przez szybkość samej przeglądarki internetowej, ale może działać równolegle w wielu przeglądarkach. Pomimo tych zastrzeżeń, testy funkcjonalne są niezwykle cenne i dostarczają informacji znacznie szybciej niż testerzy.

A skoro już mówimy o testerach…

Niektórzy z nich postrzegają testy automatyczne jako zagrożenie egzystencjalne. Jest to krótkowzroczne podejście, które niema wiele wspólnego z rzeczywistością. Zwolnieni z obowiązku wykonywania powtarzających się zadań, testerzy mogą poświęcić czas na analizę ryzyka, planowanie testów i rozwijanie innych umiejętności takich jak programowanie!

Szybka ciągła integracja

W Atlassian dokładamy wszelkich starań, aby programiści wprowadzali innowacje, a nasze kody aplikacji były pozbawione błędów. Kładziemy duży nacisk na usprawnienie „wewnętrznego cyklu pracy” programisty — czasu potrzebnego na wprowadzenie zmian i uzyskanie wyników testów.

Czas potrzebny na przeprowadzanie zautomatyzowanych testów może się kumulować, powodując spowolnienie prac nad zmianami. Jedną ze strategii na rozwiązanie tego problemu jest przeprowadzanie równoległych testów zautomatyzowanych na kilku serwerach lub „agentach kompilacji”, tak aby serwer CI wykonywał 2, 20, a nawet 200 testów jednocześnie. Dzięki technologiom chmurowym można łatwo skalować moc obliczeniową, aby sprostać potrzebom zespołu programistów w miarę zwiększania liczby testów. Ale mocy obliczeniowej nie można zwiększać w nieskończoność. Dlatego staraj się testować kod kompleksowo, ale nie nadmiarowo. Nadmiarowe testy wydłużają czas trwania kompilowania (i marnują zasoby procesora). Im szybciej inżynierowie otrzymają zielone światło, tym szybciej będą mogli przejść do następnego elementu w backlogu.

Tworzenie gałęzi i CI: doskonałe połączenie!

Wiele zespołów unika tworzenia gałęzi z powodu trudności podczas scalania. Nowe technologie kontroli wersji, takie jak Git, ułatwiają zarówno tworzenie gałęzi, jak i scalanie. Aby mieć pewność, że podstawowa gałąź kodu („główna” w nomenklaturze Git) jest pozbawiona błędów, stosuj taki sam poziom ciągłej integracji na wszystkich gałęziach rozwojowych i wersji stabilnej. Jeśli kompilacja przejdzie weryfikację na gałęzi, zespół będzie mieć pewność, że może scalić ten kod z gałęzią nadrzędną.

Dzięki tworzeniu gałęzi, ciągłej integracji i automatyzacji testów zespoły mogą działać produktywnie i innowacyjnie, jednocześnie chroniąc jakość kodu.Jeśli chcesz przejść do kolejnego etapu, zapoznaj się z naszym przewodnikiem krok po kroku dotyczącym podstaw ciągłej integracji.

Tak wygląda tworzenie oprogramowania metodyką Agile w najlepszym wydaniu: regularne dostarczanie działającego oprogramowania, przy minimalnym długu technicznym i zachowaniu innowacyjnego podejścia.

Następny
Projekt