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?
- Trzeba zrozumieć, jakie są cele projektu, jego zakres i priorytety, co umożliwi określenie, które testy są kluczowe dla sukcesu projektu.
- Trzeba zidentyfikować główne ryzyka projektu i zastanowić się, które z nich można zminimalizować za pomocą testów automatycznych albo manualnych.
- 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.
- 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.
- 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.
- 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.