Błędy w kodzie, które kosztowały miliony. Nie trzeba wiele

Czasem drobny błąd może przynieść poważne konsekwencje. Niektóre błędy w programowaniu, wiązały się z generowaniem gigantycznych kosztów. Pojedyncze pomyłki potrafią kosztować nawet miliony dolarów. Przykładowo, w 1996 r. jeden taki błąd doprowadził w parę sekund do rozpadu rakiety. Straty oszacowano wówczas na kwotę 370 mln dolarów.

Programista, specjalista do spraw cyberbezpieczeństwa. Zarobki w IT są wysokie
Programista, specjalista do spraw cyberbezpieczeństwa. Zarobki w IT są wysokie
Źródło zdjęć: © Unsplash

O ile tworzenie kodu to praca względnie bezpieczna, która sama w sobie nie generuje dużego zagrożenia, o tyle skutki działań programistów mogą być naprawdę poważne. Niejednokrotnie w historii przekonano się, że niewielka pomyłka może doprowadzić do wygenerowania ogromnych skutków. Jedną z branż, które w dużej mierze to odczuwają, jest branża kosmiczna, ale konieczność zapewniania odpowiedniej kontroli jakości istnieje w każdym sektorze.

Konsekwencje błędów w kodzie mogą kosztować miliony dolarów i nie jest to przesada. Przykładem historii, w której jeden brakujący znak zaważył o katastrofie, jest pierwsza misja programu Mariner. Wystartowała ona w 1962 r. i zakończyła się niepowodzeniem po pięciu minutach od startu. Powodem okazał się brak poziomej kreski.

Dalsza część artykułu pod materiałem wideo

Wspomniana kreska to viniculum, która oznacza zgrupowanie elementów wyrażenia. Gdyby "kreska" pojawiła się na swoim miejscu, pozwoliłaby ona na wyliczenie średniej ze zgromadzonych danych. Ze względu na jej brak, dane traktowane były jak zmiany wartości prędkości, które program starał się zniwelować zmianami kursu rakiety, co doprowadziło do jej samozniszczenia.

- Podobne przypadki zdarzały się w dotychczasowej historii misji kosmicznych i choć większość specjalistów nie ma na co dzień związków z branżą kosmiczną, to doświadczenia wyniesione z analizy tych przypadków są cenną lekcją. Przypominają o konsekwencjach, które mogą pojawić się również w naszych projektach przy okazji błahych pomyłek. Co istotne, choć mówimy o szeregu przyczyn lub sytuacji, w której błąd decydujący o katastrofie może pojawić się na dalszych etapach realizacji projektu, to niemal zawsze możemy wskazać praprzyczynę. Z perspektywy Quality Assurance musimy pamiętać, że często to właśnie ów pierwszy punkt, który nie został zrealizowany prawidłowo, prowadzi do ostatecznego niepowodzenia - wskazuje Agnieszka Skokowska, Principal QA Leader w Inetum Polska.

Katastrofy spowodowane bugami

Głośnych wypadków, których przyczyną były błędy w kodzie, było w historii wiele. Ich odpowiednia analiza pozwala wyciągać wnioski na przyszłość i modyfikować sposób w jaki prowadzone są prace programistów. Poza wspomnianą wpadką misji Mariner można opisać jeszcze kilka innych głośnych przykładów, są to:

  • Mars Climate Orbiter - do awarii sony Mars Climate Orbiter doszło w 1999 r. Miała ona badać atmosferę Marsa i umożliwić komunikację z utraconym lądownikiem Mars Polar Lander. System nie wykrył i nie skorygował błędu w plikach wyjściowych programu Sm_forces. Te dostarczone zostały zespołowi nawigacyjnemu w jednostkach angielskich (funt-siła sekunda) zamiast metrycznych (niuton sekunda). Spowodowane tym faktem różnice narastały stopniowo, aż w końcu doprowadziło do utraty sondy. Koszt misji szacowano na ponad 300 mln dolarów;
  • Phobos 1 - radziecka sonda Phobos 1 z 1988 r. była częścią programu kosmicznego, mającego badać marsjański księżyc. Ze względu na pominięcie jednego znaku w sekwencji komend wysłanych do statku kosmicznego uruchomiony został program testujący sterowanie. Nie był on do niczego potrzebny, lecz zdecydowano się nie usuwać go, a jedynie zabezpieczyć. Zabezpieczenie okazało się jednak nieskuteczne;
  • Mars Global Surveyor - w czerwcu 2006 r. doszło do awarii sondy, która wcześniej dowiodła, że na Marsie znajduje się woda. Awaria wyniknęła z faktu zapisania aktualizacji związanej z parametrami kierunku wskazywania anteny do nieprawidłowego adresu pamięci. Spowodowało to nieprawidłowe ustawienie paneli słonecznych. Statek kosmiczny został utracony prawdopodobnie ze względu na przegrzanie się baterii;
  • SpaceX - od błędów nie uchronił się SpaceX. 28 czerwca 2015 r. bezzałogowa rakieta Falcon 9, która realizowała misję SpaceX CRS-7, eksplodowała ok. dwóch minut po starcie. Jej ładunek, który został utracony, wart był 120 mln dolarów. Udałoby się ją uratować, gdyby oprogramowanie wydało polecenia otwarcia spadochrony podczas incydentu. Elon Musk stwierdził, że kapsuła Dragon ocalałaby, gdyby oprogramowanie było inne;
  • Ariane 5 - 4 czerwca 1996 r. wystartowała rakieta Ariane 5. Transportowała ona satelity Europejskiej Agencji Kosmicznej w ramach misji Cluster. Eksplodowała 37 sekund po starcie, co spowodowało straty o wartości 370 mln dolarów. Za główną przyczynę tego zdarzenia uważa się fakt, że oprogramowanie wykorzystywało kod stworzony na potrzeby misji Ariane 4, który nie był dostosowany do nowej rakiety, m.in. w kontekście trajektorii lotu. Winę za katastrofę może ponosić też fakt, że nie przeprowadzono żadnych naziemnych testów akceptacyjnych, które pozwoliłby sprawdzić, czy system nawigacyjny zadziała prawidłowo, gdy zostanie poddany sekwencji odliczania i czasu lotu oraz trajektorii Ariane 5.

Karol Kołtowski, dziennikarz dobreprogramy.pl

Programy

Zobacz więcej
Wybrane dla Ciebie
Komentarze (44)