6024 подписчика
В ответ на пост
Драматическая переинициализация
В Афганистане двое наводчиков-наблюдателей (канадцы) подсвечивали цель для наведения на нее бомбы. После сброса бомбы в GPS-приемнике закончились батарейки. Их быстро заменили. В результате ракета прилетела не туда. Причина была в том, что после подачи питания в прибор, переменные, отвечающие за координаты цели, автоматически инициализировались (присвоили значения) координатами текущего местоположения. Наводчики погибли от близкого разрыва.
Летчик Ильюшин
На испытаниях Су-24 регулярно случался отказ аппаратуры бомбометания. Причем происходило это только в том случае, если на цель заходил летчик-испытатель Ильюшин. Причина оказалась в том, что только он заходил на цель с точностью, превышавшей машинную точность. Получался «машинный ноль», после чего шел сбой из-за попытки деления на ноль.
Недотестировали
Этот пример хоть и не относится напрямую к разработке ПО, но демонстирует важность тестирования. Возникла эта проблема на межконтинентальной баллистической ракете шахтного базирования 15А30, причем уже после постановки ее на боевое дежурство. При пуске ракета выходила из шахты и взрывалась на высоте нескольких метров над землей. Причина оказалась в следующем. Рубашка сопла охлаждается окислителем, после чего он поступает в камеру сгорания. В спешке принятия нового комплекса на вооружение к очередной годовщине, в систему пуска двигателя внесли небольшие улучшения, которые не протестировали должным образом. В результате пироклапан срабатывал с большим запаздыванием. Окислитель не поступал в трубки охлаждения, а жаропрочности сопла хватало только на то, чтобы ракета вышла из шахты.
Правильно выбирайте типы данных
Причиной взрыва 4 июня 1996 года европейской ракеты-носителя Ариан-5 была программная ошибка. В системе управления ракеты использовалось модифицированное программное обеспечение ранее успешно работавшее на Ариан-4, но Ариан-5 ускорялась быстрее предыдущей модификации. В результате, когда на 40-й секунде полета одна из вспомогательных подпрограмм попыталась преобразовать длинное целое значение в короткое без проверки величины значения, то вышло за границы типа, произошло отключение системы управления ракеты, и она была взорвана по команде на самоликвидацию. Вместе с ракетой-носителем был потерян коммуникационный спутник. Ущерб от этого программного сбоя был оценен в полмиллиарда долларов.
И снова деление на ноль
История о неприятностях ракетного крейсера ВМС США «Иорктаун». Это экспериментальный, так называемый «умный корабль» (smart ship), важнейшие системы жизнеобеспечения которого управляются компьютерами без участия человека. И что немаловажно – под руководством операционной системы Windows NT 4.0. Так вот, однажды вся эта махина, находясь в открытом море, почти на три часа встала в полный ступор из-за наглухо зависшего программного обеспечения. Произошло это из-за совершенно пустяковой оплошности одного из операторов, занимавшегося калибровкой клапанов топливной системы и записавшего в одну из ячеек расчетной таблицы нулевое значение. Ну а далее пошла операция деления на пресловутый ноль. С подобной операцией справляется даже самый дешевый калькулятор, однако здесь в терминале оператора система дала ошибку переполнения памяти. Ошибка быстро перекинулась на другие компьютеры локальной сети корабля, началась цепная реакция, и по известному принципу домино рухнула вся бортовая система, которую удалось восстановить и перезагрузить лишь через 2 часа 45 минут, в течение которых огромный боевой корабль оставался по сути дела беспомощен и неуправляем.
@imaxai Подписаться
2 минуты
18 октября 2024