Witaj w rozdziale poświęconym sercu rzemiosła testerskiego – technikom projektowania testów!
Samo uruchomienie aplikacji i „poklikanie” to za mało, aby mówić o profesjonalnym testowaniu.
Potrzebujemy systematycznych metod, które pomogą nam wybrać odpowiednie warunki testowe, zaprojektować skuteczne przypadki testowe i ocenić kompletność naszego testowania.
Techniki te są narzędziami, które pozwalają nam podejść do zadania w sposób ustrukturyzowany i efektywny, zwiększając prawdopodobieństwo wykrycia istotnych defektów.
Sylabus ISTQB Foundation Level v4.0, w sekcji 4.1 (FL-4.1.1 K2), wprowadza podstawowy podział technik testowania na trzy główne kategorie.
Zrozumienie tych kategorii jest fundamentalne, ponieważ każda z nich opiera się na innych źródłach informacji i ma inne zastosowania.
Te trzy główne kategorie to:
- Techniki czarnoskrzynkowe (Black-box techniques)
- Techniki białoskrzynkowe (White-box techniques)
- Techniki oparte na doświadczeniu (Experience-based techniques)
W tej lekcji przyjrzymy się charakterystyce każdej z tych grup, zrozumiemy, na czym polegają ich podstawowe założenia i czym się od siebie różnią.
W kolejnych lekcjach tego rozdziału będziemy szczegółowo omawiać konkretne techniki należące do każdej z tych kategorii.
1. Techniki Czarnoskrzynkowe (Black-box techniques)
Wyobraź sobie, że masz przed sobą tajemniczą czarną skrzynkę.
Wiesz, co powinno się stać, gdy coś do niej włożysz (wejście) i co powinno z niej wyjść (wyjście), ale nie masz pojęcia, co dzieje się w środku – jak działa jej wewnętrzny mechanizm.
Techniki czarnoskrzynkowe działają na podobnej zasadzie.
Kluczowe cechy technik czarnoskrzynkowych:
- Koncentracja na zachowaniu zewnętrznym: Techniki te skupiają się na tym, CO system robi, a nie JAK to robi. Analizują funkcjonalność systemu z perspektywy użytkownika lub wymagań, ignorując wewnętrzną strukturę kodu czy architekturę.
- Podstawa testów: Przypadki testowe są projektowane na podstawie specyfikacji wymagań, historyjek użytkownika, przypadków użycia, dokumentacji interfejsu użytkownika lub innych opisów oczekiwanego zachowania systemu.
- Niezależność od implementacji: Testy zaprojektowane przy użyciu tych technik są niezależne od konkretnego języka programowania czy sposobu implementacji. Mogą być tworzone jeszcze przed napisaniem kodu.
- Zastosowanie na wszystkich poziomach testów: Choć często kojarzone z testami systemowymi i akceptacyjnymi, mogą być również stosowane na niższych poziomach, np. w testach integracyjnych czy komponentowych (do weryfikacji interfejsów komponentów).
Przykłady technik czarnoskrzynkowych (omawiane w kolejnych lekcjach):
- Podział na klasy równoważności (Equivalence Partitioning)
- Analiza wartości brzegowych (Boundary Value Analysis)
- Testowanie w oparciu o tablicę decyzyjną (Decision Table Testing)
- Testowanie przejść pomiędzy stanami (State Transition Testing)
- Testowanie przypadków użycia (Use Case Testing - nie omawiane szczegółowo w sylabusie FL, ale ważne w praktyce)
Techniki czarnoskrzynkowe są niezwykle ważne, ponieważ pozwalają sprawdzić, czy system spełnia oczekiwania użytkowników i wymagania biznesowe.
2. Techniki Białoskrzynkowe (White-box techniques)
W przeciwieństwie do czarnej skrzynki, techniki białoskrzynkowe (czasem nazywane strukturalnymi lub „szklanej skrzynki” – glass-box) zakładają, że mamy wgląd w wewnętrzną strukturę testowanego obiektu.
Widzimy, jak zbudowany jest kod, jakie są ścieżki przepływu sterowania, jak zorganizowana jest architektura.
Kluczowe cechy technik białoskrzynkowych:
- Koncentracja na strukturze wewnętrznej: Techniki te analizują kod źródłowy, architekturę, przepływ danych i sterowania wewnątrz systemu lub komponentu.
- Podstawa testów: Przypadki testowe są projektowane na podstawie analizy kodu, struktury danych, schematów przepływu sterowania lub architektury.
- Zależność od implementacji: Testy są ściśle powiązane z konkretną implementacją. Zmiana kodu może wymagać modyfikacji lub stworzenia nowych testów białoskrzynkowych.
- Zastosowanie głównie na niższych poziomach testów: Najczęściej stosowane w testach komponentowych (jednostkowych) i integracyjnych, gdzie dostęp do kodu jest łatwiejszy. Mogą być jednak używane również na wyższych poziomach, np. do oceny pokrycia kodu przez testy systemowe.
- Mierzenie pokrycia kodu: Jednym z głównych celów technik białoskrzynkowych jest osiągnięcie określonego poziomu pokrycia kodu (np. pokrycia instrukcji, gałęzi), co daje miarę dokładności testowania struktury.
Przykłady technik białoskrzynkowych (omawiane w kolejnych lekcjach):
- Testowanie i pokrycie instrukcji (Statement Testing and Coverage)
- Testowanie i pokrycie gałęzi/decyzji (Branch/Decision Testing and Coverage)
- Testowanie warunków (Condition Testing - bardziej zaawansowane, nie w sylabusie FL)
- Testowanie ścieżek (Path Testing - bardziej zaawansowane, nie w sylabusie FL)
Techniki białoskrzynkowe pomagają wykrywać defekty ukryte w logice kodu, które mogłyby zostać pominięte przez testy czarnoskrzynkowe, oraz dają pewność, że przetestowane zostały kluczowe fragmenty implementacji.
3. Techniki Oparte na Doświadczeniu (Experience-based techniques)
Ta kategoria technik opiera się na wiedzy, intuicji i doświadczeniu testerów oraz innych interesariuszy.
Zamiast polegać wyłącznie na formalnych specyfikacjach czy strukturze kodu, wykorzystuje się ludzką zdolność do przewidywania problemów i eksploracji systemu.
Kluczowe cechy technik opartych na doświadczeniu:
- Wykorzystanie wiedzy i intuicji: Bazują na doświadczeniu testera z podobnymi systemami, znajomości typowych błędów, wiedzy o domenie biznesowej oraz intuicji co do potencjalnych słabych punktów systemu.
- Mniej formalne: Są często mniej sformalizowane niż techniki czarno- i białoskrzynkowe, choć mogą być stosowane w sposób ustrukturyzowany (np. testowanie eksploracyjne w sesjach).
- Uzupełnienie innych technik: Rzadko stosowane jako jedyne podejście. Najlepiej sprawdzają się jako uzupełnienie technik formalnych, pomagając znaleźć defekty, które mogły zostać pominięte przez systematyczne metody.
- Szczególnie przydatne przy niepełnej dokumentacji: Gdy specyfikacje są niekompletne, nieaktualne lub nie istnieją, techniki oparte na doświadczeniu stają się kluczowym narzędziem do oceny jakości.
Przykłady technik opartych na doświadczeniu (omawiane w kolejnych lekcjach):
- Zgadywanie błędów (Error Guessing)
- Testowanie eksploracyjne (Exploratory Testing)
- Testowanie oparte na listach kontrolnych (Checklist-based Testing)
Techniki oparte na doświadczeniu dodają cenny ludzki element do procesu testowania, wykorzystując kreatywność i wiedzę testerów do znajdowania trudnych do przewidzenia problemów.
Wybór i Łączenie Technik
W praktyce rzadko stosuje się tylko jedną kategorię technik.
Najlepsze rezultaty osiąga się, łącząc techniki z różnych kategorii.
Na przykład, można użyć technik czarnoskrzynkowych do zaprojektowania testów na podstawie wymagań, następnie uzupełnić je testami białoskrzynkowymi, aby zapewnić odpowiednie pokrycie kodu, a na koniec zastosować testowanie eksploracyjne, aby poszukać nieoczywistych problemów.
Wybór konkretnych technik i ich kombinacji zależy od wielu czynników, takich jak:
- Typ i złożoność systemu
- Wymagania regulacyjne lub standardy
- Poziom ryzyka
- Dostępna dokumentacja
- Wiedza i umiejętności testerów
- Dostępny czas i budżet
- Cele testowania
Zrozumienie podstawowych kategorii technik projektowania testów jest pierwszym krokiem do świadomego i efektywnego planowania oraz przeprowadzania testów oprogramowania.