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.