Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам

Вебинар: Использование статических анализаторов кода при разработке безопасного ПО - 19.12

>
>
>
Космическая ошибка: 370.000.000 $ за In…

Космическая ошибка: 370.000.000 $ за Integer overflow

02 Сен 2016

Пуск. 37 секунд полета... бабах! 10 лет и 7 миллиардов долларов, потраченных на разработку.

0426_Space_error_ru/image1.png

Четыре полуторатонных спутника научной программы 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 г. соответствующее соглашение.

0426_Space_error_ru/image2.png

Характеристики

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 вторая ступень может отсутствовать при выводе полезной нагрузки на низкую опорную орбиту.

0426_Space_error_ru/image3.png

Бортовые компьютеры

www.ruag.com/space/products/digital-electronics-for-satellites-launchers/on-board-computers

Расследование

На следующий день после катастрофы Генеральный директор Европейского Космического Агенства (ESA) и Председатель Правления Французского Национального Центра по изучению Космоса (CNES) издали распоряжение об образовании независимой Комиссии по Расследованию обстоятельств и причин этого чрезвычайного происшествия, в которую вошли известные специалисты и ученые изо всех заинтересованных европейских стран.

13 июня 1996 г. Комиссия приступила к работе, а уже 19 июля был обнародован ее исчерпывающий доклад (PDF), который сразу же стал доступен в Сети.

У комиссии были данные телеметрии, траекторные данные, а также запись оптических наблюдений за ходом полета.

Взрыв произошел на высоте приблизительно 4 км, и осколки были рассеяны на площади около 12 кв. км. в саванне и болотах. Были заслушаны показания многочисленных специалистов и изучены производственная и эксплуатационная документации.

0426_Space_error_ru/image4.png

Технические подробности аварии

Положение и ориентация ракеты-носителя в пространстве измерлись Навигационной Системой (Inertial Reference Systems — IRS), составной частью которой является встроенный компьютер, вычисляющий углы и скорости на основе информации от бортовой Инерциальной Платформы, оборудованной лазерными гироскопами и акселерометрами. Данные от IRS передавались по специальной шине на Бортовой Компьютер (On-Board Computer — OBC), который обеспечивал необходимую для реализации программы полета информацию и непосредственно — через гидравлические и сервоприводы — управлял твердотопливными ускорителями и криогенным двигателем типа Вулкан (Vulkain).

0426_Space_error_ru/image5.png

Для обеспечения надежности Системы Управления Полетом использовалось дублирование оборудования. Поэтому две системы IRS (одна — активная, другая — ее горячий резерв) с идентичным аппаратным и программным обеспечением функционировали параллельно. Как только бортовой компьютер OBC обнаруживал, что "активная" IRS вышла из штатного режима, он сразу же переключается на другую. Бортовых компьютеров тоже было два.

Значимые фазы развития процесса

0426_Space_error_ru/image7.png

За 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 (где этот программный модуль использовался ранее), что и привело к значительно более высокой "горизонтальной скорости".

Финальным же действием, имевшим фатальные последствия, стало прекращение работы процессора. Соответственно, вся Навигационная Система перестала функционировать. Возобновить же её действия оказалось технически невозможно.

Эту цепь событий удалось полностью воспроизвести с помощью компьютерного моделирования, что — вкупе с материалами других исследований и экспериментов — позволило заключить, что причины и обстоятельства катастрофы полностью выявлены.

0426_Space_error_ru/image9.png

Причины и истоки аварии

Первоначальное требование на продолжение выполнения операции регулировки после взлёта ракеты было заложено более чем за 10 лет до рокового события, когда проектировались ещё ранние модели серии Ariane.

При некотором маловероятном развитии событий взлёт мог быть отменён буквально за несколько секунд до старта, например в промежутке H0-9 секунд, когда на IRS запускался "полётный режим", и H0-5 секунд, когда выдавалась команда на выполнение некоторых операций с ракетным оборудованием.

В случае неожиданной отмены взлёта необходимо было быстро вернуться в режим "обратного отсчёта" (countdown) — и при этом не повторять сначала все установочные операции, в том числе приведение к исходному положению Инерциальной Платформы (операция, требующая 45 мин. — время, за которое можно потерять "окно запуска").

Было обосновано, что в случае события отмены старта период в 50 секунд после H0-9 будет достаточным для того, чтобы наземное оборудование смогло восстановить полный контроль за Инерциальной Платформой без потери информации — за это время Платформа прекратит начавшееся было перемещение, а соответствующий программный модуль всю информацию о её состоянии зафиксирует, что поможет оперативно возвратить её в исходное положение (это в случае, когда ракета продолжает находиться на месте старта). Однажды, в 1989 году, при старте под номером 33 ракеты Ariane 4, эта особенность была с успехом задействована.

0426_Space_error_ru/image10.png

Однако Ariane 5, в отличие от предыдущей модели, имел уже принципиально другую дисциплину выполнения предполетных действий — настолько другую, что работа рокового программного модуля после времени старта вообще не имела смысла. Однако модуль повторно использовался без каких-либо модификаций.

Язык АДА

0426_Space_error_ru/image12.png

Расследование показало, что в данном программном модуле присутствовало целых семь переменных, вовлечённых в операции преобразования типов. Оказалось, что разработчики проводили анализ всех операций, способных потенциально генерировать исключение, на уязвимость.

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

Уверенность эта была подкреплена расчётами, показывающими, что ожидаемый диапазон физических полётных параметров, на основании которых определяются величины упомянутых переменных, таков, что к нежелательной ситуации привести не может. И это было верно — но для траектории, рассчитанной для модели Ariane 4.

А ракета нового поколения Ariane 5 стартовала по совсем другой траектории, для которой никаких оценок не выполнялось. Между тем она (вкупе с высоким начальным ускорением) была такова, что "горизонтальная скорость" превзошла расчётную (для Ariane 4) более чем в пять раз.

Защита для всех семи (включая BH) переменных не была обеспечена, потому что для компьютера IRS была продекларирована максимальная величина рабочей нагрузки в 80 %. Разработчики должны были искать пути снижения излишних вычислительных издержек, и они ослабили защиту там, где теоретически нежелательной ситуации возникнуть не могло. Когда же она возникла, то вступил в действие такой механизм обработки исключительной ситуации, который оказался совершенно неадекватным.

Этот механизм предусматривал следующие три основных действия.

  • Информация о возникновении нештатной ситуации должна быть передана по шине на бортовой компьютер OBC.
  • Параллельно она — вместе со всем контекстом — записывалась в перепрограммируемую память EEPROM (которую во время расследования удалось восстановить и прочесть её содержимое).
  • Работа процессора IRS должна была аварийно завершиться.

Последнее действие и оказалось фатальным — именно оно, случившееся в ситуации, которая на самом деле была нормальной (несмотря на сгенерированное из-за незащищённого переполнения программное исключение), и привело к катастрофе.

0426_Space_error_ru/image13.png

Выводы

Дефект на Ariane 5 не был вызван одной причиной. В ходе всей разработки и процессов тестирования существовало много стадий, на которых данный дефект мог быть выявлен.

  • Программный модуль был повторно использован в новой среде, где условия функционирования отличались от требований программного модуля. Эти требования не были пересмотрены.
  • Система выявила и распознала ошибку. К несчастью, спецификация механизма обработки ошибок была несоответственной и вызвала окончательное разрушение.
  • Ошибочный модуль никогда должным образом не тестировался в новом окружении — ни на уровне оборудования, ни на уровне системной интеграции. Следовательно, ошибочность разработки и реализации не была обнаружена.
0426_Space_error_ru/image15.png

Из отчёта комиссии:

Главной задачей при разработке Ariane 5 является уклон в сторону уменьшения случайной аварии. Возникшее исключение, объясняется не случайной аварией, но ошибкой конструкции. Исключение было обнаружено, но обработано неверно, поскольку была принята точка зрения, что программу следует рассматривать как правильную, пока не показано обратное. Комиссия придерживается противоположной точки зрения, что программное обеспечение нужно считать ошибочным, пока использование признанных в настоящее время наилучшими практических методов не продемонстрирует его правильность.

Счастливый конец

0426_Space_error_ru/image17.png

Несмотря на фэйл, построили еще 4 спутника Cluster II и вывели на орбиту на ракете Союз-У/Фрегат в 2000 году.

Авария при запуске привлекла внимание общественности, политиков и руководителей организаций к высоким рискам, связанным с использованием сложных вычислительных систем, что способствовало увеличению инвестирования в исследования, направленные на повышение надежности систем с особыми требованиями к безопасности. Последующий автоматический анализ кода Ariane (написан на Ada) стал первым случаем применения статического анализа в рамках крупного проекта с использованием методики абстрактной интерпретации.

Источники

Эта статья впервые была опубликована (на русском языке) на сайте habrahabr.ru.Статья размещена в нашем блоге и переведена с разрешения автора.

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form