Lekcja 2.1: Testowanie w Kontekście Cyklu Życia Oprogramowania (SDLC)

Witaj w drugim rozdziale naszego kursu przygotowującego do egzaminu ISTQB Poziom Podstawowy!

W poprzednim rozdziale zgłębiliśmy fundamentalne koncepcje testowania, jego cele, zasady oraz podstawowy proces.

Teraz przeniesiemy naszą uwagę na szerszy kontekst – jak testowanie wpisuje się w cały cykl życia oprogramowania, znany jako SDLC (Software Development Lifecycle).

Zrozumienie tej relacji jest kluczowe, ponieważ model wytwarzania oprogramowania, który wybiera organizacja, ma bezpośredni i znaczący wpływ na to, jak, kiedy i przez kogo przeprowadzane są testy.

Czym jest Model Cyklu Życia Oprogramowania (SDLC)?

Zanim zagłębimy się w szczegóły, zdefiniujmy, czym właściwie jest model cyklu życia oprogramowania.

SDLC to strukturalne podejście, swoista mapa drogowa, która opisuje poszczególne fazy i czynności zaangażowane w proces tworzenia, wdrażania i utrzymania systemu informatycznego.

Można go postrzegać jako abstrakcyjne odwzorowanie całego procesu, od pomysłu po wycofanie produktu z użytku.

Model ten określa nie tylko sekwencję działań, ale także wzajemne powiązania między nimi – zarówno logiczne, jak i chronologiczne.

Wybór odpowiedniego modelu SDLC jest jedną z fundamentalnych decyzji w każdym projekcie IT, ponieważ wpływa na organizację pracy, zarządzanie ryzykiem, komunikację w zespole i, co dla nas najważniejsze, na strategię i realizację testów.

Istnieje wiele różnych modeli SDLC, a każdy z nich ma swoje specyficzne cechy, zalety i wady.

Możemy je ogólnie podzielić na kilka głównych kategorii, które warto znać, przygotowując się do egzaminu ISTQB:

Sekwencyjne modele wytwarzania oprogramowania:

Te modele charakteryzują się liniowym, uporządkowanym przepływem pracy, gdzie każda faza musi zostać formalnie zakończona i zatwierdzona przed rozpoczęciem następnej.

Przypomina to wodospad, stąd nazwa najpopularniejszego modelu – kaskadowego (Waterfall).

Innym znanym modelem sekwencyjnym jest model V, który wyraźnie pokazuje powiązanie między fazami wytwarzania a odpowiadającymi im poziomami testów.

W tych modelach wymagania są zazwyczaj definiowane na początku i oczekuje się, że pozostaną stabilne przez cały projekt.

Testowanie w modelach sekwencyjnych często koncentruje się w późniejszych fazach, po zakończeniu implementacji kodu.

Chociaż testerzy mogą uczestniczyć we wcześniejszych przeglądach dokumentacji, główne działania związane z testowaniem dynamicznym (uruchamianiem oprogramowania) odbywają się dopiero po fazie kodowania.

Iteracyjne modele wytwarzania oprogramowania:

W przeciwieństwie do modeli sekwencyjnych, modele iteracyjne polegają na tworzeniu oprogramowania w powtarzalnych cyklach, zwanych iteracjami.

Każda iteracja obejmuje wszystkie kluczowe czynności: planowanie, analizę, projektowanie, implementację i testowanie.

Wynikiem każdej iteracji jest działający, choć niekoniecznie kompletny, prototyp lub wersja produktu.

Pozwala to na stopniowe rozwijanie systemu i zbieranie informacji zwrotnych od użytkowników lub interesariuszy na wcześniejszych etapach.

Przykładami modeli iteracyjnych są model spiralny, który kładzie duży nacisk na zarządzanie ryzykiem, oraz prototypowanie, gdzie szybko tworzy się uproszczone wersje systemu w celu weryfikacji koncepcji lub wymagań.

W modelach iteracyjnych testowanie jest integralną częścią każdej iteracji, co umożliwia wczesne wykrywanie i naprawianie błędów.

Przyrostowe modele wytwarzania oprogramowania:

Modele te są blisko związane z iteracyjnymi, ale główny nacisk kładą na dostarczanie funkcjonalności w małych, użytecznych częściach, zwanych przyrostami.

Każdy przyrost dodaje nową, działającą funkcjonalność do systemu, który stopniowo rośnie.

Podobnie jak w modelach iteracyjnych, każda faza tworzenia przyrostu obejmuje planowanie, analizę, projektowanie, kodowanie i testowanie.

Model Unified Process (UP) jest często podawany jako przykład modelu łączącego cechy iteracyjne i przyrostowe.

Testowanie w modelach przyrostowych odbywa się w ramach tworzenia każdego przyrostu, co również sprzyja wczesnemu wykrywaniu defektów i regularnemu dostarczaniu wartości.

Warto również wspomnieć, że oprócz tych ogólnych modeli, istnieje wiele bardziej szczegółowych metodyk i praktyk, często kojarzonych z podejściem zwinnym (Agile), które również wpływają na cykl życia i testowanie.

Należą do nich między innymi: Scrum (framework zarządzania projektami oparty na iteracjach zwanych sprintami), Kanban (metoda wizualizacji przepływu pracy i ograniczania pracy w toku), eXtreme Programming (XP) (zestaw praktyk inżynierskich, w tym silny nacisk na testowanie), Test-Driven Development (TDD) (pisanie testów przed kodem), Behavior-Driven Development (BDD) (opisywanie zachowania systemu w sposób zrozumiały dla biznesu) czy Acceptance Test-Driven Development (ATDD) (wspólne definiowanie kryteriów akceptacji w formie testów).

Te zwinne podejścia kładą nacisk na elastyczność, szybkie dostarczanie wartości, bliską współpracę w zespole i ciągłe testowanie jako nieodłączny element procesu wytwarzania.

Wpływ Wybranego Modelu SDLC na Testowanie

Jak już podkreśliliśmy, wybór modelu SDLC ma fundamentalne znaczenie dla procesu testowania.

Nie można po prostu zastosować uniwersalnej strategii testowej – musi ona być starannie dopasowana do specyfiki przyjętego cyklu wytwarzania.

Zastanówmy się, na jakie konkretnie aspekty testowania wpływa model SDLC, co jest kluczowe z perspektywy egzaminu ISTQB:

Zakres i czas wykonywania czynności testowych:

To jeden z najbardziej widocznych wpływów.

W modelach sekwencyjnych, takich jak Waterfall czy V-Model, główne fazy testowania (np. testy systemowe, testy akceptacyjne) odbywają się zazwyczaj pod koniec projektu, po zakończeniu implementacji.

Testerzy mogą być zaangażowani wcześniej w przeglądy dokumentacji (np. wymagań, projektu), co jest formą testowania statycznego, ale testowanie dynamiczne (uruchamianie kodu) jest możliwe dopiero na późniejszych etapach.

To może prowadzić do późnego wykrywania błędów, co jest kosztowne.

W modelach iteracyjnych i przyrostowych, a zwłaszcza w podejściach zwinnych, testowanie jest czynnością ciągłą, rozłożoną na cały cykl życia.

W każdej iteracji lub przyroście wykonuje się różne poziomy (np. modułowe, integracyjne, systemowe) i typy testów (np. funkcjonalne, niefunkcjonalne).

Pozwala to na wczesne wykrywanie błędów i szybkie dostarczanie informacji zwrotnych do zespołu deweloperskiego.

Szczegółowość dokumentacji testów (Testware):

Modele sekwencyjne często wymagają tworzenia bardziej formalnej i szczegółowej dokumentacji testowej (plany testów, przypadki testowe, raporty).

Wynika to z potrzeby precyzyjnego zdefiniowania zakresu testów przed ich rozpoczęciem i udokumentowania wyników dla formalnej akceptacji oraz śledzenia postępów.

W podejściach zwinnych preferuje się lżejszą, bardziej pragmatyczną dokumentację.

Nacisk kładzie się na działające oprogramowanie i bezpośrednią komunikację, a dokumentacja jest tworzona tylko wtedy, gdy przynosi realną wartość (np. dla celów audytu, przekazania wiedzy).

Przypadki testowe mogą być mniej formalne, zapisane w narzędziach do zarządzania testami, a czasem zastępowane przez listy kontrolne (checklists) lub testy eksploracyjne.

Poziom niezależności testowania:

W modelach sekwencyjnych często występuje większy stopień niezależności testowania.

Może istnieć oddzielny zespół testowy, który otrzymuje gotowy produkt do weryfikacji.

W podejściach zwinnych preferuje się mniejszą niezależność, ale większą współpracę.

Testerzy są integralną częścią zespołu deweloperskiego, pracując ramię w ramię z programistami i analitykami.

Chociaż pewien poziom niezależności (np. inna osoba testuje kod niż go napisała) jest nadal zalecany, nacisk kładzie się na wspólną odpowiedzialność za jakość.

Role i odpowiedzialności:

W modelach sekwencyjnych role są często bardziej wyspecjalizowane i oddzielone (np. analityk, programista, tester, kierownik testów).

W podejściach zwinnych role mogą być bardziej płynne, a członkowie zespołu często posiadają szerszy zakres umiejętności (tzw. T-shaped skills) i wspólnie realizują zadania, w tym testowanie.

Odpowiedzialność za jakość jest bardziej rozproszona.

Zarządzanie zmianą:

Modele sekwencyjne słabo radzą sobie ze zmianami wymagań w trakcie projektu.

Każda zmiana może wymagać powrotu do wcześniejszych faz i ponownego wykonania wielu czynności, w tym testów.

Modele iteracyjne i zwinne są zaprojektowane tak, aby łatwiej adaptować się do zmian.

Zmiany mogą być wprowadzane w kolejnych iteracjach, a ciągłe testowanie pomaga szybko ocenić ich wpływ i zapewnić, że nie wprowadzają regresji.

Podsumowanie

Model cyklu życia oprogramowania (SDLC) stanowi ramy dla procesu wytwarzania oprogramowania i ma kluczowy wpływ na strategię i realizację testów.

Modele sekwencyjne (np. Waterfall, V-Model) charakteryzują się liniowym przepływem i koncentracją testowania w późniejszych fazach.

Modele iteracyjne i przyrostowe (w tym podejścia zwinne jak Scrum, Kanban) opierają się na cyklach i ciągłym testowaniu w ramach każdej iteracji/przyrostu.

Wybór modelu wpływa na czas i zakres testów, szczegółowość dokumentacji, poziom niezależności oraz role i odpowiedzialności w zespole.

Zrozumienie tych zależności jest niezbędne dla efektywnego planowania i przeprowadzania testów w danym kontekście projektowym.

Najczęściej Zadawane Pytania (FAQ)

Czy istnieje jeden najlepszy model SDLC?
Nie ma uniwersalnie najlepszego modelu. Wybór zależy od wielu czynników, takich jak stabilność wymagań, złożoność projektu, wielkość zespołu, kultura organizacyjna i wymagania dotyczące ryzyka. Modele zwinne są obecnie popularne, ale modele sekwencyjne nadal znajdują zastosowanie w niektórych kontekstach.
Jaka jest główna różnica między modelem Waterfall a V-Model?
Oba są modelami sekwencyjnymi. Model V wyraźniej podkreśla związek między fazami wytwarzania (lewa strona V) a odpowiadającymi im poziomami testów (prawa strona V). Pokazuje, że testowanie powinno być planowane i projektowane równolegle z odpowiednimi fazami wytwarzania.
Czy w modelach zwinnych nie ma dokumentacji testowej?
Dokumentacja jest zazwyczaj lżejsza i bardziej pragmatyczna niż w modelach sekwencyjnych, ale nie oznacza to jej całkowitego braku. Może przybierać formę kryteriów akceptacji, list kontrolnych, przypadków testowych w narzędziach, czy automatycznych skryptów testowych. Kluczem jest tworzenie dokumentacji, która przynosi wartość.
Kiedy testowanie rozpoczyna się w modelu V?
Planowanie i projektowanie testów rozpoczyna się wcześnie, równolegle z odpowiednimi fazami wytwarzania. Na przykład, projektowanie testów akceptacyjnych odbywa się podczas analizy wymagań, a projektowanie testów systemowych podczas projektowania architektury. Wykonywanie testów dynamicznych odbywa się jednak dopiero po implementacji kodu.
Czy testowanie iteracyjne jest tym samym co testowanie przyrostowe?
Te terminy są często używane zamiennie lub łącznie. Iteracyjność odnosi się do powtarzania cykli, a przyrostowość do dostarczania funkcjonalności w małych częściach. Wiele modeli (np. zwinne) łączy oba podejścia – pracują w iteracjach, a każda iteracja dostarcza działający przyrost produktu.
Jak SDLC wpływa na testy regresji?
W modelach iteracyjnych i zwinnych, gdzie zmiany są częste, testy regresji są kluczowe w każdej iteracji, aby upewnić się, że nowe zmiany nie zepsuły istniejącej funkcjonalności. W modelach sekwencyjnych testy regresji są zazwyczaj wykonywane pod koniec, przed wydaniem.
Czy testerzy są potrzebni w Scrum?
Tak, chociaż Scrum nie definiuje formalnej roli "testera". Osoby z umiejętnościami testowania są niezbędnymi członkami Zespołu Deweloperskiego, odpowiedzialnymi za zapewnienie jakości w ramach sprintu, współpracując z programistami i właścicielem produktu.
Czy można łączyć różne modele SDLC?
Tak, w praktyce często stosuje się podejścia hybrydowe, łączące elementy różnych modeli. Na przykład, ogólny projekt może być zarządzany w sposób bardziej sekwencyjny, ale poszczególne komponenty mogą być rozwijane iteracyjnie lub zwinnie.
Co to jest "Shift Left Testing"?
"Shift Left" to koncepcja polegająca na przesuwaniu działań testowych jak najwcześniej (na lewo) w cyklu życia oprogramowania. Oznacza to wczesne angażowanie testerów, stosowanie testowania statycznego (przeglądy) i rozpoczynanie testowania dynamicznego na wczesnych etapach (np. testy jednostkowe, API).
Jak SDLC wpływa na automatyzację testów?
W modelach iteracyjnych i zwinnych, gdzie testowanie jest częste i powtarzalne (zwłaszcza testy regresji), automatyzacja odgrywa kluczową rolę w zapewnieniu szybkości i efektywności. W modelach sekwencyjnych automatyzacja może być mniej priorytetowa lub wprowadzana później.
Czy model SDLC jest tym samym co proces testowy?
Nie. SDLC opisuje cały cykl życia oprogramowania, podczas gdy proces testowy (opisany w rozdziale 1) to zestaw działań specyficznych dla testowania (planowanie, analiza, projektowanie, implementacja, wykonanie, zakończenie). Proces testowy jest częścią SDLC i jest przez niego kształtowany.
Gdzie w SDLC pasuje testowanie pielęgnacyjne?
Testowanie pielęgnacyjne odbywa się po wdrożeniu systemu, w fazie utrzymania. Jest związane z testowaniem zmian wprowadzanych w istniejącym systemie (np. poprawek błędów, drobnych ulepszeń, migracji). Jego zakres i podejście również zależą od ogólnego modelu SDLC i strategii utrzymania.
Czy DevOps to model SDLC?
DevOps to bardziej kultura i zestaw praktyk niż formalny model SDLC. Koncentruje się na współpracy i komunikacji między zespołami deweloperskimi (Dev) a operacyjnymi (Ops) oraz na automatyzacji procesów budowania, testowania i wdrażania oprogramowania (CI/CD). Silnie wiąże się z podejściami zwinymi i ciągłym testowaniem.
Jakie są ryzyka związane z testowaniem tylko na końcu w modelu Waterfall?
Główne ryzyka to późne wykrywanie błędów, co jest znacznie droższe do naprawienia, możliwość nagromadzenia dużej liczby błędów, trudności w zidentyfikowaniu źródła problemu oraz ryzyko niedotrzymania terminów i budżetu, jeśli faza testów ujawni poważne problemy.
Czy TDD (Test-Driven Development) to model SDLC?
TDD to bardziej technika programistyczna niż kompletny model SDLC. Polega na pisaniu testu jednostkowego przed napisaniem kodu produkcyjnego. Jest często stosowana w ramach zwinnych modeli SDLC, wspierając tworzenie kodu wysokiej jakości i ułatwiając refaktoryzację.

Przykładowe Pytania Egzaminacyjne

Pytanie 1 (K1): Który z poniższych modeli cyklu życia oprogramowania charakteryzuje się liniowym przepływem faz, gdzie każda faza musi być zakończona przed rozpoczęciem następnej?

  • a) Model iteracyjny
  • b) Model zwinny (Agile)
  • c) Model kaskadowy (Waterfall)
  • d) Model przyrostowy

Poprawna odpowiedź: c (Model kaskadowy jest klasycznym przykładem modelu sekwencyjnego z liniowym przepływem faz.)

Pytanie 2 (K2): W którym modelu SDLC testowanie jest najbardziej naturalnie zintegrowane jako ciągła czynność w ramach powtarzalnych cykli?

  • a) W modelu V
  • b) W modelu Waterfall
  • c) W modelach iteracyjnych i zwinnych
  • d) Tylko w testowaniu pielęgnacyjnym

Poprawna odpowiedź: c (Modele iteracyjne i zwinne opierają się na cyklach (iteracjach, sprintach), w których testowanie jest integralną częścią każdego cyklu, co umożliwia ciągłą weryfikację i walidację.)

Pytanie 3 (K2): Jak model cyklu życia oprogramowania wpływa na poziom niezależności testowania?

  • a) Nie ma żadnego wpływu.
  • b) Modele sekwencyjne często promują większą niezależność (np. oddzielny zespół testowy).
  • c) Modele zwinne zawsze wymagają pełnej niezależności zewnętrznej.
  • d) Niezależność jest ważna tylko w testach jednostkowych.

Poprawna odpowiedź: b (W modelach sekwencyjnych, gdzie fazy są oddzielone, często tworzy się niezależne zespoły testowe. W modelach zwinnych preferuje się mniejszą niezależność na rzecz bliższej współpracy w zespole.)