Истории о сбоях программного обеспечения военной техники
Истребители F-22 не смогли пересечь 180 меридиан
При попытке перегнать истребители F-22 «своим ходом» с Гавайских островов на базу ВВС Kadena на японском острове Окинава программный сбой в навигационном обеспечении вынудил пилотов развернуться и возвратиться туда, откуда вылетели. Теперь стала известна истинная природа этой «навигационной аномалии».
Как выяснилось, истребители не сумели преодолеть так называемую линию перемены дат — условную линию, по разные стороны которой местное время одно и то же (с точностью до часового пояса), но календарные даты различаются на одни сутки. Линия перемены дат проходит по меридиану 180 градусов с отдельными отклонениями.
Перемена дат осуществляется (и вообще имеет смысл) лишь при использовании местного времени. При пересечении линии перемены дат необходимо либо прибавлять, либо вычитать одни сутки – в зависимости от того, в каком направлении осуществляется движение. По всей видимости, этот парадокс Земного шара, осознанный еще участниками экспедиции Магеллана, был позабыт разработчиками F-22 Raptor.
Последствия такой забывчивости оказались весьма ощутимыми. У истребителей в полете вышли из строя топливная и навигационная системы, а также частично связь.
Лишь одному пилоту удалось связаться с экспертами разработчика (компании Lockheed Martin). Несколько пилотов попытались перезагрузить ПО истребителя в полете.
«Победить» ошибку не удалось, однако сами истребители и их пилоты уцелели, что в подобной ситуации следует считать несомненной удачей. Возвращение на Гавайские острова потребовало дополнительной дозаправки в воздухе.
Впоследствии «навигационную аномалию» удалось исправить, и F-22 всё-таки прибыли на авиабазу назначения.
Фирма Motorola испытывала новый процессор для автопилота на истребителе в Израиле. Всё было отлажено. Пилоты на испытаниях отправились «огибать рельеф» с севера до юга Израиля. Истребитель прекрасно пролетел на автопилоте над равнинной частью, над горной частью, над долиной реки Иордан и приближался к Мёртвому морю. Однако при подлете к нему неожиданно происходит общий сброс процессора, автопилот выключается на полном ходу, пилоты переходят на ручное управление и сажают истребитель.
Процессор отправили на доработку и тестирование. Все тесты прошли снова без сбоев. Снова начали реальную проверку. Истребитель пролетел над всеми территориями, но при подлете к Мёртвому морю ситуация повторилась: общий сброс, выключение автопилота, ручная посадка.
Длительные тесты не могли выявить никаких изъянов. После продолжительных попыток было найдено, что программы автопилота при вычислении параметров управления по глубоко научным секретным формулам производили деление на значение текущей высоты истребителя над уровнем океана. При подлете к Мёртвому морю высота над уровнем океана становилась нулевой (Мёртвое море расположено ниже уровня океана), и процессор при делении на ноль давал общий сброс. До этого случая никому не приходило в голову, что самолеты могут летать ниже уровня океана…
Системы распознавания, как это было в 70-х
Где-то в конце 70-х годов происходили испытания американской зенитной самоходной установки (ЗСУ) «Сержант Йорк», предназначенной для поражения вертолетов. ЗСУ была оснащена системой распознавания образов. Во время испытаний около нее безуспешно кружил вертолет-мишень, которую она так и не смогла распознать. Зато приняла за вертолет вентилятор в туалете, расположенном метрах в 800-х от ЗСУ. И успешно его поразила.
Испытания американского истребителя F-16 проводились, понятное дело, в северном полушарии. На заключительном этапе самолет решили проверить где-то в Латинской Америке – с другой стороны экватора. При переводе самолета в режим автопилота он автоматически развернулся «вверх ногами».
Драматическая переинициализация
В Афганистане двое наводчиков-наблюдателей (канадцы) подсвечивали цель для наведения на нее бомбы. После сброса бомбы в GPS-приемнике закончились батарейки. Их быстро заменили. В результате ракета прилетела не туда. Причина была в том, что после подачи питания в прибор, переменные, отвечающие за координаты цели, автоматически инициализировались (присвоили значения) координатами текущего местоположения. Наводчики погибли от близкого разрыва.
На испытаниях Су-24 регулярно случался отказ аппаратуры бомбометания. Причем происходило это только в том случае, если на цель заходил летчик-испытатель Ильюшин. Причина оказалась в том, что только он заходил на цель с точностью, превышавшей машинную точность. Получался «машинный ноль», после чего шел сбой из-за попытки деления на ноль.
Этот пример хоть и не относится напрямую к разработке ПО, но демонстирует важность тестирования. Возникла эта проблема на межконтинентальной баллистической ракете шахтного базирования 15А30, причем уже после постановки ее на боевое дежурство. При пуске ракета выходила из шахты и взрывалась на высоте нескольких метров над землей. Причина оказалась в следующем. Рубашка сопла охлаждается окислителем, после чего он поступает в камеру сгорания. В спешке принятия нового комплекса на вооружение к очередной годовщине, в систему пуска двигателя внесли небольшие улучшения, которые не протестировали должным образом. В результате пироклапан срабатывал с большим запаздыванием. Окислитель не поступал в трубки охлаждения, а жаропрочности сопла хватало только на то, чтобы ракета вышла из шахты.
Правильно выбирайте типы данных
Причиной взрыва 4 июня 1996 года европейской ракеты-носителя Ариан-5 была программная ошибка. В системе управления ракеты использовалось модифицированное программное обеспечение ранее успешно работавшее на Ариан-4, но Ариан-5 ускорялась быстрее предыдущей модификации. В результате, когда на 40-й секунде полета одна из вспомогательных подпрограмм попыталась преобразовать длинное целое значение в короткое без проверки величины значения, то вышло за границы типа, произошло отключение системы управления ракеты, и она была взорвана по команде на самоликвидацию. Вместе с ракетой-носителем был потерян коммуникационный спутник. Ущерб от этого программного сбоя был оценен в полмиллиарда долларов.
История о неприятностях ракетного крейсера ВМС США «Иорктаун». Это экспериментальный, так называемый «умный корабль» (smart ship), важнейшие системы жизнеобеспечения которого управляются компьютерами без участия человека. И что немаловажно – под руководством операционной системы Windows NT 4.0. Так вот, однажды вся эта махина, находясь в открытом море, почти на три часа встала в полный ступор из-за наглухо зависшего программного обеспечения. Произошло это из-за совершенно пустяковой оплошности одного из операторов, занимавшегося калибровкой клапанов топливной системы и записавшего в одну из ячеек расчетной таблицы нулевое значение. Ну а далее пошла операция деления на пресловутый ноль. С подобной операцией справляется даже самый дешевый калькулятор, однако здесь в терминале оператора система дала ошибку переполнения памяти. Ошибка быстро перекинулась на другие компьютеры локальной сети корабля, началась цепная реакция, и по известному принципу домино рухнула вся бортовая система, которую удалось восстановить и перезагрузить лишь через 2 часа 45 минут, в течение которых огромный боевой корабль оставался по сути дела беспомощен и неуправляем.