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


Skąd się biorą błędy w oprogramowaniu. Straty na polu walki

25 lutego 1991 roku iracka rakieta typu SCUD trafia w barak w Dhahranie w Arabii Saudyjskiej zabijając 28 i raniąc 100 amerykańskich żołnierzy. Zawiodło wówczas oprogramowanie systemu obrony przeciwlotniczej PATRIOT.

Systemy PATRIOT zaprojektowano pod koniec lat 70. XX wieku, w celu zwalczania radzieckich rakiet poruszających się z ponad dwukrotną prędkością dźwięku. System PATRIOT miał być również bardzo mobilny. Z tego względu inżynierowie założyli, że czas ciągłej pracy tego systemu nie powinien przekraczać ośmiu godzin. Po tym czasie system obrony przeciwrakietowej miał być dezaktywowany, przewieziony i uruchomiony ponownie w innym miejscu.

Jednak w związku z długim czasem dezaktywowania i ponownej aktywacji systemu wynoszącym 1,5 minuty amerykańskie baterie PATRIOT-ów w Iraku działały bez przerwy nawet ponad 100 godzin.

Niestety, system komputerowy wykorzystywał w procesie namierzania pocisków wroga własny czas pracy w sekundach. Wykorzystano tutaj wartości zmiennoprzecinkowe, które mają tę cechę, że małe liczby zapamiętywane są z dużą dokładnością, a duże liczby z małą dokładnością. Oznaczało to, że im dłuższy był czas pracy baterii, tym mniej dokładnie prowadzone były obliczenia. W wypadku przewidzianych maksymalnie ośmiu godzin, nie było z tym problemu, lecz w wypadku baterii PATRIOT pracującej ponad 100 godzin błąd zegara brany pod uwagę w obliczeniach wynosił już 0,34 sekundy. W wypadku pocisku balistycznego SCUD, który poruszał się z pięciokrotną prędkością dźwięku, przełożyło się to na ponad 700-metrowy błąd obliczenia pozycji pocisku!

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

Podczas wojny w Zatoce Perskiej baterie PATRIOT pracowały ponad 100 godzin bez przerwy. Po tym czasie błąd zegara brany pod uwagę w obliczeniach dotyczących przechwytywania pocisków wynosił 0,34 sekundy. [źródło: DVIDS]

W efekcie wychwycenia irackiej rakiety SCUD i namierzeniu jej w pierwszej fazie celowania, system PATRIOT błędnie wyliczył okno, w którym powinna się pojawić wroga rakieta w drugiej fazie namierzania. Ponieważ nie wykryto w tym oknie, w oznaczonym czasie, oczekiwanego obiektu, PATRIOT nie podjął żadnych działań, uznając pierwsze namierzenie obiektu za fałszywy alarm. Za oficjalną przyczynę incydentu uznano niewłaściwą eksploatację systemu PATRIOT. Jednak spora część winy za tę tragedię leży po stronie programistów, którzy o powstającym odchyleniu czasu dowiedzieli się na krótko przed wydarzeniami w Dhahran. Na ironię zakrawa fakt, że odpowiednia poprawka oprogramowania była już w drodze, ale do żołnierzy w Arabii Saudyjskiej dotarła dzień po tragedii.

To tylko najbardziej znane i spektakularne przykłady katastrof spowodowanych błędami w oprogramowaniu. Ile poważnych błędów zagrażających życiu i zdrowiu nie wychodzi na światło dzienne? Tego z pewnością się nie dowiemy. Należy mieć tylko nadzieję, że nauczeni doświadczeniem twórcy kluczowych systemów IT znacznie lepiej będą testować swoje oprogramowanie.

Nie tylko Blue Screen

„Niebieski ekran śmierci” w Windows to najpowszechniej znany przypadek irytującego błędu w oprogramowaniu. Ale nie jedyny. Wystarczy spojrzeć na poniższą listę:

  • Regularna utrata dostępu do sieci Wi-Fi poprzez „zgubienie” listy udziałów sieciowych w niektórych komputerach Apple
  • Błąd w eksploratorze Windows 8 – pojawia się po kliknięciu prawym przyciskiem myszy na pasku tytułowym okna i wybraniu takich elementów z memu kontekstowego jak przywracanie, maksymalizacja lub rozmiar okna. Po dokonaniu takiego wyboru menu kontekstowe pozostaje na ekranie.
  • Błędna numeracja wierszy w Notatniku. To jeden z najstarszych błędów systemu Windows w historii. Jest obecny w prawie wszystkich wersjach programu. Sprawia, że Notatnik w niektórych sytuacjach w sposób nieprawidłowy numeruje wiersze i kolumny w pasku stanu.
  • Brak wsparcia serwerów poczty e-mail z protokołem POP3 w natywnej aplikacji pocztowej w systemie Windows 8.
  • Blokowanie się dostępu do internetu mobilnego LTE i 3G w niektórych telefonach z Androidem 5.0 i 5.1 Lollipop po utraceniu (opuszczeniu) zasięgu sieci Wi-Fi w sytuacji, jeśli transmisja danych przez Wi-Fi nie została przed utratą zasięgu wyłączona.