Из-за каких ошибок программистов теряли космические устройства?
Если ваш компьютер по какой-то причине вдруг «завис» во время работы, то это в любом случае нельзя назвать катастрофой. А вот если из-за ошибки в программном обеспечении безвозвратно теряется дорогостоящее космическое оборудование — тут уже настоящая беда. А во всем оказывается «виноват» лишний или недостающий символ в программном коде.
Почему-то считается, что больше всего ляпов допустили космические программисты СССР и в дальнейшем России. Видимо, потеря двух аппаратов «Фобос» поспособствовала этому. Но на самом деле финансовое лидерство с ляпами — у программистов США и Европейского космического союза. Вот доказательства.
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 миллионов долларов, не считая стоимости имевшихся на ней спутников.
Человеческий фактор — самая главная причина различных космических катастроф. И обидно бывает, когда многолетний труд губится из-за маленького пропущенного или лишнего символа в программе, а то и вовсе из-за глупости программистов.