Я был разработчиком программного обеспечения для систем телефонной связи общего пользования, которое имеет довольно серьезные ограничения на надежность, доступность, живучесть и производительность, которые подходят для систем космических аппаратов. Я не работал на космических аппаратах (хотя я работал со многими бывшими челночными программистами в то время как в IBM), и я не знаком с VXworks, операционной системой, используемой на многих космических аппаратах (включая марсоходов Rover, которые имеют феноменальную операционную запись).
Одним из основных требований к патчеоблокаемости является то, что система должна быть сконструирована с нуля для исправления. Это включает в себя структуру модуля, так что новые переменные могут быть добавлены, а методы заменены без нарушения текущих операций. Это часто означает, что старый и новый коды для измененного метода будут резидентными, а операция исправления просто обновляет вектор диспетчеризации для класса или модуля.
Обязательно, чтобы программное обеспечение исправления (и исправления) было интегрировано в операционную систему.
Когда я работал в телефонных системах, мы обычно использовали функции исправления и замены модулей в системе, чтобы загружать и тестировать наши новые функции, а также исправлять ошибки задолго до того, как эти изменения были отправлены для сборки. Каждому разработчику должно быть удобно с исправлением и заменой модулей как часть их работы с далями. Он повышает уровень доверия к этим компонентам и гарантирует, что код исправления и замены будет выполняться в обычном режиме.
Тестирование в этих системах гораздо более жесткое, чем все, что вы когда-либо встречали в каком-либо другом проекте. Полные и частичные макеты системы развертывания будут легко доступны. Скорее всего, будут и виртуальные средние машины, где полная загрузка может быть запущена и протестирована.Планы испытаний на всех уровнях выше единичного теста будут написаны и официально рассмотрены, как и официальные проверки кода (и они будут также рутинными).
Отказоустойчивая конструкция системы, включая разработку программного обеспечения, имеет важное значение. Я не знаю конкретно о системах космических аппаратов, но что-то вроде кластеров с высокой доступностью, вероятно, является стандартным, с добавленной возможностью запуска как синхронизированной, так и несинхронизированной и с возможностью передачи информации между сторонами во время перехода на другой ресурс. Дополнительным преимуществом этой системы является то, что вы можете разделить систему (при необходимости), перезагрузить неактивную сторону с новой загрузкой программного обеспечения и протестировать ее в производственной системе без подключения к системной сети или шине. Когда вы удовлетворены тем, что новое программное обеспечение работает правильно, вы можете просто переустановить его.
Как и в случае с исправлениями, каждый разработчик должен знать, как выполнять отказоустойчивость, и должен выполнять их как во время разработки, так и тестирования. Кроме того, разработчики должны знать каждую проблему обновления программного обеспечения, которая может привести к отказоустойчивости, и должна знать, как писать исправления и замену модуля, которые, когда это возможно, избегают необходимых отказов.
В целом, эти системы разработаны с нуля (аппаратное обеспечение, операционная система, компиляторы и, возможно, язык программирования) для этих сред. Я бы не считал Windows, Mac OSX, Linux или любой вариант unix достаточно надежным. Частью этого являются требования к реальному времени, но весь вопрос о надежности и живучести столь же критичен.
ОБНОВЛЕНИЕ: Как еще одна достопримечательность, вот blog by one of the Mars rover drivers. Это даст вам представление о повседневной жизни, связанной с эксплуатацией космического корабля. Аккуратно!
Хороший вопрос! Принимая «мышление вне коробки» на следующий уровень: пространство - последняя граница ;-). –
Не прямой ответ на вопрос, но интересный для пошагового описания устранения неполадок: http://spaceflightnow.com/mars/mera/040126spirit.html – starblue
Спасибо вам большое за ваш вклад. Однако что мне делать? Все ваши ответы превосходны и полезны. Я не знаю, кто должен отметить правильный ответ? Не говоря уже о том, что на самом деле нет «правильного» ответа на этот вопрос, и все поднятые вопросы действительны. –