Ошибка в программном обеспечении системы противоракетного перехвата не позволила уничтожить учебную ракету, запущенную с военной базы США в Кодьяке (Kodiak), штат Аляска. По утверждению военных, программный код быстро исправили и ход испытаний продолжится в штатном режиме.
Ошибка в программном обеспечении системы противоракетного перехвата не позволила уничтожить учебную ракету, запущенную с военной базы США в Кодьяке (Kodiak), штат Аляска. По утверждению военных, программный код быстро исправили и ход испытаний продолжится в штатном режиме.
В декабре с Кодьяка была запущена ракета-мишень, однако перехватчик, находящийся на атолле Кваджалейн (Kwajalein) в центральной части Атлантического океана, не активировался. Причина — «небольшая ошибка» в ПО компьютера с сенсорами на боеголовке, позволяющего точнее навести на цель.
Директор Агентства противоракетной обороны, генерал-лейтенант ВВС США Генри Оберинг (Henry A. Obering) сказал, что ракета должна была запуститься автоматически, но отказала система коммуникации между перехватчиком и главным компьютером, управляющим полетами. Обнаружив недостаток информации, система автоматически отключилась.
Первый запуск Starship — разбор полёта Илона Маска.
Во избежание повторения, в Пентагоне решили увеличить отказоустойчивость системы при работе с недостаточной информацией. Переданные до отключения данные, как оказалось, были достаточно точны. Повторные испытания пройдут в середине февраля, а дополнительные — в апреле, июле и сентябре, как и было запланировано. Восемь ракет-перехватчиков в поздемных шахтах Аляски и Калифорнии ожидают доработки для использования в боевых условиях. Администрация президента Джорджа Буша планировала активировать систему к концу 2004 года, ссылаясь на угрозу запуска баллистических ракет Северной Кореей, способных долететь до США, сообщило агентство Associated Press . CNews.ru
Подозреваете, что ваша Веб камера СЛЕДИТ за вами? Присоединитесь к нашему ТГ каналу и сделайте свою технику неприступной.
Источник: www.securitylab.ru
Из-за каких ошибок программистов теряли космические устройства?
Если ваш компьютер по какой-то причине вдруг «завис» во время работы, то это в любом случае нельзя назвать катастрофой. А вот если из-за ошибки в программном обеспечении безвозвратно теряется дорогостоящее космическое оборудование — тут уже настоящая беда. А во всем оказывается «виноват» лишний или недостающий символ в программном коде.
aslysun , Shutterstock.com
Почему-то считается, что больше всего ляпов допустили космические программисты СССР и в дальнейшем России. Видимо, потеря двух аппаратов «Фобос» поспособствовала этому. Но на самом деле финансовое лидерство с ляпами — у программистов США и Европейского космического союза. Вот доказательства.
28 июля 1962 года Соединенные Штаты Америки запустили к Венере аппарат «Mariner-1». Но он почти сразу же после отделения от ракеты-носителя потерял связь с наземными службами управления. Автоматика из-за этого ЧП включила внутреннюю систему навигации. А она имела совсем «маленький» баг — в программе был пропущен один-единственный символ. В результате этого «Mariner-1» отправился совсем в другую сторону.
Ракета упала. Байканур
Очень дорого для США обошлась потеря зонда «Mars Global Surveyor». Проработав несколько лет на красной планете, он вполне мог действовать и дальше. Но фатальная ошибка программистов его погубила. Зонд получил на бортовой компьютер задание переориентировать солнечные батареи. Операция особо сложной не являлась, она была штатной для аппарата.
И все бы прошло гладко, но пятью месяцами ранее проводилось обновление программы управления антенной. Часть нового кода ошибочно загрузили в другую область, которая взаимодействовала с программой ориентации солнечных панелей. В результате этой ошибки одна из панелей была направлена неправильно и сильно перегрелась, вышла из строя, перекрыв собой «обзор» аппарату. «Mars Global Surveyor» полностью потерял ориентацию в пространстве, антенна связи стала бесполезной для передачи каких-либо сигналов на Землю. Потери NASA превысили 250 миллионов долларов.
Еще более катастрофической по финансам стала потеря 4 июня 1996 года ракеты-носителя «Ariane-5». Она взорвалась через 40 секунд в момент своего первого старта, имея на борту четыре спутника. Но что же случилось? Длительное и тщательное расследование катастрофы выявило невероятную, на первый взгляд, ошибку программистов.
Суть в том, что система управления была «скопирована» с предыдущей ракеты-носителя «Ariane-4». Попробую сложные математические выводы комиссии «перевести» в понятный язык. Если, конечно, получится.
Система ориентации ракеты — гироскопы и акселелометры. Но из-за ошибки в программном коде они получали абсолютно неверные команды. Хотя внешне все выглядело нормально. То есть эти команды ничем не грозили бы ракете «Ariane-4» при ее скорости взлета, но они «запутали» систему ориентации «Ariane-5», имевшей намного более высокую скорость.
Сработала система защиты от неуправляемого полета и ракета взорвалась. Однако какая же ошибка была допущена? Ниже пойдет текст для программистов, понимающих суть. Обычные читатели, далекие от написания программ, могут его пропустить. Привожу текст из заключения комиссии, расследовавшей чрезвычайное происшествие:
«Данные с плавающей запятой для инерциальной системы отсчёта переводились из 64 бит в 16. В результате одно из чисел оказалось больше 32767 (максимально возможное шестнадцатибитное целое число со знаком). Система ориентации ракеты отключилась, получив недопустимое число, в действие пришел механизм подрыва ракеты… Программисты посчитали, что цифра переменной никогда не превысит предельно допустимое значение. Но это было справедливо для «Ariane-4» и в корне ошибочно для «Ariane-5».
А теперь скажу своими словами попроще. Система автоподрыва была задействована после остановки двух процессоров. Началом для ее включения стало переполнение буфера, так как система навигации дала недопустимо большое значение параметра скорости. Программисты на рабочем компьютере ракеты убрали защиту от ошибки переполнения буфера. Они были уверены, что такая ошибка невозможна в принципе.
На разработку «Ariane-5» Евросоюз потратил семь миллиардов долларов. Стоимость же самой ракеты превышала 500 миллионов долларов, не считая стоимости имевшихся на ней спутников.
Человеческий фактор — самая главная причина различных космических катастроф. И обидно бывает, когда многолетний труд губится из-за маленького пропущенного или лишнего символа в программе, а то и вовсе из-за глупости программистов.
Источник: www.shkolazhizni.ru
Космическая ошибка: $370 000 000 за Integer overflow
Пуск.
37 секунд полета… бабах!
10 лет и 7 миллиардов долларов, потраченных на разработку.
Четыре полуторатонных спутника научной программы Cluster (изучение взаимодействия солнечного излучения с магнитным полем Земли) и ракета носитель Ariane 5 превратились в «конфети» 4 июня 1996 года.
А вину свалили на программистов.
Предыдущая модель — ракета Ariane 4 — успешно запускалась более 100 раз. Что пошло не так?
Чтобы штурмовать небеса, нужно хорошо знать язык Ада.
Досье
Ariane 5 («Ариан-5») — европейская одноразовая ракета-носитель, входит в семейство Ariane (первый запуск состоялся в 1979 г.). Используется для вывода на околоземную орбиту средних или тяжелых космических аппаратов, может одновременно запускать два-три спутника и попутно до восьми микроспутников.
История проекта
Создана в 1984-1995 гг. Европейским космическим агентством (ЕКА; ESA), основной разработчик — Национальный центр космических исследований Франции (CNES). Участниками программы являются 10 европейских стран, стоимость проекта — 7 млрд долларов США (46,2% — вклад Франции).
В создании ракеты принимали участие около тысячи промышленных фирм. Основной подрядчик — европейская компания Airbus Defence and Space («Эрбас дифенз энд спейс»; подразделение Airbus Group, «Эрбас груп», Париж). Маркетингом Ariane 5 на рынке космических услуг занимается французская компания Arianespace («Арианспейс»; Эври), с которой ЕКА подписало 25 ноября 1997 г. соответствующее соглашение.
Характеристики
Ariane 5 представляет собой двухступенчатую ракету-носитель тяжелого класса. Длина — 52-53 м, максимальный диаметр — 5,4 м, стартовая масса — 775-780 т (в зависимости от конфигурации).
Первая ступень оснащена жидкостным ракетным двигателем Vulcain 2 («Вулкан-2»; в первых трех модификациях ракеты использовался Vulcain), вторая — HM7B (для версии Ariane 5 ECA) или Aestus («Аэстус»; для Ariane 5 ES). Vulcain 2 и HM7B работают на смеси водорода и кислорода, производятся французской компанией Snecma («Снекма»; входит в группу Safran, «Сафран», Париж).
В Aestus используется долгохранимое топливо — тетраоксид азота и монометилгидразин. Двигатель разработан немецкой компанией Daimler Chrysler Aerospace AG (DASA, «ДАСА», Мюнхен).
Кроме того, к первой ступени крепятся два твердотопливных ускорителя (изготовитель — Europropulsion, «Европропелжн»; Сюрен, Франция; совместное предприятие группы Safran и итальянской фирмы Avio, «Авио»), которые обеспечивают более 90% тяги в начале пуска. В варианте Ariane 5 ES вторая ступень может отсутствовать при выводе полезной нагрузки на низкую опорную орбиту.
Бортовые компьютеры
www.ruag.com/space/products/digital-electronics-for-satellites-launchers/on-board-computers
Расследование
На следующий день после катастрофы Генеральный директор Европейского Космического Агенства (ESA) и Председатель Правления Французского Национального Центра по изучению Космоса (CNES) издали распоряжение об образовании независимой Комиссии по Расследованию обстоятельств и причин этого чрезвычайного происшествия, в которую вошли известные специалисты и ученые изо всех заинтересованных европейских стран.
13 июня 1996 г. Комиссия приступила к работе, а уже 19 июля был обнародован ее исчерпывающий доклад (PDF), который сразу же стал доступен в Сети.
У комиссии были данные телеметрии, траекторные данные, а также запись оптических наблюдений за ходом полета.
Взрыв произошел на высоте приблизительно 4 км, и осколки были рассеяны на площади около 12 кв. км. в саванне и болотах. Были заслушаны показания многочисленных специалистов и изучены производственная и эксплуатационная документации.
Технические подробности аварии
Положение и ориентация ракеты-носителя в пространстве измерялись Навигационной Системой (Inertial Reference Systems — IRS), составной частью которой является встроенный компьютер, вычисляющий углы и скорости на основе информации от бортовой Инерциальной Платформы, оборудованной лазерными гироскопами и акселерометрами. Данные от IRS передавались по специальной шине на Бортовой Компьютер (On-Board Computer — OBC), который обеспечивал необходимую для реализации программы полета информацию и непосредственно — через гидравлические и сервоприводы — управлял твердотопливными ускорителями и криогенным двигателем типа Вулкан (Vulkain).
Для обеспечения надежности Системы Управления Полетом использовалось дублирование оборудования. Поэтому две системы IRS (одна — активная, другая — ее горячий резерв) с идентичным аппаратным и программным обеспечением функционировали параллельно. Как только бортовой компьютер OBC обнаруживал, что «активная» IRS вышла из штатного режима, он сразу же переключается на другую. Бортовых компьютеров тоже было два.
Значимые фазы развития процесса
За 7 минут до запланированного старта было зафиксировано нарушение «критерия видимости». Поэтому старт был перенесен на час.
H0 = 9 час. 33 мин. 59 сек. местного времени «окно запуска» было вновь «поймано» и был, наконец, осуществлен сам запуск, который и происходил штатно вплоть до момента H0+37 секунд.
В последующие секунды произошло резкое отклонение ракеты от заданной траектории, что и закончилось взрывом.
В момент H0+39 секунд из-за высокой аэродинамической нагрузки вследствие превышения «углом атаки» критической величины на 20 градусов произошло отделение стартовых ускорителей ракеты от основной ее ступени, что и послужило основанием для включения Системы Автоподрыва ракеты.
Изменение угла атаки произошло по причине нештатного вращения сопел твердотопливных ускорителей, такое отклонение сопел ускорителей от правильной ориентации вызвала в момент H0 + 37 секунд команда, выданная Бортовым Компьютером на основе информации от активной Навигационной Системы (IRS 2).
Часть этой информации была в принципе некорректной: то, что интерпретировалось как полетные данные, на самом деле являлось диагностической информацией встроенного компьютера системы IRS 2.
Встроенный компьютер IRS 2 передал некорректные данные, потому что диагностировал нештатную ситуацию, «поймав» исключение (exception), выброшенное одним из модулей программного обеспечения.
При этом Бортовой Компьютер не мог переключиться на резервную систему IRS 1, так как она уже прекратила функционировать в течение предшествующего цикла (занявшего 72 миллисекунд) — по той же причине, что и IRS 2.
Исключение, «выброшенное» одной из программ IRS, явилось следствием выполнения преобразования данных из 64-разрядного формата с плавающей точкой в 16-разрядное целое со знаком, что привело к «Operand Error».
Ошибка произошла в компоненте ПО, предназначенном исключительно для выполнения «регулировки» Инерциальной Платформы. Причем этот программный модуль выдает значимые результаты только до момента H0+7 секунд отрыва ракеты со стартовой площадки. После того, как ракета взлетела, никакого влияния на полет функционирование данного модуля оказать не могло.
«Функция регулировки» действительно должна была (в соответствии с установленными для нее требованиями) действовать еще 50 секунд после инициации «полетного режима» на шине Навигационной Системы (момент H0-3 секунд), что она и делала.
Ошибка «Operand Error» произошла из-за неожиданно большой величины BH (Horizontal Bias — горизонтальный наклон), посчитанной внутренней функцией на основании величины «горизонтальной скорости», измеренной находящимися на Платформе датчиками.
Величина BH служила индикатором точности позиционирования Платформы. величина BH оказалась много больше, чем ожидалось потому, что траектория полета Ariane 5 на ранней стадии существенно отличалась от траектории полета Ariane 4 (где этот программный модуль использовался ранее), что и привело к значительно более высокой «горизонтальной скорости».
Финальным же действием, имевшим фатальные последствия, стало прекращение работы процессора. Соответственно, вся Навигационная Система перестала функционировать. Возобновить же ее действия оказалось технически невозможно.
Эту цепь событий удалось полностью воспроизвести с помощью компьютерного моделирования, что — вкупе с материалами других исследований и экспериментов — позволило заключить, что причины и обстоятельства катастрофы полностью выявлены.
Причины и истоки аварии
Первоначальное требование на продолжение выполнения операции регулировки после взлета ракеты было заложено более чем за 10 лет до рокового события, когда проектировались еще ранние модели серии Ariane.
При некотором маловероятном развитии событий взлет мог быть отменен буквально за несколько секунд до старта, например в промежутке H0-9 секунд, когда на IRS запускался «полетный режим», и H0-5 секунд, когда выдавалась команда на выполнение некоторых операций с ракетным оборудованием.
В случае неожиданной отмены взлета необходимо было быстро вернуться в режим «обратного отсчета» (countdown) — и при этом не повторять сначала все установочные операции, в том числе приведение к исходному положения Инерциальной Платформы (операция, требующая 45 мин. — время, за которое можно потерять «окно запуска»).
Было обосновано, что в случае события отмены старта период в 50 секунд после H0-9 будет достаточным для того, чтобы наземное оборудование смогло восстановить полный контроль за Инерциальной Платформой без потери информации — за это время Платформа прекратит начавшееся было перемещение, а соответствующий программный модуль всю информацию о ее состоянии зафиксирует, что поможет оперативно возвратить ее в исходное положение (это в случае, когда ракета продолжает находиться на месте старта). Однажды, в 1989 году, при старте под номером 33 ракеты Ariane 4, эта особенность была с успехом задействована.
Однако, Ariane 5, в отличие от предыдущей модели, имел уже принципиально другую дисциплину выполнения предполетных действий — настолько другую, что работа рокового программного модуля после времени старта вообще не имела смысла. Однако, модуль повторно использовался без каких-либо модификаций.
Язык АДА
Расследование показало, что в данном программном модуле присутствовало целых семь переменных, вовлеченных в операции преобразования типов. Оказалось, что разработчики проводили анализ всех операций, способных потенциально генерировать исключение, на уязвимость.
Это было их вполне сознательным решением добавить надлежащую защиту к четырем переменным, а три — включая BH — оставить незащищенными. Основанием для такого решения была уверенность в том, что для этих трех переменных возникновение ситуации переполнения невозможно в принципе.
Уверенность эта была подкреплена расчетами, показывающими, что ожидаемый диапазон физических полетных параметров, на основании которых определяются величины упомянутых переменных, таков, что к нежелательной ситуации привести не может. И это было верно — но для траектории, рассчитанной для модели Ariane 4.
А ракета нового поколения Ariane 5 стартовала по совсем другой траектории, для которой никаких оценок не выполнялось. Между тем она (вкупе с высоким начальным ускорением) была такова, что «горизонтальная скорость» превзошла расчетную (для Ariane 4) более чем в пять раз.
Защита для всех семи (включая BH) переменных не была обеспечена, потому что для компьютера IRS была продекларирована максимальная величина рабочей нагрузки в 80%. Разработчики должны были искать пути снижения излишних вычислительных издержек и они ослабили защиту там, где теоретически нежелательной ситуации возникнуть не могло. Когда же она возникла, то вступил в действие такой механизм обработки исключительной ситуации, который оказался совершенно неадекватным.
Этот механизм предусматривал следующие три основных действия.
- Информация о возникновении нештатной ситуации должна быть передана по шине на бортовой компьютер OBC.
- Параллельно она — вместе со всем контекстом — записывалась в перепрограммируемую память EEPROM (которую во время расследования удалось восстановить и прочесть ее содержимое).
- Работа процессора IRS должна была аварийно завершиться.
Выводы
Дефект на Ariane 5 не был вызван одной причиной. В ходе всей разработки и процессов тестирования существовало много стадий, на которых данный дефект мог быть выявлен.
- Программный модуль был повторно использован в новой среде, где условия функционирования отличались от требований программного модуля. Эти требования не были пересмотрены.
- Система выявила и распознала ошибку. К несчастью, спецификация механизма обработки ошибок была несоответственной и вызвала окончательное разрушение.
- Ошибочный модуль никогда должным образом не тестировался в новом окружении — ни на уровне оборудования, ни на уровне системной интеграции. Следовательно, ошибочность разработки и реализации не была обнаружена.
Из отчета комиссии:
Главной задачей при разработке Ariane 5 является уклон в сторону уменьшения случайной аварии. Возникшее исключение, объясняется не случайной аварией, но ошибкой конструкции. Исключение было обнаружено, но обработано неверно, поскольку была принята точка зрения, что программу следует рассматривать как правильную, пока не показано обратное. Комиссия придерживается противоположной точки зрения, что программное обеспечение нужно считать ошибочным, пока использование признанных в настоящее время наилучшими практических методов не продемонстрирует его правильность.
Счастливый конец
Несмотря на фэйл, построили еще 4 спутника Cluster II и вывели на орбиту на ракете Союз-У/Фрегат в 2000 году.
Авария при запуске привлекла внимание общественности, политиков и руководителей организаций к высоким рискам, связанным с использованием сложных вычислительных систем, что способствовало увеличению инвестирования в исследования, направленные на повышение надежности систем с особыми требованиями к безопасности. Последующий автоматический анализ кода Ariane (написан на Ada) стал первым случаем применения статического анализа в рамках крупного проекта с использованием методики абстрактной интерпретации.
Источники
- Отчет Ariane 501 — Presentation of Inquiry Board report
- Мэтт Тэллес, Юань Хсих — «Наука отладки»
- Class 25: Software Disasters
- Ariane 5 – Chronicle of a failure
- Мифы о безопасном ПО: уроки знаменитых катастроф
- Static Analysis and Verification of Aerospace Software by Abstract Interpretation
- ARIANE 5 — The Software Reliability Verification Process
- Safety in Software — now more important than ever
- ADA source code
- программирование
- отладка
- тестирование
Источник: habr.com