Sytuacja kobiet w IT w 2024 roku
23.05.20214 min
Bulldogjob

Bulldogjob

Upiorne bugi, czyli małe błędy, a wielkie katastrofy

Poczytaj o 6 przypadkach, kiedy mały bug miał wielkie konsekwencje.

Upiorne bugi, czyli małe błędy, a wielkie katastrofy

Błędy w oprogramowaniu zdarzają się często. Wiele z nich wychwytujemy jeszcze na etapie pisania, inne podczas testów. Zdarzają się jednak takie, których nikt nie zauważył, w wyniku czego doprowadziły do spektakularnych katastrof. Przedstawiamy subiektywną listę sześciu awarii, jakie powstały na skutek błędów w oprogramowaniu - jako ciekawostkę, a może i przestrogę?

Boeing 787 Dreamliner

Zapewne nieraz widziałeś/aś go na zdjęciach, a może miałeś/aś okazję nim lecieć (samoloty ma w wyposażeniu np. LOT). W 2015 roku było głośno o błędzie programistycznym, którego skutkiem był brak zasilania. Problem pojawiał się, gdy generatory Dreamlinera nie były wyłączane przez 248 dni. Bug wykryła agencja FAA nadzorująca amerykańskie lotnictwo. 

Doszło do integer overflow w liczniku w oprogramowaniu generatorów - to sprawiało, że przestawały dostarczać zasilanie do urządzeń samolotu. Na szczęście nie doszło z tego powodu do żadnego groźnego incydentu, a Boeing przygotował łatkę do oprogramowania.

Rakiety Patriot

Wydarzenie kosztowało życie 28 żołnierzy z amerykańskiej bazy w Dahahran. Tragedia miała miejsce 25 lutego 1991 roku, gdy toczyła się wojna w Zatoce Perskiej. Na bazę wystrzelono iracką rakietę Scud, która teoretycznie nie powinna stanowić zagrożenia, ponieważ żołnierze byli osłonięci przez mobilny system ziemia-powietrze - znany powszechnie jako Patriot.

System doceniany jest ze względu na wysoką skuteczność. A jednak tamtego dnia coś nie zadziałało i iracki Scud bez przeszkód zniszczył koszary. Informacja o tym pojawiła się rok po tragedii w Dahahran, w raporcie komisji Kongresu General Accounting Office. Okazało się, że gdy rakiety Patriot działały długo bez restartu, konwersja czasu stawała się coraz bardziej nieprecyzyjna. System w Dahahran nie był restarowany przez co najmniej 100 godzin, co wywołało błąd konwersji czasu w wymiarze 1/3 sekundy. Dlatego też Patriot nie mógł namierzyć rakiety Scud.

Co ciekawe, patch do oprogramowania został wypuszczony dzień po tragedii - czyli bug odkryto już wcześniej.

Ariane 5

Tym razem przenosimy się do 1996 roku. Jest 4 czerwca. Europejska Agencja Kosmiczna ESA z dumą prowadzi transmisję z wystrzelenia Ariane 5. Już 30 sekund po starcie rakieta zbacza z kursu, a chwilę później ulega zniszczeniu. 10 lat pracy i 7 mld dolarów zamienia się w zgliszcza.

Co się okazuje? Integer overflow! W oprogramowaniu napisanym w języku Ada doszło do przekroczenia zakresu liczb. Wszystko przez to, że skopiowano oprogramowanie i koordynaty z wcześniejszej rakiety – Ariane 4, która znacznie różniła się od Ariane 5.

Śledztwo wykazało, że oprogramowanie transformowało 64-bitowe dane zmiennoprzecinkowe na 16-bitowe wartości całkowite. W ten sposób powstała zbyt duża liczba całkowita, a dodatkowo zabrakło kodu, który testuje przekroczenie zakresu liczb. Doszło do przeciążeń, a w konsekwencji system wymusił autodestrukcję Ariane 5.

Therac-25

To chyba najbardziej znany przykład błędu programistycznego w historii. Kosztował życie pięciu osób (zmarły na chorobę popromienną, a szósta została dotkliwie poparzona). Śledztwo wykazało, że oprogramowanie maszyny do radioterapii nowotworów Therac-25 zostało napisane w Asemblerze przez jednego programistę, który dokonał kilku przeoczeń. Nie przeprowadzono dokładnych testów, a w dodatku kod został zaimplementowany do nowszego modelu maszyny, niż zakładano pierwotnie.

Therac-25 posiadał dwa tryby działania: niskoenergetyczny oraz wysokoenergetyczny, który emitował nawet 100 razy większą dawkę promieniowania. Kiedy operatorzy zbyt szybko zmienili tryb pracy urządzenia, pojawiał się bug nazywany często „wyścigiem”. Wysyłane były dwie instrukcje i ta, która pierwsza docierała do Therac-25, ustawiała odpowiedni tryb urządzenia. To sprawiało, że pacjenci często otrzymywali zbyt duże dawki promieniowania.

Mars Climate Orbiter

Wpadka NASA, 1999 rok. 23 września (dokładnie po 10 miesiącach lotu) amerykańska sonda Mars Climate Orbiter warta 700 mln dolarów dotarła do czerwonej planety. Wkrótce rozpoczęła się procedura wchodzenia w atmosferę Marsa, w czasie której zanika sygnał urządzeń. Niestety, kontaktu już nie odzyskano, ponieważ sonda spłonęła w atmosferze planety.

Jak to często bywa, błąd był banalny. Poszczególne części software’u były kodowane w różnych krajach, więc programiści używali odmiennych jednostek metrycznych. To spowodowało błędne działanie dopalaczy lądownika i w rezultacie silniki pracowały z większą mocą, niż powinny.

Podobny obraz

Mariner 1

To błąd nazywany często „najdroższym myślnikiem w historii”. O co chodzi?

Sprawa dotyczyła rakiety, która miała wynieść na orbitę sondę Mariner 1. NASA wystrzeliła ją 22 lipca 1962 roku. Po 4 minutach i 55 sekundach trzeba było jednak zniszczyć rakietę, ponieważ nie udało się zmienić niewłaściwej trajektorii jej lotu. Winowajcą okazał się znowu bug w oprogramowaniu. Kod został napisany przez programistę odręcznie w zeszycie. Zabrakło w nim myślnika „-”, co doprowadziło do katastrofy.

Górne podkreślenie, o którym zapomniano, powinno pojawić się nad symbolem promienia. Ten znak oznacza funkcję koordynowania lokalizacji, a cała formuła miała za zadanie obliczać wartość pochodnej czasowej promienia. Bez tego myślnika minimalne zmiany prędkości rakiety zostały zinterpretowane jako duże i wyłączyły się procedury korekty lotu.


Wypadki doskonale pokazują, jak ważne jest gruntowne testowanie oprogramowania i jak istotna jest rola testera. Posłuchaj podcastu, w którym testerki - Emilia i Patrycja - opowiadają o swoich krokach do kariery QA. A żeby dmuchać na zimne, popraw swoje code review unikając 7 najczęstszych błędów.

<p>Loading...</p>