Heisenbug, czyli błąd nie do odtworzenia
Jak radzić sobie z bugami trudnymi w reprodukcji?
Testujesz aplikację. Wykrywasz nieznanego wcześniej buga. Zabierasz się za kroki reprodukcji, ale identycznie wykonana ścieżka nie wywołuje przed chwilą widzianego błędu. Jeśli pracujesz w testowaniu, na pewno znasz to uczucie 😅
Tego typu błędy mają nawet swoje specjalne określenie - Heisenbugi. Nazwa jest związana z efektem obserwatora pochodzącego z mechaniki kwantowej. W skrócie - obserwowanie zjawiska prowadzi do jego zmiany. A w kontekście oprogramowania, próba obserwacji czy debugowania może nieumyślnie zmienić zachowanie kodu.
Bugi trudne w reprodukcji
Heisenbugi często występują losowo i mogą nie pojawiać się w identycznych warunkach podczas kolejnych uruchomień oprogramowania. Przyczyn może być mnóstwo - zaczynając od środowiska, a kończąc na danych testowych. Co więcej, próba debugowania, np. poprzez uruchomienie aplikacji w debugerze czy dodanie logów, może zmieniać zachowanie oprogramowania na tyle, że... błąd przestaje występować. To niesamowicie utrudnia znalezienie źródła buga czy nawet ścieżki jego odtworzenia.
Ryzyko wystąpienia Heisenbugów rośnie wraz ze złożonością systemu. Wpływa na to wielowątkość czy wyścigi danych (Race Conditions). Równoczesne działanie wielu wątków może prowadzić do trudnych do przewidzenia interakcji, np. konfliktów przy dostępie do współdzielonych zasobów.
Heisenbugi a utrzymanie jakości


Z perspektywy utrzymania jakości, zjawisko Heisenbugów jest niezwykle groźne. Wiemy, że błąd istnieje, ale nie potrafimy określić dokładnych warunków jego odtworzenia. Heisenbugi są nie tylko źródłem frustracji (głównie programistów i testerów), ale mogą też prowadzić do poważnych konsekwencji.
Nieprzewidywalność wystąpienia błędu utrudnia zarządzanie ryzykiem. Nie potrafimy określić, czy błąd pojawi się w środowisku produkcyjnym - a w systemach krytycznych (systemy finansowe, medyczne czy lotnicze) jest to po prostu niebezpieczne. Na szczęście każdy zbadany Heisenbug przyczynia się do poprawy stabilności oprogramowania.
Jak radzić sobie z Heisenbugami?
Skomplikowanie Heisenbugów nie oznacza, że nie da się z nimi walczyć. Oczywiście, skupię się na punkcie widzenia testerów oprogramowania i QA'ów. Główną cechą Heisenbugów jest trudność w ich odtwarzaniu. Dlatego niezwykle ważne jest szczegółowe dokumentowanie procesu testowego - zapisuj wszystkie zaobserwowane okoliczności. Kroki, środowiska, konfiguracje systemu czy dane wejściowe.
Niezbędna jest też współpraca z programistami. Szczególnie istotne jest dostarczenie jak największej ilości informacji, które mogą pomóc w debugowaniu. Warto poprosić o dodatkowe logi rejestrujące kluczowe dane - kolejność zdarzeń, stan zmiennych i czas ich występowania. Trace logi czy narzędzia do śledzenia zachowania aplikacji w czasie rzeczywistym również mogą dostarczyć wielu cennych danych.
Wracając do samego testowania. Konieczne jest używanie różnych środowisk testowych (przeglądarki, systemy operacyjne czy nawet wersje bibliotek) i tym samym stwarzanie odmiennych przypadków. Polecam też sprawdzić aplikację w ekstremalnych warunkach - bo Heisenbugi często ujawniają się w sytuacjach stresowych. Może to być duże obciążenie systemu czy nietypowe warunki wejściowe.
Ale czy warto?
Niestety, często okazuje się, że zbadanie Heisenbuga jest niezwykle czasochłonne. Ważna jest więc ocena powagi błędu. Co się stanie, jeśli dany bug wystąpi na produkcji? Jakie poniesie to za sobą konsekwencje? Utrata danych, luki w zabezpieczeniach czy poważne zakłócenia pracy klientów przemawiają za dalszą obserwacją Heisenbuga.
Ale decyzja powinna być wspólnym wysiłkiem menedżerów produktu, programistów i QA'ów, a w niektórych przypadkach nawet użytkowników końcowych. Uwzględnienie różnych perspektyw prowadzi do świadomych ustaleń. Heisenbugi są na tyle przebiegłymi wrogami, że jeden tester zazwyczaj jest skazany na porażkę.


Walter Heisenbug 😄
Jak radzisz sobie z Heisenbugami?
Chcesz być na bieżąco? Zapisz się do newslettera!
W każdy czwartek o 10:00 dam Ci znać o moich nowych wpisach.
Dorzucę też ciekawe artykuły, filmy czy inne materiały ze świata IT.
Po zapisie do newslettera, wyślę Ci darmowego ebooka z checklistami dla testerów.






Polecane wpisy:
Sprawdź też moje social media:
Dziękuję, że czytasz mojego bloga!
Masz jakieś pytania? Z chęcią odpowiem :)

