Close

Różne rodzaje testowania oprogramowania

Porównaj różne rodzaje testowania oprogramowania, takie jak m.in. testowanie jednostkowe, testowanie integracyjne, testowanie funkcjonalne czy testowanie akceptacyjne.

Portret Stena Pitteta
Sten Pittet

Autor współpracujący


Istnieje wiele technik testowania oprogramowania, które możesz wykorzystać, aby upewnić się, że zmiany w kodzie działają zgodnie z oczekiwaniami. Nie wszystkie testy są jednak sobie równe. Sprawdzamy, jak niektóre praktyki testowania różnią się od siebie.

Testowanie ręczne a zautomatyzowane


Ważne jest, aby dokonać rozróżnienia między testami ręcznymi i zautomatyzowanymi. Testowanie ręczne przeprowadzamy osobiście, klikając w aplikacji lub wchodząc w interakcję z oprogramowaniem i interfejsami API za pomocą odpowiednich narzędzi. Proces ten jest bardzo kosztowny, ponieważ wymaga, aby ktoś skonfigurował środowisko i wykonał testy samodzielnie, a ponadto może być podatny na błędy ludzkie, ponieważ tester może popełnić literówki lub pominąć kroki w skrypcie testowym.

Zautomatyzowane testy są natomiast przeprowadzane przez maszynę, która wykonuje napisany wcześniej skrypt testowy. Testy te mogą różnić się od siebie pod względem złożoności: od sprawdzenia pojedynczej metody w klasie po upewnienie się, że wykonanie sekwencji złożonych czynności w interfejsie użytkownika prowadzi do tych samych wyników. Są one znacznie bardziej solidne i niezawodne niż testy ręczne, ale jakość testów automatycznych zależy od tego, jak dobrze napisano skrypty testowe. Jeśli dopiero zaczynasz testowanie, zapoznaj się z naszym samouczkiem dotyczącym ciągłej integracji, który pomoże Ci w stworzeniu pierwszego zestawu testów. Szukasz więcej narzędzi do testowania? Zapoznaj się z tymi samouczkami dotyczącymi testowania DevOps.

Zautomatyzowane testowanie jest kluczowym elementem ciągłej integracji i ciągłego dostarczania oraz świetnym sposobem na skalowanie procesu QA, gdy dodajesz nowe funkcje do aplikacji. Jednak niektóre testy ręczne nadal są wartościowe — dotyczy to zwłaszcza tzw. testów eksploracyjnych, o których będzie mowa w tym przewodniku.

Poznaj rozwiązanie

Tworzenie i obsługa oprogramowania za pomocą Open DevOps

Materiały pokrewne

Zautomatyzowane testowanie na potrzeby DevOps

Różne rodzaje testów


1. Testy jednostkowe

Testy jednostkowe są wykonywane na bardzo niskim poziomie, blisko źródła aplikacji. Polegają one na testowaniu poszczególnych metod i funkcji klas, komponentów lub modułów używanych przez oprogramowanie. Testy jednostkowe można zazwyczaj dość tanio zautomatyzować i bardzo szybko uruchomić przy pomocy serwera ciągłej integracji.

2. Testy integracyjne

Testy integracyjne pozwalają sprawdzić, czy poszczególne moduły lub usługi wykorzystywane przez aplikację dobrze ze sobą współpracują. Przykładem może być testowanie interakcji z bazą danych lub upewnienie się, że mikrousługi współpracują ze sobą w oczekiwany sposób. Tego typu testy są droższe do przeprowadzenia, ponieważ wymagają uruchomienia wielu części aplikacji.

3. Testy funkcjonalne

Testy funkcjonalne kładą nacisk na wymagania biznesowe aplikacji. Weryfikują one jedynie dane wyjściowe czynności i nie sprawdzają stanów pośrednich systemu podczas jej wykonywania.

Testy integracyjne i funkcjonalne są czasami mylone, ponieważ jedne i drugie wymagają interakcji pomiędzy wieloma komponentami. Różnica polega na tym, że w ramach testu integracyjnego można po prostu sprawdzić, czy możliwe jest wysłanie zapytania do bazy danych, podczas gdy test funkcjonalny oczekiwałby uzyskania określonej wartości z bazy danych, jak określono w wymaganiach produktu.

4. Testy kompleksowe

W ramach testów kompleksowych zachowanie użytkownika w oprogramowaniu jest replikowane w kompletnym środowisku aplikacji. Pozwalają one zweryfikować, czy różne przepływy użytkowników działają zgodnie z oczekiwaniami. Mogą być proste, np. załadowanie strony internetowej lub zalogowanie się, oraz znacznie bardziej złożone, np. weryfikacja powiadomień e-mail, płatności online itp.

Testy kompleksowe są bardzo przydatne, ale drogie do wykonania. Ponadto mogą być trudne do utrzymania, gdy są zautomatyzowane. Zaleca się wprowadzenie kilku kluczowych testów kompleksowych i poleganie w większym stopniu na niższych poziomach testowania (testy jednostkowe i integracyjne), co pozwoli szybko identyfikować zmiany.

5. Testy akceptacyjne

Testy akceptacyjne to formalne testy weryfikujące, czy system spełnia wymagania biznesowe. Wymagają one uruchomienia całej aplikacji na czas testowania i skupiają się na replikowaniu zachowań użytkowników. Mogą jednak także mierzyć wydajność systemu oraz odrzucać zmiany w przypadku niespełnienia określonych celów.

6. Testy wydajności

Testy wydajności oceniają, jak system zachowuje się przy określonym obciążeniu. Testy te pomagają zmierzyć niezawodność, szybkość, skalowalność i responsywność aplikacji. W ramach testu wydajności można na przykład obserwować czasy odpowiedzi przy wykonywaniu dużej liczby żądań lub określić, jak system zachowuje się przy znacznej ilości danych. Tego typu testy pozwalają m.in. ustalić, czy aplikacja spełnia wymagania dotyczące wydajności, zlokalizować wąskie gardła czy zmierzyć stabilność podczas największego natężenia ruchu.

7. Testy smoke

Testy smoke to podstawowe testy sprawdzające podstawową funkcjonalność aplikacji. Mają być szybkie do wykonania, a ich celem jest zapewnienie, że główne funkcje systemu działają zgodnie z oczekiwaniami.

Testy smoke mogą być przydatne zaraz po stworzeniu nowej kompilacji, kiedy można po ich przeprowadzeniu zdecydować o uruchomieniu droższych testów, lub zaraz po wdrożeniu, w celu upewniania się, że aplikacja działa poprawnie w nowo wdrożonym środowisku.

Jak zautomatyzować testy


Aby zautomatyzować testy, trzeba najpierw napisać je programowo, używając struktury testowej, która pasuje do aplikacji. PHPUnit, Mocha czy RSpec to przykłady struktur testowych, które można wykorzystać odpowiednio dla języków PHP, JavaScript i Ruby. W przypadku każdego języka istnieje wiele opcji, można więc je przeanalizować i zapytać społeczność programistów, która będzie najlepsza w konkretnym przypadku.

Gdy testy można wykonać za pomocą skryptu z terminala, możesz zlecić ich automatyczne wykonanie przez serwer ciągłej integracji, taki jak Bamboo, lub użyć usługi chmurowej, takiej jak Bitbucket Pipelines. Narzędzia te będą monitorować repozytoria i wykonywać zestaw testów za każdym razem, gdy do głównego repozytorium zostaną wprowadzone zmiany.

Każda zmiana wprowadzona w repozytorium jest weryfikowana dzięki Bitbucket Pipelines

Jeśli dopiero zaczynasz testowanie, zapoznaj się z naszym samouczkiem dotyczącym ciągłej integracji, który pomoże Ci w stworzeniu pierwszego zestawu testów.

Testowanie eksploracyjne


Im więcej funkcji i ulepszeń znajdzie się w Twoim kodzie, tym więcej testów będzie trzeba przeprowadzić, aby upewnić się, że cały system działa poprawnie. Warto byłoby też sprawdzić w przypadku każdego naprawionego błędu, czy nie pojawia się on w nowszych wydaniach. Automatyzacja jest kluczem, który to umożliwia, a pisanie testów prędzej czy później stanie się częścią Twojego przepływu pracy programistycznej.

Pojawia się więc pytanie, czy warto jeszcze przeprowadzać testy ręczne? Krótka odpowiedź brzmi: tak. Najlepszym rozwiązaniem może być przeprowadzenie testów eksploracyjnych, które pozwalają wykryć nieoczywiste błędy.

Sesja testów eksploracyjnych nie powinna być dłuższa niż dwie godziny i należy jasno określić jej zakres, aby pomóc testerom skupić się na konkretnym obszarze oprogramowania. Gdy wszyscy testerzy otrzymają już informacje, należy wykonać różne czynności, aby sprawdzić, jak zachowuje się system.

Uwaga na temat testowania


Na zakończenie tego przewodnika należy poruszyć temat celu testowania. Choć ważne jest, aby przetestować, czy użytkownicy mogą faktycznie korzystać z aplikacji (zalogować się i zapisać obiekt), równie ważne jest przetestowanie, czy aplikacja nie ulegnie awarii, gdy zostaną wprowadzone złe dane lub wykonane nieoczekiwane czynności. Musisz przewidzieć, co się stanie, gdy użytkownik zrobi literówkę, spróbuje zapisać niekompletny formularz lub użyje niewłaściwego interfejsu API. Trzeba sprawdzić, czy ktoś może łatwo naruszyć dane lub uzyskać nieuprawniony dostęp do zasobu. Dobry zestaw testów powinien próbować zepsuć aplikację i pomóc zrozumieć jej granice.

Należy pamiętać, że testy to też kod! Nie zapominaj więc o nich podczas przeglądu kodu, ponieważ mogą stanowić ostatnią fazę procesu produkcji.

Open DevOps firmy Atlassian zapewnia dostęp do otwartej platformy łańcucha narzędzi umożliwiającej tworzenie pipeline'u programistycznego opartego na CD z wykorzystaniem ulubionych narzędzi. Dowiedz się, jak wykorzystać narzędzia firmy Atlassian i innych firm, aby włączyć testowanie do przepływu pracy, sięgając do naszych samouczków dotyczących testowania DevOps.

Sten Pittet
Sten Pittet

Od 10 lat pracuję w branży oprogramowania na różnych stanowiskach — od tworzenia rozwiązań po zarządzanie produktem. Przez ostatnie 5 lat opracowywałem w Atlassian narzędzia dla programistów, a obecnie piszę o tworzeniu oprogramowania. Poza pracą doskonalę swoje umiejętności ojcowskie, opiekując się wspaniałym maluchem.


Udostępnij ten artykuł

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ilustracja DevOps

Społeczność DevOps

Ilustracja DevOps

Przeczytaj blog

Ilustracja przedstawiająca mapę

Zacznij korzystać za darmo

Zapisz się do newslettera DevOps

Thank you for signing up