Logotipo de Parasoft Buscar

¡Descubre GoogleTest, con certificación TÜV y la tecnología Agentic AI para pruebas de C/C++!
Obtenga los detalles »

Blog de Parasoft

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

By michał rozenau • Enero 5, 2024 • 5 minutos de lectura
Enero 5, 2024 | 5 minutos de lectura
By michał rozenau
Texto a la izquierda: Guía MISRA C++ 2023: todo lo que necesita saber. A la derecha hay una imagen en 3D de una caja delineada en azul eléctrico, amarillo y rosa con una marca de verificación de color rosa intenso que la atraviesa.

¡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 moderno lenguaje C++ a desarrollar software crítico para la seguridad. Mediante el nuevo estándar MISRA, los desarrolladores pueden cumplir con los requisitos de análisis estático establecidos por estándares de seguridad funcional como IEC 6108 o ISO 26262, garantizando y documentando el cumplimiento de MISRA para sus aplicaciones de software.

¿Qué es MISRA C++ 2023?

AUTOSAR y MISRA colaboraron en la elaboración de un conjunto de directrices de codificación para facilitar la programación segura mediante 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
  • Obligatorio
  • 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.

Existen 179 directrices de MISRA C++ 2023, cuatro directivas y 175 reglas que se agrupan en secciones que corresponden 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 AUTOSAR o de la antigua MISRA C++ 2008. Sin embargo, las directrices de MISRA se centraban únicamente en la implementación, mientras que AUTOSAR también ofrecía recomendaciones relacionadas con el diseño, la infraestructura de la cadena de herramientas y la documentación. En general, MISRA C++ 2023 se orienta hacia la semántica del código y hacia la prevención de errores, sin ofrecer demasiadas directrices estilísticas.

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. Se trata de un documento independiente compartido entre los estándares MISRA C y MISRA C++. La versión más reciente se publicó 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.

Disponer de un conjunto estandarizado de requisitos para certificar que los proyectos cumplen con la normativa MISRA ayuda a las organizaciones a garantizar un nivel de confianza adecuado y a tener la capacidad de combinar los informes de cumplimiento al integrar varios módulos proporcionados por contratistas, siempre que se haya realizado la comprobación del código MISRA C/C++ para cada uno de ellos.

Algunas de las directrices podrían verificarse mediante el proceso de revisión de código, aunque resultaría engorroso. Otras, especialmente aquellas que requieren un análisis completo del sistema, incluidas las que exigen un análisis del flujo de datos y de control sobre 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 estático de código, como Parasoft C/C++test , que ofrecen compatibilidad total con MISRA C++ 2023 para analizar el código según las directrices de MISRA y generar la documentación de cumplimiento correspondiente.

¿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 que los compiladores generen 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 ocurre, 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 directrices que protegen directa o indirectamente contra el comportamiento indefinido. Un caso de ejemplo sería la evaluación del valor indeterminado de un objeto, que está protegido por la Regla 11.6.2 El valor de un objeto no debe leerse antes de que se haya 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.

Consulta nuestro seminario web MISRA C++ 2023 para obtener más detalles sobre el contenido del documento MISRA C++ 2023 y las diferencias entre las directrices AUTOSAR y MISRA C++.

Descubra cómo su equipo de desarrollo puede obtener la cobertura MISRA más amplia.
Hable con un experto en cumplimiento

«MISRA», «MISRA C» y el logotipo triangular son marcas registradas de The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Todos los derechos reservados.