10 Maja 2026

Nauka


Chociaż frustrujące i czasami całkowicie nieoczekiwane błędy programistyczne doczekały się memów (patrz: „Dziwne, u mnie działa!”), to sprawa jest jak najbardziej poważna. O błędach, które są nieodłączną częścią świata IT, rozmawiamy z dr. inż. Krzysztofem Ropiakiem z Wydziału Matematyki i Informatyki UWM.

Czy informatycy często spotykają się w codziennej pracy z błędami?

Można powiedzieć, że nasza praca polega na znajdowaniu rozwiązań dla pojawiających się błędów. Według badań odnoszących się do programowania, w kodzie pojawia się około 15–70 błędów na 1000 linii kodu, a w fazie „produkcyjnej” (czyli wtedy, kiedy trafia on do klientów) średnio około 15 razy. Z własnego doświadczenia mogę powiedzieć, że nierzadko zdarza mi się napisać kilka linii kodu i po ich uruchomieniu zobaczyć błąd, którego wcześniej nie zauważyłem.

Z jakimi rodzajami błędów mają do czynienia programiści?

Błąd w informatyce ma różne oblicza. W trakcie wytwarzania oprogramowania najczęściej kojarzy się z błędem składniowym (ang. syntax error), czyli takim, który wynika z niewłaściwego wykorzystania dostępnych funkcji, literówek w ich nazwach lub braku jakiegoś niezbędnego fragmentu zgodnego ze specyfikacją składni danego języka programowania. Warto zaznaczyć, że wraz z rozwojem narzędzi AI do wspomagania programistów, ten rodzaj pomyłek będzie prawdopodobnie występował coraz rzadziej. Istnieją również błędy logiczne, wynikające np. z pomyłek w obliczeniach, takich jak niewłaściwa operacja matematyczna, błąd w implementowanym wzorze matematycznym czy przekształcaniu danych do innego typu wartości. Takie błędy są znacznie trudniejsze do wychwycenia, a narzędzie wspomagające nas w wytwarzaniu oprogramowania nie będzie sugerowało nam błędu, chociaż i to zaczyna się zmieniać wraz z wprowadzeniem narzędzi AI.

Z błędami spotykają się również użytkownicy programów komputerowych.

Błędy występują naturalnie w wielu fazach działania programów. Gdy wytwarzamy oprogramowanie np. do przetwarzania plików użytkowników, mogą pojawić się błędy, które nie wynikają z naszej winy, ale raczej z winy czynników zewnętrznych, jak np. brak praw do zapisu do pliku, błędna nazwa, błędny format pliku i wiele innych. Tu najczęściej mówimy o pewnych wyjątkach, które w dobrze napisanym oprogramowaniu powinny być wzięte pod uwagę przez programistę i poprawnie, jak to się w naszej branży mówi, obsłużone. W większości języków programowania istnieją zdefiniowane klasy błędów, które mogą być zwrócone dla danego fragmentu kodu i kompilator (narzędzie do tłumaczenia kodu źródłowego na program wykonywalny) zgłosi programiście brak obsługi takiego wyjątku. Są i takie języki programowania, które nam tego nie sugerują i ciężar znalezienia oraz naprawienia tych braków, leży wyłącznie po stronie programisty. Błędy, które ujawniają się dopiero w trakcie działania programu, nazywa się błędami czasu wykonania (ang. runtime errors). Ich opisywaniem i wyszukiwaniem zajmują się często testerzy oprogramowania.

Skoro są „bugi”, to jest i „debugowanie”.

„Debugowaniem” nazywamy się proces pozbywania się błędów w oprogramowaniu i często odbywa się on z udziałem oprogramowania o takiej samej nazwie, czyli debuggera. Umożliwia on zatrzymanie wykonania programu w danym punkcie (linii kodu) i obserwację wartości zmiennych oraz wykonanie programu linia po linii na żądanie programisty. 

Użytkownicy internetu spotykają się na co dzień z kodami błędów protokołu http – mam tutaj na myśli słynne błędy 404, 403 czy 500. O jakich problemach one informują?

Błąd 404 protokołu http oznaczony często jako „Page not found” albo po prostu „Not found” (z ang. nie odnaleziono) odwołuje się do próby dostępu do (nazwę to potocznie) strony (adresu URL), który albo nie istnieje w internecie, albo jest aktualnie niedostępny z komputera, z którego próbujemy się połączyć. Przyczyną może być tak błaha rzecz jak literówka w adresie (notabene bardzo często wykorzystywana przez strony podszywające się pod oryginał), brak dostępu do internetu, błąd działania usługi DNS (tłumaczenia nazw domen na adresy IP serwerów), nieaktywny serwer lub strona, która z internetu zniknęła. Błąd 403 (ang. forbidden) oznacza brak dostępu do danej strony, np. posiadamy adres z serwisu społecznościowego do konta innego użytkownika, ale te dane są dostępne tylko dla niego, więc wymagane jest wcześniejsze zalogowanie odpowiednimi danymi (mówimy o uwierzytelnieniu, czyli weryfikacji tożsamości) lub posiadanie specjalnych uprawnień do tego konkretnego zasobu. Błąd 500 (ang. internal server error) to błąd serwera www obsługującego daną stronę i może wynikać z wielu przyczyn – np. błędów działania oprogramowania strony, błędów uprawnień do plików, które są częścią strony czy przeciążenia serwera w danym momencie.

Zajmuje się pan grami komputerowymi, których wirtualne światy również mogą zawierać błędy lub różnego rodzaju niedoskonałości.

W przypadku gier komputerowych wiele zależy od ich rodzaju i swobody, jaką otrzymujemy od ich twórców. Im bardziej rozbudowana rozgrywka, im większy wirtualny świat, tym więcej szans na to, że coś nie zostało przewidziane czy sprawdzone. Należy być świadomym, że te wirtualne światy są tylko pewną symulacją w postaci oprogramowania, które może mieć dokładnie te same problemy, jakie opisałem już wcześniej, ale również niedoskonałości, bo przecież bezbłędne symulowanie fizyki świata nigdy nie będzie możliwe. Po pierwsze dlatego, że sami nie rozumiemy jeszcze wszystkich zjawisk, po drugie, ponieważ część tych, które znamy, jest tylko aproksymacją, a po trzecie, dlatego, że wciąż nie ma komputerów – tym bardziej domowych – które by to udźwignęły.

Jednak gamingowy świat posiada coś bardzo cennego, na co może liczyć, jeśli chodzi o ulepszanie swoich produktów. To społeczność.

Rzeczywiście, ogromną rolę odgrywają społeczności graczy, a przede wszystkim formuła pozwalająca im uzyskać dostęp do gry odpłatnie lub nie, zanim zostanie ona faktycznie ukończona. Dzięki temu gracze zapoznają się z jej mechaniką, a twórcy danej gry otrzymują informację zwrotną, czy spełnia ona oczekiwania, ale też, czy zawiera jakieś niewykryte wcześniej błędy. Istnieje również formuła „bug bounty”, w której firmy płacą za odnalezienie błędów w ich oprogramowaniu i może zrobić to każdy. To świetna forma zmierzenia się z różnymi wyzwaniami, ale i doskonalenia swojego warsztatu. Istnieją podobno ludzie, którzy potrafią robić to seryjnie i nawet dobrze na tym zarabiać.

A testerzy gier?

Zawód testera może dla fana gier wydawać się pracą marzeń, ale oprócz grania musi on bardzo precyzyjnie monitorować i opisywać wszelkie odnalezione błędy. Często trzeba też korzystać z pewnych sztuczek, aby przejść dalej i przetestować obszary gry, które wymagają dużej wprawy w znajomości jej mechaniki.

Czy błąd w informatyce zawsze oznacza porażkę, czy można go zinterpretować również jako wskazówkę?

Myślę, że zazwyczaj jest wskazówką, chociaż większość programistów zapewne przyzna mi rację, że wiele komunikatów o błędach nie daje jasnych wskazówek, na czym konkretnie ten błąd polega, co znacznie wydłuża proces jego usunięcia. Sporo zależy od etapu jego pojawienia się i przeznaczenia oprogramowania lub sprzętu, w których został ujawniony. Jeżeli służą do zadań krytycznych, jak np. systemy bezpieczeństwa czy uzbrojenia, to konsekwencje mogą być bardzo poważne. Bo co, jeśli taki błąd doprowadzi do jakiejś tragedii? Wówczas rozpatrywałbym taki błąd w kontekście porażki, do której doszło np. na etapie testowania. Jednak wiemy, że często nie da się wziąć pod uwagę wszystkich ewentualności, bo świat jest nieprzewidywalny. Może zabrzmi to trochę katastroficznie, ale porażki jednej cywilizacji mogą być wskazówką dla innych. Zwłaszcza że świat elektroniczny odgrywa coraz większą rolę w życiu ludzkości.

Rozmawiała Marta Wiśniewska

Krzysztof Ropiak

Dr inż. Krzysztof Ropiak pracuje w Katedrze Metod Matematycznych Informatyki UWM. Naukowo interesuje się zagadnieniami sztucznej inteligencji, ale również aproksymacji zbiorów decyzyjnych metodami opartymi o teorię zbiorów przybliżonych. Po pracy zajmuje się eksploracją Warmii i Mazur – rowerem na lądzie, a żaglówką na wodzie.  

 

 

 

 

 

 

 

 

 

grafika marzec Tekst ukazał się w marcowym wydaniu „Wiadomości Uniwersyteckich", którego tematem przewodnim jest błąd. Zachęcamy w nim, by nie zamiatać błędów po dywan, ale przyjrzeć im się z różnych perspektyw. Swoją wiedzą dzielą się z nami przedstawiciele różnych dyscyplin naukowych: językoznawstwa, prawa, politologii, ekonomii czy medycyny. Jak zwykle piszemy też o najważniejszych wydarzeniach z życia Uniwersytetu oraz sukcesów naszej społeczności akademickiej. Wszystkie wydania naszego uniwersyteckiego pisma dostępne są na stronie internetowej 

 

Rodzaj artykułu