Latem zeszłego roku świat współczuł ofiarom i rodzinom tragedii lotu Malaysia Airlines 17. Samolot celowo zestrzelono przez prorosyjskich separatystów za pomocą rosyjskiego sprzętu i z udziałem rosyjskich wojskowych. Nie był jedynym w historii cywilnym statkiem powietrznym strąconym w wyniku działań wojennych.
W lipcu 1988 roku amerykański krążownik USS Vincennes zestrzelił cywilny lot 655 z Teheranu do Dubaju. Tragedia, która pochłonęła 290 osób była spowodowana w dużej mierze błędem programistów. A konkretnie twórców systemu odpowiedzialnego za interakcję z systemami identyfikacji samolotów.
System, który mieli do dyspozycji amerykańscy wojskowi miał w sobie śmiertelnie groźne niedopracowanie. Po pierwsze operator, który śledził na ekranie obiekty wykryte przez radar nie był w stanie ocenić precyzyjnie ich ruchu. Po kolejnym odświeżeniu ekranu porównywano współrzędne i dokonywano ręcznych obliczeń. Przez tę niedoskonałość systemu potraktowano cywilny samolot jak myśliwiec zbliżający się dużą prędkością do lotniskowca. Błędnie.
O wiele tragiczna w skutkach była jednak pomyłka związana z projektowaniem interfejsu odpowiedzialnego za identyfikację samolotu, która przebiegała w dwóch etapach.
Podczas pomiaru punkty reprezentujące cywilny lot 655 i irański F-14 były na ekranie radaru bardzo blisko siebie. Operator najpierw stwierdził, że do krążownika zbliża się samolot - reprezentowany przez jeden z punktów. Przy drugim pomiarze, który miał określić rodzaj samolotu, operator pomylił punkty. Wybrał ten, który reprezentował irański myśliwiec. Dalej historia potoczyła się już dramatycznie - wojskowi uznali, że atakuje ich wrogi samolot i zestrzelili go.
Tragedia lotu 655 stała się tematem wielu analiz. Najbardziej wyważoną ocenę podaje Wikipedia
Całkiem prawdopodobne, że gdyby amerykańscy wojskowi dysponowali lepiej zaprojektowanym systemem tragedii można by uniknąć.
Kolejna tragedia związana z lotnictwem była również spowodowana w dużej mierze błędem podczas tworzenia oprogramowania.
20 stycznia 1992 roku samolot Air Inter z Lyonu do Strasburga rozbił się o wzgórze w pobliżu lotniska docelowego. 87 osób, w tym obaj piloci, zginęli. Cudem przeżyło dziewięć osób.
Istotną, choć nie jedyną, przyczyną tragedii było oprogramowanie autopilota. Podczas podchodzenia do lądowania wprowadzono do niego wartość określającą kąt pod jakim maszyna powinna schodzić. Powinien wynosić 3,3 stopnia i taką wartość wprowadził drugi pilot. Problem w tym, że przy pomocy tego samego instrumentu do autopilota wprowadzano też prędkość schodzenia (w stopach na minutę x1000). Pilot widział więc wartość 3,3, ale nie dostrzegł już mało czytelnego oznaczenia nad tą wartością. Nie zdawał sobie sprawy, że zamiast kąta schodzenia 3,3 stopnia ustalił prędkość 3300 stóp na minutę. To cztery razy za szybko. Zbyt duża prędkość schodzenia była główną przyczyną katastrofy polskiego samolotu pod Smoleńskiem.
Fot. za lessonslearned.faa.gov
Piloci nie zdążyli zareagować. Na skutek dodatkowych czynników - rozmów z kontrolą lotu i olbrzymiego zdenerwowania - nie zauważyli na czas dramatycznie szybkiego tracenia wysokości.
Jak widać na poniższym zdjęciu zauważenie różnicy w oznaczeniu jednostek było w praktyce niezwykle trudne, wręcz niemożliwe.
Fot. za lessonslearned.faa.gov
W latach osiemdziesiątych doszło do serii nieszczęśliwych wypadków związanych z maszynami służącymi do naświetleń. W oprogramowaniu Therac-25 czaił się niezwykle niebezpieczny błąd. Polegał on na tym, że maszyna informowała operatora o nieudanej próbie rozpoczęcia procesu naświetlania. Operator próbował więc przeprowadzić całą procedurę ponownie. W niektórych przypadkach wielokrotnie.
Jak wykazało późniejsze śledztwo Therac-25 dokonywały naświetleń pomimo komunikatu, iż procedura się nie rozpoczęła. W przypadkach trzech pacjentów doszło do śmiertelnego w skutkach napromieniowania lub zgonu przez przez źle leczoną chorobę nowotworową. Kilka osób zostało poparzonych.
W raporcie firmy Wheel Systems czytamy, że przyczyną tragedii był trywialny błąd w kodzie. Kosztujący więcej niż milion dolarów automat był obsługiwany przez oprogramowanie napisane - według raportu Logical Trust - w assemblerze. Stworzyła je jedna osoba, która przeoczyła kluczowy fragment kodu. Troje ludzi straciło życie przez brak kilkudziesięciu znaków. Winą za problemy z Therac-25 można też obarczać osoby odpowiedzialne za testowanie maszyny przed wprowadzeniem na rynek.
Jak wyjaśnia Wikipedia "główną przyczyną nieprawidłowego funkcjonowania urządzeń był błąd typu race condition, na skutek którego w pewnych trudnych do odtworzenia warunkach (przy odpowiednio szybkiej pracy biegłego operatora), nie dochodziło do prawidłowej inicjalizacji wszystkich parametrów zabiegu. Problem ten miałby jednak dużo mniej tragiczne konsekwencje, gdyby w ramach redukcji kosztów nie zrezygnowano z mechanicznych zabezpieczeń stosowanych wcześniej w maszynach Therac-6 i Therac-20. Dodatkowo, liczba ofiar mogłaby być znacznie niższa, gdyby producent maszyny nie bagatelizował kolejnych powiadomień o nieprawidłowościach i wypadkach."
Szczegółową analizę błędu można znaleźć tutaj.
Fot. Nancy Levson
W 1991 roku, podczas wojny w Zatoce Perskiej, doszło do tragicznej pomyłki, na skutek której zginęło 28 osób, a 100 odniosło rany. Wszystko za sprawą oprogramowania odpowiedzialnego działanie systemu Patriot.
Niedokładność kodu sprawiła, że po stu godzinach nieustanej pracy drobna pomyłka w pomiarze czasu urosła do gigantycznej wartości. Różnica pomiędzy czasem mierzonym przez system, a czasem rzeczywistym wyniosła 0,34 sekundy.
To wystarczyło, by spowodować eksplozję rakiety w nieodpowiednim miejscu. Nie zdążyła zestrzelić wrogiej rakiety - w konsekwencji czego ta trafiła w baraki amerykańskiej armii zabijając 28 osób i raniąc sto.
Do wyliczenia następnej pozycji wrogiej rakiety używany był czas pracy urządzenia w sekundach. Był ustalany przez licznik, którego wartość zwiększała się co 0,1s. Patriot posiadał jednak 24 bitową jednostkę liczb zmiennoprzecinkowych. Zamiast wartości 0,1 system w rzeczywistości stosował do obliczeń wartość 0,099999905. Po stu godzinach pracy przyniosło to gigantyczną różnicę. Najdziwniejsze w całej sprawie jest to, że twórcy oprogramowania wychwycili tę wadę. Nie poinformowali jednak wojskowych, że konsekwencją będzie błędne sterowanie rakiety.
Trzy kolejne przypadki błędów w programowaniu nie pochłonęły ofiar, za to całą masę pieniędzy i mnóstwo czasu.
Do pierwszego zdarzenia doszło w 1996 roku. Rakiety Ariane 5, zbudowana przez Europejską Agencję Kosmiczną, eksplodowała zaledwie kilkadziesiąt sekund po starcie.
W wyniku śledztwa ustalono, że przyczyną awarii było użycie kodu skopiowanego z oprogramowania sterującego poprzednią wersją rakiety - Ariane 4. W trakcie lotu jedna z funkcji pochodzących z Ariane 4, zgłosiła błąd. Jego interpretacja wprowadziła z kolei w błąd wewnętrzny system nawigacji rakiety, doprowadzając tym samym do wydania przez główny komputer polecenia wykonania nagłego zwrotu o 20 stopni. W tym wypadku nie pomógł nawet awaryjny system, ponieważ kiedy główny komputer, w wyniku błędu, wyłączył się, zapasowy obwód, który powinien przejąć jego zadania, też już nie działał.
Podobne zaniedbania kosztowały NASA 700 milionów dolarów. Podczas wchodzenia w atmosferę Marsa sondy Mars Climate Orbiter nieprawidłowo zadziałały dopalacze lądownika. Przyczyna była - można by rzec - banalna. Za część kodu sterującą pracą dopalaczy odpowiadali Brytyjczycy. Posługując się innymi niż Amerykanie jednostkami metrycznymi sprawili, że sonda spłonęła w atmosferze Marsa. Zamiast wchodzić w nią na wysokości ok. 150km obniżył się aż do 50km.
Identyczny błąd sprawił spore problemy podczas projektowania Boeinga 787 Dreamliner. Nad samolotem pracowały dwa zespoły - amerykański i brytyjski. Europejczycy "zapomnieli" o innym systemie miar. Spora część samolotu musiała więc zostać przeprojektowana.
Wystarczy spojrzeć na tę witrynę opisującą sposób projektowania Dreamlinera, by przekonać się, że przy tak wielkiej operacji nietrudno o pomyłkę.
Ciekawy błąd spowodowany błędem w programowaniu omówił Niebezpiecznik.pl. Serwis opisuje historię kobiety, która chciała skorzystać z siłowni. Niestety problemy pojawiły się już przy wejściu do szatni. Drzwi zabezpieczał zamek szyfrowy, jednak pomimo wpisywania prawidłowego kodu nie pozwalał wejść.
Krótki śledztwo wykazało, że programiści tworzący system odpowiedzialny za obsługę drzwi dokonali "seksistowskiej" pomyłki. Kobieta nie mogła wejść, bo oprogramowanie przypisało ją do... męskiej szatni. Dlaczego? Bo posiadała tytuł naukowy. Oprogramowanie przyjmowało z góry, że wszyscy doktorzy to mężczyźni. System "przydzielił" więc panią doktor do męskiej szatni, a ta próbowała otworzyć drzwi do damskiej.