Lekcja 4.4: Techniki Oparte na Doświadczeniu

Dotychczas poznaliśmy techniki czarnoskrzynkowe, bazujące na specyfikacji, oraz białoskrzynkowe, zaglądające do kodu.

Istnieje jednak trzecia, równie ważna kategoria technik projektowania testów – techniki oparte na doświadczeniu (experience-based techniques).

Jak sama nazwa wskazuje, opierają się one na wiedzy, umiejętnościach i intuicji testera oraz innych interesariuszy.

Te techniki wykorzystują ludzką zdolność do przewidywania problemów, eksploracji systemu i systematycznego sprawdzania znanych obszarów ryzyka.

Są szczególnie cenne, gdy dokumentacja jest niekompletna, nieaktualna lub po prostu nie istnieje, a także gdy mamy ograniczony czas na testy.

Sylabus ISTQB Foundation Level v4.0 w sekcji 4.4 (FL-4.4.1 K2, FL-4.4.2 K2, FL-4.4.3 K2) przedstawia trzy popularne techniki oparte na doświadczeniu:

  1. Zgadywanie błędów (Error Guessing)
  2. Testowanie eksploracyjne (Exploratory Testing)
  3. Testowanie w oparciu o listę kontrolną (Checklist-Based Testing)

W tej lekcji przyjrzymy się bliżej każdej z tych technik, zrozumiemy ich założenia, sposób stosowania oraz sytuacje, w których okazują się najbardziej przydatne.

1. Zgadywanie Błędów (Error Guessing)

Cel: Przewidywanie i celowe wyszukiwanie błędów, defektów i potencjalnych awarii na podstawie wiedzy i doświadczenia testera.

Założenie: Doświadczeni testerzy, programiści i inni specjaliści posiadają wiedzę o typowych problemach, które pojawiają się w oprogramowaniu.

Mogą wykorzystać tę wiedzę do "zgadnięcia", gdzie najprawdopodobniej kryją się błędy i zaprojektowania testów, które je ujawnią.

Na czym bazuje zgadywanie błędów?

  • Wiedza o aplikacji: Jak system działał w przeszłości, gdzie wcześniej znajdowano błędy.
  • Wiedza o typowych błędach programistycznych: Jakie pomyłki często popełniają programiści (np. obsługa wartości null, błędy off-by-one w pętlach, niepoprawna obsługa typów danych, problemy z zarządzaniem pamięcią).
  • Wiedza o podobnych systemach: Jakie awarie występowały w innych, podobnych aplikacjach lub modułach.
  • Wiedza o środowisku: Jakie problemy mogą wynikać z interakcji z systemem operacyjnym, przeglądarką, bazą danych czy innymi systemami.
  • Wiedza o użytkownikach: Jakie nietypowe działania mogą podejmować użytkownicy.

Jak stosować?

  1. Burza mózgów / Analiza: Zastanów się (indywidualnie lub w zespole), jakie błędy mogą wystąpić w testowanym obszarze. Pomyśl o danych wejściowych, wyjściowych, logice, obliczeniach, interfejsach, zarządzaniu danymi.
  2. Stworzenie listy potencjalnych błędów: Zanotuj zidentyfikowane potencjalne problemy. Może to być nieformalna lista lub bardziej ustrukturyzowana, jak w przypadku "ataków usterek" (fault attacks).
  3. Projektowanie testów: Dla każdego potencjalnego błędu z listy zaprojektuj jeden lub więcej przypadków testowych, które mają na celu sprowokowanie tego błędu lub wykazanie jego braku.

Przykład: Testowanie formularza rejestracji.

  • Potencjalne błędy (zgadywanie):
    • Wprowadzenie bardzo długiego imienia/nazwiska.
    • Użycie znaków specjalnych w polach tekstowych.
    • Wprowadzenie spacji na początku/końcu adresu e-mail.
    • Próba rejestracji z już istniejącym adresem e-mail.
    • Wprowadzenie hasła niespełniającego wymagań złożoności.
    • Niezaznaczenie obowiązkowej zgody.
    • Dwukrotne kliknięcie przycisku "Zarejestruj".
    • Wprowadzenie daty urodzenia z przyszłości.
  • Przykładowe testy: Zaprojektuj testy dla każdego z powyższych scenariuszy.

Ataki usterek (Fault Attacks): Jest to bardziej metodyczne podejście do zgadywania błędów.

Polega na stworzeniu (lub wykorzystaniu istniejącej) listy typowych błędów programistycznych lub wzorców awarii (np. lista OWASP Top 10 dla bezpieczeństwa webowego) i systematycznym projektowaniu testów atakujących te potencjalne słabości.

Wartość i ograniczenia:

  • Wartość: Może być bardzo skuteczne w szybkim znajdowaniu defektów, szczególnie tych typowych lub pomijanych przez bardziej formalne techniki. Dobrze uzupełnia inne podejścia.
  • Ograniczenia: Skuteczność silnie zależy od doświadczenia i umiejętności testera. Jest to technika mało systematyczna i trudna do zmierzenia pod kątem pokrycia. Istnieje ryzyko pominięcia nietypowych błędów, jeśli tester nie ma odpowiedniej wiedzy.

2. Testowanie Eksploracyjne (Exploratory Testing)

Cel: Równoczesne uczenie się systemu, projektowanie testów, wykonywanie testów i ocena wyników w dynamiczny, interaktywny sposób.

Założenie: Testowanie nie jest tylko wykonywaniem z góry zdefiniowanych kroków, ale procesem ciągłego odkrywania i badania.

Tester aktywnie eksploruje aplikację, a zdobyta wiedza natychmiast wpływa na kolejne podejmowane działania testowe.

Kluczowe cechy:

  • Równoczesność: Projektowanie, wykonywanie i uczenie się dzieją się niemal jednocześnie.
  • Interaktywność: Tester na bieżąco reaguje na zachowanie systemu i dostosowuje swoje działania.
  • Brak predefiniowanych skryptów: Testy nie są szczegółowo opisane krok po kroku przed rozpoczęciem sesji.
  • Skupienie na celu (misji): Zamiast sztywnych kroków, tester może mieć określony cel do zbadania (np. "Sprawdź funkcjonalność koszyka zakupowego") lub obszar do eksploracji.
  • Dokumentacja w trakcie lub po: Wyniki, obserwacje i znalezione problemy są dokumentowane podczas sesji eksploracyjnej lub tuż po niej.

Jak stosować?

Testowanie eksploracyjne nie oznacza chaotycznego klikania.

Często stosuje się ustrukturyzowane podejścia, takie jak testowanie oparte na sesjach (Session-Based Test Management - SBTM):

  1. Zdefiniuj misję (cel sesji): Określ, co ma być głównym celem danej sesji testowej (np. "Przetestować proces resetowania hasła", "Zbadać obsługę nieprawidłowych danych w formularzu X").
  2. Określ czas trwania sesji (Timeboxing): Ustal limit czasowy dla sesji (np. 60-120 minut), aby zapewnić skupienie.
  3. Wykonaj sesję eksploracyjną: Tester eksploruje aplikację, mając na uwadze misję. Notuje swoje działania, obserwacje, pomysły na dalsze testy i znalezione problemy (np. w formie notatek, map myśli, nagrań ekranu).
  4. Raportowanie i podsumowanie (Debriefing): Po zakończeniu sesji tester podsumowuje wyniki, dokumentuje znalezione defekty i omawia je z zespołem (np. z innym testerem, menedżerem testów).

Karty eksploracyjne (Test Charters): Mogą służyć jako przewodnik dla sesji, sugerując, co testować, jakimi metodami i na co zwracać uwagę, ale bez narzucania sztywnych kroków.

Wartość i ograniczenia:

  • Wartość: Bardzo efektywne w znajdowaniu nieoczekiwanych błędów i problemów z użytecznością. Pozwala szybko poznać system i jego słabe punkty. Angażuje testera i wykorzystuje jego kreatywność. Świetne przy ograniczonej dokumentacji lub czasie.
  • Ograniczenia: Trudniejsze do zarządzania i raportowania niż testy skryptowe. Powtarzalność testów może być problematyczna. Skuteczność mocno zależy od umiejętności i doświadczenia testera. Wymaga dyscypliny w notowaniu i raportowaniu.

3. Testowanie w Oparciu o Listę Kontrolną (Checklist-Based Testing)

Cel: Systematyczne weryfikowanie określonych elementów, warunków lub cech za pomocą przygotowanej listy kontrolnej (checklisty).

Założenie: Doświadczenie testerów, programistów lub analityków pozwala stworzyć listę ważnych aspektów do sprawdzenia. Lista ta służy jako przewodnik podczas testowania, zapewniając, że nic istotnego nie zostanie pominięte.

Jak stosować?

  1. Stwórz lub pozyskaj listę kontrolną: Lista może być stworzona na podstawie:
    • Wymagań funkcjonalnych lub niefunkcjonalnych.
    • Doświadczenia z poprzednich projektów lub podobnych systemów.
    • Standardów jakości, norm branżowych lub wytycznych (np. dotyczących dostępności WCAG).
    • Analizy ryzyka (najważniejsze obszary do sprawdzenia).
    Lista powinna zawierać konkretne punkty do zweryfikowania (np. "Czy pole e-mail akceptuje format x@y.z?", "Czy komunikat błędu jest zrozumiały?", "Czy przyciski mają odpowiedni kontrast?").
  2. Wykonaj testy zgodnie z listą: Przejdź przez kolejne punkty listy kontrolnej, wykonując odpowiednie testy i zaznaczając status każdego punktu (np. Zaliczone, Niezaliczone, Nie dotyczy).
  3. Zanotuj wyniki i defekty: Udokumentuj wyniki testów dla każdego punktu i zgłoś znalezione defekty.

Przykład: Fragment listy kontrolnej dla strony logowania.

  • [ ] Czy obecne są pola Login i Hasło?
  • [ ] Czy obecny jest przycisk "Zaloguj"?
  • [ ] Czy działa link "Zapomniałem hasła"?
  • [ ] Czy logowanie z poprawnymi danymi przenosi do panelu użytkownika?
  • [ ] Czy logowanie z niepoprawnym hasłem wyświetla błąd?
  • [ ] Czy logowanie z nieistniejącym loginem wyświetla błąd?
  • [ ] Czy pole hasła maskuje wpisywane znaki?
  • [ ] Czy komunikaty błędów są jasne i nie ujawniają zbyt wiele informacji?

Wartość i ograniczenia:

  • Wartość: Zapewnia systematyczne pokrycie zdefiniowanych aspektów. Łatwe do stosowania i zarządzania. Dobre jako uzupełnienie innych technik lub gdy wymagane jest szybkie sprawdzenie kluczowych funkcjonalności.
  • Ograniczenia: Skuteczność zależy od jakości i kompletności listy kontrolnej. Sama lista może stać się nieaktualna. Testowanie ogranicza się tylko do punktów na liście, co może prowadzić do pominięcia innych problemów. Nie zachęca do głębszej eksploracji.

Podsumowanie

Techniki oparte na doświadczeniu są nieocenionym narzędziem w pracy testera.

Zgadywanie błędów pozwala wykorzystać intuicję i wiedzę o typowych problemach.

Testowanie eksploracyjne umożliwia dynamiczne odkrywanie systemu i znajdowanie nieoczywistych defektów.

Testowanie w oparciu o listę kontrolną zapewnia systematyczne sprawdzenie kluczowych aspektów.

Najczęściej techniki te stosuje się jako uzupełnienie technik czarno- i białoskrzynkowych, aby zapewnić jak najszersze i najefektywniejsze pokrycie testowe.

Najczęściej Zadawane Pytania (FAQ)

Czy zgadywanie błędów to po prostu losowe klikanie?
Nie. Skuteczne zgadywanie błędów opiera się na wiedzy i doświadczeniu testera dotyczącym typowych pułapek, słabych punktów systemów i częstych błędów programistycznych. Jest to celowe poszukiwanie problemów w miejscach, gdzie ich wystąpienie jest prawdopodobne.
Czym różni się testowanie eksploracyjne od testowania ad-hoc?
Testowanie ad-hoc jest zazwyczaj całkowicie nieustrukturyzowane i nieplanowane. Testowanie eksploracyjne, choć dynamiczne, często ma pewną strukturę (np. sesje, misje, karty eksploracyjne) i wymaga notowania oraz raportowania, co odróżnia je od chaotycznego klikania.
Kiedy najlepiej stosować testowanie eksploracyjne?
Jest szczególnie przydatne, gdy dokumentacja jest słaba lub nieaktualna, gdy mamy mało czasu, gdy chcemy szybko poznać nowy system lub funkcjonalność, a także jako uzupełnienie testów skryptowych do wykrywania nieoczywistych błędów.
Skąd brać listy kontrolne do testowania?
Można je tworzyć samodzielnie na podstawie wymagań, analizy ryzyka lub doświadczenia. Można też korzystać z gotowych list dostępnych online dla typowych funkcjonalności (np. logowanie, formularze) lub standardów (np. WCAG dla dostępności). Ważne, aby dostosować je do kontekstu projektu.
Czy techniki oparte na doświadczeniu można zautomatyzować?
Zgadywanie błędów i testowanie oparte na liście kontrolnej można częściowo zautomatyzować – jeśli uda się przełożyć potencjalny błąd lub punkt z listy na konkretny skrypt testowy. Testowanie eksploracyjne jest z natury czynnością manualną, opartą na ludzkiej inteligencji i adaptacji.
Jak mierzyć postęp w testowaniu eksploracyjnym?
W podejściu opartym na sesjach (SBTM) postęp można mierzyć liczbą wykonanych sesji, czasem spędzonym na testowaniu, pokryciem zdefiniowanych misji lub obszarów funkcjonalnych, a także liczbą znalezionych defektów i zgłoszonych problemów.
Czy zgadywanie błędów jest przydatne tylko dla doświadczonych testerów?
Doświadczenie bardzo pomaga, ale nawet mniej doświadczeni testerzy mogą stosować tę technikę, np. korzystając z gotowych list typowych błędów (ataki usterek) lub ucząc się na podstawie defektów znajdowanych przez innych członków zespołu.
Czy lista kontrolna może zastąpić przypadki testowe?
W niektórych sytuacjach, np. przy testach regresji wysokiego poziomu lub gdy czas jest bardzo ograniczony, lista kontrolna może być głównym narzędziem. Jednak zazwyczaj nie zapewnia ona takiego poziomu szczegółowości i powtarzalności jak dobrze napisane przypadki testowe.
Jak dokumentować testy eksploracyjne?
Dokumentacja powinna być zwięzła i tworzona na bieżąco. Może obejmować: cel (misję) sesji, czas trwania, wykonane kroki (ogólnie), obserwacje, znalezione problemy, pomysły na dalsze testy. Przydatne są notatki, mapy myśli, zrzuty ekranu, nagrania wideo.
Czy te techniki są używane w metodykach zwinnych (Agile)?
Tak, zwłaszcza testowanie eksploracyjne jest bardzo popularne w Agile ze względu na swoją elastyczność i szybkość dostarczania informacji zwrotnej. Zgadywanie błędów i listy kontrolne również są często wykorzystywane, np. podczas testów akceptacyjnych lub regresji.

Przykładowe Pytania Egzaminacyjne

Pytanie 1 (K1): Która z poniższych technik projektowania testów najbardziej opiera się na wiedzy i intuicji testera?

  • a) Podział na klasy równoważności
  • b) Testowanie przejść między stanami
  • c) Zgadywanie błędów
  • d) Testowanie gałęzi

Poprawna odpowiedź: c (Zgadywanie błędów bezpośrednio wykorzystuje doświadczenie, wiedzę o typowych problemach i intuicję testera do przewidywania potencjalnych defektów.)

Pytanie 2 (K2): Jesteś testerem pracującym nad nową funkcjonalnością. Dokumentacja jest bardzo ogólna, a Ty masz ograniczony czas. Która technika będzie najbardziej odpowiednia, aby szybko poznać funkcjonalność i znaleźć potencjalne problemy?

  • a) Testowanie w oparciu o tablicę decyzyjną
  • b) Testowanie eksploracyjne
  • c) Analiza wartości brzegowych
  • d) Testowanie instrukcji

Poprawna odpowiedź: b (Testowanie eksploracyjne jest idealne w sytuacjach z ograniczoną dokumentacją i czasem, ponieważ pozwala na równoczesne uczenie się systemu i dynamiczne projektowanie testów w celu szybkiego odkrywania problemów.)

Pytanie 3 (K1): Do czego służy lista kontrolna w testowaniu opartym na liście kontrolnej?

  • a) Do automatycznego generowania przypadków testowych.
  • b) Do śledzenia czasu spędzonego na testowaniu.
  • c) Jako przewodnik zapewniający systematyczne sprawdzenie określonych elementów lub warunków.
  • d) Do mierzenia pokrycia kodu.

Poprawna odpowiedź: c (Lista kontrolna zawiera punkty do zweryfikowania i służy jako przewodnik, aby upewnić się, że tester systematycznie sprawdził wszystkie zdefiniowane aspekty.)