Seminario web destacado: Presentación de la prueba CT de Parasoft C/C++ para pruebas continuas y excelencia en el cumplimiento | Vea ahora

Guía MISRA C++ 2023: todo lo que necesita saber

Foto de cabeza de Michal Rozenau, miembro activo del grupo de trabajo MISRA C y MISRA C++ e ingeniero líder de proyecto en Parasoft
Enero 4, 2024
5 min leer

¡Sumérgete en MISRA C++ 2023! Conozca su historia, por qué es tan importante, las pautas y cómo Parasoft brinda soporte completo de MISRA para el desarrollo de software crítico para la seguridad.

MISRA C++ 2023 ayuda a las organizaciones que utilizan el lenguaje C++ moderno a desarrollar software crítico para la seguridad. Utilizando el nuevo estándar MISRA, los desarrolladores pueden cumplir con los requisitos de análisis estático establecidos por los estándares de seguridad funcional como IEC 6108 o ISO 26262 al garantizar y documentar Cumplimiento de MISRA para sus aplicaciones de software.

¿Qué es MISRA C++ 2023?

Trabajando juntos, AUTOSAR y MISRA prepararon un conjunto de pautas de codificación para permitir una programación segura utilizando C++17. Este documento publicado es MISRA C++ 2023.

MISRA C++ es un conjunto de pautas de codificación que definen un subconjunto del lenguaje C++ para usar en sistemas críticos para reducir el riesgo de cometer errores y minimizar el peligro de tener un programa no conforme.

El estándar C++ no define el lenguaje por completo. Hay situaciones en las que el comportamiento no está definido, no está especificado o está definido por la implementación. Si un programa C++ se basa en estos, no hay garantía de que se comportará de forma predecible o de que será portátil.

Las pautas de MISRA están destinadas a detectar tales situaciones para garantizar la seguridad y confiabilidad del software. Además, los programas conformes pueden estar escritos de una manera que sugiera claramente un error en el código o es muy probable que los desarrolladores los malinterpreten. Las directrices de MISRA se centran en este tipo de situaciones.

La evolución de MISRA C++

La primera versión de MISRA C++ en 2008 se centró en C++03. Ganó mucha popularidad, pero con los avances de C++ y las nuevas funciones agregadas en C++ 11, quedó obsoleto. Para cerrar esta brecha, en marzo de 2017, el consorcio AUTOSAR publicó directrices AUTOSAR C++ como parte de su Plataforma Adaptativa.

Adaptive AUTOSAR utiliza C++14 como lenguaje elegido y la plataforma requería un estándar de codificación orientado a la seguridad para respaldar a los desarrolladores. Aproximadamente el 70% de las pautas no modificadas de MISRA C++ 2008 se incluyeron en AUTOSAR C++.

Pero con la continua evolución del lenguaje, se agregaron nuevas características del lenguaje en C++ 17, lo que generó la necesidad de nuevas pautas de codificación. MISRA y AUTOSAR decidieron fusionar estándares en una sola publicación, y MISRA se hizo cargo del trabajo en la nueva edición del estándar con todas las actualizaciones necesarias para C++17. El resultado de este trabajo es MISRA C++ 2023, publicado en octubre de 2023.

Directrices y reglas de MISRA C++ 2023

Las pautas de MISRA C++ 2023 se clasifican como Reglas o Directivas. Las reglas son aquellas pautas que contienen una definición completa de cumplimiento e incumplimiento. Para las Directivas, no es posible proporcionar la descripción completa necesaria para realizar una verificación de cumplimiento, ya que depende, por ejemplo, de las decisiones de diseño tomadas en el contexto de un proyecto específico.

Cada directriz se clasifica como una de las siguientes:

  • Obligatorio
  • Requerido
  • Asesor

Las reglas también se clasifican para el análisis de Decidibilidad y Alcance.

Las pautas obligatorias deben seguirse sin posibilidad de desviación. Las pautas requeridas pueden desviarse, suponiendo que se siga el procedimiento de desviación formal y que todos los problemas potenciales se hayan mitigado de otra manera. Las directrices de asesoramiento son una especie de recomendación que debe seguirse en la medida de lo posible.

El atributo Decidibilidad define si la regla es generalmente analizable por la herramienta automatizada o no. El atributo Alcance define si una guía debe verificarse analizando una sola unidad de traducción o todo el sistema.

Hay 179 pautas de MISRA C++ 2023, cuatro directivas y 175 reglas que están agrupadas en secciones correspondientes a las secciones del estándar C++, incluidas las siguientes:

  • Conceptos básicos
  • Conversiones estándar
  • Expresiones
  • Declaraciones
  • Funciones especiales de los miembros
  • Manejo de excepciones

Algunas de estas reglas se derivan de las Directrices de codificación de AUTOSAR o del antiguo MISRA C++ 2008. Sin embargo, las directrices de MISRA se centraron únicamente en la implementación, mientras que AUTOSAR también proporcionó recomendaciones relacionadas con el diseño, la infraestructura de la cadena de herramientas o la documentación. Generalmente, MISRA C++ 2023 está orientado a la semántica del código y a evitar errores sin dar demasiada orientación estilística.

Cómo lograr el cumplimiento de MISRA C++ 2023

MISRA C++ 2023 impone requisitos para seguir los procesos de cumplimiento definidos en el documento de Cumplimiento de MISRA. Es un documento separado compartido entre los estándares MISRA C y MISRA C++. La versión más reciente se lanzó en 2020 y reemplaza a la versión anterior de 2016.

MISRA Compliance introduce una colección de requisitos relacionados con el proceso de cumplimiento y la presentación de informes. Define informes especiales esperados como artefactos de cumplimiento.

  • El Plan de Cumplimiento de las Directrices es un documento que especifica todos los medios técnicos que se utilizarán para hacer cumplir las directrices.
  • El Plan de Recategorización de Lineamientos es un documento que describe todos los cambios en las categorías de lineamientos introducidos para el proyecto específico.
  • El Resumen de cumplimiento de las directrices es un informe que documenta el nivel de cumplimiento de cada directriz.

Además, el documento de Cumplimiento recomienda un proceso completo para manejar las desviaciones que incluye requisitos para registros de desviaciones, uso de permisos de desviaciones y una lista de razones por las cuales las desviaciones son aceptables.

Tener un conjunto estandarizado de requisitos para declarar que los proyectos cumplen con MISRA ayuda a las organizaciones a garantizar un nivel adecuado de confianza y a tener la capacidad de combinar los informes de cumplimiento al integrar múltiples módulos proporcionados por los contratistas, suponiendo que Comprobación de código MISRA C/C++ se ha realizado para cada uno de ellos.

Algunas de las directrices podrían comprobarse mediante el proceso de revisión de código, aunque sería engorroso. Otros, especialmente aquellos que requieren un análisis de todo el sistema, incluidas las pautas que requieren que se realicen análisis de datos y flujo de control en el conjunto completo del código fuente de la aplicación, son prácticamente imposibles de verificar manualmente. Por lo tanto, es importante utilizar herramientas automatizadas de análisis de código estático, como Parasoft. Prueba C / C ++, que brindan soporte completo para MISRA C++ 2023 para analizar el código según las pautas de MISRA y generar el conjunto adecuado de documentos de cumplimiento.

¿Por qué MISRA C++ 2023 es fundamental para un software seguro y protegido?

MISRA C++ tiene como objetivo proporcionar un subconjunto seguro del lenguaje C++. Esto se logra mediante varios requisitos y limitaciones en el código fuente de C++ para mejorar la seguridad de las aplicaciones.

Prevención de errores

El estándar C++ especifica ciertas situaciones como comportamiento indefinido, principalmente para permitir a los compiladores generar código más eficiente. Los compiladores pueden asumir que la situación de comportamiento indefinido nunca ocurrirá y realizar optimizaciones adicionales basadas en esa suposición. Esto conlleva el riesgo de que, si la situación se produce, el comportamiento del programa sea impredecible. Y en algunos casos, significa que el programa se comporta perfectamente bien al ejecutar las pruebas y falla en producción, lo que puede hacer que todo el proceso de verificación sea inútil. MISRA C++ proporciona pautas que directa o indirectamente protegen contra comportamientos indefinidos. Un caso de ejemplo sería evaluar el valor indeterminado de un objeto, contra el cual se protege mediante Regla 11.6.2 El valor de un objeto no debe leerse antes de haber sido establecido.

Mantenibilidad del código

Ciertos aspectos de la máquina abstracta se describen en el estándar C++ como definidos por la implementación. Eso significa que el comportamiento del código está bien definido y debe documentarse, pero puede diferir entre implementaciones.

Un programa que depende del comportamiento definido por la implementación puede resultar difícil de trasladar a otro destino. Un ejemplo de tal comportamiento sería el sizeof(int), lo que afecta el comportamiento de las operaciones aritméticas, como que todos los operandos con tipos más restringidos se promocionen antes de que ocurra la operación real. Al final, eso puede dar como resultado diferentes resultados de la operación aritmética dependiendo del objetivo de compilación. Las directrices de MISRA C++ protegen contra este tipo de problemas con sus reglas de conversión estándar, como las siguientes:

  • Regla 7.0.5 La promoción integral y las conversiones aritméticas habituales no cambiarán el signo ni la categoría de tipo de un operando.
  • Regla 7.0.6 La asignación entre tipos numéricos será apropiada.

Gestión de riesgos

Las pautas de MISRA también abordan una clase de riesgos potenciales causados ​​por la confusión del desarrollador o la comprensión incorrecta del código fuente C++ válido. Por ejemplo, el código if (x = y) es C++ perfectamente válido, pero es muy probable que sea el resultado de un error tipográfico en el que se utilizó accidentalmente el operador de asignación en lugar del operador de igualdad. Regla 8.18.2 No se debe utilizar el resultado de un operador de asignación garantiza que dicho código será informado y revisado para verificar su corrección.

Conclusión

Los estándares de seguridad funcional exigen el uso de un conjunto razonable de pautas de codificación y un subconjunto de lenguaje seguro por una razón. Las organizaciones que pueden afirmar que cumplen con MISRA C++ 2023 mejoran la seguridad de sus aplicaciones C++ modernas.

Consulte nuestro artículo Seminario web MISRA C++ 2023 para obtener más detalles sobre el contenido del documento MISRA C++ 2023 y las diferencias entre las pautas AUTOSAR y MISRA C++.

Descubra cómo su equipo de desarrollo puede obtener la cobertura MISRA más amplia.

“MISRA”, “MISRA C” y el logotipo del triángulo son marcas comerciales registradas de The MISRA Consortium Limited. © The MISRA Consortium Limited, 2021. Todos los derechos reservados.