Авария ракеты-носителя «Ариан-5»
Авария ракеты-носителя «Ариан-5» Европейского космического агентства (ЕКА) произошла во время первого запуска, 4 июня 1996 года на космодроме Куру. Ракета разрушилась на 40-й секунде полёта из-за неверной работы бортового программного обеспечения .
Этот неудачный запуск стал одной из самых дорогостоящих компьютерных ошибок в истории — оценки только материальных потерь варьируются от 360 до 500 млн долларов . Сбой произошёл в программном обеспечении, унаследованном от предыдущей ракеты «Ариан-4», когда модуль не был протестирован в новом окружении .
В результате аварии были потеряны 4 спутника ЕКА «Cluster[фр.]», предназначенных для изучения магнитного поля Земли. Данная научная программа была отложена, и впоследствии спутники «Cluster-2[англ.]» были запущены ракетами «Союз» летом 2000 года .
Произошедшая авария имела большой резонанс — как по причине больших материальных потерь, так и вследствие оперативного расследования, характеризовавшегося открытостью результатов
и проводившегося с участием специалистов заинтересованных европейских стран. Комиссии удалось найти и воспроизвести ошибку, реконструировав события полёта .История
Разработка
После разработки предыдущих версий ракет «Ариан» в конце 1987 года было принято решение о создании новой системы «Ариан-5», которая должна была вывести ЕКА в лидеры по запускам на коммерческом рынке. Характеристики новой ракеты-носителя должны были позволить как выводить телекоммуникационные спутники, так и дать возможность запускать челнок «Гермес». Несмотря на то, что работы над челноком были свёрнуты в 1992 году, разработка «Ариан-5» продолжилась для потенциальной реализации пилотируемой космонавтики. Заявленная надёжность не должна была быть меньше 0,98 при рассматриваемых 50-100 запусках, а стоимость пуска по сравнению с «Ариан-4» должна была быть уменьшена на 10 %[1][2].
Работы над «Ариан-5» велись около 10 лет и на разработку было потрачено 7 млрд долларов. «Ариан-5» основывалась на предыдущей модели, «Ариан-4», которая успешно запускалась 90 раз из 93[3][4][5]. В феврале 1994 года был оформлен промышленный заказ на изготовление 14 ракет-носителей для запусков в 1996—1999 годах, и первый полёт был запланирован на октябрь 1995 года. Одной из задач первых двух пусков являлась демонстрация возможности ракеты-носителя по выводу полезной нагрузки на орбиту. Первый запуск несколько раз откладывался и произошёл летом 1996 года[1].
Полезная нагрузка
Полезная нагрузка для первого запуска ракеты, включающая в себя четыре спутника «Cluster», составляла 4681 кг[6]. Данный пуск должен был реализовать один из этапов научной программы «Cluster», которая была инициирована ЕКА в 1982 году при сотрудничестве с НАСА[7]. Задачей миссии являлось измерение малых колебаний магнитосферы Земли и воздействия на неё солнечного ветра вследствие солнечной активности. Для этого была спроектирована многоспутниковая миссия, так как требовались синхронные измерения на нескольких спутниках, находящихся в разных точках космического пространства. «Ариан-5» должна была одновременно вывести четыре спутника «Cluster» на промежуточную геостационарную орбиту[8].
Полёт
Погода утром 4 июня 1996 года была приемлемая и ракета «Ариан-5» (серийный номер 501) была доставлена на стартовую площадку (ELA-3, космодром Куру[9]) — время старта было запланировано на 8:35 местного времени (11:35 UTC). Обратный отсчёт, в который включена подготовка ракеты, проходил гладко до момента за 7 минут до старта, когда условия видимости ухудшились, и в связи с этим запуск был перенесён. Новое время старта H0 было установлено на 09:33:59 местного времени[10].
36,7 секунды после зажигания (H0+36,7)[к. 1] полёт проходил штатно. Однако после этого момента ракета, находившаяся на высоте ~3700 м, внезапно отклонилась от запланированной траектории, начала разваливаться на части и взорвалась на 40-й секунде (H0+40). Это произошло в начале полёта — номинальное время работы двигателей первой ступени составляет 575 секунд[10][3].
По сразу же проведённому анализу данных было определено, что ракета вела себя нормально до того момента, как вдруг она отклонилась от курса и самоуничтожилась. Взрыв произошёл на высоте ~4 км, на удалении в 1 км от стартовой площадки, и осколки были рассеяны на площади около 12 км2 в саванне и болотах. Некоторые фрагменты упали возле стартовой площадки, но она осталась нетронутой. Во время данного происшествия пострадавших не было. Погода была приемлемой, и она не могла оказать влияния. При этом полётные данные показывали, что системы, управлявшие соплами твердотопливного ускорителя (активная система и первичная Инерциальная система ориентировки, ИСО), отказали практически одновременно перед разрушением ракеты[4][3].
Расследование
На следующей день после аварии началось формирование комиссии для расследования. Её возглавил представитель Французской академии наук профессор Жак-Луи Лионс, а в комиссию вошли учёные и специалисты из заинтересованных европейских стран. 13 июня она приступила к работе. Комиссии были предоставлены телеметрические данные ракеты, данные траектории (с радиолокационных станций и с постов оптического наблюдения), а также полученная информация с упавших обломков и восстановленной ИСО. Кроме того, в распоряжение попали отдельные компоненты ракеты, в том числе использованные для тестирования и осмотра. Для незамедлительного предоставления всех данных комиссией был сформирован специальный Технический комитет из представителей заказчиков и подрядчиков. Были собраны и изучены части ракеты и оборудования, а также заслушаны показания специалистов и изучены производственная и эксплуатационная документация[4][5].
После проведённого анализа и имитационного моделирования были реконструированы события полёта[10][4][5]:
- Программный модуль, унаследованный от «Ариан-4», выполнял выравнивание инерционной платформы для оценки точности измерений ИСО. После старта в «Ариан-5» этот модуль не выполнял никаких функций, в отличие от «Ариан-4», в которой он работал полных 50 секунд, так как у неё траектория полёта значительно отличалась от той, которая была у «Ариан-5».
- Вскоре после старта ошибочный программный модуль попытался просчитать значение, исходя из горизонтальной скорости ракеты. Так как это значение было значительно больше, чем то, которое было у «Ариан-4», то возникла ошибка. У ракеты имелось две системы ИСО — активная и запасная — у которых программное обеспечение было идентичным. Так как сбой был программный, то ошибка проявилась на обоих экземплярах ИСО.
- Исходя из требований реализации, контекст ошибки должен сохраняться в ПЗУ до отключения процессора, и по этой причине ИСО сохранила информацию об исключении. В дальнейшем эти данные были прочитаны бортовым компьютером, который на их основании дал команду соплам твердотопливного ускорителя и главному двигателю. Данная команда требовала полного отклонения сопел, а это вызвало то, что ракета вышла на запредельную траекторию.
- На новой траектории ракета получила запредельную аэродинамическую нагрузку и начала разрушаться (H0+39), при этом уровни рыскания и тангажа составляли 30° в секунду. Стартовые двигатели отделились от ракеты и это запустило её самоуничтожение (H0+40)[3].
Возникшая ошибка в программном модуле ИСО произошла во время конвертации 64-битного вещественного числа в 16-битное знаковое целое, и при этом случилось арифметическое переполнение последней. Эта переменная (E_BH, англ. Bias Horizontal, горизонтальное смещение) показывала горизонтальное смещение инерционной платформы и была связана с горизонтальной скоростью ракеты[10]. В программном модуле, вызвавшем ошибку, было семь переменных, из которых четыре были защищены. Строка программного кода, при выполнении которого произошла ошибка, выглядит следующим образом[11]:
P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS(
TDB.T_ENTIER_16S(
(1.0 / C_M_LSB_BH) * G_M_INFO_DERIVE(T_ALG.E_BH)
)
);
Особенностью задействования данного модуля являлось то, что система «Ариан-5» имела другой порядок выполнения предполётных действий, отличающийся от «Ариан-4». Данная разница была настолько большой, что работа сбойного программного модуля после старта не была нужна, но модуль использовался повторно без каких-либо модификаций.
Комиссии удалось быстро найти ошибку[к. 2] из-за наличия данных измерений, имитационных сред и документации. Метеорологические данные исключали влияние погоды, телеметрия позволила определить реальные данные траектории полёта. Это позволило сузить область потенциальных дефектов и на основании полученной информации провести имитационное моделирование, которое точно воспроизвело цепь событий, приведших ракету к аварии[4].
Причины аварии
Как и в случае с другими ошибками систем, критичных к безопасности[англ.], авария была вызвана не одной причиной. В ходе разработки и тестирования было много стадий, на которых дефект мог быть выявлен[12]. Основными причинами названы следующие[4]:
- Программный модуль был повторно использован в новой среде, где условия функционирования были другие. Данная часть программного обеспечения тестировалась для «Ариан-4», и для новой ракеты требования не были пересмотрены.
- Система выявила и распознала ошибку. Однако, спецификация механизма обработки ошибок не соответствовала ситуации, что вызвало окончательное разрушение.
- Ошибочный модуль никогда должным образом не тестировался в новом окружении — ни на уровне оборудования, ни на уровне системной интеграции. Как следствие, не была обнаружена ошибка реализации.
Комиссией было подчёркнуто, что к процессу контроля не привлекались специалисты из организаций, не зависимых как от заказчика, так и от подрядчика системы, что нарушило принцип разделения исполнительных и контрольных функций. Претензии были предъявлены как к процессу тестирования, так и к стратегии верификации. Так, на этапе тестирования и отладки было технически возможно посредством интегрального моделирования полёта исследовать работу ИСО, что позволило бы практически гарантированно выявить ошибку. Однако, при моделировании работы всего аппаратно-программного комплекса ИСО рассматривалась как чёрный ящик, который работает исправно. Было обращено внимание на взаимную противоречивость между необходимостью обеспечения надёжности и декларацией о величине максимально допустимой нагрузки на компьютер. Дополнительно критиковался механизм обработки исключительных ситуаций, который работал в отрыве от общего контекста всей ситуации, и в итоге «уподобился тому врачу, что без всякого осмотра пристрелил пришедшего к нему с непонятными симптомами больного, дабы тот не мучился». Данная реализация являлась следствием практики радикального отключения аппаратных блоков в случае любых аппаратных сбоев, основанного на предположении, что вероятность сбоя в резервном блоке чрезвычайно мала. Однако, в случае «Ариан-5» имела место систематическая ошибка — так как ошибка была допущена в программном обеспечении, то она проявилась и в резервном блоке[5].
Отчёт комиссии содержит следующее наблюдение[4][10]:
Основной мотивацией при разработке «Ариан-5» является уменьшение риска от случайной аварии. … Возникшее исключение объясняется не случайной аварией, а ошибкой конструкции. Исключение было обнаружено, но обработано неверно, поскольку была принята точка зрения, что программу следует рассматривать как правильную, пока не доказано обратное. … Комиссия придерживается противоположной точки зрения, что программное обеспечение нужно считать ошибочным, пока использование практических методов, признанных в настоящее время наилучшими, не докажет его правильность.
Оригинальный текст (англ.)An underlying theme in the development of Ariane 5 is the bias towards the mitigation of random failure. … The exception which occurred was not due to random failure but a design error. The exception was detected, but inappropriately handled because the view had been taken that software should be considered correct until it is shown to be at fault. … The Board is in favour of the opposite view, that software should be assumed to be faulty until applying the currently accepted best practice methods can demonstrate that it is correct.
Команда обслуживания «Ариан-5» предоставила следующие объяснения произошедшего[4]:
- Разработчики решили не защищать некоторые переменные от возможной ошибки операнда. Они считали, что значения этих переменных ограничены как физическими параметрами, так и запасом по величине.
- Команда «Ариан-5» решила не включать данные о траектории в функциональные требования ИСО, и по этой причине во время тестирования новые данные о траектории не использовались.
- На практике сложно выполнить реалистичный тест полёта ИСО. Из-за этого было решено не тестировать ИСО, так как эта система должна была быть проверена ранее на аппаратном уровне. Кроме того, дополнительной сложностью была необходимость достижения требуемой точности при имитационном моделировании.
Последствия
Этот неудачный запуск стал одной из самых дорогостоящих компьютерных ошибок в истории. Оценки материальных потерь варьируются от 360 до 500 млн долларов (в которые входит не только стоимость ракеты, но и научное оборудование полезной нагрузки). Помимо этого, ряд последующих коммерческих запусков агентства не состоялся, программа «Ариан-5» была задержана на один год, а ЕКА потеряло репутацию на рынке[к. 3][5][13][14].
В результате аварии были потеряны 4 спутника ЕКА «Cluster», предназначенных для изучения магнитного поля Земли. В июле того же года ЕКА предложило воссоздать данный проект по крайней мере на одном спутнике, которому дали название «Феникс». Проект включал один спутник, на котором должны были быть те же приборы, что стояли на погибших спутниках «Cluster». К середине 1997 года все приборы прошли испытания и новый спутник «Феникс» был готов к запуску. Но так как один спутник не мог дать должной научной информации, которую могли дать четыре спутника, то в ЕКА приняли решение о воссоздании всей миссии в составе четырёх спутников под названием «Cluster-2». Запуск был запланирован на лето 2000 года, так как это был год ожидаемого пика солнечной активности. Для снижения риска вывод спутников был доверен российской ракете-носителю «Союз» с использованием разгонного блока «Фрегат». Первая пара спутников была успешно выведена на орбиту 16 июля 2000 года, а вторая пара успешно стартовала 9 августа того же года[15][8].
Для последующих запусков «Ариан-5» были проведены следующие мероприятия[3]:
- Исправление программной ошибки модуля ИСО в соответствии с данными траектории.
- Улучшение репрезентативности всего тестового окружения.
- Добавление тестирования с перекрытием и избыточностью на уровнях оборудования, ступени и всей системы.
- Улучшение взаимодействия между системой и оборудованием с передачей информации в обе стороны как для штатного, так и для аварийного режимов работы.
- Имитационное моделирование всего полёта с работой встроенного программного обеспечения[англ.] с улучшением согласованности взаимодействия устройств.
- Улучшение аппаратуры и оборудования для получения данных телеметрии.
Исходя из рекомендаций Комиссии для каждого из устройств системы была проведена сторонняя инспекция кода. Также был принят ряд организационных мер для того, чтобы сделать процессы взаимодействия партнёров более прозрачными с ясным распределением полномочий и ответственности. Проверка программного обеспечения уже включала в себя модульное тестирование, интеграционное тестирование, функциональную валидацию, анализ покрытия кода и сертификацию, и несмотря на это, программное обеспечение было проверено с помощью статического анализа кода посредством абстрактной интерпретации[англ.]. Верифицировались только два самых сложных и критичных по безопасности модуля — ИСО и центральный полётный модуль — в которых было по 30 и 60 тысяч строк кода на языке Ада соответственно. Эти испытания были одними из первых применений статического анализа для крупных промышленных программных систем и способствовали распространению методов статического анализа[16][17].
Следующий запуск «Ариан-5» произошёл в октябре 1997 года, и тогда ракета вывела один спутник «YES[нем.]». Данный пуск был признан частично успешным, так как полезная нагрузка была выведена на слишком низкую орбиту из-за преждевременного отключения двигателей. Это ошибка была объяснена и исправлена после полёта, но, тем не менее, доверие клиентов к новой ракете пострадало, и по этой причине производился ряд запусков «Ариан-4» до 2003 года[18].
Резонанс в инженерии безопасных систем
Произошедшая авария имела большой резонанс — как по причине больших материальных потерь, так и вследствие оперативного расследования, характеризовавшегося открытостью результатов[5].
Ж.-М. Жезекель[англ.] и Бертран Мейер пришли к выводу о том, что программная ошибка носит, по их мнению, чисто технический характер и коренится в некорректной практике повторного использования программного обеспечения, а роковую роль сыграло отсутствие точной спецификации повторно-используемого модуля. Расследование показало, что требование максимальной величины, вмещающейся в 16 бит, затерялось в приложениях к основному спецификационному документу. Кроме того, не было никаких комментариев или ссылки на документ с обоснованием этого требования. Для решения проблемы авторы предложили задействовать принцип контрактного проектирования[к. 4], когда задаётся «контракт», определяющий условия для входных и выходных параметров компонента, и авторами был предоставлен «набросок» такого контракта. По мнению авторов, это могло выявить проблему как на этапе тестирования, так и во время полёта[14].
Точка зрения Жезекеля и Мейера вызвала множество откликов. Наиболее обстоятельный критический разбор их статьи выполнил сотрудник Lockheed Martin Tactical AirCraft Systems, известный специалист в области разработки ответственных систем Кен Гарлингтон (англ. Ken Garlington)[19]. Так, он обратил внимание, что контракт, предложенный Жезекелем и Мейером, содержит ошибку, так как в нём предполагается, что значение E_BH преобразуется из целого числа, а в реальности была конвертация из вещественного. При этом было показательно, что только Гарлингтон обратил внимание на достаточно очевидную проблему, в то время как статью читали и публично обсуждали многие квалифицированные специалисты. Дополнительно Гарлингтон подробно разобрал нетривиальные проблемы, возникающие при написании не «наброска», а полной спецификации контракта для данной конкретной ситуации. Вывод Гарлингтона показывает, что проблема носит комплексный характер и обусловлена прежде всего объективной сложностью систем типа «Ариан»[5].
Главный редактор журнала Automated Software Engineering[англ.] Башар Нузейбех[англ.] провёл обзор разных точек зрения на причины аварии и пришёл к выводу, что «все правы». Башар посчитал, что авария связана с общими проблемами разработки программных систем и дополнительно отметил, что разделение интересов вовлеченных в разработку и верификацию специалистов (что связано с широким внедрением таких подходов, как объектно-ориентированные и компонентные технологии) не получают надлежащего балансирующего противовеса на стороне менеджмента, которому нужно координировать весь процесс работ на должном уровне[12].
Примечания
- Комментарии
- Источники
- ↑ 1 2 R. Orye. Ariane 5 - A launcher for the 21st century (англ.) // Space Programs and Technologies Conference and Exhibit. — American Institute of Aeronautics and Astronautics, 1994. — 28 October. — P. 1—12. — doi:10.2514/6.1994-4653.
- ↑ P. Jorant. Ariane 5 family (англ.) // Space Programs and Technologies Conference and Exhibit. — American Institute of Aeronautics and Astronautics, 1993. — 21 September. — P. 1—9. — doi:10.2514/6.1993-4131.
- ↑ 1 2 3 4 5 I-Shih Chang, Susumu Toda, Seishiro Kibe. European space launch failures (англ.) // 36th AIAA/ASME/SAE/ASEE Joint Propulsion Conference and Exhibit. — 2000. — 17 July. — P. 10. — doi:10.2514/6.2000-3574.
- ↑ 1 2 3 4 5 6 7 8 Тэллес, Мэтт; Хсих, Юань. Наука отладки : [рус.]. — 1. — Москва : Кудиц-Образ, 2003. — С. 41—44. — 560 с. — ISBN 0-7897-2594-0.
- ↑ 1 2 3 4 5 6 7 8 9 Аджиев, В. Мифы о безопасном ПО: уроки знаменитых катастроф // Открытые системы. СУБД : статья. — Москва: Открытые системы, 1998. — № 6. — ISSN 1028-7493. Архивировано 30 сентября 2007 года.
- ↑ Huon, William. Ariane, une épopée européenne. — ETAI, 2007. — ISBN 9782726887097.
- ↑ C. P. Escoubet, M. Fehringer, M. Goldstein. The Cluster mission (англ.) // Annales Geophysicae. — European Geophysical Society, 2001. — No. 19. — P. 1197—1200. Архивировано 2 декабря 2017 года.
- ↑ 1 2 Л.М. Зелёный, Е.Е. Григоренко. Миссия «Cluster» // Природа. — 2005. — № 5. — С. 46—53. Архивировано 12 марта 2017 года.
- ↑ PR 20-1996: Flight 501 failure - first information (англ.). ESA. sci.esa.int (6 июня 1996). Дата обращения: 12 марта 2017. Архивировано 12 марта 2017 года.
- ↑ 1 2 3 4 5 J. L. Lions. ARIANE 5 Flight 501 Failure (англ.) // European Space Agency : Report. — Paris, France, 1996. — 19 July. Архивировано 3 февраля 2017 года.
- ↑ "A Floating Point Error That Caused A Damage Worth Half A Billion". It's F.O.S.S. (англ.). 2012-10-06. Архивировано 30 мая 2016. Дата обращения: 11 марта 2017.
- ↑ 1 2 Bashar Nuseibeh. Ariane 5: Who Dunnit? (англ.) // IEEE Softw.. — 1997. — May (vol. 14, iss. 3). — P. 15—16. — ISSN 0740-7459. — doi:10.1109/MS.1997.589224.
- ↑ Gérard Le Lann. An Analysis of the Ariane 5 Flight 501 Failure - a System Engineering Perspective (англ.) // Proceedings of the 1997 International Conference on Engineering of Computer-based Systems. — Washington, DC, USA: IEEE Computer Society, 1997. — P. 339—346. — ISBN 0818678895. — doi:10.1109/ECBS.1997.581900. Архивировано 5 февраля 2017 года.
- ↑ 1 2 J. M. Jazequel, B. Meyer. Design by contract: the lessons of Ariane (англ.) // Computer. — 1997. — Vol. 30, iss. 1. — P. 129—130. — ISSN 0018-9162. — doi:10.1109/2.562936. Архивировано 6 июля 2017 года.
- ↑ Силкин, Б. И. Франция в космосе // Природа. — 2001. — Август (№ 8). Архивировано 9 марта 2017 года.
- ↑ Lacan, P., Monfort, J. N., Ribal, L. V. Q., Deutsch, A., & Gonthier, G. ARIANE 5 - The Software Reliability Verification Process (англ.) // DASIA 98. — 1998. — P. 201. Архивировано 1 апреля 2017 года.
- ↑ Chloe Taft. CDRH Software Forensics Lab: Applying Rocket Science To Device Analysis (англ.) // The Gray Sheet. — 2007. — 15 October. Архивировано 24 мая 2008 года.
- ↑ ESA. Ariane-502 - results of detailed data analysis (англ.). esa. European Space Agency (2000). Дата обращения: 11 марта 2017. Архивировано 4 марта 2016 года.
- ↑ Garlington, Ken. Critique of" put it in the contract: The lessons of Ariane (англ.). — 1998. — 16 March. Архивировано 3 февраля 2017 года.