Programista jest tylko człowiekiem, czyli skąd się biorą błędy w oprogramowaniu


Znacznie bardziej kosztowną kosmiczną wpadkę zaliczyli francuscy programiści pracujący nad rakietą Ariane-5. Ich błąd niemal przekreślił 10 lat wysiłków inżynierów i naukowców pracujących nad rozwojem tego typu rakiet i wyłożonych na ten cel przez Europejską Agencję Kosmiczną siedmiu miliardów dolarów. Bezpośrednie straty wyniosły wówczas ok. 370 mln dolarów. 4 czerwca 1996 roku z kosmodromu Kourou w Gujanie Francuskiej w swój pierwszy testowy lot wyruszyła europejska rakieta Ariane-5. W 37 sekundzie lotu na oczach zaskoczonych widzów rakieta zeszła z kursu i została zniszczona przez system autodestrukcji. Ariane-5, która była większą, szybszą, bardziej funkcjonalną i rozbudowaną wersją rakiety Ariane-4 uległa katastrofie za sprawą… procedury kopiowania kodu ze swojej poprzedniczki.

Programista jest tylko człowiekiem, czyli skąd się biorą błędy w oprogramowaniu

4 czerwca 1996 roku z kosmodromu Kourou w Gujanie Francuskiej w testowy lot wyruszyła rakieta Ariane-5. W 37 sekundzie lotu na skutek błędów w oprogramowaniu rakieta zeszła z kursu i została zniszczona przez system autodestrukcji. [autor: ignis, licencja CC]

Jak się okazało po katastrofie, przed lotem dokładnie przetestowano cały sprzęt z wyjątkiem oprogramowania niemal w całości skopiowanego z poprzedniej wersji rakiety Ariane-4, w której przecież działało bez zarzutów. Jednak w Ariane-5 zastosowano, mocniejsze i szybsze silniki, przez co oprogramowanie generowało znacznie większe liczby. Błąd pojawił się w chwili, gdy 64-bitową liczbę zmiennoprzecinkową program próbował przypisać 16-bitowej zmiennej całkowitej. W efekcie pojawił się błąd arithmetic overflow, który wygenerował kolejne błędy replikujące się na zasadzie domina. W rezultacie główny komputer rakiety wydał polecenie wykonania nagłego zwrotu o 20 stopni i wyłączył się. Awaryjny system sterowania nie był już w stanie przejąć kontroli nad rakietą, ponieważ w wyniku błędów przepełnienia stosu przestały działać również zapasowe obwody. Jedynym wyjściem pozostało włączenie systemu autodestrukcji.

W toku przeprowadzonego przez Europejską Agencję Kosmiczną śledztwa wyszło na jaw, że nie sprawdzono dokładnie założeń, na bazie których powstało oprogramowanie do Ariane-4. Co gorsza, programiści software do Ariane-5 tworzyli nadpisując stary kod. Nie wprowadzono też systemu testów, ani nie przeprowadzono żadnych symulacji programowych.

Błędy w oprogramowaniu a działanie elektrowni atomowych

Po awarii elektrowni atomowej w Czarnobylu największe obawy światowej opinii publicznej budzi możliwość wystąpienia błędów w oprogramowaniu sterującym reaktorami atomowymi, które mogłyby doprowadzić do podobnej katastrofy. Co gorsza, taki wypadek miał już realnie miejsce w historii, choć publicznie niewiele o nim wiadomo. W 1979 roku amerykańskie elektrownie atomowe poddano testom mającym sprawdzić ich odporność na trzęsienia ziemi. W trakcie testów musiano awaryjnie wyłączyć pięć reaktorów w różnych elektrowniach ponieważ, użyte do testów oprogramowanie sterujące reaktorami zaczęło generować błędy. Okazało się, że w jednej linijce kodu po prostu zsumowano ciąg zmiennych, zamiast zsumować pierwiastki z tych wartości, a następnie otrzymany wynik ponownie spierwiastkować.