¡Descubre GoogleTest, con certificación TÜV y la tecnología Agentic AI para pruebas de C/C++!
Obtenga los detalles »
Blog de Parasoft
¡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.
Saltar a la sección
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.
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 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.
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:
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:
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.
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.
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.
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.
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.
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:
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.
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++.
«MISRA», «MISRA C» y el logotipo triangular son marcas registradas de The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Todos los derechos reservados.