Lekcja 2.10: Testy Potwierdzające i Regresji

Oprogramowanie rzadko kiedy jest statyczne.

W trakcie jego cyklu życia nieustannie wprowadzane są zmiany – czy to w celu dodania nowych funkcjonalności, poprawienia istniejących, usunięcia wykrytych defektów, czy dostosowania do zmieniającego się środowiska.

Każda taka zmiana, nawet pozornie niewielka, niesie ze sobą ryzyko.

Ryzyko, że poprawka nie zadziałała zgodnie z oczekiwaniami, lub – co gorsza – że wprowadziła nowe, nieprzewidziane problemy w innych częściach systemu.

Aby zarządzać tym ryzykiem i utrzymać jakość oprogramowania na odpowiednim poziomie, niezbędne są dwa kluczowe rodzaje testów: testy potwierdzające (confirmation testing) i testy regresji (regression testing).

Jak podkreśla sylabus ISTQB Foundation Level v4.0, „proces testowania powinien również obejmować testowanie potwierdzające i testowanie regresji” po wprowadzeniu zmian.

W tej lekcji zgłębimy definicje, cele, strategie i znaczenie obu tych typów testów.

Testowanie Potwierdzające (Confirmation Testing / Re-testing)

Gdy zespół deweloperski informuje, że defekt został naprawiony, skąd możemy mieć pewność, że faktycznie tak jest?

Właśnie tutaj wkracza testowanie potwierdzające.

Jak definiuje sylabus ISTQB, „testowanie potwierdzające ma na celu sprawdzenie, czy pierwotny defekt został pomyślnie usunięty”.

Jest to więc bezpośrednia weryfikacja skuteczności wprowadzonej poprawki.

  • Cel: Potwierdzenie, że zgłoszony wcześniej defekt został naprawiony i oprogramowanie działa teraz zgodnie z oczekiwaniami w obszarze objętym poprawką.
  • Kiedy wykonywane: Po dostarczeniu przez zespół deweloperski nowej wersji oprogramowania zawierającej poprawkę zgłoszonego defektu.
  • Jak wykonywane: Sposób przeprowadzenia testów potwierdzających zależy od poziomu ryzyka i dostępnego czasu. Sylabus wymienia kilka podejść:
    • Wykonanie wszystkich przypadków testowych, które wcześniej nie zostały zaliczone z powodu defektu: Jest to najbardziej kompleksowe podejście, dające największą pewność, że problem został rozwiązany we wszystkich scenariuszach, w których wcześniej występował.
    • Dodanie nowych testów w celu pokrycia ewentualnych zmian, które były niezbędne do usunięcia defektu: Czasem poprawka wymagała wprowadzenia dodatkowych zmian w kodzie lub logice. Warto wtedy zaprojektować nowe testy, aby upewnić się, że te zmiany również działają poprawnie.
    • Wykonanie kroków potrzebnych do odtworzenia awarii spowodowanej defektem i sprawdzenia, czy tym razem ona nie występuje: Jest to podejście minimalne, stosowane, gdy brakuje czasu lub środków. Polega na powtórzeniu dokładnych kroków, które prowadziły do wystąpienia błędu i sprawdzeniu, czy błąd już nie występuje. Daje to podstawowe potwierdzenie, ale nie gwarantuje, że defekt został usunięty we wszystkich możliwych kontekstach.
  • Kto wykonuje: Zazwyczaj tester, który pierwotnie zgłosił defekt, lub inny członek zespołu testowego.

Testowanie potwierdzające jest niezbędnym krokiem w cyklu życia defektu.

Bez niego nie mamy formalnego potwierdzenia, że problem został rozwiązany, a defekt może zostać zamknięty.

Ważne jest, aby testy potwierdzające były przeprowadzane na tej samej konfiguracji środowiska (lub jak najbardziej zbliżonej), na której pierwotnie wykryto defekt.

Testowanie Regresji (Regression Testing)

Naprawienie jednego defektu lub dodanie nowej funkcji to jedno, ale co jeśli ta zmiana „zepsuła” coś innego w systemie, co wcześniej działało poprawnie?

Takie nieoczekiwane, negatywne skutki uboczne zmian nazywamy regresją.

Celem testowania regresji jest właśnie wykrycie takich problemów.

Sylabus ISTQB definiuje testowanie regresji jako działania pozwalające „sprawdzić, czy wprowadzona zmiana (w tym także poprawka, która była już przedmiotem testowania potwierdzającego) nie spowodowała negatywnych konsekwencji”.

Te negatywne konsekwencje mogą pojawić się w różnych miejscach:

  • W module, w którym bezpośrednio wprowadzono zmianę.
  • W innych modułach tego samego systemu, które w jakiś sposób zależą od zmienionego modułu lub z nim współpracują.
  • W innych, zewnętrznych systemach, które są podłączone do testowanego systemu.

Dlatego, jak zauważa sylabus, „testowanie regresji może wykraczać poza przedmiot testów i obejmować również środowisko, w którym się on znajduje”.

  • Cel: Wykrycie niezamierzonych skutków ubocznych (regresji) wprowadzonych zmian w oprogramowaniu. Zapewnienie, że modyfikacje nie zepsuły wcześniej działających funkcjonalności.
  • Kiedy wykonywane: Po każdej zmianie w oprogramowaniu – czy to po dodaniu nowej funkcji, modyfikacji istniejącej, czy po poprawieniu defektu (nawet jeśli testy potwierdzające zakończyły się sukcesem).
  • Jak wykonywane: Testowanie regresji polega na ponownym wykonaniu podzbioru wcześniej zdefiniowanych i wykonanych testów, które obejmują obszary potencjalnie dotknięte zmianą. Wybór testów do wykonania w ramach regresji jest kluczowy dla efektywności tego procesu.
  • Kto wykonuje: Zazwyczaj zespół testowy, często z wykorzystaniem automatyzacji.

Optymalizacja Zakresu Testów Regresji – Analiza Wpływu

Przeprowadzenie pełnego zestawu wszystkich istniejących testów po każdej, nawet najmniejszej zmianie, jest zazwyczaj nierealistyczne i nieefektywne czasowo oraz kosztowo.

Dlatego kluczowe jest umiejętne dobranie zakresu testów regresji.

Jak zaleca sylabus, „zalecane jest przeprowadzenie w pierwszej kolejności analizy wpływu (impact analysis) mającej na celu zoptymalizowanie zasięgu testowania regresji, co pozwoli wskazać elementy oprogramowania, na które będzie mogła wpłynąć wprowadzona zmiana”.

Analiza wpływu polega na zidentyfikowaniu potencjalnych konsekwencji wprowadzonej zmiany w różnych częściach systemu.

Wymaga to zrozumienia architektury systemu, zależności między modułami, przepływów danych i potencjalnych interakcji.

Na podstawie tej analizy można wybrać te przypadki testowe, które pokrywają obszary o największym ryzyku wystąpienia regresji.

Czynniki brane pod uwagę przy wyborze testów regresji to m.in.:

  • Obszary systemu bezpośrednio zmodyfikowane.
  • Obszary systemu zależne od zmodyfikowanych części.
  • Kluczowe, krytyczne funkcjonalności systemu.
  • Obszary, w których historycznie często występowały defekty.
  • Złożoność wprowadzonej zmiany.
  • Dostępny czas i zasoby.

Dobrze przeprowadzona analiza wpływu pozwala na skupienie wysiłków testowych tam, gdzie są one najbardziej potrzebne, zwiększając efektywność testowania regresji.

Automatyzacja Testów Regresji

Testowanie regresji jest często powtarzalne i czasochłonne, zwłaszcza w projektach z częstymi zmianami.

Dlatego jest to idealny kandydat do automatyzacji.

Jak wskazuje sylabus, „testy regresji są często automatyzowane”.

Zautomatyzowany zestaw testów regresji może być uruchamiany regularnie (np. każdej nocy lub w ramach procesu CI/CD), zapewniając szybką informację zwrotną na temat potencjalnych regresji.

Automatyzacja pozwala na szersze pokrycie testami regresji przy mniejszym wysiłku manualnym, co jest szczególnie ważne w podejściach zwinnych i DevOps.

Podsumowanie

Testowanie potwierdzające i testowanie regresji są kluczowymi działaniami wykonywanymi po wprowadzeniu zmian w oprogramowaniu.

Testowanie potwierdzające (re-testing) weryfikuje, czy zgłoszony defekt został pomyślnie usunięty.

Testowanie regresji sprawdza, czy wprowadzone zmiany (w tym poprawki) nie spowodowały niezamierzonych negatywnych skutków ubocznych w innych częściach systemu.

Zakres testów regresji powinien być optymalizowany za pomocą analizy wpływu.

Testowanie regresji jest często automatyzowane, aby zapewnić efektywność i szybkość informacji zwrotnej.

Oba rodzaje testów są niezbędne do utrzymania jakości i stabilności oprogramowania w dynamicznym środowisku zmian.

Najczęściej Zadawane Pytania (FAQ)

Czy testy potwierdzające to to samo co testy regresji?
Nie. Testy potwierdzające sprawdzają, czy *konkretny defekt* został naprawiony. Testy regresji sprawdzają, czy zmiana (np. poprawka defektu) nie zepsuła *innych, wcześniej działających części* systemu.
Czy zawsze trzeba wykonywać testy regresji po testach potwierdzających?
Tak, jest to zdecydowanie zalecane. Nawet jeśli test potwierdzający przeszedł pomyślnie, poprawka mogła wprowadzić regresję w innym miejscu. Testy regresji pomagają to wykryć.
Czy testy regresji wykonuje się tylko po poprawkach błędów?
Nie. Testy regresji powinny być wykonywane po *każdej* zmianie w oprogramowaniu, w tym po dodaniu nowych funkcji, modyfikacji istniejących, zmianach w konfiguracji środowiska czy refaktoryzacji kodu.
Jak duży powinien być zestaw testów regresji?
Rozmiar zestawu zależy od analizy wpływu, poziomu ryzyka, dostępnego czasu i zasobów. Może to być od kilku kluczowych testów po bardzo duży zestaw obejmujący znaczną część funkcjonalności. Ważne jest znalezienie równowagi między pokryciem a efektywnością.
Czy można zautomatyzować testy potwierdzające?
Tak, jeśli pierwotny test, który wykrył defekt, był zautomatyzowany, można go ponownie uruchomić w ramach testów potwierdzających. Jednak często testy potwierdzające wymagają również manualnej weryfikacji.
Co to jest analiza wpływu (impact analysis)?
Jest to proces identyfikacji potencjalnych konsekwencji wprowadzonej zmiany w różnych częściach systemu. Pomaga określić, które obszary są najbardziej narażone na regresję i które testy należy wykonać, aby to sprawdzić.
Czy testy regresji mogą być wykonywane manualnie?
Tak, ale ze względu na ich powtarzalność i często dużą liczbę, są one głównym kandydatem do automatyzacji. Manualne testy regresji mogą być stosowane dla mniejszych zmian lub w obszarach trudnych do zautomatyzowania.
Na jakim poziomie testów wykonuje się testy regresji?
Testy regresji mogą być wykonywane na wszystkich poziomach testów (modułowym, integracyjnym, systemowym). Zautomatyzowane testy regresji są często uruchamiane na poziomie modułowym i API (integracyjnym/systemowym) w ramach CI/CD.
Co jeśli test regresji wykryje nowy defekt?
Należy zgłosić nowy defekt, opisując problem i wskazując, że jest to regresja spowodowana ostatnią zmianą. Proces zarządzania defektami jest następnie kontynuowany dla tego nowego zgłoszenia.
Jak często należy aktualizować zestaw testów regresji?
Zestaw testów regresji powinien być regularnie przeglądany i aktualizowany, aby odzwierciedlał zmiany w systemie, nowe funkcjonalności i zmieniające się ryzyka. Należy dodawać nowe testy i usuwać te, które stały się nieaktualne.

Przykładowe Pytania Egzaminacyjne

Pytanie 1 (K1): Jak nazywa się testowanie wykonywane w celu sprawdzenia, czy poprawka defektu została pomyślnie wdrożona?

  • a) Testowanie regresji
  • b) Testowanie systemowe
  • c) Testowanie potwierdzające
  • d) Testowanie akceptacyjne

Poprawna odpowiedź: c (Testowanie potwierdzające ma na celu weryfikację, czy pierwotny defekt został usunięty.)

Pytanie 2 (K2): Jaki jest główny cel testowania regresji?

  • a) Sprawdzenie nowej funkcjonalności.
  • b) Potwierdzenie, że defekt został naprawiony.
  • c) Wykrycie niezamierzonych skutków ubocznych zmian.
  • d) Ocena wydajności systemu.

Poprawna odpowiedź: c (Testowanie regresji ma na celu upewnienie się, że zmiany nie wprowadziły nowych problemów w działających częściach systemu.)

Pytanie 3 (K2): Dlaczego analiza wpływu jest ważna przy planowaniu testów regresji?

  • a) Aby określić, kto powinien wykonać testy regresji.
  • b) Aby zoptymalizować zakres testów regresji i skupić się na obszarach największego ryzyka.
  • c) Aby zdecydować, czy testy regresji powinny być manualne czy automatyczne.
  • d) Aby udokumentować wyniki testów regresji.

Poprawna odpowiedź: b (Analiza wpływu pomaga zidentyfikować obszary potencjalnie dotknięte zmianą, co pozwala na efektywniejszy dobór testów regresji.)