Еще о том, как софт гробит технику - набор примеров

 

Fakir

BlueSkyDreamer
★★★★☆
(найдено на форуме НК)
Интересные такие примеры - в развитие темы
Статистика: очередной КА убит софтом

Не исключено, что часть примеров - байки, но "сказка ложь, да в ней намёк".



При попытке перегнать истребители F22 «своим ходом» с Гавайских островов на базу ВВС Kadena на японском острове Окинава программный сбой «в навигационном обеспечении» вынудил пилотов развернуться и возвратиться туда, откуда вылетели. Теперь стала известна истинная природа «навигационной аномалии».

Как сообщает DefenseTech со ссылкой на Associated Press, истребители не сумели преодолеть так называемую «линию перемены дат» - условную линию, по разные стороны которой местное время одно и то же (с точностью до часового пояса), но календарные даты различаются на одни сутки. Линия перемены дат проходит по меридиану 180 градусов с отдельными отклонениями.

Перемена дат осуществляется (и вообще имеет смысл) лишь при использовании местного времени. При пересечении линии перемены дат необходимо либо прибавлять, либо вычитать одни сутки – в зависимости от того, в каком направлении осуществляется движение. По всей видимости, этот парадокс Земного шара, осознанный еще участниками экспедиции Магеллана, был позабыт разработчиками F-22 Raptor.

Последствия такой забывчивости оказались весьма ощутимыми. У истребителей в полете, отмечает Defense Tech, вышли из строя топливная и навигационная системы, а также частично связь.

Лишь одному пилоту удалось связаться с экспертами разработчика (компании Lockheed Martin). Несколько пилотов попытались перезагрузить ПО истребителя в полете.

Победить ошибку не удалось, однако сами истребители и их пилоты уцелели, что в подобной ситуации следует считать несомненной удачей. Возвращение на Гавайские острова потребовало дополнительной дозаправки в воздухе.

Впоследствии «навигационную аномалию» удалось исправить, и F-22 все-таки прибыли на авиабазу назначения.

И ещё коллекция таких глюков:
Фирма Motorola испытывала новый процессор для автопилота на истребителе в Израиле. Все было отлажено. Пилоты на испытаниях отправились «огибать рельеф» с севера до юга Израиля. Истребитель прекрасно пролетел на автопилоте над равнинной частью, над горной частью, над долиной реки Иордан, и приближался к Мёртвому морю. Не долетев до него, неожиданно происходит общий сброс процессора, автопилот выключается на полном ходу, пилоты переходят на ручное управление, и сажают истребитель.

Процессор отправили на доработку и тестирование. Все тесты прошли снова без сбоев. Снова начали реальную проверку. Истребитель пролетел над всеми территориями, но при подлете к Мёртвому морю: общий сброс, выключение автопилота, ручная посадка.

Длительные тесты не могли выявить никаких изъянов. После продолжительных попыток было найдено, что программы автопилота при вычислении параметров управления по глубоко научным секретным формулам производили деление на значение текущей высоты истребителя над уровнем океана. При подлете к Мёртвому морю высота становилась нулевой, и процессор при делении на ноль давал общий сброс. До этого случая никому не приходило в голову, что самолеты могут летать ниже уровня океана...

Где-то в конце 70-х годов - испытания американской ЗСУ "Сержант Йорк". Для поражения вертолетов ЗСУ была оснащена системой распознавания образов.

Во время испытаний около неё безуспешно кружил вертолет-мишень, которую она так и не смогла распознать. Зато распознала как вертолет вентилятор в туалете, расположенном метрах в 800-х от ЗСУ.

И успешно его поразила.

Испытания американского истребителя F-16 проводились, понятное дело, в северном полушарии. На заключительном этапе самолет решили проверить где-то в Латинской Америке, но уже с другой стороны экватора. При переводе самолета в режим автопилота он автоматически развернулся "вверх ногами".

В Афганистане двое наводчиков-наблюдателей (канадцы) подсвечивали цель для наведения на нее бомбы. После сброса бомбы в GPS приемнике закончились батарейки. Расчет их быстро заменил. В результате ракета прилетела не туда. Причина была в том, что после подачи питания в прибор, переменные, отвечающие за координаты цели, автоматически инициализировались координатами текущего местоположения. Наводчики погибли от близкого разрыва.

На испытаниях Су-24 регулярно случался отказ аппаратуры бомбометания. Причем происходило это только в том случае, если на цель заходил летчик-испытатель Ильюшин. Причина оказалось тоже не сложной. Только он заходил на цель с точностью, превышавшей машинную точность. Получался "машинный нуль", после чего шел сбой из-за попытки деления на ноль.

Причиной взрыва 4 июня 1996 г. ракеты Ариан-5 была программная ошибка. В системе управления ракеты использовалось модифицированное программное обеспечение ранее успешно работавшее на Ариан-4, но Ариан-5 ускорялась быстрее предыдущей модификации, в результате когда на 40 секунде полета одна из вспомогательных подпрограмм попыталась преобразовать длинное целое значение в короткое без проверки величины значения, и то вышло за границы типа, произошло отключение системы управления ракеты, и она была взорвана по команде на самоликвидацию. Прямой (вместе с ракетой-носителем была потерян коммуникационный спутник) и косвенный ущерб от этого программного сбоя был оценен в полмиллиарда долларов.

История о неприятностях ракетного крейсера ВМС США «Иорктаун». Это экспериментальный, так называемый «умный корабль» (smart ship), важнейшие системы жизнеобеспечения которого управляются компьютерами без участия человека. И что немаловажно – под руководством операционной системы Windows NT 4.0. Так вот, однажды вся эта махина, находясь в открытом море, на три без малого часа встала в полный ступор из-за наглухо зависшего программного обеспечения.

Причем произошло это из-за совершенно пустяковой оплошности одного из операторов, занимавшегося калибровкой клапанов топливной системы и записавшего в какую-то из ячеек расчетной таблицы нулевое значение. Ну а далее пошла операция деления на этот самый нуль. С подобной ерундой справляется даже самый дешевый калькулятор, однако здесь в терминале оператора система дала ошибку переполнения памяти. Причем ошибка быстро перекинулась на другие компьютеры локальной сети корабля, началась цепная реакция, и по известному принципу домино рухнула вся бортовая система, которую удалось восстановить и перезагрузить лишь через 2 часа 45 минут, в течение которых здоровенный боевой корабль оставался по сути дела беспомощен и неуправляем.
 
+
-
edit
 

carlos

опытный
★☆
"Фобос-1" и "Марс Климат Орбитер" тоже в эту же категорию отнесем или как?
А первый запуск "Энергии"?
 
+
-
edit
 

Taras66

опытный

carlos> "Фобос-1" и "Марс Климат Орбитер" тоже в эту же категорию отнесем или как?

"Марс Климат Орбитер" вроде бы как убился из-за того, что баллистики при проведении расчетов перепутали футы с килограммами, а метры с фунтами :). Что касается самого аппарата, то он четко отработал неправильно рассчитаный манёвр, врезультате чего вместо торможения о верхние слои атмосферы врубился в марсианскую твердь.
 
+
-
edit
 

carlos

опытный
★☆
Я в курсе. :) Потому и интересуюсь - считать такие случаи (неправильно введенные исходные данные) "софтовой" ошибкой или нет...
 
+
-
edit
 

Mishka

модератор
★★★

Про раптор — этот текст уже обсосали в авиационном.
 
+
-
edit
 
Сплошное деление на нуль. Выглядит как будто на самом деле всесто истинных причин преподнели простому читателю это, и так, чтобы получилось просто и логично.
Для разнообразия могли упомянуть взятие логарифма или корня квадратного из отрицательного числа,
для более продвинутой публики утечку памяти, непроверку на ноль указателя, cast к несуществующему классу-потомку, зашкалившую рекурсию со "stack overflow", невыход из цикла какого-либо блока в коде, ещё что-нибудь.

В Афганистане двое наводчиков-наблюдателей (канадцы) подсвечивали цель для наведения на нее бомбы. После сброса бомбы в GPS приемнике закончились батарейки. Расчет их быстро заменил. В результате ракета прилетела не туда. Причина была в том, что после подачи питания в прибор, переменные, отвечающие за координаты цели, автоматически инициализировались координатами текущего местоположения. Наводчики погибли от близкого разрыва.
 

Какой-то бред. Какое наведение имела бомба, если переприцелилась в полёте по информации от прибора этих двух пехотинцев.
А это наверное прибор, подобный тому, о котором написано здесь.
http://83.222.6.39/p/postojalec/firstcompany.shtml
Бинокль Nightstar

Новый прибор/бинокль ночного видения "Nightstar" производится компанией DRS Technologies. Весит 1,6 кг, 3-х кратного увеличения, оборудован беспленочным, безгейтным усилителем образа "Gen-3" с лазерным дальномером, лазерным целеуказателем, индукционным компасом, электронным угломером и универсальным разъемом RS 232 для коммутации с GPS-приемником и радиостанцией "SINGARS".
Лазерный дальномер осуществляет измерения в диапазоне от 20 до 2000 метров. Лазерный целеуказатель рассчитан на дистанции до 2000 метров. Разъем служит для передачи данных на GPS-приёмник и радиостанцию "SINGARS". В базу данных бинокля загружается информация о выбранных целях числом до 10-ти. Питается от 6 батареек "AA", которые обеспечивают непрерывную работу бинокля в течение 36 часов, включая 200 измерений.
В продолжение, по поводу перспективного появления в начале 2001 года "оптики" "GEN-4 Omni 5", которая будет оснащена насадкой для повышения усиления до 7X. Когда оператор нового бинокля установит дальность до цели, с помощью GPS-приемника будут получены её точные координаты, биноколь загрузит информацию в базу и через RS232 передаст информацию пользователям. Это означает, что данные по цели окажутся в распоряжении соответствующих командных элементов управления в кратчайший срок для обеспечения нанесения немедленного и точного удара по цели.
 

Если бомба была с ЛГСН и наводилась по пятну от лазерного дальномера-целеуказателя от этого "бинокля", такой исход мог быть только если после смены батареек расчет включил ЛД и долгое время держал его навправленным на точку рядом с собой прежде, чем навести на цель. Тогда абс. координаты цели, выдваваемые прибором, тут совершенно непричем.
Если эта бомба - JDAM, то зачем ей наводчики на земле. Или она может менять координаты цели в полёте по данным, получаемым через радиоканал?
Воздух выдержит только тех, Только тех, кто верит в себя, Ветер дует туда, куда Прикажет тот, кто верит в себя.  
+
-
edit
 
Я в курсе. Потому и интересуюсь - считать такие случаи (неправильно введенные исходные данные) "софтовой" ошибкой или нет...
 

В вышеописанном случае не являются. Если данные (даже неверные) обрабатываются корректно, к программерам претензий быть не должно. Но сли какое либо сочетание исходных данных приводит к неккоректной обработке или краху софта - то да, ошибка.
Воздух выдержит только тех, Только тех, кто верит в себя, Ветер дует туда, куда Прикажет тот, кто верит в себя.  
+
-
edit
 

Mishka

модератор
★★★

sabakka> непроверку на ноль указателя,

Не на ноль, а на NULL — это просто удобное совпадение. У нас, к примеру NULL был 0xFFFFFFFF, 0 — нормальный адрес. Надо отучаться думать в терминах хакеров. :P


sabakka> cast к несуществующему классу-потомку,

Это совершенно нормальная ситуация. Расширена она тем, что можно и существующему, но не тому. Нормально обрабатывается при помощи try.
 
LT Bredonosec #02.05.2007 17:30  @Taras66#01.05.2007 22:56
+
-
edit
 
carlos>> "Фобос-1" и "Марс Климат Орбитер" тоже в эту же категорию отнесем или как?
Taras66> "Марс Климат Орбитер" вроде бы как убился из-за того, что баллистики при проведении расчетов перепутали футы с килограммами, а метры с фунтами :). Что касается самого аппарата, то он четко отработал неправильно рассчитаный манёвр, врезультате чего вместо торможения о верхние слои атмосферы врубился в марсианскую твердь.
Ну ежели ошибка ввода, или не замеченная вовремя ошибка навсистемы, то можно еще череду авиаинцидентов (и вроде бы парочку катастроф) привести - с трансокеанскими рейсами. //детали за давностию лет забыл//
Voeneuch, учи физику, манажор ))  
+
-
edit
 
Не на ноль, а на NULL — это просто удобное совпадение. У нас, к примеру NULL был 0xFFFFFFFF, 0 — нормальный адрес.
 

У нас это где?
MSVC++ 7 afx.h NULL is 0x00000000.

Надо отучаться думать в терминах хакеров.
 

Программеры мы, не хакеры.

sabakka> cast к несуществующему классу-потомку,
Это совершенно нормальная ситуация. Расширена она тем, что можно и существующему, но не тому. Нормально обрабатывается при помощи try.
 

В смысле нормальная? Обработать-то можно и избежать краха тоже. Допускать таких ситуаций в коде нельзя.
Воздух выдержит только тех, Только тех, кто верит в себя, Ветер дует туда, куда Прикажет тот, кто верит в себя.  
+
-
edit
 

Mishka

модератор
★★★

sabakka> У нас это где?
sabakka> MSVC++ 7 afx.h NULL is 0x00000000.

У нас — это Алгол 68.

sabakka> Программеры мы, не хакеры.


Тогда не надо закладыватся на конкретное значение именованной константы. Тем более, что в стандарте не определено её значение. На многих платформах удобнее использовать адрес,который не существует — генерится аппаратное прерывание — и все такие ошибки не проходят незамеченными — даже если сгенерён production код — тот, в котором отключена автоматическая проверка на NULL при разыменовании этого значения.

sabakka> В смысле нормальная? Обработать-то можно и избежать краха тоже. Допускать таких ситуаций в коде нельзя.

Что значит нельзя? Зависит от ситуации — возьми джавовский загрузчик классов — если он не нашёл класса, то не ломается, а просто ругается. А действия-то, практически те же по проверке объекта, как и при downcasting-е.
 
+
-
edit
 
Тогда не надо закладыватся на конкретное значение именованной константы. Тем более, что в стандарте не определено её значение.
 

Нда, дурной тон в программировании. Мешает переносимости кода. Стало стыдно, срочно меняю в операциях с указателями все 0 на NULL.
На многих платформах удобнее использовать адрес,который не существует — генерится аппаратное прерывание — и все такие ошибки не проходят незамеченными — даже если сгенерён production код — тот, в котором отключена автоматическая проверка на NULL при разыменовании этого значения.
 

В подавляющем большинстве использование непроверенного на NULL указателя в MSVC++ вызываеь крах - чем не "прерывание" и тоже не проходит незамеченным ни программерами, ни тестерами :).
Воздух выдержит только тех, Только тех, кто верит в себя, Ветер дует туда, куда Прикажет тот, кто верит в себя.  
+
-
edit
 

Mishka

модератор
★★★

sabakka> В подавляющем большинстве использование непроверенного на NULL указателя в MSVC++ вызываеь крах - чем не "прерывание" и тоже не проходит незамеченным ни программерами, ни тестерами :).

Нет, не везде, а только там, где реализована в проце защита по чтению из определённыъх адресов. Эта возможность в архитектуре х86 появилась не сразу. Фактически, там, где есть описание страниц или сегментов с аттрибутами доступа — там можно. Но и то.

Вот, на VS .Net 2003 только что проверил:
code text
  1. #include <stdio.h>
  2. int main( int argc, char* argv[ ] )
  3. {
  4.         int* f = NULL;
  5.  
  6.         int a;
  7.  
  8.         a = *f;
  9.  
  10.         return 0;
  11. }

Откомпилил в Release — никаких прерываний. Значит, сегмент кода защищён от записи — на запись возникает, а чтение — нет.
 

PSS

старожил
★★
Тогда уж вспоминать не Фобос-1, а более забавные случаи.
Скажем Маринер-1 который затонул из-за того что забыли добавить в программу "-". Или Марс-2. Аппарат шел к цели совершенно точно, но так как программисты забыли предусмотреть такой вариант, аппарат таки провел коррекцию и СА разбился
:(
История "Планеты Бурь" http://shubinpavel.ru/  
MD Serg Ivanov #17.05.2007 16:04  @sabakka#02.05.2007 00:36
+
-
edit
 

Serg Ivanov

аксакал
★☆
sabakka> Если эта бомба - JDAM, то зачем ей наводчики на земле. Или она может менять координаты цели в полёте по данным, получаемым через радиоканал?
Должно быть так... Иначе как попасть в подвижную цель?
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru