Błędy w oprogramowaniu kosmicznym

Ekspolzje

Loading

Błędy w oprogramowaniu kosmicznym – czyli dwie historie jak błędy w oprogramowaniu Mariner 1 i Ariane 5 lot 501 spowodowały katastrofy. Z tego krótkiego wpisu poznacie historię dwóch niedoszłych lotów, oraz jakie błędy zostały popełnione i czy można było ich uniknąć.

Mariner 1

Zdarzenie miało miejsce 22 czerwca 1962 roku na przylądku Cape Canaveral na Florydzie. Tego dnia o godz. 9.26 aktywowano tzw. czerwony guzik powodujący autodesktrukcję rakiety Mariner 1. Co było przyczyną zniszczenia planety, która miała zbadać Wenus? Dlaczego zamiast udać się w przestrzeń, szczątki Marinera spadły na Karaiby po 293 sekundach. Takie pytania zadawali sobie eksperci NASA przez blisko tydzień.

Pierwszym problemem który wystąpił to fakt, że antena rakiety odbierająca komendy kierujące z Ziemi nie działa poprawnie. Z tej przyczyny kontakt został zerwany całkowicie. Na taką okoliczność inżynierowi byli przygotowani i opracowali możliwość sterowania rakietą poprzez komputer. W tym przypadku sygnały z anteny miały być ignorowane a lot kontynuowany za pomocą planu zapisanego w pamięci maszyny. Mimo zapewnienia takiego zabezpieczenia misja nie powiodła się, gdyż do oprogramowania wkład się błąd gdyż zabrakło łącznika „-„.

Błąd został on popełniony podczas ręcznego przepisywaniu kodu. W wyrażeniu „R-dot-bar sub n” („n” to wartość pochodnej promienia) został pominięty łącznik (oznaczający wyrównanie). Prawidłowy zapis powinien wyglądać tak: „R-dot-bar sub-n”. W sporządzonym później raporcie wskazano: „W jakiś sposób łącznik zniknął z programu sterowania wprowadzonego do komputera pokładowego, pozwalając na błędne komendy sterujące, które skręciły rakietę w lewo i ustawiły nosem w dół […].

Czy błąd był kosztowny? Mimo poczynionych oszczędności program Mariner i tak okazał się niezwykle kosztowny – pochłonął ponad 500 milionów dolarów. Biorąc pod uwagę, że był to 1962 roku, zatem kwota wręcz zawrotna.

Ariane 5

Jest rok 1996 kiedy rakieta Ariane 5 kiedy miał odbyć się pierwszy lot Ariane 5 – nowej rakiety. Europejska Agencja Kosmiczna była rozwijana przez blisko 10 lat a budżet projektu wynosił około 7 mld USD. Ariane 5 miała wynieść na orbitę okołoziemską zespół sond do badania magnetosfery.  Niestety 37 sekundach po starcie rakieta nagle przechyliła się o 90° a siła aerodynamiczna spowodowała oderwanie się napędów rakietowych od reszty konstrukcji. Spowodowało to uruchomienie procedury autodestrukcji i eksplozję rakiety blisko 4 km nad ziemią.

Przyczyną i tej katastrofy był błąd w kodzie oprogramowania odpowiadający za określanie pozycji rakiety w układzie współrzędnych. Zmienna, która przechowywała korektę prędkości w osi poziomej była konwertowana z 64-bitowej liczby float na 16-bitowego inta. Po 37 sekundach od startu zmienna ta osiągnęła wartość większą niż maksymalna liczba całkowita zapisana na 16 bitach. Moduł pozycji zamiast prawdziwej wartości podawał wartość oznaczającą błąd. Ta sytuacja została zinterpretowana jako położenie i system nawigacji podjął decyzję o korekcie kursu. Co ciekawe po wykryciu exceptiona moduł określania pozycji przestał działać i automatycznie uaktywnił się drugi, zapasowy moduł. Niestety oba te moduły były identyczne i zawierały one ten sam błąd.

Bezsprzecznie jako przyczyny wskazuje się błędy w specyfikacji powstałe przez brak odpowiedniej analizy ryzyka i testów. Dodatkowo część kodu pochodziła z wcześniejszej wersji – Ariane 4. Są to więc błędy procesowe, a feralna linijka kodu jest tylko ich efektem.

Podsumowanie

Artykuł błędy w oprogramowaniu kosmicznym to pierwszy wpis z działu Eksplozje. W tej sekcji bardziej w ramach opowieści, będziemy przedstawiać w jaki sposób błędy w oprogramowaniu, mogą doprowadzić do przykrych i kosztownych zdarzeń.