Lekcja 4.1: Kategorie Technik Projektowania Testów

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:

  1. Techniki czarnoskrzynkowe (Black-box techniques)
  2. Techniki białoskrzynkowe (White-box techniques)
  3. 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.

Najczęściej Zadawane Pytania (FAQ)

Czy techniki czarnoskrzynkowe są lepsze od białoskrzynkowych?
Nie ma lepszych czy gorszych kategorii – są inne. Skupiają się na różnych aspektach systemu (zachowanie vs struktura) i wykrywają różne typy defektów. Najlepsze podejście to ich łączenie, aby uzyskać kompleksowe pokrycie testowe.
Czy techniki oparte na doświadczeniu są mniej wartościowe?
Absolutnie nie. Chociaż są mniej formalne, często pozwalają znaleźć defekty pominięte przez systematyczne techniki. Wykorzystują unikalną ludzką zdolność do antycypacji problemów. Są szczególnie cenne przy ograniczonej dokumentacji lub czasie.
Czy programiści powinni używać technik czarnoskrzynkowych?
Tak. Chociaż programiści często skupiają się na testach jednostkowych (białoskrzynkowych), zrozumienie i stosowanie technik czarnoskrzynkowych (np. analiza wartości brzegowych) na poziomie komponentu może pomóc im pisać bardziej odporny kod i lepiej weryfikować interfejsy.
Czy testerzy muszą znać się na kodzie, aby używać technik białoskrzynkowych?
Do efektywnego stosowania technik białoskrzynkowych (np. projektowania testów pod kątem pokrycia gałęzi) wymagana jest umiejętność czytania i rozumienia kodu. Dlatego są one częściej stosowane przez programistów lub testerów technicznych.
Na którym poziomie testów stosuje się najwięcej technik?
Różne techniki dominują na różnych poziomach. Techniki białoskrzynkowe są kluczowe w testach komponentowych. Techniki czarnoskrzynkowe dominują w testach systemowych i akceptacyjnych. Techniki oparte na doświadczeniu są przydatne na wszystkich poziomach.
Czy można zautomatyzować techniki oparte na doświadczeniu?
Bezpośrednia automatyzacja intuicji czy zgadywania błędów jest trudna. Jednak wyniki testowania eksploracyjnego mogą prowadzić do stworzenia nowych, zautomatyzowanych testów regresji. Listy kontrolne mogą być częściowo wspierane przez narzędzia.
Co to jest podstawa testów?
Podstawa testów to dokumentacja lub źródło informacji, na podstawie którego projektowane są warunki i przypadki testowe. Dla technik czarnoskrzynkowych są to np. wymagania, dla białoskrzynkowych – kod, dla opartych na doświadczeniu – wiedza testera.
Czy te kategorie są rozłączne?
W teorii tak, ale w praktyce granice mogą się zacierać. Na przykład, testowanie oparte na listach kontrolnych (doświadczenie) może zawierać punkty dotyczące struktury (białoskrzynkowe) lub funkcjonalności (czarnoskrzynkowe).
Która kategoria jest najważniejsza?
Wszystkie są ważne i uzupełniają się nawzajem. Ignorowanie którejkolwiek z kategorii zwiększa ryzyko przeoczenia istotnych defektów. Kluczem jest umiejętne ich łączenie w zależności od kontekstu.
Czy sylabus ISTQB FL obejmuje wszystkie istniejące techniki?
Nie, sylabus Poziomu Podstawowego (FL) przedstawia tylko wybrane, fundamentalne techniki z każdej kategorii. Bardziej zaawansowane techniki są omawiane na wyższych poziomach certyfikacji ISTQB (np. Analityk Testów, Techniczny Analityk Testów).

Przykładowe Pytania Egzaminacyjne

Pytanie 1 (K1): Która kategoria technik projektowania testów skupia się na wewnętrznej strukturze kodu?

  • a) Techniki czarnoskrzynkowe
  • b) Techniki białoskrzynkowe
  • c) Techniki oparte na doświadczeniu
  • d) Techniki oparte na regresji

Poprawna odpowiedź: b (Techniki białoskrzynkowe, zwane też strukturalnymi, analizują wewnętrzną budowę kodu lub systemu.)

Pytanie 2 (K2): Projektujesz testy na podstawie specyfikacji wymagań funkcjonalnych, nie mając dostępu do kodu źródłowego. Jakiej kategorii technik używasz?

  • a) Białoskrzynkowych
  • b) Opartych na doświadczeniu
  • c) Czarnoskrzynkowych
  • d) Statycznych

Poprawna odpowiedź: c (Techniki czarnoskrzynkowe opierają się na zewnętrznym zachowaniu systemu opisanym w specyfikacjach, bez wiedzy o implementacji.)

Pytanie 3 (K2): Zgadywanie błędów (Error Guessing) jest przykładem jakiej kategorii technik testowania?

  • a) Czarnoskrzynkowych
  • b) Białoskrzynkowych
  • c) Opartych na doświadczeniu
  • d) Opartych na modelu

Poprawna odpowiedź: c (Zgadywanie błędów polega na wykorzystaniu wiedzy i intuicji testera do przewidzenia potencjalnych problemów, co jest charakterystyczne dla technik opartych na doświadczeniu.)