Dawid Gierut, Test Leader

Czas czytania: 6 min

Na światowym rynku IT, pomimo odczuwalnych ograniczeń, nadal obserwujemy ciągły rozwój trendów technologicznych. Dynamiczny postęp w dziedzinach sztucznej inteligencji, aplikacji mobilnych czy klasycznych aplikacji webowych, wymaga od nas ciągłej adaptacji procesów związanych z ich wytwarzaniem. Dotyczy to również testowania. Przystępując do budowania testów dla nowego projektu, musimy być gotowi na wiele wyzwań. 

Skuteczne dopasowanie rodzaju testów do cech projektu zwiększa efektywność pracy zespołu deweloperskiego, przyczynia się do optymalizacji zasobów i skraca czas potrzebny do wprowadzenia gotowego produktu na rynek. Na jakich aspektach powinny koncentrować się testy, uwzględniając specyfikę oraz typ projektu? Na to pytanie postaram się odpowiedzieć poniżej. 

Czym tak naprawdę jest testowanie oprogramowania?

Z pewnością każda osoba związana z tematem testów oprogramowania usłyszała to pytanie przynajmniej raz w życiu (i mam nadzieję, że znała odpowiedź 😉). Dla pozostałych czytających pokrótce wyjaśnię to zagadnienie.

Powszechny stereotyp na temat testów często sprowadza je jedynie do „klikania po aplikacji” i zgłaszania błędów, gdy coś nie działa. To po części prawda – podczas testowania oprogramowania zależy nam na wykryciu jak największej liczby potencjalnych błędów. Jednakże czynność ta jest o wiele bardziej złożona, uwzględniając m.in. weryfikację, czy oprogramowanie spełnia określone wymagania biznesowe, oraz walidację, czy odpowiada na oczekiwania użytkownika. Aby osiągnąć te cele, stosujemy proces testowy, który składa się z ustandaryzowanych etapów.

Testing phases

Warto podkreślić, że testowanie należy rozpocząć możliwie jak najwcześniej, najlepiej już w fazie tworzenia dokumentacji.

Znaczenie dopasowania typów testów do różnych rodzajów projektów

Projekty IT można podzielić na wiele kategorii: aplikacje mobilne, webowe, desktopowe, systemy wbudowane, rozwiązania oparte na chmurze czy aplikacje mikrousługowe. Każda z tych kategorii ma swoje kluczowe aspekty funkcjonowania, dlatego ważne jest, aby testerzy stosowali odpowiednie typy testów dla każdej z nich, w celu uzyskania najlepszych rezultatów.

Mamy wiele dostępnych możliwości. Dokładne przedstawienie każdej z nich wymagałoby osobnego artykułu, dlatego ograniczę się do ich krótkiego opisu.

Testy funkcjonalne – ich głównym celem jest weryfikacja zgodności aplikacji z wymaganiami. Zaliczamy do nich między innymi: testy jednostkowe, testy integracyjne, testy systemowe oraz testy eksploracyjne.

Testy niefunkcjonalne – zaliczamy do nich testy wydajnościowe, testy obciążeniowe/przeciążające, testy użyteczności, testy bezpieczeństwa czy testy kompatybilności.

Testy strukturalne – dotyczą kodu i służą weryfikacji, czy operacje zaimplementowane w metodach są poprawnie wykonywane. Wyrażane są procentowo w odniesieniu do pokrycia nimi określonej części struktury kodu.

Ponadto wyróżniamy także testy regresji, testy dymne i testy automatyczne.

Aplikacje webowe

Rozważając, jakie testy należy przeprowadzić podczas sprawdzania funkcjonalności aplikacji webowej, warto zadać pytanie o jej specyfikę. Oprócz konieczności przeprowadzenia klasycznych testów funkcjonalnych, eksploracyjnych czy regresyjnych, musimy także poznać odpowiedź na szereg istotnych pytań, takich jak: jak aplikacja radzi sobie z dużą liczbą jednoczesnych sesji, czy jest odporna na ataki z zewnątrz (z racji jej „ekspozycji” w sieci, szczególnie jeśli przechowuje istotne dane, np. finansowe), oraz czy jest intuicyjna i łatwa w użytkowaniu.

Zatem już wiemy, że musimy przeprowadzić testy wydajnościowe, bezpieczeństwa oraz testy UI/użyteczności. Kolejne ważne zagadnienie to kompatybilność z wymaganymi przeglądarkami, systemami czy urządzeniami mobilnymi. Ważne jest, aby dla wszystkich powyższych aspektów mieć zdefiniowane wymagania biznesowe, które stanowić będą podstawę naszych testów. Pamiętajmy także o możliwości wsparcia się testami automatycznymi, na przykład w kwestii testów regresyjnych.

Aplikacje mobilne

Testy aplikacji mobilnej mają wiele cech wspólnych z opisanymi wyżej testami aplikacji webowych. Podobnie jak w przypadku aplikacji webowych, z uwagi na ogromną różnorodność urządzeń mobilnych i wielkości ekranów, konieczne będzie przeprowadzenie testów kompatybilności. Ponadto, musimy także zrealizować testy UI, wydajności (choć tutaj bardziej pod kątem np. zużycia baterii), bezpieczeństwa oraz użyteczności. Ponieważ mamy do czynienia z urządzeniem mobilnym, pamiętajmy o przetestowaniu, czy wszelkie aspekty związane ze zmianą lokalizacji (takie jak np. czas czy korzystanie z GPS) działają poprawnie.

Tutaj także przeprowadzimy testy funkcjonalne, eksploracyjne, dymne (ang. smoke tests) czy regresji, i podobnie jak w powyższych przypadkach, możemy wesprzeć się automatyzacją.

Aplikacje desktopowe

Testując aplikacje desktopowe, będziemy mieć do czynienia nie tylko z różnymi systemami operacyjnymi, z którymi rozwiązanie musi współpracować, ale także z hardware’owym wyzwaniem, jakim jest ogromna różnorodność konfiguracji sprzętowych. Co za tym idzie, testy kompatybilności, jakie należy wykonać w tym przypadku, będą musiały być znacznie szersze. Kolejna różnica w porównaniu do np. aplikacji webowych to konieczność przeprowadzenia testów instalacji/deinstalacji.

Pozostałe typy testów, takie jak testy funkcjonalne, wydajności, bezpieczeństwa, UI/użyteczności, regresji – pozostają bez zmian.

Aplikacje chmurowe

Zacznijmy od tego, że aplikacje chmurowe działają w złożonych i zmieniających się środowiskach, co wymaga elastycznego podejścia do procesu testowego oraz tworzy wyzwania, takie jak konieczność wdrażania coraz to nowszych narzędzi. W odróżnieniu od wyżej opisanych aplikacji, w tym przypadku bardzo istotna będzie weryfikacja skalowalności, czyli tego, jak aplikacja reaguje na ciągle zmieniające się zasoby.

Z innych nowych typów testów, które nie zostały wcześniej omówione, ale tym razem będą musiały zostać wykonane, to testy migracji danych, na przykład z lokalnych aplikacji do chmury – ich zadaniem jest weryfikacja, czy zmigrowane dane są kompletne. Ponadto, ważne będą testy backupu i przywracania aplikacji do poprzedniego stanu. Z racji zewnętrznej ekspozycji, podobnie jak w przypadku aplikacji mobilnych, krytyczna jest kwestia weryfikacji bezpieczeństwa i odporności na wpływy.

Systemy wbudowane

W przypadku systemów wbudowanych mamy do czynienia z bardzo dużym ograniczeniem sprzętowym oraz specyficznymi warunkami działania. Najistotniejsza jest ich niezawodność, z racji tego, że systemy wbudowane często są integralną częścią urządzenia (np. konsoli do gier), bez której nie będzie ono działać. Dlatego też testy funkcjonalne, które przeprowadzimy tym razem, będą się skupiać na interakcjach ze sprzętem.

Inne typy testów, konieczne do przeprowadzenia w tym przypadku, to testy wydajnościowe, obciążeniowe, integracyjne oraz standardowo – bardzo ważne testy bezpieczeństwa.

Aplikacje mikrousługowe

Chcąc przeprowadzić testy aplikacji opartej na mikrousługach, musimy w pierwszej kolejności zrozumieć sposób jej działania.

Planując testy, powinniśmy mieć na uwadze, iż występuje tutaj integracja współpracujących ze sobą komponentów oraz wielu niezależnych usług. Zatem w tym przypadku jednym z ważniejszych elementów procesu powinno być zaplanowanie i wykonanie zarówno testów tych komponentów w izolacji (testy jednostkowe), jak i ich testów integracyjnych.

Dla uzyskania odpowiedzi na pytanie, czy aplikacja po zintegrowaniu komponentów działa poprawnie, istotne jest także zaplanowanie i wdrożenie testów E2E (ang. end-to-end testing).

Dodatkowo konieczne będzie przeprowadzenie niezbędnych testów wydajnościowych, bezpieczeństwa oraz obciążeniowych, np. sprawdzających zachowanie aplikacji po awarii infrastruktury związanej z tylko jednym mikroserwisem.

Bardzo często w ramach testów przeprowadza się także celową symulację awarii poszczególnych mikroserwisów, aby sprawdzić, czy będą one w stanie uruchomić się ponownie samodzielnie (z założenia mikroserwisy powinny posiadać taką funkcję).

Rola wyboru testów w zapewnianiu wysokiej jakości aplikacji

Podsumowując, każdy projekt wymaga indywidualnego podejścia do testowania, dopasowanego do unikalnych cech danego typu aplikacji. Możemy z pewnością stwierdzić, że zbudowanie dobrego procesu testowego, wraz z właściwym doborem typów testów do przeprowadzenia, umożliwi zapewnienie najwyższej jakości naszej aplikacji.

Potrzebujesz wsparcia ekspertów w tworzeniu wieloplatformowej aplikacji mobilnej?

Ailleron - Adjusting the test type to the application’s specifics

Dawid Gierut Test Leader

Doświadczony menadżer kierujący pracami zespołu testowego. Zaangażowany w budowanie i wdrażanie procesów testowych, tworzenie dokumentacji, planowanie testów UAT, przeprowadzanie analizy ryzyka oraz raportowanie postępów i błędów. Koordynuje przeprowadzanie testów systemowych w celu zapewnienia jakości i funkcjonalności rozwiązania oraz wspiera realizację testów akceptacyjnych po stronie klienta. Posiada doświadczenia w metodykach Scrum i Kanban.

linie abstrakcyjne

Razem stwórzmy łatwe
i przyjemne doświadczenia finansowe!

Powiedz nam, czego potrzebujesz, a my się z Tobą skontaktujemy.

Powiedz nam, czego potrzebujesz, a my się z Tobą skontaktujemy.