Czym jest testowanie oprogramowania?

Discover how to deliver better software and systems in rapidly scaling environments. Join our Community

Ten kompleksowy przewodnik przedstawia testowanie oprogramowania, obejmując najważniejsze pojęcia i praktyczne narzędzia dla początkujących i ekspertów. Poznaj różnice między testowaniem manualnym a automatycznym, testowaniem funkcjonalnym i niefunkcjonalnym oraz dowiedz się, jak poruszać się po cyklu życia testowania oprogramowania.

Zapewnianie jakości zyskuje coraz większą popularność. Eksperci szacują, że liczba stanowisk związanych z testowaniem w samych Stanach Zjednoczonych wzrośnie o 25% w ciągu następnej dekady. Jeśli Cię to interesuje, możesz zastanawiać się, od czego zacząć naukę testowania oprogramowania.

W tym artykule odpowiem na pytania, które pomogą Ci rozpocząć naukę testowania oprogramowania. Omówię, czym jest testowanie oprogramowania, najważniejsze pojęcia związane z testowaniem oraz wybrane narzędzia do testowania oprogramowania, które warto rozważyć. 

Wyjaśnienie testowania oprogramowania

Proces obejmujący wszystkie działania związane z cyklem życia, zarówno statyczne, jak i dynamiczne, dotyczące planowania, przygotowania i oceny komponentu lub systemu oraz powiązanych produktów pracy, mający na celu określenie, czy spełniają one określone wymagania, wykazanie, że nadają się do zamierzonego celu, oraz wykrycie defektów.

glosariusz ISTQB

Testowanie oprogramowania odgrywa ważną rolę w procesie tworzenia oprogramowania, ponieważ pozwala zweryfikować, czy aplikacja działa zgodnie z założeniami oraz spełnia wymagania i oczekiwania użytkowników końcowych.

Celem jest zidentyfikowanie defektów, błędów i niespójności w aplikacji przed jej udostępnieniem użytkownikom. Testowanie obejmuje uruchamianie oprogramowania w różnych warunkach, konfiguracjach i scenariuszach, aby upewnić się, że działa ono prawidłowo i wydajnie.

Jeśli ciekawi Cię, jak rozpocząć pracę w dziedzinie testowania oprogramowania, oto lista często zadawanych pytań podczas rozmów kwalifikacyjnych dotyczących QA (wraz z odpowiedziami!).

Cykl życia testowania oprogramowania

Cykl życia testowania oprogramowania (STLC) to proces stosowany przez testerów oprogramowania, aby zapewnić, że testowana aplikacja spełnia określone standardy jakości i wymagania. STLC zazwyczaj składa się z kilku faz, których celem jest dokładne przetestowanie aplikacji oraz zapewnienie, że przed udostępnieniem jej użytkownikom końcowym osiągnie ona pożądany poziom jakości. Poniżej przedstawiono fazy cyklu życia testowania oprogramowania:

Analiza wymagań

W tej fazie testerzy oprogramowania analizują wymagania i specyfikacje. Identyfikują wymagania funkcjonalne i niefunkcjonalne, poznają przeznaczenie aplikacji oraz jej grupę docelową, a następnie odpowiednio opracowują przypadki testowe i scenariusze.

Planowanie testów

W tej fazie zespół testowy określa zakres testów, podejście do testowania oraz zasoby wymagane do przeprowadzenia testów. Plan testów identyfikuje również ryzyka i ograniczenia związane z procesem testowania oraz określa harmonogram testów.

Projektowanie testów

W tej fazie zespół testowy projektuje przypadki testowe i scenariusze na podstawie wymagań i specyfikacji. Identyfikuje również dane testowe wymagane do przeprowadzenia testów oraz tworzy skrypty testowe automatyzujące proces testowania.

Wykonywanie testów

Testerzy wykonują przypadki testowe i scenariusze zaprojektowane w poprzedniej fazie. Wyniki testów są dokumentowane, a wszelkie defekty lub błędy znalezione w aplikacji są zgłaszane.

Get Free Access
Get regular tech leadership wisdom for delivering better software and systems.
Get Free Access

Have an account? Log In

Raportowanie wyników testów

W tej fazie zespół testowy przygotowuje raport zawierający wyniki testów oraz defekty zidentyfikowane podczas testowania. Raport może zawierać zalecenia dotyczące usunięcia defektów i poprawy ogólnej jakości aplikacji.

Zakończenie testów

Jest to ostatnia faza, w której zespół testowy ocenia proces testowania i identyfikuje obszary wymagające poprawy. Przygotowuje również raport końcowy testów, który podsumowuje proces testowania i jego wyniki.

Cykl życia testowania oprogramowania jest ciągłym procesem wymagającym współpracy zespołu testowego i zespołu programistycznego, aby zapewnić, że aplikacja spełnia pożądany poziom jakości i funkcjonalności.

Rodzaje testów oprogramowania 

Istnieją różne rodzaje testów oprogramowania stosowanych przez zespoły kontroli jakości, zależnie od kontekstu i wymagań projektu.

Możemy rozróżnić testowanie manualne i testowanie automatyczne, zależnie od sposobu wykonywania testów. Na podstawie tego, co jest testowane, możemy wyróżnić testowanie funkcjonalne i niefunkcjonalne. W zależności od zastosowanych metod mamy testowanie statyczne i dynamiczne. Na podstawie podejścia możemy wyróżnić testowanie białoskrzynkowe i czarnoskrzynkowe. Wyróżniamy również testowanie eksploracyjne, testy dymne i testy poprawności oraz testowanie regresyjne. Wszystkie te rodzaje testów mogą się wzajemnie pokrywać, zależnie od sposobu ich wykorzystania. 

Testowanie manualne

W przypadku testowania manualnego testy są wykonywane przez człowieka, bez użycia zautomatyzowanych narzędzi lub skryptów. Może ono być bardziej podatne na błędy i zazwyczaj zajmuje więcej czasu. 

Testowanie automatyczne

Testowanie automatyczne jest wykonywane przez maszynę, która uruchamia wcześniej przygotowane skrypty. Wymaga większej wiedzy technicznej, na przykład znajomości języka programowania i narzędzi do automatyzacji, takich jak Selenium. Może być droższe niż testowanie manualne, a niektórych aspektów procesu testowania nie można zautomatyzować.

Testowanie funkcjonalne

Testowanie funkcjonalne oznacza weryfikację tego, co robi aplikacja. Testowanie funkcjonalne sprawdza funkcje i możliwości aplikacji oraz zapewnia, że spełniają one wymagania i specyfikacje.

Testowanie niefunkcjonalne

W przeciwieństwie do testowania funkcjonalnego testy niefunkcjonalne koncentrują się na tym, jak zachowuje się aplikacja. Istnieje wiele podtypów testowania niefunkcjonalnego, zależnie od głównego celu testów. W tym artykule omówię tylko kilka z nich. 

Testowanie wydajności: mierzy czas odpowiedzi, przepustowość i skalowalność aplikacji w różnych warunkach obciążenia. Sprawdza zdolność aplikacji do jednoczesnej obsługi wielu użytkowników i transakcji oraz zapewnia, że działa ona wydajnie przy szczytowym obciążeniu.

Testowanie obciążenia: symuluje rzeczywiste obciążenia generowane przez użytkowników i jest przeprowadzane w celu określenia zachowania systemu w normalnych i szczytowych warunkach. Służy do ustalenia, czy infrastruktura używana do hostowania aplikacji jest wystarczająca, oraz informuje nas, ilu jednoczesnych użytkowników może obsłużyć aplikacja i jaka skala aplikacji jest wymagana pod względem sprzętu, przepustowości sieci itp., aby większa liczba użytkowników mogła uzyskać dostęp do aplikacji.

Testowanie przeciążeniowe: polega na testowaniu poza normalną wydajnością, często aż do punktu awarii, aby zaobserwować wyniki. Celem jest zapewnienie, że oprogramowanie nie ulegnie awarii w warunkach niewystarczających zasobów obliczeniowych (takich jak pamięć, miejsce na dysku, żądania sieciowe itp.).

Testowanie bezpieczeństwa: zapewnia, że aplikacja jest bezpieczna i chroniona przed nieautoryzowanym dostępem. Testowanie bezpieczeństwa sprawdza luki i słabe punkty w protokołach bezpieczeństwa aplikacji oraz identyfikuje potencjalne zagrożenia dla bezpieczeństwa.

Testowanie użyteczności: służy do oceny, czy aplikacja jest przyjazna dla użytkownika. Sprawdza, jak łatwo użytkownicy mogą poruszać się po aplikacji i sprawnie wykonywać zamierzone funkcje.

Testowanie dostępności: uznawane za podzbiór testowania użyteczności, testowanie dostępności przeprowadza się w celu zapewnienia, że testowana aplikacja może być używana przez osoby z niepełnosprawnościami.

Testowanie lokalizacyjne: rodzaj testowania oprogramowania, w ramach którego sprawdza się zachowanie oprogramowania dla określonego regionu, ustawień regionalnych lub kultury. Niektóre atrybuty, które należy uwzględnić podczas testowania lokalizacyjnego: poprawność tłumaczenia tekstu, waluta, jednostki miary, dozwolone znaki specjalne i formaty numerów telefonów

Testowanie kompatybilności: sprawdza, czy aplikacja jest wystarczająco sprawna, aby działać w różnych przeglądarkach, bazach danych, na różnym sprzęcie, w różnych systemach operacyjnych, na urządzeniach mobilnych i w różnych sieciach

Testowanie statyczne i dynamiczne

Testowanie statyczne opiera się na manualnym badaniu produktów pracy (tj. przeglądach) lub ocenie kodu przeprowadzanej za pomocą narzędzi (np. przeglądach kodu) albo innych produktów pracy (tj. analizie statycznej). Może być wykonywane między innymi dla specyfikacji, wymagań biznesowych, kryteriów akceptacji, kodu źródłowego, planów testów, przypadków testowych, skryptów testowych i instrukcji użytkownika. 

Testowanie dynamiczne to rzeczywiste wykonywanie testowanego oprogramowania. Może być manualne lub automatyczne, lub

Testowanie białoskrzynkowe i czarnoskrzynkowe 

Testowanie białoskrzynkowe to rodzaj testowania, w którym tester zna wewnętrzną strukturę kodu aplikacji, podczas gdy testowanie czarnoskrzynkowe przeprowadza się bez konieczności rozumienia kodu źródłowego. Każdy z tych rodzajów testowania wykorzystuje różne techniki testowania, takie jak podział na klasy równoważności, analiza wartości granicznych i tablica decyzyjna w testowaniu czarnoskrzynkowym oraz pokrycie instrukcji i pokrycie decyzji w testowaniu białoskrzynkowym.

Testowanie eksploracyjne

Testowanie eksploracyjne to rodzaj testowania opartego na doświadczeniu. Obejmuje minimalne planowanie i maksymalne wykonywanie testów. 

Czynności związane z projektowaniem i wykonywaniem testów są przeprowadzane równolegle, zazwyczaj bez formalnego dokumentowania warunków testowych, przypadków testowych ani skryptów testowych.

To przydatne podejście, gdy nie ma specyfikacji lub jest ona niewystarczająca, a czas jest bardzo ograniczony; świetnie sprawdza się również jako uzupełnienie testowania automatycznego.

Testowanie dymne 

Testowanie dymne, nazywane czasami „testowaniem weryfikacji kompilacji” lub „testowaniem pewności”,  to proces testowania oprogramowania, w ramach którego testerzy sprawdzają, czy wdrożona kompilacja jest stabilna. Testowanie dymne służy do potwierdzenia, że można przejść do dalszego testowania oprogramowania. Obejmuje minimalną liczbę testów uruchamianych dla każdej kompilacji w celu sprawdzenia krytycznych funkcji oprogramowania. 

Testowanie poprawności

Testowanie poprawności to rodzaj testowania oprogramowania przeprowadzanego po dostarczeniu kompilacji oprogramowania zawierającej niewielkie modyfikacje kodu lub funkcji, aby potwierdzić, że błędy zostały rozwiązane i że w wyniku tych zmian nie pojawiły się nowe problemy. Celem jest potwierdzenie, że proponowana funkcja działa zasadniczo zgodnie z oczekiwaniami.

Testowanie regresji

Testowanie regresji to rodzaj testowania oprogramowania, w którym ponownie testujemy istniejące funkcje, aby sprawdzić, czy nadal działają prawidłowo po wprowadzeniu zmian lub aktualizacji aplikacji. Testowanie regresji zapewnia, że nowe zmiany lub aktualizacje nie wpłynęły na istniejącą funkcjonalność aplikacji.

Testowanie zgodności

Testowanie zgodności służy do zapewnienia, że aplikacja działa prawidłowo na różnych platformach, urządzeniach i przeglądarkach. Sprawdza, czy aplikacja jest zgodna z różnymi konfiguracjami sprzętu i oprogramowania.

Obraz wygenerowany przez sztuczną inteligencję, przedstawiający roboty pracujące na linii montażowej w celu pokazania, jak działa testowanie oprogramowania.

Poziomy testowania

Testowanie oprogramowania można podzielić na różne poziomy w zależności od zakresu i celów testowania. Poniżej przedstawiono typowe poziomy testowania oprogramowania:

Testowanie jednostkowe

Testowanie jednostkowe to pierwszy poziom testowania, który koncentruje się na testowaniu pojedynczych komponentów lub jednostek kodu w izolacji. Testowanie jednostkowe weryfikuje, czy każda jednostka kodu działa zgodnie z oczekiwaniami i spełnia określone wymagania.

Testowanie integracyjne

Testowanie integracyjne koncentruje się na testowaniu interakcji między różnymi modułami lub komponentami aplikacji. Testowanie integracyjne weryfikuje, czy moduły lub komponenty współpracują zgodnie z założeniami i spełniają określone wymagania.

More Articles

Testowanie systemowe

Testowanie systemowe to poziom testowania, na którym cała aplikacja jest testowana jako kompletny system. Testowanie systemowe weryfikuje, czy aplikacja spełnia określone wymagania i działa zgodnie z oczekiwaniami w różnych scenariuszach.

Testowanie akceptacyjne użytkownika

Testowanie akceptacyjne to poziom testowania, na którym aplikacja jest testowana z perspektywy użytkownika końcowego. Testowanie akceptacyjne weryfikuje, czy aplikacja spełnia potrzeby i wymagania użytkownika końcowego oraz działa zgodnie z oczekiwaniami w środowisku użytkownika. Typowe rodzaje testowania akceptacyjnego użytkownika to testy alfa i testy beta.

Każdy poziom testowania jest ważny i służy konkretnemu celowi w procesie testowania oprogramowania. Testowanie powinno być przeprowadzane na każdym poziomie, aby zapewnić, że aplikacja osiąga wymagany poziom jakości i funkcjonalności oraz działa zgodnie z oczekiwaniami w różnych scenariuszach. 

Zasady testowania oprogramowania

Istnieje siedem głównych zasad testowania, zgodnie z definicją ISTQB:

  1. Testowanie wykazuje obecność defektów, a nie ich brak: Nie można zagwarantować, że aplikacja jest wolna od defektów, tylko dlatego, że została przetestowana. Jednak po zakończeniu testów może wzrosnąć zaufanie do produktu.
  2. Wyczerpujące testowanie jest niemożliwe: Większość aplikacji jest niezwykle złożona, dlatego przetestowanie każdej możliwej kombinacji i wariantu jest niemożliwe, zwłaszcza że czas i zasoby przeznaczone na testowanie również są ograniczone.
  3. Wczesne testowanie: Im wcześniej błędy i defekty zostaną wykryte w cyklu życia oprogramowania, tym łatwiej je naprawić. W tym obszarze metodyka Agile sprawdza się bardzo dobrze, ponieważ działania testowe rozpoczynają się bardzo wcześnie.
  4. Defekty grupują się: Oznacza to, że w obszarach, w których wykryto defekty, najprawdopodobniej znajduje się ich jeszcze więcej. Zgodnie z zasadą Pareto 80% defektów można znaleźć w 20% funkcjonalności.
  5. Paradoks pestycydów: Wielokrotne uruchamianie tych samych testów bez ich aktualizowania prawdopodobnie nie pozwoli wykryć żadnych nowych problemów. 
  6. Testowanie zależy od kontekstu: Aplikacje są testowane w różny sposób w zależności od kontekstu — na przykład API testuje się inaczej niż interfejs użytkownika, a aplikacje internetowe inaczej niż aplikacje mobilne lub komputerowe.  
  7. Błąd logiczny polegający na braku błędów: Krótko mówiąc, samo znalezienie i naprawienie defektów nie oznacza, że oprogramowanie jest użyteczne dla jego użytkowników.

Podsumowanie

Testowanie oprogramowania to bardzo złożona dziedzina, w ramach której można przeprowadzać wiele rodzajów testów. Ważne jest, aby dostosować strategię testowania do kontekstu testowanego produktu programowego. Istnieje niezliczona liczba materiałów na temat testowania oprogramowania, w tym podcasty, książki i wiele innych.

Jeśli ten artykuł Ci się spodobał, zasubskrybuj newsletter lidera QA i jako pierwszy dowiaduj się o nowych wpisach dotyczących testowania i jakości.

Andreea Draniceanu
Hi there! My name is Andreea, I’m a software test engineer based in Romania. I’ve been in the software industry for over 10 years. Currently my main focus is UI test automation with C#, but I love exploring all QA-related areas 😊

You may also like