Automatyzacja. Kiedy to ma sens?

Automatyzacja. Kiedy to ma sens?
Automatyzacja i testy manualne to dwie główne metody uruchomienia testów, a każda z nich ma odrębną listę zalet i zastosowań. Kiedy warto sięgnąć po automatyzację, a kiedy lepiej polegać na testach manualnych? Ten wybór to jedno z najważniejszych strategicznych rozważań, które wpływa na jakość oprogramowania, efektywność projektu i końcowe koszty.
testerzy+

Testy manualne są istotne przy testowaniu tych aspektów, które są trudne do zautomatyzowania - takich jak testy użytkownika (UAT) lub testy związane z doświadczeniem użytkownika (UX). Testy manualne pozwalają na testowanie eksploracyjne, przez co testerzy w trakcie procesu są w stanie odkrywać nowe scenariusze testowe. Przydają się one szczególnie w projektach, które nie są często zmieniane albo gdzie testy są wykonywane raz (albo sporadycznie).

Wybór między automatyzacją a testami manualnymi jest uzależniony od konkretnego, realizowanego projektu, jego wymagań i celów. Często obie metody mogą być używane razem, pozwalając w ten sposób osiągnąć jeszcze lepsze rezultaty. Automatyzacja zwiększa efektywność testowania, podczas gdy testy manualne dają elastyczność i bardziej subiektywne oceny aspektów użytkowania. Testy automatyczne są szybkie, powtarzalne i precyzyjne, przez co stają się atrakcyjnym wyborem. Zdarzają się jednak sytuacje, w których testy manualne wciąż zachowują swoją wartość i nie rekomenduje się zastępowania ich automatyzacją. Wybór między automatyzacją a testami manualnymi to nie tylko kwestia narzędzi, to również strategia, która wpływa na jakość oprogramowania i końcowy sukces projektu. 

Kiedy automatyzacja ma sens?

Automatyzacja testów staje się niezastąpiona w wielu przypadkach, szczególnie w projektach oprogramowania o dużym zakresie lub w trakcie rozwoju aplikacji o skomplikowanej architekturze. Poniżej znajdziecie kilka przykładów testów, które powinny być zautomatyzowane, oraz korzyści, które w tych przypadkach wynikają z automatyzacji:

Rodzaj testów Opis Korzyść z automatyzacji
Testy regresji testowanie wszystkich istniejących funkcji aplikacji po każdej aktualizacji pozwala na szybkie i dokładne sprawdzanie, czy nowe zmiany nie wprowadziły defektów w istniejących funkcjach; oszczędza czas i minimalizuje ryzyko ludzkich błędów
Testy wydajnościowe symulacja wielu użytkowników (zapytań) korzystających jednocześnie z aplikacji, aby ocenić jej wydajność umożliwia kontrolowane i powtarzalne testowanie wydajności, co pozwala na identyfikację słabych punktów i optymalizację aplikacji
Testy obciążeniowe testowanie, jak aplikacja zachowuje się przy dużym obciążeniu lub w pikach jej użytkowania pozwala na symulację dużej liczby użytkowników lub żądań, co pozwala na identyfikację problemów z wydajnością i skalowalnością
Testy poprawności działania w wielu środowiskach testowanie aplikacji na różnych środowiskach, przeglądarkach i systemach operacyjnych zapewnia spójność testów na różnych platformach, a to pomaga w identyfikacji problemów z kompatybilnością
Testy jednostkowe testowanie kodu w oparciu o popularne biblioteki XUnitowe pozwalają potwierdzać poprawność działania kodu przy pierwszym uruchomieniu i weryfikacje regresu po zmianach
Analiza statyczna kodu uruchomianie predefiniowanych reguł Pozwala sprawdzić poprawność za zgodność z regułami. Redukuje dług technologiczny i poprawia utrzymywalność kodu
Testy interfejsu API testowanie interakcji między różnymi częściami aplikacji poprzez API ułatwia tworzenie testów API, co pozwala na szybkie sprawdzanie integracji i poprawności przekazywanych danych
Testy bezpieczeństwa testowanie aplikacji pod kątem podatności na ataki hakerskie pozwala na przeprowadzanie regularnych testów bezpieczeństwa, przez co można identyfikować i naprawiać luki w zabezpieczeniach
Testy ciągłej integracji powtarzalne testy uruchomiane przy kolejnych wersjach w ramach ciągłej integracji eliminuje ryzyko defektów i przyspiesza proces testowania, a to jest kluczowe w przypadku częstego powtarzania testów

Można spojrzeć na testy zautomatyzowane jeszcze w innych zakresach. 

Rodzaj testów Częstotliwość uruchamiania Przydatność / ograniczenia
Testy regresji po zmianie weryfikacja tylko pokrytych przez testy funkcji
Testy wydajnościowe przy ważniejszych kamieniach milowych projektu diagnozowanie pogorszenia charakterystyki wydajności jedynie w pokrytych scenariuszach
Testy obciążeniowe przy ważniejszych kamieniach milowych projektu diagnozowanie potencjalnego problemu braku obsługi skrajnych wartości użytkowników
Testy poprawności działania w wielu środowiskach po ważniejszych zmianach możliwość sprawdzenia jedynie podstawowych funkcji
Testy jednostkowe po każdym commicie sprawdza poprawność kodu, nie nadaje się do weryfikacji sprawdzenia poprawności funkcjonalnej na GUI
Analiza statyczna kodu po każdym commicie sprawdza jedynie zdefiniowane reguły
Testy interfejsu API po zmianie API zazwyczaj koncentruje się na pozytywnych przypadkach
Testy bezpieczeństwa Po zmianie ma niewielką zdolność sprawdzenia podatności i nadaje się jedynie do podstawowych i najbardziej popularnych weryfikacji
Testy ciągłej integracji po zmianie można w nich umieścić testy jednostkowe, analizę, regresję, wydajność i inne.

Głównymi korzyściami automatyzacji w tych przypadkach są: oszczędność czasu, zwiększenie dokładności wyników, skrócenie cyklu testowania oraz możliwość szybkiego reagowania na zmiany w projekcie. Dodatkowo, automatyzacja pozwala też na regularne monitorowanie wydajności oraz zgodności, co pomaga w utrzymaniu wysokiej jakości oprogramowania.

Kiedy testy manualne mają sens?

Testy manualne sprawdzą się szczególnie tam, gdzie wymagane jest ludzkie zrozumienie, intuicja i subiektywna ocena. Przykłady testów, które lepiej wykonać ręcznie oraz zalety płynące z zastosowania tego rozwiązania przedstawia poniższa tabela:

Rodzaj testów Opis Zalety testowania manualnego
Testy użytkownika ocena wygody i użyteczności aplikacji przez użytkowników końcowych pozwala ocenić, czy aplikacja jest intuicyjna i spełnia oczekiwania użytkowników
Testy eksploracyjne nieformalne testowanie aplikacji w celu odkrycia nietypowych defektów lub pokrycia niestandardowych scenariuszy kreatywność i intuicja testera umożliwia znalezienie nietypowych problemów, które mogłyby zostać pominięte w innych testach
Testy graficznego interfejsu ocena estetyki i spójności interfejsu użytkownika ludzie mogą lepiej ocenić estetykę i interakcje interfejsu użytkownika, jest to trudne do zautomatyzowania
Testy kompatybilności z urządzeniami na poziomie GUI sprawdzanie, jak aplikacja działa na różnych urządzeniach, takich jak telefony komórkowe i tablety dostosowanie testów do różnych urządzeń i dostarczenie bardziej szczegółowych informacji na temat kompatybilności
Testy bezpieczeństwa weryfikowane przez etycznych hakerów poszukiwanie podatności i luk bezpieczeństwa w aplikacji przez specjalistów ds. bezpieczeństwa etyczni hakerzy wykorzystują swoje umiejętności i wiedzę, aby znaleźć potencjalne zagrożenia
Testy UX badanie doświadczenia użytkownika podczas korzystania z aplikacji dostarcza wartościowych informacji na temat jakości interakcji użytkownika z aplikacją i pomaga sugerować ulepszenia

Testy manualne pozwalają na subiektywną ocenę jakości oprogramowania, czego nie da się osiągnąć przez automatyzację. Testerzy dostosowują swoje podejście do testowania w zależności od konkretnej sytuacji, co sprawia, że są bardziej elastyczni. W przypadku nowych projektów, gdzie nie ma jeszcze stabilnej automatyzacji, testy manualne są często jedyną dostępną opcją.

Wyzwania automatyzacji testów

Automatyzacja testów niesie ze sobą wiele korzyści, ale również wiąże się z pewnymi trudnościami, ograniczeniami i zagrożeniami. Wprowadzenie automatyzacji może być kosztowne ze względu na zakup narzędzi, szkolenia i rozwijanie skryptów testowych. Skrypty automatyczne wymagają stałego utrzymania i aktualizacji w miarę zmian wprowadzanych w aplikacji, co niesie za sobą ryzyko dużego dodatkowego nakładu pracy. Biorąc pod uwagę automatyzację testów interfejsu użytkownika, może być ona trudna ze względu na zmienność elementów UI i różnice pojawiające się między poszczególnymi przeglądarkami. Automatyzacja wyklucza też kreatywność, będąc ograniczona w odkrywaniu nowych, nietypowych scenariuszy testowych, które testerzy mogą zidentyfikować podczas testów manualnych.

Automatyzacja może prowadzić do fałszywych wyników, zarówno pozytywnych (niepoprawne zgłaszanie defektów), jak i negatywnych (pomijanie rzeczywistych defektów). Bez odpowiedniego planowania automatyzacja może prowadzić do przeprowadzania testów, które nie wniosą żadnej wartości, takie jak zbyt wiele testów regresji. Nadmierna automatyzacja skutkuje też czasem zaniedbaniem testów manualnych, które są nadal istotne w niektórych sytuacjach, a skrypty automatyczne zdarzają się być mniej elastyczne w odniesieniu do zmian w aplikacji niż testerzy manualni. W końcu, automatyzacja uzależnia testera od narzędzi i technologii, a to komplikuje przenoszenie testów między różnymi projektami lub narzędziami.

Z automatyzacją wiąże się też problem tzw. flaky test (niemożliwe do przetłumaczenia), czyli testów, które zwracają rezultat albo "przeszło", albo "nie przeszło" bez zmian w testowanym oprogramowaniu. Testy te, gdy pojawią się w projekcie, powodują wiele problemów jak np. niestabilność wykonania, która może przekładać się na konieczność dodatkowych, często zbędnych, analiz.  

Podjęcie decyzji dotyczącej automatyzacji testów w projekcie jest kluczowe dla osiągnięcia wysokiej jakości tworzonego oprogramowania. Co może pomóc w dokonaniu wyboru?

  1. Trzeba zrozumieć, jakie są cele projektu, jego zakres i priorytety, co umożliwi określenie, które testy są kluczowe dla sukcesu projektu.
  2. Trzeba zidentyfikować główne ryzyka projektu i zastanowić się, które z nich można zminimalizować za pomocą testów automatycznych albo manualnych.
  3. Pomoże ocena testów pod kątem ich złożoności, powtarzalności i trudności w automatyzacji. Testy bardziej skomplikowane i czasochłonne mogą być bardziej odpowiednie do automatyzacji.
  4. Konieczne będzie ocenienie dostępnych zasobów, w tym budżetu, czasu i wiedzy zespołu. Automatyzacja może wymagać większych nakładów początkowych.
  5. Jeśli mamy do czynienia z projektem o szybkim cyklu rozwoju, automatyzacja może być bardziej uzasadniona ze względu na częste zmiany i potrzebę szybkiego testowania.
  6. Jeśli projekt musi spełniać określone standardy branżowe (np. ISO), warto zrozumieć, czy automatyzacja jest wymagana do spełnienia tych standardów.

Niestety nigdy nie będzie jednego rozwiązania, które pasuje do wszystkich sytuacji.

Jeśli jesteście zainteresowani bardziej zaawansowanym podejściem, polecamy nasze szkolenie "Praktyka automatyzacji testowania", w trakcie którego zgłębicie ten temat i zdobędziecie umiejętności potrzebne do efektywnego wykorzystania automatyzacji w testowaniu. To dobra okazja do rozwijania się w tej dziedzinie.

Źródła:
https://testguild.com/what-to-automate/

To powinno Cię zainteresować