Kolosalne straty finansowe, paraliż systemów informatycznych dotykający milionów użytkowników, utrata zdrowia wielu osób a nawet śmierć – to tylko przykłady tego, do czego doprowadzić mogą niewinne, jak mogłoby się wydawać, potknięcia koderów. Kontynuujemy przegląd najbardziej znanych w historii programistycznych wpadek.
Mariner 1
Błąd ten znany jest pod nazwą „najdroższego myślnika w historii”. O co chodzi? Otóż 22 lipca 1966 z Cape Canaveral na Florydzie wystrzelono rakietę z sondą Mariner mającą dotrzeć na orbitę Wenus. Przedsięwzięcie zostało przygotowane przez NASA, JPL i USAF. Była to jednocześnie pierwsza misja planetarna USA i w związku z tym presja polityczna była ogromna. Niestety cała akcja zakończyła się groteskową katastrofą. Po 5 minutach od startu, rakieta wykonała serię gwałtownych manewrów i zboczyła z kursu, wobec czego wydano polecenie autodestrukcji. W toku dochodzenia wyszło na jaw, że wszystkiemu winien był błąd w oprogramowaniu polegający na… przegapieniu przez programistę kreski podczas przepisywania równania z kartki. Wyglądający jak zwykły myślnik overbar oznacza funkcję wygładzania. Bez niego nawet drobne wahania prędkości stanowiły zagrożenie. Straty w tym wypadku oszacowano na 18.5 mln dolarów.
NASA Mars Climate Orbiter
Przypadek Mariner 1 to nie jedyna programistyczna wpadka na koncie NASA. 23 września 1999 roku, po 10 miesiącach lotu, warta 700 mln dolarów sonda dotarła w okolice Marsa. Po rozpoczęciu manewru wchodzenia na czerwoną planetę, nagle łączność została utracona. Jak się okazało, MCO spłonęła w atmosferze Marsa. Powodem katastrofy po raz kolejny okazał się software. Otóż tworzący go programiści pochodzący z różnych krajów korzystali z odmiennych jednostek metrycznych. To niedopatrzenie okazało się na tyle poważne, że spowodowało nieprawidłową pracę dopalaczy lądownika. W rezultacie sonda podeszła zbyt nisko, co doprowadziło do katastrofalnego zakończenia misji.
Blackout 2003
14 sierpnia 2003 miał miejsce największy w historii Ameryki Północnej kryzys energetyczny obejmujący północno-wschodnie części Stanów Zjednoczonych oraz południowo-wschodnie prowincje Kanady. W wyniku tej awarii wyłączonych zostało 100 elektrowni (w tym 22 nuklearne), w miejscu stanęły pociągi, windy, lotniska a ulice sparaliżował brak sygnalizacji świetlnej. Wielu mieszkańców ucierpiało z powodu braku wody dostarczanej za pomocą pomp elektrycznych. Tylko w Nowym Jorku straż pożarna wyjeżdżała 3 000 razy do pożarów spowodowanych przez nieudolne posługiwanie się świeczkami. Egipskie ciemności trwały dwa dni, dotknęły 55 mln osób i pochłonęły co najmniej 11 ofiar. Jak ustalono, przyczyną blackoutu stulecia była nieprawidłowość w oprogramowaniu sterującym siecią energetyczną zwana błędem wyścigu (race condition). Ma on miejsce, kiedy wynik działania jakiegoś procesu zależy od zgrania z czasem lub innych zdarzeń (procesów). W tym wypadku pomyłkowo wyłączono jedną stację transformatorową i w rezultacie doszło do przeciążenia sieci oraz kolejnych awaryjnych wyłączeń podstacji energetycznych i elektrowni.
To zaledwie kilka przykładów najbardziej spektakularnych w historii katastrof, za którymi stoi złej jakości kod. Konsekwencji programistach błędów, mniej lub bardziej uciążliwych, miliony osób doświadcza każdego dnia. Czy ktoś ma jeszcze wątpliwości co do odpowiedzialności, z jaką wiąże się praca programisty i jak istotną rolę spełniają rzetelnie przeprowadzane testy?
Jeśli nie zapoznałeś/-aś się jeszcze z pierwszą częścią artykułu zapraszamy do jego lektury: Drobne bugi – wielkie katastrofy. Najsłynniejsze programistyczne błędy w historii (cz. I).