Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет chistyakov ([info]chistyakov)
@ 2007-02-26 20:42:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
За что я ненавижу "программистов"
Где-то в конце 70-х годов - испытания амерской ЗСУ "Сержант Йорк". Для поражения вертолетов. ЗСУ была оснащена системой распознавания образов.
Во время испытаний около неё безуспешно кружил вертолет-мишень, которую она так и не смогла распознать. Зато распознала как вертолет вентилятор в туалете, расположенном метрах в 800-х от ЗСУ. И успешно его поразила.

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

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

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

Этот пример тоже очень характерен, хотя, строго говоря, он и не относится напрямую к разработке ПО, но демонстирует важность тестирования. Возникла эта проблема, скорее всего, на МБР 15А30, причем уже после постановки ее на боевое дежурство. При пуске, ракета выходила из шахты и взрывалась на высоте нескольких метров над землей. Причина оказалась тоже не самой сложной. Рубашка сопла охлаждается окислителем, после чего он поступает в камеру сгорания. В спешке принятия нового комплекса на вооружение к очередной годовщине, в систему пуска двигателя внесли небольшие улучшения, которые не протестировали должным образом. В результате пироклапан срабатывал с большим запаздыванием. Окислитель не поступал в трубки охлаждения, а жаропрочности сопла хватало только на то, чтобы ракета вышла из шахты.

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

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


via [info]u-96@lj путём "Ctrl-C/Ctrl-V"

Да, бывает. Я вот вспоминаю, как ракета с "распознаванием образов" сбила летящий самолёт Ан-26 с людьми вместо стоящего на земле вертолёта-мишени (Ахтубинск, 24 июня 1985 года). На следущий день я летел в Ахтубинск на таком же самолёте, надеясь, что испытания по данному типу (Ан-26) завершены. Обстановка в салоне была шутливо-нервозной:).

{+}


(Читать комментарии) - (Добавить комментарий)


[info]goshen@lj
2007-02-27 06:17 (ссылка)
Вот еще одна до кучи (http://www.dailytech.com/Lockheeds+F22+Raptor+Gets+Zapped+by+International+Date+Line/article6225.htm).

И чего? Ошибки в таких системах были, есть и будут -- слишком много дискретных состояний, все не проверишь и не предусмотришь. Большинство перечисленных ошибок, что характерно, на уровне спецификаций, а не кода. И неизменная дискуссия на тему "Чем Плох С" здесь совершенно не в кассу. Если у тебя один компонент считает в дюймах, а другой в сантиметрах, то что паскаль им, что ада -- это мертвому припарки.

(Ответить) (Ветвь дискуссии)


[info]potan@lj
2007-02-27 06:31 (ссылка)
При желании в C++ можно ввести coding style и требовать использование физических типов, которые элементарно делаются с помощью шаблонов. Дюймы с метрами не перепутаются.

Но это, конечно, от всех ошибой не спасет.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]metaclass@lj
2007-02-27 06:33 (ссылка)
Кстати да, заставить программу соблюдать физические размерности величин при расчетах это идея хорошая.

(Ответить) (Уровень выше)


(Читать комментарии) -