Dlaczego testy przechodzą, a produkcja i tak płonie?

Person enjoys breathtaking view from a cliff above Geiranger Fjord, Norway, with clear skies and cruise ship below.
Release & ryzyko

12 różnic, których nie widać w testach

Znasz to? Zespół mówi „sprawdziliśmy szefie, jest dobrze”, Ty akceptujesz release, myślisz sobie „ekstra, w końcu to wydamy”, a po wdrożeniu zaczyna się lawina zgłoszeń i błędów — to nie jest rzadki przypadek. To jest powtarzalny mechanizm. Produkcja nie jest “kolejnym środowiskiem”. Produkcja to inny ekosystem: inne dane, inne konfiguracje, inne zachowania użytkowników i inne warunki działania.

W tym artykule nie będę tłumaczył, “jak testować” ani nie będę opowiadał o narzędziach. Opowiemy sobie o:

  • 12 najczęstszych różnicach między testami a produkcją,
  • prostych sposobach, jak każdą z nich minimalnie zasymulować,
  • krótkim planie, co zrobić jutro, żeby ograniczyć ryzyko “wpadki mimo testów”.

Problem

W większości firm testowanie przed releasem jest w najlepszym razie “wystarczające”, a nie “kompletne”. I to jest normalne. Problem zaczyna się wtedy, gdy:

  • środowisko testowe jest “ładne i przewidywalne”,
  • testy są robione na ograniczonej liczbie konfiguracji,
  • a decyzja o releasie opiera się na stwierdzeniu „działa”.

Na produkcji zaczynasz grać w grę:

  • użytkownicy robią rzeczy inaczej niż zespół,
  • dane są nieporównywalnie bardziej złożone,
  • konfiguracje urządzeń i przeglądarek są bardziej różnorodne,
  • integracje działają z limitami, opóźnieniami i błędami.

Koszt i ryzyko – co realnie tracisz

Wpadki “po poprawnym testowaniu” kosztują, bo są najgorszym typem incydentu: nikt się ich nie spodziewał, więc zespół nie jest gotowy.

Najczęstsze koszty:

  1. Utracony przychód lub utracony cel biznesowy – konwersja spada, proces się urywa, użytkownicy odpadają.
  2. Koszt gaszenia pożaru – przerwane sprinty, nadgodziny, chaos i presja.
  3. Wzrost kosztu supportu – zgłoszenia, ręczne obejścia, obsługa reklamacji.
  4. Utrata zaufania – użytkownik nie wraca, jeśli produkt go zawiódł.
  5. Ryzyko prawne i danych – błędy uprawnień, zgód, prywatności, logowania.
Mini-model kosztu (wzór do podstawienia)

Koszt incydentu = (czas zespołu × stawki) + utracony przychód + koszt supportu + koszt komunikacji + koszt opóźnionych prac

Zwróć uwagę: w praktyce nie chodzi o to, żeby zawsze uniknąć incydentu. Chodzi o to, żeby unikać incydentów przewidywalnych, wynikających z różnic pomiędzy prod a test.


Dlaczego to się dzieje – 12 różnic prod vs test

(i jak je minimalnie zasymulować)

Nie musisz tworzyć “idealnego stagingu”. Wystarczy, że przestaniesz testować wyłącznie w warunkach laboratoryjnych.

Poniżej masz 12 różnic, które najczęściej powodują “zaskoczenia na produkcji”, i minimalne testy, które to ograniczają.

*Oczywiście, ktoś zaraz powie, że się z tym nie zgadza, że uważa inaczej, że brakuje tego, a to jest niepotrzebne. Masz rację! Takich punktów powinno tu się znaleźć tysiące! Każdy przypadek jest inny i te punkty przede wszystkim mają Ciebie drogi czytelniku naprowadzić i wskazać zagrożenia nawet jeśli one Ciebie nie dotyczą bo może akurat punkt 8 czy 9 zapali Ci lampkę w głowie i pomyślisz sobie „ej… u mnie jest tak i tak, może byśmy sprawdzili to i to…?”.

1) Dane produkcyjne są brudne, stare i nieidealne

Jak wygląda w praktyce: nietypowe formaty, duplikaty, puste pola, stare rekordy, inne języki, dziwne znaki.
Minimalna symulacja: przygotuj “pakiet 10 brudnych przypadków” (np. długie nazwiska, nietypowe znaki, brak drugiego pola, stare rekordy, wartości graniczne).

2) Role i uprawnienia zmieniają zachowanie aplikacji

Jak wygląda w praktyce: to samo kliknięcie działa inaczej dla różnych ról; czasem w ogóle nie powinno działać.
Minimalna symulacja: test na 2–3 rolach: standardowy użytkownik + rola restrykcyjna + rola uprzywilejowana (jeśli istnieje).

3) Środowiska różnią się konfiguracją bardziej, niż się wydaje

Jak wygląda w praktyce: inne flagi funkcji, inne parametry, różne wersje usług, inne limity.
Minimalna symulacja: lista “różnic środowisk” + szybki smoke test krytycznych ścieżek na środowisku najbardziej zbliżonym do produkcji.

4) Integracje działają dobrze, dopóki nie działają

Jak wygląda w praktyce: timeouty, błędne odpowiedzi, limity, sporadyczne błędy.
Minimalna symulacja: sprawdź 3 scenariusze: integracja działa / zwraca błąd / nie odpowiada w czasie.

5) Cache i sesje maskują błędy

Jak wygląda w praktyce “u mnie działa” bo ktoś ma już dane w pamięci, sesja trwa, stan się nie zeruje.
Minimalna symulacja: test na czystym koncie + nowej sesji + po wylogowaniu i ponownym logowaniu.

6) Różne przeglądarki/urządzenia = różne problemy

Jak wygląda w praktyce: layout, klawiatura, focus, gesty, różne rozdzielczości.
Minimalna symulacja: test na 2–3 konfiguracjach + jedna “nietypowa” (stare urządzenie/inna rozdzielczość).

7) Język/region i formaty potrafią wywrócić logikę

Jak wygląda w praktyce: daty, liczby, separator dziesiętny, waluty, sortowanie.
Minimalna symulacja: test na dwóch formatach dat/liczb (np. PL i EN) lub na ustawieniach systemowych innych niż domyślne.

8) Sieć i przerwania procesu to codzienność użytkownika

Jak wygląda w praktyce: słaby zasięg, przełączenie Wi-Fi/LTE, przerwanie akcji.
Minimalna symulacja: 3 testy: słaba sieć, przerwanie w połowie, powrót do procesu po przerwie.

9) Użytkownicy nie klikają “jak tester”

Jak wygląda w praktyce: double-click, spam klików, cofanie, odświeżanie, zamykanie zakładki.
Minimalna symulacja: “chaos test” na 5 minut: szybkie klikanie, wstecz, odśwież, przerwij i wróć.

10) Równoległość i dwa urządzenia na tym samym koncie

Jak wygląda w praktyce: dwa okna, dwa telefony, ten sam użytkownik, konflikt stanu.
Minimalna symulacja: test: logowanie równolegle + wykonanie tej samej akcji w dwóch miejscach.

11) Migracje danych i zmiany struktury potrafią wysadzić wersję

Jak wygląda w praktyce: nowe pola, stare rekordy nie pasują, dane z przeszłości “psują widok”.
Minimalna symulacja: test na danych “sprzed zmiany” i “po zmianie”; sprawdź odczyt i zapis.

12) Monitoring i gotowość operacyjna decydują, czy incydent rośnie, czy gaśnie

Jak wygląda w praktyce: błąd jest, ale nikt o nim nie wie, dopóki nie zadzwoni klient.
Minimalna symulacja: ustal minimum: co obserwujecie, kto reaguje, jaki jest próg alarmu, jaki jest pierwszy krok.


Jak to zweryfikować

Jeśli chcesz szybko sprawdzić, czy Twój release jest narażony na “zaskoczenie produkcyjne”, nie pytaj “czy testowaliście”. Zapytaj:

  1. Które z 12 różnic z tej listy uwzględniliśmy w testach tej wersji?
    Dowód: zaznaczonych 6–8 pozycji + krótka notka “jak sprawdzone”.
  2. Czy testowaliśmy na realistycznych danych (10 przypadków)?
    Dowód: lista przypadków i kont/danych.
  3. Czy sprawdziliśmy role/uprawnienia?
    Dowód: lista ról + co zrobiono.
  4. Czy sprawdziliśmy integracje w scenariuszu błędu/timeoutu?
    Dowód: krótki opis 3 scenariuszy.
  5. Czy zrobiliśmy test “słaba sieć / przerwanie / powrót”?
    Dowód: 3 scenariusze i wynik.

Jeśli odpowiedź na większość z nich brzmi “nie wiem” — to jest sygnał, że testy mogły być poprawne, ale nie były odporne na produkcję.


Do skopiowania

To jest BARDZO skrócona wersja “symulacji produkcji” do użycia w każdym releasie.

Kopiuj-wklej: “Minimalna symulacja produkcji (30–60 minut)”

Wybierz 6–8 pozycji zależnie od zmiany i zrób je zawsze:

  1. 10 przypadków realistycznych/brudnych danych
  2. 2–3 role/uprawnienia
  3. 2–3 konfiguracje urządzeń/przeglądarek (+ 1 nietypowa)
  4. Integracja: OK / błąd / timeout (jeśli dotyczy)
  5. Czysta sesja: nowe konto / wyloguj-zaloguj / odśwież
  6. Słaba sieć + przerwanie procesu + powrót
  7. Równoległość: dwa okna/urządzenia na tym samym koncie
  8. Migracja danych: dane stare i nowe (jeśli dotyczy)
  9. “Chaos user” 5 minut: spam klików, wstecz, odśwież
  10. Minimum operacyjne: kto reaguje i co robimy, jeśli coś padnie

Co zrobić jutro (plan na 60–90 minut)

  1. Skopiuj powyższą checklistę do wspólnego dokumentu.
    Rezultat: stały szablon “symulacji produkcji”.
  2. Dla najbliższej wersji wybierz 6–8 punktów, które mają największy sens.
    Rezultat: konkretna checklista pod release.
  3. Przygotuj “pakiet 10 brudnych przypadków danych”.
    Rezultat: lista danych/kont do użycia w testach.
  4. Ustal 2–3 role użytkowników, które zawsze weryfikujecie.
    Rezultat: proste minimum uprawnień.
  5. Zrób 3 testy “realnego świata”: słaba sieć, przerwanie, powrót.
    Rezultat: ograniczenie typowych wpadek mobilnych i webowych.
  6. Dopisz “integracja: błąd/timeout” w releasach, gdzie integracja jest krytyczna.
    Rezultat: mniej zaskoczeń po stronie usług zewnętrznych.
  7. Ustal minimum gotowości operacyjnej (kto reaguje, kiedy i jak).
    Rezultat: incydenty nie eskalują przez chaos.

Sygnały ostrzegawcze

  • „Nie mamy danych, żeby to sprawdzić.”
  • „Sprawdziliśmy na jednym urządzeniu, powinno być OK.”
  • „Integracja zawsze działa, nie trzeba testować błędów.”
  • „Na testach nie da się tego odtworzyć, zobaczymy na produkcji.”
  • „To tylko UI, nie ma ryzyka.” (UI potrafi zablokować krytyczną ścieżkę)
  • „Monitoring? Klienci zgłoszą.”

Podsumowanie

Produkcja zaskakuje nie dlatego, że ludzie “nie testują”, tylko dlatego, że testy często nie obejmują warunków, które na produkcji są normalne: brudne dane, różne role, inne konfiguracje, gorsza sieć i błędy integracji. Jeśli zaczniesz konsekwentnie symulować 6–8 kluczowych różnic prod vs test, ograniczysz liczbę przewidywalnych wpadek i zmniejszysz koszt releasów.

Jeśli chcesz zrobić z tego stały rytuał decyzyjny (GO/NO-GO w 15 minut), to w kolejnym artykule pokażę prostą bramkę, która wymusza dowody i kończy dyskusję „wydaje mi się”.


Źródła i dalsza lektura
  • ISTQB – terminologia i fundamenty testowania
  • ISO/IEC/IEEE 29119 – standard procesu testowania
  • ISO/IEC 25010 – model jakości produktu
  • DORA – metryki i stabilność dostarczania zmian
  • Google SRE – incident management i reliability
  • ITIL – zarządzanie zmianą i incydentami