Ciągłe testowanie – niezbędny element DevOps

13 April, 2017 by Michał Błaszak Continuous delivery
slide-2

Jak zdefiniować ciągłe testowanie?

Ciągłe testowanie to przede wszystkim wykonywanie testów automatycznych w celu uzyskania, tak szybko jak to możliwe, informacji zwrotnej na temat ryzyka biznesowego związanego z przygotowywaną wersją systemu lub jego komponentu. Takie podejście zauważalnie się rozwija i zakłada poszerzanie zakresu automatyzacji testów, aby sprostać zwiększającej się złożoności i wzrastającemu tempu produkcji i rozwoju oprogramowania.

Z pomocą w zdefiniowaniu ciągłego testowania spieszy poniższa lista. Wszystkie te definicje uzupełniają się nawzajem i należy je rozpatrywać jako spójny obraz:

  • Podstawowym celem ciągłego testowania jest stała ocena pokrycia ryzyka biznesowego poprzez dostarczanie informacji zwrotnej odpowiedniej dla danego etapu procesu wytwarzania.
  • Ciągłe testowanie zapewnia natychmiastowy wgląd w to, w jakim stopniu przejście z wersją do etapu wdrożenia produkcyjnego jest możliwe lub ryzykowne.
  • Jest “zaworem bezpieczeństwa”, który pomaga zespołowi chronić użytkowników i uniknąć awarii.
  • Z założenia wplata aktywności kontrolne w różne etapy procesu wytwórczego, w przeciwieństwie do klasycznego podejścia z egzekucją testów na koniec cyklu. Egzekucja odpowiedniego zestawu testów w określonym momencie procesu musi się odbywać bez tworzenia wąskich gardeł i wydłużania cyklu.
  • Jest zintegrowane z procesem wytwórczym i narzędziami wykorzystywanymi w podejściu DevOps.
  • Ciągłe testowanie wymaga dostępności stabilnego środowiska testowego z poprawnymi danymi testowymi dla każdego wywołania testów.
  • Zapewnia testy end-to-end, które realnie odzwierciedlają doświadczenie użytkowników końcowych, dla wszystkich wykorzystanych w procesie technologii (back-end i front-end) oraz obejmuje wszystko, od testów jednostkowych, komponentów, pokrycia, aż po monitoring i testy na produkcji.
  • Ocenia każdą warstwę nowoczesnej architektury na odpowiednim etapie procesu wytwórczego.
  • Ciągłe testowanie musi mieć odpowiednio szeroki zakres, aby wykryć, kiedy zmiana w aplikacji nieumyślnie wpływa na funkcjonalności które muszą pozostać niezawodne. Portfolio testów podlega więc regularnym przeglądom i optymalizacji w celu eliminacji elementów nadmiarowych i maksymalizacji pokrycia ryzyka biznesowego.
  • Ciągłe testowanie zmniejsza liczbę fałszywych alarmów (false-negative) oraz testów fałszywie zdanych (false-positive), stawiając solidne, nowoczesne narzędzia testowe ponad trudne w utrzymaniu skrypty.

Ciągłe testowanie – zmiany, zmiany, zmiany…

Trudno się nie zgodzić, że podejścia Agile i DevOps oparte są o zmiany –  metamorfozę w wytwarzaniu i zarządzaniu operacyjnym (ludzie, procesy i technologie), umożliwiającą dostarczanie innowacyjnego oprogramowania tak szybko, jak to możliwe. Pomimo tych wszystkich przekształceń, jeden element wydaje się niezachwiany. To proces testowania oprogramowania. Według różnych badań, 70%-88% organizacji przyjęło zwinne podejście do wytwarzania oprogramowania, podczas gdy zaledwie 26%-30% z nich zaimplementowało na szeroką skalę automatyzację testów.

Innymi słowy, proces testowania zazwyczaj pozostaje w niezmienionej formie, mimo, że organizacje inwestują mnóstwo czasu i pracy w transformację swojego procesu wytwórczego, by sprostał dzisiejszym i przyszłym potrzebom biznesowym. Większość narzędzi i procesów związanych z testowaniem, będących spuścizną po okresie przed przekształceniem, nie jest w stanie spełnić wymagań ciągłego testowania narzucanych przez podejście DevOps z kilku powodów:

  • Niezdolność do przesunięcia testowania „w lewo” – testy zwykle są wykonywane na koniec cyklu, gdy zakończona jest implementacja interfejsu użytkownika. Poza tym brak wcześniejszych automatycznych testów API.
  • Testy są czasochłonne, więc rzadko są wykonywane w całości. Oznacza to brak pełnej informacji o wpływie zmian na wszystkie obszary systemu i na sposób w jaki użytkownicy dotychczas postrzegali system.
  • Wysokie nakłady na utrzymanie, bowiem testy UI często wymagają znacznych przeróbek, aby odzwierciedlać nieustanne zmiany ze względu na dynamiczny proces wytwarzania. Automatyzacja w takim przypadku jest wyjątkowo pracochłonna i nierzadko zostaje porzucona.
  • Niestabilność środowisk testowych (spowodowana problemami z danymi testowymi, niedostępnością innych systemów itp.) zwykle powoduje opóźnienia, niekompletną realizację testów, fałszywe alarmy lub przeoczenia błędów, czy nieadekwatne wyniki, co uniemożliwia szybkie dostarczenie informacji o jakości systemu, tak we współczesnych podejściach niezbędne.

Aby umożliwić ciągłe testowanie, poziom automatyzacji powinien sięgać, a nawet przekraczać 85% wszystkich testów. Aby to osiągnąć, niezbędnych jest kilka zmian w podejściu do kontroli jakości:

  • Ograniczenie do minimum testów manualnych i zarządzanie pozostałymi z nich w formie odpowiednio dokumentowanych sesji testów eksploracyjnych, które można wykorzystać do jeszcze dalej idącej automatyzacji.
  • Oparcie testów o ryzyko biznesowe, aby zoptymalizować ilość testów i wdrożyć zautomatyzowane punkty decyzyjne.
  • Przesunięcie testów do warstwy API, gdzie to tylko możliwe.
  • Zintegrowanie testów funkcjonalnych w procesie Continuous Delivery.
  • Odpowiednie zarządzanie danymi testowymi oraz wykorzystanie wirtualizacji serwisów, umożliwiające powtarzalne i częste przeprowadzanie testów end-to-end.

Ciągłe testowanie i automatyzacja

Badania wskazują, że przeciętny poziom automatyzacji testów, utrzymujący się od lat, to około 20% całego portfolio testowego organizacji. Dzisiejsze zmiany w branży IT narzucają testowaniu oprogramowania coraz większe wymagania, podczas gdy jednocześnie sama automatyzacja stopniowo staje się trudniejsza. Rośnie złożoność architektury systemów, obejmując rozwiązania chmurowe, API, mikroserwisy itd. oraz łącząc ze sobą ogromną ilość protokołów i technologii do realizacji choćby pojedynczej transakcji procesu biznesowego.

Dzięki Agile, DevOps i Continuous Delivery, wiele aplikacji jest wydawanych w cyklach krótszych niż dwa tygodnie, a nawet wielokrotnie w ciągu jednego dnia. W efekcie czego czas na projektowanie i utrzymanie testów, ale przede wszystkim ich wykonanie, drastycznie się skraca.

Obecnie, gdy oprogramowanie jest podstawowym interfejsem dla biznesu, błąd aplikacji oznacza fiasko biznesu – nawet niepozorna usterka może mieć spore konsekwencje, jeśli wpłynie negatywnie na doświadczenie użytkownika systemu. Nie bez powodu więc ryzyka związane z aplikacjami stały się tak istotne. Z pomocą przychodzi właśnie ciągłe testowanie, które pozwala kontrolować ryzyko w świetle wzrastającej złożoności i tempa w jakim współcześnie dostarczane są systemy IT. Ciągłe testowanie ewoluuje i zwiększa rolę automatyzacji testów w trzech aspektach – ryzyka, zakresu i czasu realizacji.

Ciągłe testowanie, integracja i dostarczanie

Gdy wykorzystanie oprogramowania staje się kluczem do stworzenia rzeczywistej przewagi rynkowej niemal w każdej branży, organizacje nie mogą już sobie pozwolić na komfort wyboru pomiędzy szybkością dostarczenia a jakością wytwarzanego oprogramowania. Oba czynniki są krytyczne. Ponieważ praktyki zwinne dojrzały odpowiednio i podejście DevOps jest na celowniku dużych instytucji, ciągła integracja, testowanie i dostarczanie służą jako podstawowe katalizatory w osiąganiu odpowiedniej jakości przy wysokim tempie produkcji. Z tych trzech elementów nadal największym wyzwaniem jest ciągłe testowanie.

Podczas gdy ciągła integracja jest napędzana przede wszystkim narzędziami, a ciągłe dostarczanie opiera się o narzędzia i zespoły, ciągłe testowanie zależy zarówno od jednych i drugich, jak i w dużym stopniu – jednostek oraz serwisów w otoczeniu. Tworzenie i integracja zmian w kodzie jest niewątpliwie ważna. Jednak, jeśli proces zautomatyzowanego dostarczania nie jest w stanie zidentyfikować w jaki sposób implementowane zmiany wpływają na ryzyko biznesowe lub zakłócają doświadczenia użytkownika końcowego, wzrost częstotliwości i szybkości tych procesów może stać się dodatkowym obciążeniem, a nie korzyścią.

Podsumowanie nasuwa się samo – ciągłe testowanie jest niezbędne. Odpowiednio wdrożone i realizowane (procesy i narzędzia spójnie adresujące wszystkie aspekty kontroli jakości), staje się głównym elementem zwinnego procesu wytwórczego. Pozwala zarówno sprostać dynamice zmian w otoczeniu biznesowym, jak i wykorzystać potencjał postępu technologicznego.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

Contact

Drop us a cord completing the form below or at cord@secorda.com. You can also call us +48 570 640 600