?

Log in

No account? Create an account

Previous Entry | Next Entry

Мы давно уже живем в мире, в котором реальное положение дел зависит вовсе не от тех людей, которые занимают красивые кабинеты в Белом Доме, Кремле или резиденции Чжуннаньхай, а от тех кто своей повседневной работой превращает их (а то и не совсем их) решения в реальность.  В числе таких "превращальщиков" на мой взгляд одну из важнейших ролей играют программисты -- в том числе и потому что их ошибки могут обойтись (и реально обходятся) очень дорого. В этом посте я собрал пять самых известных ошибок програмного кода, приведших к гибели людей, потерям в миллиарды долларов и массовым сбоям в системах жизнеобеспечения населения.

Запуск ракеты Mariner I

В 1962 году ракета с космическим зондом Mariner-1, который должен был отправиться к Венере, вскоре после запуска отклонилась от намеченной траектории полета. Через 293 секунды был отдан приказ уничтожить ракету над Атлантическим океаном. Никто не погиб, однако экономические потери составили 18.3 миллиона долларов. Программист сделал ошибку, когда переводил рукописные математические формулы в код. Символ логического отрицания он принял за минус, и это привело к тому, что ракета воспринимала нормальные скорости как критические и из-за этого сбилась с курса.

Падение телефонной сети AT&T

15 января 1990 года ошибка в новой версии прошивки междугородних коммутаторов привела к тому, что в один прекрасный день 114 соседних коммутаторов перестали работать, и в следствие этого более 60 тысяч человек остались без междугородней связи на 9 часов. Согласно программе, коммутатор должен перезагрузиться, если получит соответствующий сигнал, однако он по ошибке рассылался каждый раз при восстановлении после сбоя какого-либо коммутатора. Все началось с падения и перезагрузки коммутатора в Нью-Йорке, который вызвал масштабную цепную реакцию, в результате которой 114 коммутаторов перезагружались непрерывно каждые 6 секунд. Сначала компания обвиняла хакеров, однако позже выяснилось, что причиной стала одна ошибочная строка кода, в которой реализовывалась отправка неверного сигнала.

Аппарат лучевой терапии Therac-25

В 1985 году эта модель аппарата лишила жизни двух человек, и еще четверо получили серьезное облучение. Ошибка крылась в программном управлении защитой от облучения, которая считалась более надежной, чем электромеханическая. Известно, что неисправность была вызвана тем, что в проекте использовались библиотеки с ошибками, входящие в состав ПО аппарата Therac-20, что и привело к фатальным последствиям. В коде была найдена довольно распространенная ошибка многопоточности, называемое "состоянием гонки". Тем не менее ошибку не заметили, так как Therac-20 работал исправно из-за дополнительных мер предосторожности. Не зря вопрос про состояние гонки — один из самых задаваемых на собеседовании вопросов по многопоточности, ведь он приносит так много хлопот.

Взрыв ракеты Ariane 5

В 1996 году ракета Ariane 5, на борту которой были 4 научных спутника, взорвалась через 36.7 секунд после взлета. Это тот случай, когда банальная ошибка переполнения переменной нанесла ущерб в 7 миллиардов долларов. При разработке системы управления ракетой были использованы некоторые части кода от ПО Ariane 4, однако у Ariane 5 показатели скорости были несколько больше, что и вызвало переполнение переменной. Ошибки можно было избежать, если бы при использовании программного обеспечения от другого оборудования не забывали подправить код.

Массовое отключение электроэнергии в США и Канаде

В 2003 году все тоже "состояние гонки" в программном обеспечении системы управления электростанцией вызвала прекращение подачи электроэнергии и 55 миллионов человек лишились электроснабжения. Деревья, которые находятся под линиями электропередач, регулярно подстригают, однако в Кливленде этого не сделали. Вследствие жары и увеличения энергопотребления провода провисли ниже обычного и коснулись деревьев: случилось замыкание, и электростанция в Кливленде вышла из строя. Аварийная система не предупредила персонал о перегрузках в сети, поэтому произошло каскадное отключение еще около сотни электростанций. В ходе расследования установили как такое произошло: состояние гонки вызывало подвисание сигнализации в комнате персонала на целый час, поэтому сотрудники электростанции не получали никаких сигналов о том, что произошла беда.

Вот чем чреваты "отдельные ошибки" не очень умелых программистов.
Моя самая тяжелая по последствиям ошибка пока к счастью привела только к тому, что в предприятии на долю которого приходится 45% рынка вареников, пельменей и прочей "заморозки" г. Москвы трое суток ни одна машина с продукцией не выезжала из гаража -- программка просто не могла правильно распечатать пакеты сопроводительных документов на груз. Ну пожили москвичи трое суток с резко обедненным ассортиментом пельменей в магазинах -- думаю большинство из них этого даже и не заметили. Компании это правда обошлось что-то в полмиллиона рублей убытка, но выгоды от внедрения новой системы логистики эту сумму быстро перекрыли.
promo torin_kr december 5, 2015 19:43 26
Buy for 200 tokens
Этот пост -- заказной. Меня его попросила написать одна моя хорошая знакомая, с которой мы знакомы такое количество лет. что аж страшно становится. Как говорит в таких случаях мой младший брат -- "Да ну нафиг. Столько и не живут". Живут... к сожалению. Ладно, это было лирическое…

Comments

( 4 comments — Leave a comment )
a_spyd
Nov. 28th, 2015 03:44 pm (UTC)
В копилку
Mars Climate Orbiter -- орбитальный аппарат для исследования Марса. При выходе на орбиту планеты скрылся за её поверхностью и более оттуда не появился. Расследование показало, что в процедуре управления тормозным импульсом программисты перепутали ньютоны с фунт-силами. Цена аппарата в разных источниках отличается; минимальная ~190 млн. долл.
(Вообще-то куча межпланетных зондов была потеряна достоверно или предположительно из-за программных ошибок)
torin_kr
Nov. 28th, 2015 07:49 pm (UTC)
Re: В копилку
спасибо, добавлю в копилку
ingaret
Nov. 28th, 2015 04:54 pm (UTC)
Взрыв на стартовой площадке советской ракеты, приведший к гибели маршала Неделина и множества людей попроще, а также к сворачиванию советской программы по высадке на Луну, произошёл из-за ошибки в программе запуска второй ступени.
torin_kr
Nov. 28th, 2015 07:50 pm (UTC)
спасибо...
( 4 comments — Leave a comment )

Latest Month

June 2019
S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      
Powered by LiveJournal.com
Designed by Akiko Kurono