Modele cyklu życia oprogramowania a testowanie — Waterfall, V-Model i Agile

Różne modele wytwarzania oprogramowania oznaczają różne strategie testowania. Poznaj wpływ Waterfall, V-Model i Agile na testowanie oraz shift-left i shift-right w praktyce.

Ten wpis jest częścią serii ISTQB Foundation Level — ustrukturyzowanego przewodnika po koncepcjach testowania oprogramowania zgodnie z sylabusem ISTQB, dla kandydatów do egzaminu i praktyków QA budujących solidne podstawy.


Dlaczego model SDLC ma znaczenie dla testowania

Pytanie „kiedy testujemy?” ma różne odpowiedzi w zależności od tego, jak Twój zespół buduje oprogramowanie. W sekwencyjnym projekcie waterfall testowanie odbywa się po napisaniu kodu. W zespole zwinnym testowanie odbywa się w każdym sprincie. W potoku DevOps zautomatyzowane testy uruchamiają się przy każdym commicie.

Model cyklu życia oprogramowania (ang. Software Development Life Cycle, SDLC), z którego korzysta Twoja organizacja, determinuje:

  • Kiedy testerzy zostają zaangażowani
  • Jakie rodzaje testowania są wykonywane na każdym etapie
  • Jak defekty są znajdowane, zgłaszane i śledzone
  • Ile testowania jest możliwe w danym harmonogramie
  • Jak wcześnie — lub późno — informacja zwrotna o jakości trafia do zespołu

Sylabus ISTQB Foundation Level omawia główne modele SDLC, ponieważ tester, który nie rozumie modelu, w którym pracuje, będzie stale robił błędne założenia dotyczące oczekiwań wobec niego.


Modele sekwencyjne

Waterfall (model kaskadowy)

Model Waterfall to oryginalne ustrukturyzowane podejście do wytwarzania oprogramowania. Fazy następują sekwencyjnie, przy czym każda faza musi zostać ukończona przed rozpoczęciem następnej:

Wymagania → Projekt → Implementacja → Testowanie → Wdrożenie → Utrzymanie

Jak testowanie mieści się w modelu Waterfall:

Testowanie jest odrębną fazą, która rozpoczyna się po zakończeniu implementacji. Ma to kilka konsekwencji:

  • Testerzy otrzymują gotowy kod, zamiast być zaangażowani we wcześniejszych fazach
  • Defekty znalezione późno są drogie w naprawie (patrz tabela kosztów w Poście 1)
  • Gdy programowanie przekracza harmonogram, czas testowania jest zazwyczaj skracany jako pierwszy
  • Faza testowa musi wykryć wszystkie defekty, którym mogłyby zapobiec wymagania, projekt i kodowanie

Główny problem z późnym testowaniem: gdy testerzy widzą oprogramowanie, główne decyzje architektoniczne są już zablokowane. Fundamentalna wada projektowa odkryta podczas testowania może wymagać zmian, które kaskadowo cofają się przez całą fazę programistyczną. Dlatego wiele projektów waterfall było wysyłanych z zaakceptowanymi defektami — koszt naprawy był zbyt wysoki na tym etapie cyklu.

Kiedy Waterfall nadal ma sens:

  • Projekty z wyjątkowo stabilnymi, dobrze rozumianymi wymaganiami
  • Systemy o krytycznym znaczeniu dla bezpieczeństwa wymagające formalnej dokumentacji każdej fazy
  • Wymagania kontraktowe lub regulacyjne dotyczące sekwencyjnych bram fazowych
  • Wielkoskalowe projekty infrastrukturalne z długim horyzontem planowania

:::note[Wskazówka egzaminacyjna ISTQB] Sylabus ISTQB przedstawia ograniczenia Waterfall neutralnie — nie twierdzi, że Waterfall jest zły, lecz że różne modele mają różne kompromisy. Skup się na rozumieniu tych kompromisów, zamiast traktować Waterfall jako przestarzały. :::

V-Model

V-Model rozwiązuje problem „późnego testowania” w Waterfall poprzez odzwierciedlenie każdej fazy programistycznej odpowiadającą jej fazą testową. Dwa ramiona litery V reprezentują programowanie (lewa strona schodzi w dół) i testowanie (prawa strona wychodzi w górę), połączone w punkcie implementacji:

Analiza wymagań ←————————→ Testowanie akceptacyjne
  Projekt systemu ←————————→ Testowanie systemowe
    Architektura   ←————————→ Testowanie integracyjne
      Projekt modułu ←————————→ Testowanie jednostkowe
                Implementacja

Co V-Model zmienia:

Kluczowym spostrzeżeniem jest to, że projektowanie testów rozpoczyna się podczas odpowiadającej fazy programistycznej, nawet jeśli wykonywanie testów odbywa się później. Gdy wymagania są pisane, projektowane są przypadki testów akceptacyjnych. Gdy definiowana jest architektura systemu, planowane są scenariusze testów systemowych. Tworzy to bezpośrednią śledzalność od wymagań po przypadki testowe.

Oznacza to:

  • Testerzy są zaangażowani od początku, nie tylko podczas fazy testowej
  • Niejasności w wymaganiach są wykrywane, gdy projektowanie testów jest niemożliwe wobec niejasnej specyfikacji
  • Każdy poziom testu ma wyraźny odpowiednik w procesie programistycznym

Zalety V-Modelu:

  • Defekty w wymaganiach i projekcie są wykrywane wcześniej (podczas planowania testów)
  • Wyraźna struktura i śledzalność
  • Dobrze dostosowany do domen o krytycznym znaczeniu dla bezpieczeństwa i regulowanych

Ograniczenia V-Modelu:

  • Nadal sekwencyjny w swojej istocie — zmiany wymagań są kosztowne
  • Ograniczona elastyczność po rozpoczęciu faz
  • Nie nadaje się dobrze do projektów z ewoluującymi lub niejasnym wymaganiami

:::tip[Wskazówka egzaminacyjna ISTQB] V-Model mapuje poziomy testów na fazy programistyczne. Znaj te mapowania na egzamin: testowanie jednostkowe ↔ projekt modułu, testowanie integracyjne ↔ architektura, testowanie systemowe ↔ projekt systemu, testowanie akceptacyjne ↔ wymagania. Ta śledzalność jest cechą definiującą V-Model. :::


Modele iteracyjne i przyrostowe

Między w pełni sekwencyjnymi modelami a pełnym Agile leży rodzina podejść iteracyjnych i przyrostowych. Modele te budują oprogramowanie w powtarzających się cyklach (iteracjach), dostarczając podzestaw funkcjonalności w każdym cyklu.

Kluczowe cechy:

  • Wymagania ewoluują w trakcie projektu
  • Każda iteracja dostarcza potencjalnie wydawalny przyrost
  • Informacja zwrotna z każdej iteracji informuje następną
  • Testowanie odbywa się w ramach każdej iteracji, nie jako końcowa faza

Implikacje dla testowania:

  • Testerzy muszą testować wcześnie i często, nie tylko na końcu
  • Testowanie regresji staje się krytyczne — każdy nowy przyrost nie może psuć istniejącej funkcjonalności
  • Inwestycja w automatyzację testów przynosi korzyści wcześniej
  • Defekty mogą być naprawiane w ramach iteracji, która je znalazła

Przykłady obejmują Rational Unified Process (RUP) i programowanie spiralne. Wiele organizacji stosuje podejścia hybrydowe łączące sekwencyjne planowanie z iteracyjnym programowaniem.


Modele zwinne (Agile)

Główne zasady Agile dotyczące testowania

Wartości Manifestu Agile mają bezpośrednie implikacje dla sposobu działania testowania:

  • Działające oprogramowanie ponad obszerną dokumentację: Testowanie skupia się na działającym oprogramowaniu, nie na wyczerpującej dokumentacji testowej
  • Współpraca z klientem ponad negocjowanie umów: Testerzy blisko współpracują z właścicielami produktu i użytkownikami, nie tylko wobec statycznej specyfikacji
  • Reagowanie na zmiany ponad podążanie za planem: Strategie testowania adaptują się w miarę ewolucji produktu
  • Ludzie i interakcje ponad procesy i narzędzia: Dynamika zespołu (w tym współpraca tester–programista) ma priorytet

Testowanie zwinne to nie brak struktury — to struktura dostosowana do zmiany i współpracy.

Testowanie w każdym sprincie

W Scrumie, najczęstszym frameworku zwinnym, sprint to ograniczony czasowo cykl programistyczny (zazwyczaj 1–4 tygodnie). Testowanie nie jest oddzielną fazą — jest częścią każdego sprintu:

Etap sprintuCzynność testowa
Planowanie sprintuPrzegląd kryteriów akceptacji, identyfikacja zakresu testów
Codzienny ScrumSygnalizowanie blokad, komunikowanie wyników testów
ProgramowanieTestowanie jednostkowe, TDD, testowanie przez programistów
Praca w sprincieTestowanie integracyjne, testowanie eksploracyjne, automatyzacja
Przegląd sprintuTestowanie akceptacyjne z interesariuszami
Retrospektywa sprintuRefleksja nad procesem testowania, doskonalenie w następnym sprincie

Funkcja nie jest „ukończona”, dopóki nie została przetestowana. Definicja Ukończenia (ang. Definition of Done, DoD) dla większości dojrzałych zespołów zwinnych obejmuje pokrycie testami, weryfikację kryteriów akceptacji i zaktualizowane testy regresji.

Podejście całego zespołu do jakości

Agile jednoznacznie odrzuca ideę, że jakość jest odpowiedzialnością zespołu testowego. W zdrowym zespole zwinnym:

  • Programiści piszą testy jednostkowe i biorą odpowiedzialność za jakość swojego kodu
  • Testerzy coachują zespół w zakresie testowalności, ryzyka i praktyk jakościowych
  • Właściciele produktu piszą jasne kryteria akceptacji
  • Wszyscy uczestniczą w szybkim identyfikowaniu i rozwiązywaniu defektów

Rola testera przesuwa się od „strażnika bramki zatwierdzającego wydania” do „rzecznika jakości zwiększającego widoczność ryzyk.”

:::tip[Wskazówka egzaminacyjna ISTQB] Sylabus ISTQB omawia „podejście całego zespołu” jako koncepcję zwinną. Kluczowa idea: jakość jest odpowiedzialnością każdego, nie tylko testerów. Testerzy w zespołach zwinnych często działają jako coachowie i współpracownicy, a nie tylko wykonawcy skryptów testowych. :::


DevOps i CI/CD

DevOps rozszerza zasady zwinne na domenę operacyjną, burząc mur między programowaniem a operacjami. Dla testowania DevOps wprowadza koncepcję ciągłego testowania — zautomatyzowane testy uruchamiają się jako integralna część potoku dostarczania oprogramowania.

CI/CD — wyjaśnienie

Ciągła integracja (ang. Continuous Integration, CI): Programiści commitują kod do wspólnego repozytorium często (wielokrotnie w ciągu dnia). Każdy commit wyzwala automatyczny build i uruchomienie testów. Jeśli testy nie przejdą, zespół wie o tym w ciągu minut, a commit jest odrzucany lub oznaczany.

Ciągłe dostarczanie (ang. Continuous Delivery, CD): Oprogramowanie jest zawsze w stanie nadającym się do wdrożenia. Po pomyślnym przejściu testów CI artefakt jest automatycznie wdrażany do środowiska stagingowego lub przedprodukcyjnego i uruchamiane są dodatkowe zautomatyzowane testy.

Ciągłe wdrażanie (ang. Continuous Deployment): Każdy commit, który przejdzie wszystkie testy, jest automatycznie wdrażany na produkcję bez ręcznego kroku zatwierdzenia.

Testowanie w DevOps

Model DevOps wymaga specyficznego podejścia do testowania:

Typ testuKiedy w potokuCel
Testy jednostkoweKażdy commit (CI)Szybka informacja zwrotna o poprawności kodu
Testy integracyjnePotok CI/CDInterakcje serwisów i komponentów
Testy APIPotok CDWeryfikacja kontraktów
Testy UI / E2EPrzedprodukcjaWalidacja ścieżek użytkownika
Testy wydajnościowePrzedprodukcja / produkcjaWeryfikacja obciążenia i skalowalności
Testowanie eksploracyjnePrzed wydaniemBadanie ryzyka przez człowieka
Monitoring produkcjiProdukcjaWykrywanie awarii w realnym świecie po wydaniu

Kluczowe spostrzeżenie: zautomatyzowane testy muszą być wystarczająco szybkie, żeby nie stały się wąskim gardłem potoku. Wolne zestawy testów stają się przeszkodami; zespoły zaczynają je pomijać. Dobrze zaprojektowany potok DevOps ma testy podzielone warstwowo według szybkości i zakresu — szybkie testy jednostkowe uruchamiane przy każdym commicie, wolniejsze testy E2E uruchamiane rzadziej.


Shift-Left i Shift-Right

Shift-Left (przesunięcie w lewo)

„Shift-left” oznacza przesuwanie czynności testowych wcześniej w cyklu życia oprogramowania — w lewo na typowym diagramie osi czasu, gdzie czas biegnie od lewej do prawej.

Jak shift-left wygląda w praktyce:

  • Testerzy przeglądający wymagania, zanim zostanie napisana choćby jedna linia kodu
  • Programowanie sterowane testami (ang. Test-Driven Development, TDD): pisanie testów przed pisaniem kodu
  • Programiści uruchamiający testy jednostkowe w ramach normalnego przepływu pracy
  • Kryteria akceptacji pisane i przeglądane przed rozpoczęciem pracy w sprincie
  • Środowisko testów wydajnościowych konfigurowane na początku projektu, a nie na jego końcu

Dlaczego to ma znaczenie: Zasada 3 z Postu 1 — wczesne testowanie oszczędza pieniądze. Defekt znaleziony w wymaganiach kosztuje ułamek tego, co defekt znaleziony na produkcji. Shift-left to praktyczna realizacja tej zasady.

Wyzwania shift-left:

  • Wymaga testerów, którzy czują się swobodnie pracując z niekompletnym oprogramowaniem i wymaganiami
  • Potrzebuje wczesnej inwestycji w infrastrukturę testową
  • Może napotykać opór ze strony zespołów przyzwyczajonych do sekwencyjnych przekazań
  • Wymaga silnej współpracy między testerami, programistami i właścicielami produktu

Shift-Right (przesunięcie w prawo)

„Shift-right” oznacza rozszerzanie czynności testowych później w cyklu życia — na produkcję i poza nią.

Jak shift-right wygląda w praktyce:

  • Monitoring systemów produkcyjnych pod kątem anomalii i awarii
  • Testy A/B i wdrożenia kanary (ang. canary deployments) — najpierw udostępnienie nowych funkcji podzbiorowi użytkowników
  • Monitoring syntetyczny — zautomatyzowane testy uruchamiane na produkcji ciągle
  • Inżynieria chaosu (ang. chaos engineering) — celowe wprowadzanie awarii w celu testowania odporności systemu
  • Flagi funkcji (ang. feature flags) — włączanie funkcji dla określonych segmentów użytkowników w celu kontrolowanego wdrożenia
  • Pętle informacji zwrotnej od użytkowników — traktowanie zachowania użytkowników produkcyjnych jako sygnału o jakości

Dlaczego to ma znaczenie: Niektóre defekty pojawiają się tylko w rzeczywistych warunkach produkcyjnych — rzeczywiste wolumeny danych użytkowników, rzeczywiste warunki sieciowe, rzeczywiste wzorce użytkowania, których żadne środowisko testowe w pełni nie replikuje. Shift-right akceptuje tę rzeczywistość i buduje mechanizmy zapewnienia jakości bezpośrednio w operacjach produkcyjnych.

:::note[Wskazówka egzaminacyjna ISTQB] Shift-left i shift-right nie są alternatywami — są komplementarne. Dojrzała strategia jakości robi oba: zapobiega defektom wcześnie przez shift-left i wykrywa problemy specyficzne dla produkcji przez shift-right. Pytania egzaminacyjne mogą przedstawiać je jako wybory; rozumiej, że najlepsza odpowiedź często brzmi „oba, w kombinacji opartej na ryzyku.” :::


Wybór właściwego modelu

ISTQB nie przepisuje jednego modelu SDLC ponad innymi — uczy testerów dostosowywania swojego podejścia do modelu, z którego korzysta ich organizacja. Oto praktyczne ramy myślenia o wyborze modelu:

PytanieWskazuje na
Czy wymagania są stabilne i dobrze rozumiane?Sekwencyjne (Waterfall, V-Model)
Czy oczekuje się, że wymagania będą ewoluować?Iteracyjne / Agile
Czy wymagana jest dokumentacja regulacyjna lub kontraktowa?Sekwencyjne (z formalnymi bramkami fazowymi)
Czy kluczowy jest szybki czas dotarcia do rynku?Agile / DevOps
Czy zespół ma możliwości automatyzacji testów?Agile / DevOps
Czy system ma krytyczne znaczenie dla bezpieczeństwa?V-Model, z formalną weryfikacją
Czy zespół jest mały i pracuje w jednym miejscu?Agile
Czy projekt jest duży, rozproszony, wielodostawcowy?Sekwencyjne lub hybrydowe

W praktyce większość nowoczesnych organizacji stosuje jakąś formę hybrydową: zwinne programowanie z sekwencyjnym planowaniem dużych funkcji, potoki CI/CD do wdrożeń i śledzalność w stylu V-Modelu dla zgodności. Umiejętność polega na rozpoznaniu, które elementy mają zastosowanie w Twojej sytuacji.


Podsumowanie

Rozumienie modeli SDLC to nie ćwiczenie akademickie dla kandydatów do egzaminu ISTQB — to fundamentalna kompetencja zawodowa. Model, w którym pracujesz, określa Twoje ograniczenia: kiedy testujesz, z jakimi artefaktami pracujesz, jak duży masz wpływ na produkt zanim kod zostanie napisany i co oznacza „ukończone.”

Trendy są jasne: branża zmierza w kierunku wcześniejszego testowania (shift-left), większej automatyzacji (CI/CD) i szerszego zapewnienia jakości rozciągającego się na produkcję (shift-right). Spostrzeżenie V-Modelu, że projektowanie testów powinno zaczynać się podczas fazy wymagań, zostało wchłonięte przez Agile w postaci kryteriów akceptacji na poziomie historyjek użytkownika. Dyscyplina Waterfall dotycząca dokumentacji została zaadaptowana dla kontekstów regulowanych w ramach skądinąd zwinnych organizacji.

:::tip[Wskazówka egzaminacyjna ISTQB] Na egzaminie bądź przygotowany na: (1) identyfikację poziomów testów odpowiadających fazom programistycznym V-Modelu; (2) opisanie, jak testowanie różni się między modelami sekwencyjnymi a zwinnymi; (3) wyjaśnienie shift-left i shift-right z przykładami; (4) wyjaśnienie podejścia całego zespołu do jakości. Te tematy pojawiają się konsekwentnie we wszystkich wersjach egzaminu. :::

Następnym obszarem, który obejmuje ISTQB Foundation Level, są poziomy i typy testów — przejście od kiedy testujemy do co testujemy i jak. Zrozumienie kontekstu SDLC z tego wpisu znacznie ułatwi zrozumienie tych rozróżnień.