torin_kr (torin_kr) wrote,
torin_kr
torin_kr

Categories:

Околокомпутерное -- о том, к чему приводят ошибки в программном коде

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

Запуск ракеты 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% рынка вареников, пельменей и прочей "заморозки" г. Москвы трое суток ни одна машина с продукцией не выезжала из гаража -- программка просто не могла правильно распечатать пакеты сопроводительных документов на груз. Ну пожили москвичи трое суток с резко обедненным ассортиментом пельменей в магазинах -- думаю большинство из них этого даже и не заметили. Компании это правда обошлось что-то в полмиллиона рублей убытка, но выгоды от внедрения новой системы логистики эту сумму быстро перекрыли.
Tags: Околокомпутерное
Subscribe
promo torin_kr april 3, 20:29 102
Buy for 100 tokens
Все больше россиян опасаются не только коронавируса, но и увольнения из-за эпидемиологического кризиса, говорится в материалах Национального агентства финансовых исследований (НАФИ). Почти половина (42%) опрошенных, оставшись без работы, не смогут протянуть и месяца без займов. Еще 26% отвечают,…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 4 comments