Lekcja 1.4: Siedem Zasad Testowania

Witaj w kolejnej lekcji naszego kursu!

Po zrozumieniu, czym jest testowanie, dlaczego jest konieczne oraz jaka jest różnica między błędami, defektami i awariami, nadszedł czas na poznanie fundamentalnych zasad, które kierują całym procesem testowym.

ISTQB sformułowało siedem kluczowych zasad testowania, które wynikają z wieloletnich doświadczeń i praktyki w branży.

Zrozumienie i stosowanie tych zasad pomaga w efektywnym planowaniu, projektowaniu i wykonywaniu testów, a także w realistycznym zarządzaniu oczekiwaniami wobec procesu testowego.

Zasada 1: Testowanie ujawnia obecność defektów, a nie ich brak

Pierwsza i jedna z najważniejszych zasad mówi, że testowanie może wykazać, że defekty są obecne w oprogramowaniu, ale nie może udowodnić, że ich nie ma.

Nawet jeśli przeprowadzimy bardzo dużą liczbę testów i nie znajdziemy żadnych defektów, nie mamy absolutnej pewności, że oprogramowanie jest w 100% wolne od błędów.

Zawsze istnieje możliwość, że jakiś defekt pozostał niewykryty, ponieważ nie został uruchomiony przez żaden z wykonanych przypadków testowych lub jego objawy nie zostały zauważone.

Testowanie redukuje prawdopodobieństwo wystąpienia awarii i zmniejsza liczbę niewykrytych defektów pozostających w oprogramowaniu, ale nigdy nie daje gwarancji ich całkowitego braku.

Celem testowania jest więc zwiększenie zaufania do jakości produktu poprzez znalezienie jak największej liczby istotnych defektów, a nie udowodnienie perfekcji.

Zasada 2: Testowanie gruntowne jest niemożliwe

Druga zasada stwierdza, że przetestowanie wszystkiego (wszystkich kombinacji danych wejściowych i warunków wstępnych) nie jest wykonalne, z wyjątkiem trywialnych przypadków.

Wyobraźmy sobie prosty formularz z kilkoma polami tekstowymi, listami rozwijanymi i przyciskami. Liczba możliwych kombinacji danych, które można wprowadzić, kolejności działań, stanów systemu i warunków środowiskowych (np. różne przeglądarki, systemy operacyjne) jest astronomiczna.

Próba przetestowania każdej możliwej ścieżki i kombinacji zajęłaby nieskończenie wiele czasu i zasobów.

Dlatego zamiast próbować testować wszystko (co jest niemożliwe), musimy skupić nasz wysiłek testowy na najważniejszych obszarach.

Wymaga to zastosowania analizy ryzyka i priorytetyzacji, aby zdecydować, które funkcje, scenariusze i kombinacje są najważniejsze do przetestowania w dostępnym czasie i budżecie.

Techniki projektowania testów (omawiane w Rozdziale 4) pomagają w wyborze optymalnego podzbioru testów, które mają największą szansę na wykrycie defektów.

Zasada 3: Wczesne testowanie oszczędza czas i pieniądze

Trzecia zasada podkreśla znaczenie rozpoczynania działań testowych jak najwcześniej w cyklu życia oprogramowania.

Aby wcześnie wykryć defekty, czynności testowe, zarówno statyczne, jak i dynamiczne, powinny być rozpoczęte możliwie jak najwcześniej w procesie tworzenia oprogramowania.

Jak już wspominaliśmy, koszty naprawy defektów rosną wykładniczo wraz z postępem projektu.

Defekt znaleziony i naprawiony na etapie wymagań jest wielokrotnie tańszy niż ten sam defekt znaleziony podczas testów systemowych lub, co gorsza, przez klienta po wdrożeniu.

Wczesne testowanie statyczne (np. przeglądy wymagań, projektu, kodu) pozwala wykryć defekty, zanim zostaną one zaimplementowane lub zanim spowodują problemy w późniejszych fazach.

Wczesne rozpoczęcie testowania dynamicznego (np. testy komponentowe) również pomaga szybko zidentyfikować problemy w poszczególnych modułach.

Ta zasada jest często określana mianem "shift left testing", czyli przesunięcia działań testowych w lewo na osi czasu projektu.

Zasada 4: Kumulowanie się defektów

Czwarta zasada mówi, że defekty nie są rozłożone równomiernie w systemie; zazwyczaj niewielka liczba modułów lub komponentów zawiera większość wykrytych defektów lub jest odpowiedzialna za większość awarii w środowisku produkcyjnym.

Zjawisko to jest często ilustrowane przez zasadę Pareto (80/20), która w tym kontekście sugeruje, że około 80% defektów znajduje się w 20% kodu.

Identyfikacja tych "gorących punktów" (ang. *defect clusters*) jest niezwykle ważna dla efektywnego planowania testów.

Jeśli wiemy, które moduły są historycznie bardziej podatne na błędy (np. ze względu na ich złożoność, częste zmiany, niedoświadczony zespół), możemy skoncentrować na nich większy wysiłek testowy.

Przewidywane i rzeczywiste klastry defektów są istotnym czynnikiem w analizie ryzyka i planowaniu testów opartych na ryzyku (więcej o tym w Rozdziale 5).

Zasada 5: Testy się zużywają (Paradoks pestycydów)

Piąta zasada, znana jako paradoks pestycydów, stwierdza, że jeśli te same testy są powtarzane wielokrotnie, stają się coraz mniej skuteczne w wykrywaniu nowych defektów.

Podobnie jak owady uodparniają się na ciągle stosowany ten sam pestycyd, tak oprogramowanie staje się "odporne" na ciągle te same testy.

Po pewnym czasie dany zestaw testów będzie znajdował coraz mniej nowych błędów, ponieważ te, które mógł wykryć, zostały już znalezione i naprawione.

Aby przezwyciężyć ten efekt i utrzymać skuteczność testowania, konieczne jest regularne przeglądanie i aktualizowanie istniejących testów oraz dodawanie nowych, które pokrywają inne obszary systemu, inne scenariusze lub wykorzystują inne dane.

Szczególnie ważne jest to w przypadku testów regresji, które muszą ewoluować wraz ze zmianami w oprogramowaniu.

Zasada 6: Testowanie zależy od kontekstu

Szósta zasada podkreśla, że nie ma jednego uniwersalnego podejścia do testowania; sposób testowania zależy od kontekstu.

Oprogramowanie tworzone jest w różnych celach, dla różnych branż i z różnymi wymaganiami jakościowymi.

Inaczej testuje się system bankowy, gdzie kluczowe jest bezpieczeństwo i poprawność obliczeń, inaczej grę komputerową, gdzie ważna jest grywalność i wydajność grafiki, a jeszcze inaczej stronę e-commerce, gdzie liczy się użyteczność i szybkość działania.

Kontekst obejmuje takie czynniki jak: rodzaj oprogramowania, wymagania biznesowe, poziom ryzyka, ograniczenia czasowe i budżetowe, stosowane technologie, model cyklu życia oprogramowania (np. Waterfall, Agile), regulacje prawne.

Podejście do testowania, wybór technik, poziom formalności, zakres automatyzacji – wszystko to musi być dostosowane do specyfiki danego projektu i jego kontekstu.

Zasada 7: Mylne przekonanie o braku błędów

Ostatnia, siódma zasada ostrzega przed pułapką myślenia, że znalezienie i naprawienie wielu defektów automatycznie oznacza, że system jest wysokiej jakości lub użyteczny.

Możliwe jest, że oprogramowanie, które przeszło wszystkie testy i w którym naprawiono wiele błędów, nadal nie spełnia potrzeb użytkowników lub jest trudne w obsłudze.

Wyobraźmy sobie system, który technicznie działa bez zarzutu, ale jego interfejs jest tak skomplikowany, że nikt nie potrafi go efektywnie używać, albo realizuje funkcje, które nie są potrzebne biznesowi.

Dlatego samo testowanie pod kątem zgodności ze specyfikacją (weryfikacja) nie wystarczy.

Konieczna jest również walidacja, czyli sprawdzenie, czy tworzony system jest tym, czego faktycznie potrzebują użytkownicy i interesariusze, i czy rozwiązuje ich problemy.

Nawet system bez defektów może być bezużyteczny, jeśli nie spełnia rzeczywistych potrzeb.

Podsumowanie

Siedem zasad testowania stanowi drogowskaz dla każdego testera i zespołu projektowego.

Przypominają one o ograniczeniach testowania (zasady 1 i 2), o korzyściach płynących z wczesnego działania (zasada 3), o nierównomiernym rozkładzie defektów (zasada 4), o konieczności adaptacji testów (zasada 5), o wpływie kontekstu (zasada 6) oraz o tym, że brak błędów nie gwarantuje sukcesu (zasada 7).

Świadomość tych zasad pozwala na bardziej efektywne, realistyczne i wartościowe podejście do zapewniania jakości oprogramowania.

Najczęściej Zadawane Pytania (FAQ)

Czy zasada "Testowanie ujawnia obecność defektów" oznacza, że testowanie jest bezużyteczne?
Absolutnie nie. Chociaż testowanie nie może zagwarantować braku błędów, znacząco redukuje ryzyko ich wystąpienia w działającym systemie. Znalezienie i naprawienie defektów przed wdrożeniem zwiększa zaufanie do produktu i chroni przed potencjalnymi problemami i kosztami.
Skoro testowanie gruntowne jest niemożliwe, jak możemy być pewni jakości?
Nie możemy być pewni w 100%. Zamiast tego, stosujemy analizę ryzyka i priorytetyzację, aby skupić wysiłek testowy na najważniejszych obszarach. Używamy technik projektowania testów, aby wybrać efektywny zestaw przypadków testowych, maksymalizując szansę na znalezienie istotnych defektów w dostępnym czasie.
Co konkretnie oznacza "wczesne testowanie"?
Oznacza to rozpoczynanie działań testowych jak najwcześniej w cyklu życia projektu. Może to być przegląd wymagań już na etapie ich tworzenia, przegląd projektu architektury, pisanie testów jednostkowych przez programistów równolegle z kodem, czy wczesne testy integracyjne komponentów.
Jak zidentyfikować "klastry defektów"?
Można to robić na podstawie danych historycznych z poprzednich projektów lub wersji produktu, analizując złożoność kodu (np. za pomocą metryk), identyfikując moduły, które były często modyfikowane, lub te, które są tworzone przez mniej doświadczonych członków zespołu. Analiza ryzyka pomaga w tej identyfikacji.
Jak często należy aktualizować testy, aby uniknąć "paradoksu pestycydów"?
Nie ma jednej reguły. Testy powinny być przeglądane i aktualizowane regularnie, zwłaszcza gdy zmieniają się wymagania lub architektura systemu. Warto również okresowo dodawać nowe testy, oparte na nowych scenariuszach, danych lub technikach, aby utrzymać ich skuteczność w wykrywaniu nowych błędów.
Podaj przykład, jak kontekst wpływa na testowanie.
Testowanie aplikacji medycznej ratującej życie będzie wymagało znacznie większej rygorystyczności, formalności, dokumentacji i pokrycia testowego niż testowanie prostej strony wizytówki firmy. W pierwszym przypadku priorytetem będzie niezawodność i bezpieczeństwo, w drugim – np. poprawność wyświetlania na różnych urządzeniach.
Jak upewnić się, że system spełnia potrzeby użytkowników (zasada 7)?
Oprócz testowania funkcjonalnego (weryfikacji), kluczowa jest walidacja. Obejmuje ona działania takie jak testy akceptacyjne z udziałem użytkowników, testy użyteczności, zbieranie informacji zwrotnej od klientów, prototypowanie i weryfikacja koncepcji na wczesnym etapie.
Czy te zasady dotyczą tylko testowania manualnego?
Nie, te zasady są uniwersalne i dotyczą zarówno testowania manualnego, jak i automatycznego. Na przykład, testy automatyczne również mogą się "zużywać" (paradoks pestycydów) i muszą być dostosowane do kontekstu. Automatyzacja nie eliminuje też niemożliwości testowania gruntownego.
Która zasada jest najważniejsza?
Wszystkie zasady są ważne i wzajemnie się uzupełniają, tworząc spójny obraz filozofii testowania. Trudno wskazać jedną najważniejszą, ponieważ ich znaczenie może zależeć od konkretnego kontekstu projektu i etapu cyklu życia.
Czy można świadomie zignorować którąś z zasad?
Zrozumienie zasad pozwala podejmować świadome decyzje. Czasami, ze względu na ograniczenia (np. czasowe), trzeba iść na kompromisy. Jednak ignorowanie zasad bez zrozumienia konsekwencji (np. rezygnacja z wczesnego testowania, brak aktualizacji testów) zazwyczaj prowadzi do zwiększenia ryzyka i problemów w przyszłości.
Jak zasada kumulacji defektów pomaga w testowaniu?
Wiedząc, że defekty często grupują się w określonych modułach, możemy efektywniej alokować zasoby testowe. Skupienie większej uwagi na tych ryzykownych obszarach (klastrach defektów) zwiększa prawdopodobieństwo znalezienia większości błędów przy ograniczonym wysiłku.
Czy "paradoks pestycydów" oznacza, że stare testy są bezużyteczne?
Niekoniecznie. Stare testy, zwłaszcza te regresyjne, nadal mogą być cenne do sprawdzania, czy istniejąca funkcjonalność nie została zepsuta przez nowe zmiany. Jednak ich zdolność do wykrywania *nowych* defektów maleje, dlatego potrzebne są też nowe i zaktualizowane testy.
Jak pogodzić zasadę "wczesnego testowania" z metodykami Agile?
Metodyki Agile doskonale wpisują się w zasadę wczesnego testowania. Testowanie odbywa się w każdej iteracji (sprincie), często równolegle z developmentem. Stosuje się testy jednostkowe, testy akceptacyjne tworzone przed lub w trakcie implementacji (np. TDD, BDD), a także ciągłą integrację i testowanie.
Czy zasada "testowanie zależy od kontekstu" oznacza, że nie ma żadnych dobrych praktyk?
Nie. Istnieje wiele dobrych praktyk i technik testowania, ale ich zastosowanie i priorytet zależą od kontekstu. Zasada ta podkreśla, że nie należy ślepo kopiować rozwiązań z jednego projektu do drugiego bez analizy, czy pasują one do specyfiki nowego projektu.
Jak mierzyć "zaufanie" do jakości oprogramowania (zasada 1)?
Zaufanie jest subiektywne, ale można je budować na podstawie obiektywnych danych z testów: pokrycia kodu i wymagań przez testy, liczby i dotkliwości znalezionych defektów, wyników testów wydajnościowych i bezpieczeństwa, opinii użytkowników z testów akceptacyjnych. Im więcej pozytywnych danych, tym większe zaufanie.

Przykładowe Pytania Egzaminacyjne

Pytanie 1 (K2): Która zasada testowania wyjaśnia, dlaczego nie jest możliwe przetestowanie wszystkich możliwych ścieżek wykonania programu?

  • a) Testowanie ujawnia obecność defektów, a nie ich brak.
  • b) Testowanie gruntowne jest niemożliwe.
  • c) Wczesne testowanie oszczędza czas i pieniądze.
  • d) Testy się zużywają (Paradoks pestycydów).

Poprawna odpowiedź: b (Zasada ta bezpośrednio odnosi się do niemożliwości przetestowania wszystkich kombinacji danych wejściowych i warunków.)

Pytanie 2 (K2): Zespół testowy wielokrotnie wykonuje ten sam zestaw testów regresji po każdej zmianie w kodzie. Z czasem zauważają, że ten zestaw testów znajduje coraz mniej nowych defektów. Która zasada testowania najlepiej opisuje tę sytuację?

  • a) Kumulowanie się defektów.
  • b) Testowanie zależy od kontekstu.
  • c) Testy się zużywają (Paradoks pestycydów).
  • d) Mylne przekonanie o braku błędów.

Poprawna odpowiedź: c (Paradoks pestycydów opisuje zjawisko spadku skuteczności powtarzanych testów w wykrywaniu nowych błędów.)

Pytanie 3 (K2): Dlaczego ważne jest, aby rozpocząć testowanie jak najwcześniej w cyklu życia oprogramowania?

  • a) Aby udowodnić, że oprogramowanie jest wolne od błędów.
  • b) Ponieważ defekty często kumulują się w późniejszych fazach projektu.
  • c) Aby obniżyć koszty naprawy defektów, znajdując je na wczesnym etapie.
  • d) Ponieważ testowanie gruntowne jest możliwe tylko na początku projektu.

Poprawna odpowiedź: c (Zasada wczesnego testowania podkreśla korzyści kosztowe wynikające z wczesnego wykrywania i naprawiania defektów.)