He sido un desarrollador de software en el teléfono público sistema de conmutación, que tiene limitaciones muy severas sobre la fiabilidad, disponibilidad, capacidad de supervivencia, y el rendimiento que se acercan a lo que necesitan los sistemas de la nave espacial. No he trabajado en naves espaciales (aunque sí trabajé con muchos antiguos programadores de transbordadores mientras estuve en IBM), y no estoy familiarizado con VXworks, el sistema operativo utilizado en muchas naves espaciales (incluyendo los rovers de Marte, que tienen un registro operativo fenomenal)
Uno de los requisitos básicos para patchability es que un sistema debe ser diseñado desde cero para parchear. Esto incluye la estructura del módulo, de modo que se puedan agregar nuevas variables y reemplazar los métodos, sin interrumpir las operaciones actuales. Esto a menudo significa que tanto el código antiguo como el nuevo para un método cambiado serán residentes, y la operación de parchado simplemente actualiza el vector de envío para la clase o módulo.
Es casi obligatorio que el parcheo (y no-aplicación de parches) de software está integrado en el sistema operativo.
Cuando trabajaba en sistemas telefónicos, generalmente utilizábamos funciones de parchado y reemplazo de módulos en el sistema para cargar y probar nuestras nuevas funciones, así como las correcciones de errores, mucho antes de que estos cambios fueran enviados para compilaciones. Todos los desarrolladores deben sentirse cómodos con los parches y el reemplazo de módulos como parte de su trabajo. Desarrolla un nivel de confianza en estos componentes y se asegura de que el código de aplicación y reemplazo se ejerza de manera rutinaria.
Las pruebas son mucho más estrictas en estos sistemas que otra vez has encontrado en ningún otro proyecto. Maquetas completas y parciales del sistema de despliegue estarán disponibles. También es probable que haya entornos de máquinas virtuales, donde la carga completa se puede ejecutar y probar.Los planes de prueba en todos los niveles superiores a la prueba unitaria serán escritos y revisados formalmente, al igual que las inspecciones formales del código (y también serán rutinarias).
El diseño del sistema tolerante a fallas, incluido el diseño del software, es esencial. No sé específicamente sobre los sistemas de naves espaciales, pero algo así como los clústeres de alta disponibilidad es probablemente estándar, con la capacidad adicional de funcionar tanto sincronizados como no sincronizados, y con la capacidad de transferir información entre los lados durante una conmutación por error. Un beneficio adicional de esta estructura de sistema es que puede dividir el sistema (si es necesario), volver a cargar el lado inactivo con una nueva carga de software y probarlo en el sistema de producción sin estar conectado a la red del sistema o al bus. Cuando esté satisfecho de que el nuevo software se está ejecutando correctamente, simplemente puede realizar una conmutación por error.
Al igual que con la aplicación de parches, cada desarrollador debe saber cómo realizar cambios en la conmutación por error, y debe hacerlos durante el desarrollo y las pruebas. Además, los desarrolladores deben conocer cada problema de actualización de software que pueda forzar una conmutación por error, y deben saber cómo escribir parches y reemplazo de módulos que eviten las conmutaciones por error requeridas siempre que sea posible.
En general, estos sistemas están diseñados desde cero (hardware, sistema operativo, compiladores y, posiblemente, el lenguaje de programación) para estos entornos. No consideraría Windows, Mac OSX, Linux o cualquier variante de Unix suficientemente robusto. Parte de eso son los requisitos en tiempo real, pero todo el tema de la confiabilidad y la capacidad de supervivencia es tan crítico.
ACTUALIZACIÓN: Como otro punto de interés, aquí hay un blog by one of the Mars rover drivers. Esto te dará una perspectiva de la vida diaria de mantener una nave espacial operativa. ¡Cosas ordenadas!
¡Buena pregunta! Llevando el "pensamiento fuera de la caja" al siguiente nivel: abre la última frontera ;-). –
No es una respuesta directa a la pregunta, pero es interesante para la descripción paso a paso de la resolución de problemas: http://spaceflightnow.com/mars/mera/040126spirit.html – starblue
Muchas gracias a todos por sus comentarios. Sin embargo, ¿qué hago? Todas sus respuestas son excelentes y útiles. No sé a quién marcar como la respuesta correcta? Sin mencionar que realmente no hay una respuesta "correcta" a esta pregunta y todos los puntos planteados son válidos. –