Авария ракеты-носителя «Ариан-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].
Полёт и взрыв ракеты «Ариан-5» |
Погода утром 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]:
Возникшая ошибка в программном модуле ИСО произошла во время конвертации 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]:
Комиссией было подчеркнуто, что к процессу контроля не привлекались специалисты из организаций, независимых как от заказчика, так и от подрядчика системы, что нарушило принцип разделения исполнительных и контрольных функций. Претензии были предъявлены как к процессу тестирования, так и к стратегии верификации. Так, на этапе тестирования и отладки было технически возможно посредством интегрального моделирования полёта исследовать работу ИСО, что позволило бы практически гарантированно выявить ошибку. Однако, при моделировании работы всего аппаратно-программного комплекса ИСО рассматривалась как чёрный ящик, который работает исправно. Было обращено внимание на взаимную противоречивость между необходимостью обеспечения надёжности и декларацией о величине максимально допустимой нагрузки на компьютер. Дополнительно критиковался механизм обработки исключительных ситуаций, который работал в отрыве от общего контекста всей ситуации, и в итоге «уподобился тому врачу, что без всякого осмотра пристрелил пришедшего к нему с непонятными симптомами больного, дабы тот не мучился». Данная реализация являлась следствием практики радикального отключения аппаратных блоков в случае любых аппаратных сбоев, основанного на предположении, что вероятность сбоя в резервном блоке чрезвычайно мала. Однако, в случае «Ариан-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]:
Этот неудачный запуск стал одной из самых дорогостоящих компьютерных ошибок в истории. Оценки материальных потерь варьируются от 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].
Эта статья входит в число хороших статей русскоязычного раздела Википедии. |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .