Testy kanarkowe

Testy kanarkowe
W kontekście niedawnej awarii spowodowanej przez CrowdStrike przyglądamy się i opisujemy testy kanarkowe – skuteczną odpowiedź na problem ryzyka związanego z wdrażaniem zmian w oprogramowaniu.
testerzy+

Testami kanarkowymi (ang. canary testing) nazywamy taką strategię wdrażania oprogramowania, która pozwala na stopniowe i kontrolowane wprowadzanie nowych funkcji, aktualizacji lub zmian w oprogramowaniu. Nazwa "kanarkowe" jest nawiązaniem do dawnej praktyki górników, którzy zabierali ze sobą kanarki do kopalni. Ptaki te były bardziej wrażliwe na toksyczne gazy niż ludzie, więc ich zachowanie służyło jako wczesny system ostrzegania. W podobny sposób testy kanarkowe pozwalają wykryć potencjalne problemy w nowym kodzie, zanim zostaną one udostępnione wszystkim użytkownikom.

W praktyce testy kanarkowe polegają na udostępnieniu nowej wersji oprogramowania ograniczonej grupie użytkowników (zazwyczaj obejmującej 5-10%). Następnie monitoruje się wydajność aplikacji, zbiera opinie od użytkowników i analizuje wszelkie występujące błędy lub problemy. Jeśli wszystko działa zgodnie z oczekiwaniami, aktualizacja jest stopniowo udostępniana większej liczbie użytkowników, aż w końcu zostanie wdrożona dla wszystkich.

Kiedy stosować testy kanarkowe?

Testy kanarkowe są szczególnie przydatne, gdy chcemy sprawdzić, jak nowa funkcjonalność będzie działać w rzeczywistym środowisku produkcyjnym i czy nie wpłynie negatywnie na doświadczenie użytkowników. Ponadto sprawdzą się w przypadku planowania migracji do nowej platformy, aktualizacji serwerów lub wprowadzenia zmian w konfiguracji. Pomogą one upewnić się, że te zmiany nie spowodują zakłóceń w działaniu aplikacji. Można je stosować również wtedy, gdy chcemy przetestować skuteczność nowych zabezpieczeń i upewnić się, że nie wprowadzają one nieoczekiwanych błędów.

Rodzaje testów kanarkowych

Testy kanarkowe to szerokie pojęcie, które obejmuje różne strategie wdrażania zmian w oprogramowaniu. Kilka najpopularniejszych przykładów to:

  1. Testy A/B, polegające na porównaniu dwóch wersji oprogramowania (A i B) na wybranej grupie użytkowników. Umożliwiają one sprawdzenie, która wersja lepiej spełnia oczekiwania użytkowników i przynosi lepsze wyniki biznesowe.
  2. Blue-green deployments, gdzie utrzymywane są dwa identyczne środowiska produkcyjne (niebieskie i zielone). Nowa wersja oprogramowania jest wdrażana w jednym środowisku, a ruch użytkowników jest stopniowo przekierowywany z jednego środowiska do drugiego. Dzięki temu można szybko wycofać zmiany w przypadku problemów.
  3. Shadow deployments, w których nowa wersja oprogramowania jest uruchamiana równolegle z istniejącą wersją, ale ruch użytkowników nie jest na nią kierowany. Pozwala to na przetestowanie nowej wersji w warunkach produkcyjnych bez wpływu na użytkowników.
  4. Phased rollouts, gdzie nowa wersja oprogramowania jest stopniowo udostępniana coraz większej liczbie użytkowników, dzięki czemu pojawia się możliwość monitorowania wydajności i zbierania opinii na każdym etapie wdrażania.

Korzyści testów kanarkowych

Dzięki temu, że zmiany wprowadzane są stopniowo, testy kanarkowe minimalizują ryzyko wystąpienia poważnych awarii lub problemów, które mogłyby wpłynąć na wszystkich użytkowników, a dzięki wczesnemu wykrywaniu problemów testy kanarkowe pozwalają uniknąć kosztownych i czasochłonnych napraw w późniejszym etapie. Opinie użytkowników prowadzą do szybkiego wykrycia błędów, problemów z wydajnością lub nieprawidłowości w działaniu nowych funkcji. Tempo wdrażania może zostać dostosowane do naszych potrzeb poprzez monitorowanie wydajności i reakcji użytkowników na każdym etapie. 

Zalety i wady płynące z testów kanarkowych obrazuje poniższa tabela:

Zalety Wady
Stosunkowo proste do wdrożenia, szczególnie przy użyciu narzędzi takich jak flagi funkcyjne Mimo ograniczonego zasięgu, istnieje ryzyko negatywnego wpływu na użytkowników testowych
W przypadku problemów, można szybko przywrócić poprzednią wersję oprogramowania Aby były skuteczne, konieczna jest automatyzacja procesu wdrażania, monitorowania i analizy
Nie wymagają dużych nakładów finansowych, ponieważ dotyczą tylko niewielkiej grupy użytkowników Nie są odpowiednie dla aplikacji działających samodzielnie na urządzeniach użytkowników
Nie powodują przestojów systemu, ponieważ nowa wersja jest wdrażana stopniowo W przypadku aplikacji z wieloma wersjami, zarządzanie testami kanarkowymi może być bardziej skomplikowane

Jak przeprowadzić testy kanarkowe?

Przeprowadzenie testów można opisać w kilku krokach:

  1. Pierwszym krokiem jest wybranie grupy użytkowników, którzy otrzymają dostęp do nowej wersji oprogramowania. Zazwyczaj jest to niewielki procent całej bazy użytkowników, najczęściej 5-10%. Ważne, aby grupa testowa była reprezentatywna dla całej populacji użytkowników, aby wyniki testów były miarodajne.
  2. Po wybraniu grupy testowej, nowa wersja oprogramowania zostaje udostępniona tylko tym użytkownikom. Można to zrobić na kilka sposobów, np. poprzez wykorzystanie flag funkcyjnych lub specjalnych narzędzi do wdrażania kanarkowego.
  3. Podczas trwania testów kanarkowych należy pamiętać o ścisłym monitorowaniu wydajności aplikacji. Razem z danymi dotyczącymi np. czasu odpowiedzi, liczby błędów, wykorzystania zasobów, zbierane są opinie od użytkowników testowych, którzy mogą zgłaszać problemy, błędy lub sugestie dotyczące nowej funkcjonalności.
  4. Jeśli wyniki testów kanarkowych są pozytywne, a nowa wersja oprogramowania działa stabilnie i zgodnie z oczekiwaniami, można stopniowo udostępniać ją większej liczbie użytkowników. Proces ten można powtarzać, zwiększając za każdym razem procent użytkowników, którzy otrzymują aktualizację, aż do momentu pełnego wdrożenia.

Po każdym etapie wdrażania kanarkowego należy dokładnie przeanalizować zebrane dane i opinie użytkowników, ponieważ na tej podstawie podejmuje się decyzję o kontynuacji wdrażania, wprowadzeniu ewentualnych poprawek lub wycofaniu aktualizacji. Jeśli wszystko przebiega pomyślnie, można ostatecznie udostępnić nową wersję oprogramowania wszystkim użytkownikom. W rzeczywistym środowisku wdrożenie testów kanarkowych wymaga zastosowania odpowiednich narzędzi i technik, które pozwolą na precyzyjną kontrolę nad procesem wdrażania oraz skuteczne monitorowanie wyników. Jedną z takich opcji są flagi funkcyjne

Flagi funkcyjne (ang. feature flags) to mechanizm pozwalający na włączanie i wyłączanie określonych funkcji aplikacji bez konieczności wprowadzania zmian w kodzie źródłowym. Dzięki temu możemy precyzyjnie kontrolować, którzy użytkownicy mają dostęp do nowych funkcjonalności, co jest niezwykle przydatne w przypadku testów kanarkowych. Dzięki flagom funkcyjnym możemy stopniowo udostępniać nowe funkcje wybranym grupom użytkowników, monitorować ich zachowania oraz zbierać opinię, a w razie potrzeby możemy łatwo wyłączyć daną funkcję lub cofnąć zmiany, minimalizując ryzyko negatywnego wpływu na użytkowników.

Wdrożenia kanarkowe a testy kanarkowe

Wdrożenie kanarkowe (ang. canary release) polega na wprowadzaniu nowej wersji oprogramowania do środowiska produkcyjnego, polegająca na stopniowym udostępnianiu jej ograniczonej grupie użytkowników. Jest to kolejny etap po przeprowadzeniu testów kanarkowych, który pozwala na weryfikację działania nowej wersji w rzeczywistych warunkach, zanim zostanie ona udostępniona wszystkim użytkownikom.

Choć terminy "wdrożenie kanarkowe" i "testy kanarkowe" są często używane zamiennie, istnieje między nimi subtelna różnica. Testy kanarkowe skupiają się na weryfikacji poprawności działania nowej wersji oprogramowania w kontrolowanym środowisku testowym. Natomiast wdrożenie kanarkowe to proces stopniowego udostępniania nowej wersji w środowisku produkcyjnym, z uwzględnieniem monitorowania wydajności i zbierania opinii od użytkowników.

Innymi słowy, testy kanarkowe to etap poprzedzający wdrożenie kanarkowe, którego celem jest zminimalizowanie ryzyka związanego z wprowadzeniem zmian do środowiska produkcyjnego.

Przykłady wdrożeń kanarkowych

Testy kanarkowe są szeroko stosowane przez wiele firm, zarówno dużych, jak i małych. Netflix wykorzystuje testy kanarkowe do wdrażania nowych funkcji i algorytmów rekomendacji. Dzięki temu firma może szybko zweryfikować, czy zmiany te przynoszą oczekiwane rezultaty i nie wpływają negatywnie na zaangażowanie użytkowników. Kolejnym przykładem jest sklep Etsy, który stosuje testy kanarkowe do testowania nowych wersji swojej platformy e-commerce, by szybko upewnić się, że zmiany nie wpłyną negatywnie na sprzedaż i zadowolenie klientów. Facebook z kolei wykorzystuje testy kanarkowe do wdrażania nowych funkcji w swojej aplikacji mobilnej, monitorując w ten sposób wydajność aplikacji i zbierając opinie od użytkowników, zanim nowa funkcja zostanie udostępniona wszystkim.

Kiedy warto rozważyć testy kanarkowe? Przede wszystkim wtedy, gdy zależy nam na skutecznej strategii wdrażania oprogramowania przy jednoczesnym zminimalizowaniu ryzyka i zapewnieniu wysokiej jakości produktu końcowego. Taki rodzaj testów pozwoli upewnić się, że wprowadzamy nowe funkcjonalności i ulepszenia w sposób bezpieczny i kontrolowany.

Źródła:
https://testsigma.com/blog/canary-testing/