W poprzedniej lekcji zdefiniowaliśmy, czym jest model cyklu życia oprogramowania (SDLC) i przedstawiliśmy główne kategorie modeli: sekwencyjne, iteracyjne i przyrostowe, a także wspomnieliśmy o metodykach zwinnych.
Podkreśliliśmy również, że wybór modelu SDLC ma fundamentalny wpływ na proces testowania.
W tej lekcji przyjrzymy się bliżej tym wpływom, analizując, jak konkretne cechy różnych modeli kształtują strategię, zakres, czas, dokumentację, techniki, automatyzację oraz role i obowiązki związane z testowaniem.
Zrozumienie tych zależności jest kluczowe dla efektywnego planowania i przeprowadzania testów w każdym projekcie.
Szczegółowy Wpływ Modeli SDLC na Kluczowe Aspekty Testowania
Jak podkreśla sylabus ISTQB, warunkiem powodzenia procesu testowania jest jego ścisłe dopasowanie do przyjętego cyklu wytwarzania oprogramowania.
Nie istnieje jedno uniwersalne podejście; strategia testowa musi być elastyczna i adaptowalna do kontekstu projektu, w tym do wybranego modelu SDLC.
Przeanalizujmy teraz bardziej szczegółowo, jak poszczególne modele wpływają na kluczowe elementy procesu testowego:
1. Zakres i Czas Wykonywania Czynności Testowych:
- Modele Sekwencyjne (np. Waterfall, V-Model): W tych modelach fazy następują po sobie liniowo. Analiza wymagań, projektowanie systemu, implementacja, testowanie i wdrożenie to odrębne etapy. Główne działania związane z testowaniem dynamicznym (systemowym, akceptacyjnym) koncentrują się pod koniec cyklu, po zakończeniu fazy kodowania. Testerzy mogą wcześniej uczestniczyć w przeglądach dokumentacji (testowanie statyczne), co jest zgodne z zasadą wczesnego testowania, jednak możliwość uruchomienia kodu i weryfikacji jego działania pojawia się stosunkowo późno. Głównym ryzykiem jest późne wykrywanie defektów, których naprawa na tym etapie jest znacznie bardziej kosztowna i czasochłonna. Testowanie regresji jest zazwyczaj wykonywane przed głównym wydaniem.
- Modele Iteracyjne i Przyrostowe (np. Spiralny, UP, Agile - Scrum, Kanban): Tutaj oprogramowanie powstaje w cyklach (iteracjach, sprintach, przyrostach). Każdy cykl obejmuje pełen zakres działań, od planowania po testowanie, i kończy się dostarczeniem działającej części produktu. Taka struktura umożliwia prowadzenie testów na wszystkich poziomach (modułowym, integracyjnym, systemowym) w każdej iteracji. Testowanie staje się czynnością ciągłą, a nie oddzielną fazą. Pozwala to na znacznie wcześniejsze wykrywanie błędów i szybsze dostarczanie informacji zwrotnych do zespołu deweloperskiego. Częste dostarczanie nowych wersji wymaga jednak intensywnego testowania regresji, aby upewnić się, że nowe funkcje nie zepsuły istniejących.
2. Szczegółowość Dokumentacji Testów (Testware):
- Modele Sekwencyjne: Ze względu na formalny charakter i potrzebę precyzyjnego zdefiniowania zakresu prac przed ich rozpoczęciem, modele te często wymagają tworzenia obszernej i szczegółowej dokumentacji testowej. Obejmuje to formalne plany testów, szczegółowe przypadki testowe opisujące kroki, dane wejściowe i oczekiwane rezultaty, a także formalne raporty z testów dokumentujące wyniki i znalezione defekty. Taka dokumentacja jest często niezbędna do formalnej akceptacji produktu przez klienta lub do celów audytowych.
- Modele Iteracyjne i Przyrostowe (szczególnie Agile): W tych modelach preferuje się podejście bardziej pragmatyczne – „dokumentacja wystarczająca”. Nacisk kładzie się na działające oprogramowanie i bezpośrednią komunikację w zespole. Dokumentacja jest tworzona tylko wtedy, gdy jest to absolutnie konieczne i przynosi realną wartość. Plany testów mogą być mniej formalne, bardziej dynamiczne. Przypadki testowe mogą być zapisywane w lżejszej formie, np. jako listy kontrolne, scenariusze w narzędziach do zarządzania testami (np. Jira z dodatkami typu Zephyr/Xray) lub nawet jako wykonywalne specyfikacje (w podejściach BDD/ATDD). Raportowanie jest często bardziej zwięzłe i skupione na bieżącym statusie i ryzykach.
3. Wybór Technik Testowania i Podejścia do Testowania:
- Modele Sekwencyjne: Stabilność wymagań na wczesnych etapach sprzyja stosowaniu technik projektowania testów opartych na specyfikacji (czarnoskrzynkowych). Techniki takie jak podział na klasy równoważności, analiza wartości brzegowych, tablice decyzyjne czy testowanie przejść między stanami pozwalają na systematyczne wyprowadzanie przypadków testowych z dokumentacji wymagań i projektu. Testowanie białoskrzynkowe (np. pokrycie instrukcji, decyzji) jest również stosowane, często przez programistów na poziomie testów modułowych.
- Modele Iteracyjne i Przyrostowe (szczególnie Agile): Dynamiczny charakter tych modeli, częste zmiany i ewolucja wymagań sprawiają, że oprócz technik opartych na specyfikacji, dużą rolę odgrywają techniki oparte na doświadczeniu. Testowanie eksploracyjne, gdzie testerzy jednocześnie uczą się systemu, projektują i wykonują testy, pozwala na elastyczne reagowanie na zmiany i odkrywanie nieoczekiwanych problemów. Zgadywanie błędów (error guessing), oparte na wiedzy testera o typowych pomyłkach programistycznych, również jest cenne. Kluczowe stają się także podejścia oparte na współpracy, takie jak ATDD i BDD, które pomagają zespołowi (testerom, programistom, analitykom biznesowym) wspólnie definiować i rozumieć wymagania w formie testowalnych kryteriów akceptacji.
4. Zakres Automatyzacji Testów:
- Modele Sekwencyjne: Automatyzacja jest stosowana, ale często wprowadzana jest później w cyklu życia, głównie w celu wsparcia testów regresji przed głównymi wydaniami lub do testowania niefunkcjonalnego (np. wydajności). Stabilność wymagań może ułatwiać tworzenie skryptów automatycznych, ale późne rozpoczęcie testowania dynamicznego może ograniczać korzyści z wczesnej automatyzacji.
- Modele Iteracyjne i Przyrostowe (szczególnie Agile): Automatyzacja jest tutaj kluczowym elementem sukcesu. Częste iteracje, potrzeba szybkiego feedbacku i konieczność ciągłego przeprowadzania testów regresji sprawiają, że manualne testowanie wszystkiego staje się niemożliwe i nieefektywne. Dąży się do automatyzacji na wielu poziomach, zgodnie z koncepcją piramidy testów (dużo szybkich testów jednostkowych i integracyjnych, mniej wolniejszych testów UI). Automatyzacja jest często częścią procesu ciągłej integracji (CI) i ciągłego dostarczania (CD), co pozwala na szybkie budowanie, testowanie i wdrażanie nowych wersji oprogramowania.
5. Role i Obowiązki Testera:
- Modele Sekwencyjne: Testerzy często pracują w dedykowanych zespołach testowych, które są oddzielone od zespołów deweloperskich. Ich zaangażowanie może być ograniczone do określonych faz projektu, głównie związanych z testowaniem systemowym i akceptacyjnym. Mogą mieć mniejszy wpływ na jakość we wcześniejszych fazach, poza uczestnictwem w przeglądach. Role są często bardziej wyspecjalizowane (np. tester manualny, tester automatyzujący, kierownik testów).
- Modele Iteracyjne i Przyrostowe (szczególnie Agile): Testerzy są integralną częścią zespołu deweloperskiego (tzw. cross-functional team). Współpracują blisko z programistami, analitykami biznesowymi i innymi członkami zespołu przez cały cykl życia. Angażują się we wszystkie działania związane z jakością, od definiowania kryteriów akceptacji, przez testowanie statyczne i dynamiczne, po automatyzację. Role mogą być mniej sztywne, a od członków zespołu oczekuje się szerszego zakresu kompetencji (T-shaped skills). Odpowiedzialność za jakość jest wspólna dla całego zespołu.
Podsumowanie Wpływu
Podsumowując, wybór modelu SDLC ma głęboki i wielowymiarowy wpływ na proces testowania.
Modele sekwencyjne prowadzą do bardziej formalnego, fazowego podejścia z testowaniem skoncentrowanym na końcu, co niesie ryzyko późnego wykrywania błędów.
Modele iteracyjne i przyrostowe, zwłaszcza w wydaniu zwinnym, promują ciągłe, zintegrowane testowanie w ramach krótkich cykli, co pozwala na wczesne wykrywanie defektów i elastyczne reagowanie na zmiany, ale wymaga intensywnej automatyzacji i bliskiej współpracy w zespole.
Efektywny tester musi rozumieć te różnice i potrafić dostosować swoje podejście, techniki i narzędzia do kontekstu narzuconego przez wybrany model SDLC.