Lekcja 1.1: Czym jest testowanie?

Witaj w pierwszej lekcji naszego kursu przygotowującego do egzaminu ISTQB Poziom Podstawowy!

Zaczynamy od absolutnych fundamentów – odpowiedzi na pytanie: czym właściwie jest testowanie oprogramowania?

Choć może się to wydawać proste, definicja i zakres testowania są szersze, niż wielu osobom się wydaje. Zrozumienie tej podstawowej koncepcji jest kluczowe dla dalszej nauki i przyszłej pracy jako tester.

Systemy oprogramowania stały się integralną częścią naszego codziennego życia. Od aplikacji bankowych, przez systemy rezerwacji lotów, media społecznościowe, aż po oprogramowanie sterujące urządzeniami medycznymi czy samochodami – polegamy na nich w niezliczonych sytuacjach.

Niestety, niemal każdy z nas miał do czynienia z oprogramowaniem, które nie działało zgodnie z oczekiwaniami.

Błędy w oprogramowaniu mogą prowadzić do różnorodnych problemów: od drobnych niedogodności, przez straty finansowe i utratę reputacji firmy, aż po poważne wypadki, obrażenia, a nawet śmierć w skrajnych przypadkach.

Właśnie dlatego testowanie oprogramowania jest tak niezwykle ważne – pomaga ocenić jakość oprogramowania i zredukować ryzyko wystąpienia awarii podczas jego użytkowania.

Definicja Testowania według ISTQB

Według Międzynarodowej Rady Kwalifikacji Testowania Oprogramowania (ISTQB), testowanie oprogramowania to proces obejmujący wszystkie czynności w cyklu życia oprogramowania, zarówno statyczne, jak i dynamiczne, dotyczące planowania, przygotowania i oceny produktów oprogramowania oraz powiązanych produktów pracy, mający na celu określenie, czy spełniają one określone wymagania, wykazanie, że nadają się do celu, oraz wykrywanie defektów.

Ta definicja podkreśla kilka kluczowych aspektów.

Po pierwsze, testowanie nie jest pojedynczą czynnością, ale procesem. Składa się z wielu powiązanych ze sobą działań, takich jak planowanie, analiza, projektowanie, implementacja, wykonywanie testów i raportowanie. To nie tylko uruchamianie programu i sprawdzanie, czy działa.

Po drugie, testowanie obejmuje zarówno czynności statyczne, jak i dynamiczne.

Testowanie dynamiczne polega na wykonywaniu kodu oprogramowania. Przykładem może być uruchomienie aplikacji i sprawdzenie, czy przycisk logowania działa poprawnie.

Z kolei testowanie statyczne nie wymaga uruchamiania kodu. Obejmuje ono przeglądy i analizę produktów pracy, takich jak wymagania, historyjki użytkownika, kod źródłowy, dokumentacja projektowa czy plany testów.

Celem testowania statycznego jest znalezienie defektów jak najwcześniej, zanim zostaną one wprowadzone do kodu lub zanim spowodują problemy podczas wykonywania testów dynamicznych.

Po trzecie, testowanie dotyczy nie tylko samego oprogramowania (kodu), ale również powiązanych produktów pracy (ang. *work products*).

Obejmuje to wszystko, co powstaje w trakcie cyklu życia oprogramowania – od specyfikacji wymagań, przez modele projektowe, kod, przypadki testowe, aż po dokumentację użytkownika.

Każdy z tych elementów może zawierać błędy, które mogą wpłynąć na jakość końcowego produktu.

Po czwarte, głównym celem testowania jest ocena jakości produktu i dostarczenie informacji interesariuszom (np. menedżerom projektu, klientom).

Testowanie pomaga określić, czy oprogramowanie spełnia określone wymagania (weryfikacja) oraz czy nadaje się do zamierzonego celu i spełnia potrzeby użytkowników (walidacja).

Często spotykanym nieporozumieniem jest myślenie, że testowanie polega wyłącznie na weryfikacji. W rzeczywistości, walidacja jest równie ważna – musimy sprawdzić, czy system robi to, czego oczekują użytkownicy i interesariusze w swoim środowisku operacyjnym.

Po piąte, ważnym, choć nie jedynym, celem testowania jest wykrywanie defektów (błędów, usterek). Znalezienie i naprawienie defektów przed wydaniem oprogramowania użytkownikom końcowym znacząco podnosi jego jakość i niezawodność.

Typowe Cele Testowania

Cele testowania mogą się różnić w zależności od kontekstu projektu, poziomu testów czy modelu cyklu życia oprogramowania. Jednak ISTQB wymienia kilka typowych celów, które przyświecają większości działań testowych. Należą do nich:

  • Ocena produktów pracy: Sprawdzanie wymagań, historyjek użytkownika, projektu i kodu pod kątem kompletności, spójności i poprawności.
  • Weryfikacja spełnienia wymagań: Sprawdzenie, czy wszystkie określone wymagania zostały zaimplementowane w systemie.
  • Walidacja produktu: Potwierdzenie, czy obiekt testowy jest kompletny i działa zgodnie z oczekiwaniami użytkowników i innych interesariuszy.
  • Budowanie zaufania do jakości: Dostarczenie dowodów na to, że system działa poprawnie i spełnia określone standardy jakościowe.
  • Zapobieganie defektom: Wczesne wykrywanie problemów (np. poprzez przeglądy wymagań) może zapobiec wprowadzeniu defektów do kodu.
  • Wykrywanie awarii i defektów: Znajdowanie błędów w działaniu oprogramowania poprzez wykonywanie testów.
  • Dostarczanie informacji interesariuszom: Informowanie o poziomie jakości, ryzykach i postępach testowania, aby umożliwić podejmowanie świadomych decyzji (np. o wydaniu produktu).
  • Zmniejszanie ryzyka: Identyfikacja i ocena ryzyk związanych z jakością oprogramowania oraz dostarczenie informacji pozwalających na ich mitygację.
  • Zgodność z wymaganiami kontraktowymi, prawnymi i normatywnymi: Sprawdzenie, czy system spełnia obowiązujące przepisy, normy branżowe lub ustalenia umowne.

Testowanie a Debugowanie

Ważne jest również rozróżnienie między testowaniem a debugowaniem (usuwaniem błędów). Chociaż te czynności są ze sobą powiązane, nie są tym samym.

Testowanie polega na znajdowaniu defektów i ocenie jakości. Testerzy wykonują testy, aby zidentyfikować awarie, które wskazują na obecność defektów.

Debugowanie to czynność wykonywana przez programistów, polegająca na znajdowaniu przyczyny defektu w kodzie, analizowaniu jej i wprowadzaniu poprawek.

Testerzy dostarczają informacji o problemach (raporty o defektach), a programiści używają tych informacji do debugowania i naprawy kodu.

Następnie testerzy wykonują testy potwierdzające (re-testy), aby sprawdzić, czy poprawka była skuteczna, oraz testy regresji, aby upewnić się, że poprawka nie wprowadziła nowych problemów.

Podsumowanie

Podsumowując, testowanie oprogramowania to złożony proces oceny jakości, który wykracza poza samo uruchamianie programu.

Obejmuje czynności statyczne i dynamiczne, dotyczy różnych produktów pracy i ma na celu weryfikację wymagań, walidację potrzeb użytkowników oraz wykrywanie defektów.

Jest to kluczowy element zapewniania jakości i minimalizowania ryzyka związanego z awariami oprogramowania.

W kolejnych lekcjach zagłębimy się w poszczególne aspekty tego procesu.

Najczęściej Zadawane Pytania (FAQ)

Czy testowanie to tylko klikanie po aplikacji?
Absolutnie nie. Jak wskazuje definicja ISTQB, testowanie to złożony proces obejmujący planowanie, analizę, projektowanie, implementację, wykonywanie i raportowanie. Obejmuje zarówno testy dynamiczne (wykonywanie kodu), jak i statyczne (przeglądy dokumentacji, kodu). Klikanie jest tylko małą częścią wykonywania testów dynamicznych.
Jaki jest główny cel testowania?
Głównym celem jest ocena jakości produktu i dostarczenie informacji interesariuszom, aby mogli podejmować świadome decyzje. Obejmuje to weryfikację spełnienia wymagań, walidację potrzeb użytkowników, wykrywanie defektów i budowanie zaufania do produktu.
Czym różni się testowanie statyczne od dynamicznego?
Testowanie dynamiczne wymaga uruchomienia (wykonania) kodu oprogramowania w celu znalezienia defektów. Testowanie statyczne nie wymaga uruchamiania kodu; polega na analizie i przeglądzie produktów pracy (np. wymagań, kodu, dokumentacji) w celu znalezienia defektów na wczesnym etapie.
Czy testowanie gwarantuje brak błędów w oprogramowaniu?
Nie. Jedna z siedmiu zasad testowania mówi, że testowanie pokazuje obecność defektów, a nie ich brak. Testowanie może znacząco zredukować liczbę defektów i ryzyko awarii, ale (poza trywialnymi przypadkami) nie jest w stanie udowodnić, że oprogramowanie jest całkowicie wolne od błędów.
Kto jest odpowiedzialny za testowanie?
Chociaż często istnieją dedykowane role testerów, odpowiedzialność za jakość i testowanie może być rozłożona na różne osoby w zespole, w zależności od kontekstu projektu i modelu cyklu życia (np. w Agile całym zespołem). Programiści testują swój kod (testy jednostkowe), analitycy mogą uczestniczyć w przeglądach wymagań, a użytkownicy końcowi w testach akceptacyjnych.
Czym jest weryfikacja w kontekście testowania?
Weryfikacja to proces sprawdzania, czy produkt oprogramowania spełnia określone wymagania i specyfikacje. Odpowiada na pytanie: "Czy tworzymy produkt poprawnie?". Koncentruje się na zgodności z dokumentacją i standardami.
Czym jest walidacja w kontekście testowania?
Walidacja to proces oceny, czy produkt oprogramowania spełnia potrzeby użytkowników i innych interesariuszy w ich środowisku operacyjnym. Odpowiada na pytanie: "Czy tworzymy właściwy produkt?". Koncentruje się na użyteczności i przydatności systemu do celu.
Czy testowanie i zapewnienie jakości (QA) to to samo?
Nie do końca. Testowanie jest częścią zapewnienia jakości (Quality Assurance - QA). QA to szerszy zestaw działań zorientowanych na procesy, mających na celu zapewnienie, że jakość jest wbudowywana w produkt na każdym etapie cyklu życia. Testowanie jest jedną z kluczowych aktywności w ramach QA, skupioną na ocenie produktu.
Czy debugowanie jest częścią testowania?
Nie, debugowanie to odrębny proces. Testowanie ma na celu znalezienie defektów (identyfikację problemów), podczas gdy debugowanie to proces znajdowania przyczyny defektu w kodzie i jej naprawiania, zazwyczaj wykonywany przez programistów.
Jakie produkty pracy mogą być testowane?
Testowaniu mogą podlegać różnorodne produkty pracy powstające w cyklu życia oprogramowania, takie jak: specyfikacje wymagań, historyjki użytkownika, przypadki użycia, architektura systemu, projekt interfejsu, kod źródłowy, przypadki testowe, plany testów, skrypty testowe, dokumentacja użytkownika, a nawet sam proces testowy.
Czy testowanie jest potrzebne, jeśli programiści piszą dobry kod?
Tak. Nawet najlepsi programiści popełniają błędy (to ludzkie!). Ponadto, problemy mogą wynikać nie tylko z błędów w kodzie, ale także z nieporozumień dotyczących wymagań, problemów z integracją komponentów, błędów w projekcie czy problemów środowiskowych. Testowanie zapewnia niezależną ocenę jakości.
Czy celem testowania jest tylko znajdowanie błędów?
Nie, wykrywanie defektów to tylko jeden z celów. Równie ważne są: ocena jakości, weryfikacja wymagań, walidacja potrzeb użytkowników, budowanie zaufania, zapobieganie defektom i dostarczanie informacji interesariuszom do podejmowania decyzji.
Co oznacza "testowanie kontekstowe"?
Oznacza to, że sposób testowania (cele, techniki, zakres, rygor) powinien być dostosowany do specyficznego kontekstu projektu, produktu, ryzyk, wymagań i ograniczeń. Nie ma jednego uniwersalnego podejścia do testowania, które pasuje do każdej sytuacji.
Czy testowanie może zapobiegać defektom?
Tak, zwłaszcza testowanie statyczne. Przeglądy wymagań, projektu czy kodu pozwalają wykryć niejasności, niespójności i błędy, zanim zostaną one zaimplementowane w kodzie, co zapobiega powstawaniu defektów na późniejszych etapach.
Dlaczego testowanie jest ważne dla biznesu?
Testowanie pomaga chronić biznes poprzez redukcję ryzyka awarii, które mogą prowadzić do strat finansowych, utraty reputacji, problemów prawnych czy niezadowolenia klientów. Dostarcza informacji o jakości, co pozwala podejmować świadome decyzje biznesowe dotyczące produktu.

Przykładowe Pytania Egzaminacyjne

Pytanie 1 (K1): Które z poniższych stwierdzeń najlepiej opisuje testowanie oprogramowania?

  • a) Testowanie polega wyłącznie na uruchamianiu oprogramowania w celu znalezienia błędów.
  • b) Testowanie to proces oceny produktu pracy w celu określenia, czy spełnia on określone wymagania.
  • c) Testowanie jest tym samym co debugowanie.
  • d) Testowanie gwarantuje, że oprogramowanie jest w 100% wolne od błędów.

Poprawna odpowiedź: b (Najbliższa definicji ISTQB, obejmująca ocenę i wymagania. Pozostałe opcje są błędne lub niepełne.)

Pytanie 2 (K2): Który z poniższych celów testowania koncentruje się na sprawdzeniu, czy system spełnia potrzeby użytkowników w ich środowisku pracy?

  • a) Weryfikacja
  • b) Debugowanie
  • c) Walidacja
  • d) Testowanie statyczne

Poprawna odpowiedź: c (Walidacja dotyczy sprawdzenia, czy tworzymy właściwy produkt dla użytkownika.)

Pytanie 3 (K2): Jaka jest główna różnica między testowaniem a debugowaniem?

  • a) Testowanie wykonują programiści, a debugowanie testerzy.
  • b) Testowanie ma na celu znalezienie defektów, a debugowanie ma na celu znalezienie przyczyny defektu i jej naprawienie.
  • c) Testowanie odbywa się tylko po zakończeniu kodowania, a debugowanie w trakcie.
  • d) Testowanie zawsze wymaga narzędzi, a debugowanie nie.

Poprawna odpowiedź: b (Najlepiej oddaje rozróżnienie między tymi dwoma procesami.)