Close

Rola zautomatyzowanego testowania w DevOps

Automatyzacja testów ułatwia zespołom programistycznym szybsze i bardziej niezawodne kompilowanie, testowanie i dostarczanie oprogramowania.

Krishna Sai — zdjęcie portretowe
Anton Hristov

Menedżer produktu w mabl


Na początku XXI wieku firmy zaczęły stosować praktyki Agile, wprowadzając przyspieszony cykl życia tworzenia oprogramowania, który charakteryzuje się częstymi informacjami zwrotnymi od klientów. Później doprowadziło to do przyjęcia narzędzi umożliwiających ciągłą integrację i ciągłe dostarczanie, które zautomatyzowały procesy kompilowania, testowania, konfigurowania i wdrażania.

Kluczowe czynności, takie jak programowanie, testowanie i dostarczanie do środowiska produkcyjnego, były jednak wykonywane przez oddzielne zespoły działające w ramach własnych silosów organizacyjnych. Powodowało to nieefektywność i wydłużenie cyklu życia tworzenia oprogramowania. Pozytywnym efektem było za to powstanie DevOps — filozofii, praktyk i narzędzi organizacyjnych, które umożliwiły tworzenie małych, obejmujących wiele działów zespołów, znanych też jako drużyny, które odpowiadają za kompletne procesy ciągłego dostarczania i zapewniania jakości aktualizacji produktów.

Początkowo DevOps połączyło prace programistyczne z operacjami IT, natomiast testy nadal były wykonywane przez oddzielny zespół w dużej mierze ręcznie. Takie rozwiązanie pomogło sprostać wyzwaniom związanym z dostarczaniem i monitorowaniem aplikacji chmurowych. Doprowadziło również do utworzenia w pełni zautomatyzowanych pipeline'ów CI/CD. Nie przełożyło się jednak na znaczne skrócenie cykli wydawania, ponieważ testy odbywały się w ramach osobnej struktury i często były czasochłonnym, ręcznym procesem.

Aby usunąć wąskie gardło w procesie testowania, organizacje odchodzą od scentralizowanych zespołów QA w kierunku przeniesienia odpowiedzialności za zapewnianie jakości na cały zespół programistyczny.

Czym jest automatyzacja testów?


Automatyzacja testów jest praktyką polegającą na automatycznym przeglądaniu i sprawdzaniu poprawności oprogramowania, takiego jak aplikacja internetowa, w celu upewnienia się, że spełnia ono wstępnie zdefiniowane standardy jakości dotyczące stylu kodu, funkcjonalności (logiki biznesowej) i środowiska użytkownika.

Praktyki testowania zazwyczaj składają się z następujących etapów:

  • Testy jednostkowe: sprawdzanie poszczególnych jednostek kodu, takich jak funkcja, pod kątem ich oczekiwanego działania.
  • Testy integracyjne: upewnianie się, że kilka fragmentów kodu może współpracować ze sobą bez niezamierzonych konsekwencji.
  • Testy kompleksowe: sprawdzanie, czy aplikacja spełnia oczekiwania użytkownika.
  • Testy eksploracyjne: stosowanie nieustrukturyzowanego podejścia do przeglądania wielu obszarów aplikacji z perspektywy użytkownika w celu wykrycia problemów funkcjonalnych lub wizualnych.

Te różne rodzaje testów są często przedstawiane w postaci piramidy. Gdy przesuwamy się w górę piramidy, liczba testów każdego rodzaju maleje, a koszt ich tworzenia i przeprowadzania rośnie.

Piramida testów eksploracyjnych

Dawniej wszystkie testy z piramidy wykonywano ręcznie. Był to powolny, kosztowny i podatny na błędy proces do czasu utworzenia narzędzi do zautomatyzowanego testowania.

Obecnie prawie wszystkie testy jednostkowe są w pełni zautomatyzowane, a automatyzacja takich testów jest uważana za najlepszą praktykę. Testy integracyjne są również w dużej mierze zautomatyzowane, a jeśli tak nie jest, zazwyczaj pomija się je na rzecz większej ilości ręcznego testowania kompleksowego. Obecna fala automatyzacji testów koncentruje się w dużej mierze na automatyzowaniu warstwy testów kompleksowych w piramidzie testowania, która pozwala ograniczyć potrzebę wykonywania testów integracyjnych.

Mimo że narzędzia do automatyzacji istnieją od ponad dekady, wiele z nich wymaga umiejętności kodowania i często skutkuje niespójnymi, niestabilnymi testami, w przypadku których rozwiązywanie problemów i utrzymanie na dużą skalę są bardzo kosztowne. Wiele zespołów ostatecznie opracowuje własne ramy automatyzacji testów, co utrudnia i wydłuża czas wdrażania nowych członków zespołu ze względu na stromą krzywą uczenia się. Takie niestandardowe ramy także wymagają utrzymania i ulepszeń, aby nadążyć za zmieniającymi się technologiami. W rezultacie większość kompleksowych testów była przeprowadzana ręcznie — przynajmniej do tej pory.

W miarę osiągania przez organizacje dojrzałości w zakresie praktyk DevOps automatyzacja testów w całym cyklu życia staje się nieodzowna, aby czerpać najważniejsze korzyści wynikające z DevOps. Chodzi tu w szczególności o możliwość szybszego i bardziej niezawodnego kompilowania, testowania i dostarczania oprogramowania, poprawę reakcji na incydenty oraz usprawnienie współpracy i komunikacji między zespołami. Jest już nie do pomyślenia, aby kompilacja wydania była analizowana przez zespół QA przez kilka dni, zanim programiści otrzymają informacje zwrotne i będą mogli naprawić zidentyfikowane problemy. Zespoły QA muszą odpowiednio skoordynować swoje działania w cyklu DevOps, dbając o to, aby przypadki testowe były zautomatyzowane i obejmowały prawie 100% kodu. Środowiska muszą być ustandaryzowane, a wdrożenie ich w skrzynkach QA powinno być zautomatyzowane. Zadania przed testowaniem, oczyszczanie, zadania po testowaniu itp. powinny być zautomatyzowane i dostosowane do cyklu ciągłej integracji.

Obecnie są dostępne narzędzia ograniczające konieczność programowania, takie jak mabl, które umożliwiają włączenie niezawodnych i zautomatyzowanych testów kompleksowych na każdym etapie pipeline'u CI/CD, co ułatwia wyłapanie problemów znacznie wcześniej w cyklu życia tworzenia oprogramowania. Nie jest tajemnicą, że im wcześniej wykryje się problemy z wydaniem, tym szybciej i taniej można je naprawić.

Zautomatyzowane testowanie w DevOps


W praktyce oznacza to, że programiści często piszą testy jednostkowe w celu sprawdzenia poprawności działania kodu, podczas gdy specjaliści ds. zapewniania jakości i właściciele produktów tworzą zautomatyzowane testy interfejsu użytkownika, które sprawdzają kompletne środowisko użytkownika. Specjaliści ds. zapewniania jakości organizują również sesje testów eksploracyjnych, w ramach których zespół ręcznie bada różne obszary aplikacji pod kątem problemów.

Najlepszą praktyką DevOps jest uruchamianie zautomatyzowanych testów tak wcześnie, jak to możliwe w pipeline'ie CI/CD. Obejmuje to uruchamianie zautomatyzowanych testów interfejsu użytkownika w środowisku produkcyjnym w celu aktywnego monitorowania problemów dotyczących doświadczeń użytkownika. Ponieważ dzisiejsze aplikacje opierają się na wielu usługach z wieloma zmieniającymi się częściami, przeprowadzanie syntetycznego monitorowania transakcji poprzez uruchomienie testów w środowisku produkcyjnym pozwala wykryć problemy z usługami innych firm, zanim zrobią to użytkownicy.

Ikona połączonych ze sobą pierścieni
powiązane materiały

Zacznij korzystać za darmo

Ikona narzędzi
powiązane materiały

Poprawa praktyk DevOps dzięki testowaniu

Rozpoczęcie korzystania ze zautomatyzowanych testów


Nie istnieje jedno uniwersalne rozwiązanie, ale poniżej przedstawiamy kilka ważnych kwestii, które należy wziąć pod uwagę przy określaniu strategii automatyzacji testów dla zespołu:

Częstotliwość wydawania

Im częstsze są wydania, tym więcej trzeba zainwestować w automatyzację testów, zwłaszcza w testy kompleksowe, które powinny być uruchamiane przy każdym wdrożeniu. Jeśli nie wydajesz często i chcesz przyspieszyć cykl wydawania, możesz zacząć od dodania większej liczby testów jednostkowych i utworzenia prostych automatycznych testów dymnych interfejsu użytkownika, aby przeprowadzać szybkie sprawdzenie poprawności każdej kompilacji. Następnie możesz stopniowo inwestować w tworzenie bardziej zautomatyzowanych testów kompleksowych, które pozwolą skrócić czas potrzebny do sprawdzenia wydania pod kątem regresji.

Dostępność narzędzi

Nowoczesne narzędzia do automatyzacji testów znacznie poprawią zdolność zespołu do ciągłego dostarczania wysokiej jakości oprogramowania. Oceniając narzędzia do testowania, należy uwzględnić kwestie, takie jak łatwość tworzenia testów, niezawodność, konieczność konserwacji i integracja z zestawem rozwiązań CI/CD.

Równie ważne jest zrozumienie krzywej uczenia się i wymaganych umiejętności w przypadku danego narzędzia. Im łatwiejsze w obsłudze jest rozwiązanie, tym szybciej zespół może się wdrożyć do korzystania z niego. Będzie ono także łatwiej dostępne dla większej liczby osób w zespole, co może prowadzić do zwiększenia zasięgu testów i kultywowania kultury zapewniania jakości. Jeden ze skutecznych sposobów oceny rozwiązań do testowania polega na tym, aby cały zespół poświęcił trochę czasu na zautomatyzowanie kilku scenariuszy przypadków testowych za pomocą najlepszych kandydatów na krótkiej liście narzędzi.

Dojrzałość produktu

Jeśli Twój zespół pracuje nad produktem z wieloma istniejącymi klientami i dojrzałą bazą kodu, istnieje szansa, że masz już ustalony harmonogram wydawania i praktyki testowania. W miarę przechodzenia przez zespół na ciągłą integrację lub pełny proces CI/CD ważne jest uwzględnienie automatyzacji testów jako kluczowego elementu automatyzacji pipeline'u. Szybkie dostarczanie i szybkie informacje zwrotne są niemożliwe do utrzymania bez automatyzacji testów na wczesnym etapie i podczas całego procesu tworzenia oprogramowania.

Z drugiej strony, jeśli Twój zespół tworzy nowy produkt, jest to idealna okazja do wdrożenia zautomatyzowanego testowania od samego początku. Od razu określ cel dla zakresu testów jednostkowych i skoncentruj się na definiowaniu kompleksowych przypadków testowych dla każdej funkcji. Najlepiej poczekać z dodaniem zautomatyzowanych testów kompleksowych do czasu, aż funkcja będzie bliższa wydania, aby uniknąć niepowodzeń testów spowodowanych błędami związanymi ze zmianami w interfejsie użytkownika.

Środowiska CI/CD i dane testowe

Tworzenie zautomatyzowanych testów samo w sobie nie należy do łatwych, ale często brak czystych środowisk z danymi testowymi uniemożliwia zespołom stosowanie automatyzacji testów na wcześniejszym etapie pipeline'u CI/CD. Dlatego ważne jest, aby wcześnie omówić z zespołem strategię testowania i zobowiązać się do utworzenia niezbędnej infrastruktury testowej. Przykładowo programiści muszą zaimplementować obsługę kont użytkowników testowych i mieć możliwość załadowania środowiska z danymi testowymi za pośrednictwem interfejsu API. Budowa infrastruktury umożliwiającej wczesną aprowizację tymczasowych środowisk testowych znacznie przyspieszy przegląd wydania i skróci cykl informacji zwrotnych.

Schemat testowania QA

W jaki sposób zautomatyzowane testowanie zmienia rolę zespołu QA?


Jak zautomatyzowane testy zwiększają możliwości DevOps


Zautomatyzowane testowanie jest obecnie uznawane za najlepszą praktykę DevOps. Wdrożenie zautomatyzowanych testów w dużej części pipeline'u tworzenia oprogramowania może na pierwszy rzut oka wydawać się trudne, ale można rozpocząć od zautomatyzowania pojedynczego kompleksowego scenariusza i uruchamiania tego testu zgodnie z harmonogramem. Ponadto nowe narzędzia sprawiają, że zautomatyzowane testowanie jest łatwiejsze niż kiedykolwiek, a wyniki są zdecydowanie warte wysiłku. W końcu, komu nie chciałby mieć zadowolonych użytkownikach?

Stosowanie zautomatyzowanych testów pomaga czerpać następujące korzyści z DevOps:

  • Szybkość bez utraty jakości: osiągnij wysoką prędkość tworzenia produktów, która sprawia, że programiści są zadowoleni i mogą szybciej dostarczać więcej korzyści użytkownikom.
  • Lepsza współpraca w zespole: wspólna odpowiedzialność za jakość umożliwia sprawniejszą współpracę między członkami zespołu.
  • Niezawodność: popraw niezawodność wydań dzięki zwiększeniu zasięgu w wyniku automatyzacji testów. Problemy w środowisku produkcyjnym powinny być rzadkością, a nie normą.
  • Skala: uzyskuj spójną jakość przy zmniejszonym ryzyku dzięki podziałowi prac programistycznych na wiele małych zespołów, które działają w sposób samowystarczalny.
  • Bezpieczeństwo: działaj szybko bez pogorszenia bezpieczeństwa i zgodności dzięki wykorzystaniu zautomatyzowanych zasad zgodności, szczegółowych kontroli i technik zarządzania konfiguracją.
  • Zwiększone zadowolenie klientów: większa niezawodność i szybka reakcja na informacje zwrotne od użytkowników przekłada się na zwiększenie ich satysfakcji i skutkuje częstszym polecaniem produktu.

Podsumowując…


Stosowanie automatyzacji testów w celu wykorzystania pełnego potencjału DevOps doprowadzi ostatecznie do ograniczenia wąskich gardeł i poprawy wydajności, a obie te korzyści mają bezpośrednie przełożenie na zadowolenie pracowników i klientów, a ostatecznie także na wyniki firmy.

Rozpocznij automatyzację testowania za pomocą Bitbucket Pipelines lub jednego z wielu narzędzi i zasobów do automatyzacji testów dostępnych w sklepie Atlassian Marketplace.

Anton Hristov
Anton Hristov

Anton Hristov jest menedżerem produktu w mabl i ma ponad 10 lat doświadczenia w tworzeniu, testowaniu i dostarczaniu oprogramowania. Lubi pracować na styku ludzi, technologii i projektowania. Anton w szczególności uwielbia wyciągać wnioski na podstawie danych i pomagać ludziom w wykorzystaniu ich pełnego potencjału, co znajduje odzwierciedlenie w produktach, które pomaga rozwijać.


Udostępnij ten artykuł
Następny temat

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ilustracja DevOps

Społeczność DevOps

Ilustracja DevOps

Ścieżka szkoleniowa DevOps

Ilustracja przedstawiająca mapę

Zacznij korzystać za darmo

Zapisz się do newslettera DevOps

Thank you for signing up