Codificación para alta confiabilidad / disponibilidad / seguridad: ¿qué normas leo?
-
02-07-2019 - |
Pregunta
He escuchado que la industria automotriz tiene algo que se llama MISRA C.
¿Cuáles son los estándares relevantes para otras industrias de alta confiabilidad / disponibilidad / seguridad, como
- espacio
- aviones
- Banca / financiera
- automotriz
- médico
- Defensa / Militar
- ???
-Adam
Solución
Visite el Centro de vuelo espacial Goddard y su estándares de codificación . Uno de los estándares de C, que he adoptado en mi propio código, es que los encabezados deben ser autocontenidos, y proporcionan una manera simple de hacer cumplir eso: el encabezado de un módulo debe ser el primer archivo incluido en el módulo, por lo que si el archivo no es independiente, no se compilará.
Otros consejos
Si está preguntando específicamente acerca de la codificación, MISRA presenta algunas pautas para evitar errores comunes en C.
sin embargo, hay mucho más que un buen software que la codificación. La " biblia " De la industria de la aviación para su desarrollo es DO-178B. Le indica qué preguntas deben abordarse en las distintas fases de diseño y cómo deben documentarse las respuestas. Es una enorme cantidad de papeleo, pero si estás tratando de mantener los aviones en el aire, quieres que el punto más débil sea el humano (piloto), no el software.
Para programar sistemas de alta confiabilidad en Ada , hay: ISO / CEI TR 15942: " Tecnología de la información & # 8212; Lenguajes de programación & # 8212; Guía para el uso del lenguaje de programación Ada en sistemas de alta integridad " :
Introduction
Como sociedad, cada vez somos más Dependiendo de sistemas de alta integridad: para sistemas de seguridad (tales como avioneta por cable), para seguridad sistemas (para proteger digital información) o para sistemas financieros (por ejemplo, cajeros automáticos). Como el La complejidad de estos sistemas crece, por lo que hacer las demandas de técnicas mejoradas Para la producción del software. Componentes del sistema. Estos altos Los sistemas de integridad deben demostrarse como totalmente predecible en la operación y tener todas las propiedades requeridas de ellos. Esto solo puede ser logrado por analizando el software, además de El uso de la dinámica convencional. pruebas. Hay, actualmente, no lenguaje general de alto nivel donde Todos los programas en ese idioma son Garantizado para ser predecible y analizable Por lo tanto para cualquier elección del lenguaje de implementación es esencial para controlar las formas en que el El lenguaje es utilizado por la aplicación. El lenguaje Ada [ARM] está diseñado con mecanismos específicos para Controlando el uso de ciertos aspectos. de la lengua. Además,
La semántica de los programas de Ada está bien definida, incluso en error situaciones En concreto, el efecto de un programa se puede predecir a partir de la definición de lenguaje con pocos dependencias de implementación o interacciones entre el lenguaje características.
La escritura fuerte dentro del lenguaje puede usarse para reducir la Alcance (y costo) del análisis a verificar. propiedades clave.
El lenguaje Ada se ha utilizado con éxito en muchas aplicaciones de integridad. Esta demuestra que validado Ada los compiladores tienen la calidad requerida para tales aplicaciones.
Se puede proporcionar orientación para facilitar el uso del idioma y Fomentar el desarrollo de herramientas. para mayor verificación.
Ada es ideal para implementando software de alta integridad y este documento proporciona orientación en Los controles que se requieren en el uso de Ada para asegurar que los programas son Predecible y analizable.
Puede que le resulte instructivo ver algunos de los requisitos de Carrier Grade Linux . Si bien (como su nombre indica) están especificando los requisitos de Linux, lo están haciendo para su uso en el segmento de alta disponibilidad de equipos de telecomunicaciones.
El NIST proporciona una gran cantidad de documentos relacionados, puedes analizar y analizar su trabajo, pero hay muchos de ellos, y todo es bastante detallado, por lo que no tengo uno específico para señalarte. Si quieres ser más específico con tus necesidades, podría reducirlo un poco ...
Además, Carnegie Mellon es prácticamente lo definitivo en lo que respecta a los procesos de desarrollo para la confiabilidad, lo suficientemente fácil como para encontrar sus estándares pero también bastante detallado.
Además, las industrias específicas a menudo tienen sus propios estándares, dependiendo también del país. Por ejemplo, la industria de tarjetas de crédito - PCI-DSS; La industria bancaria en la UE - Basilea II; Médico - HIPAA (aunque eso es bastante alto nivel); cualquier cosa relacionada con el gobierno de los Estados Unidos, varios documentos del NIST; etc.