Seminario web destacado: MISRA C++ 2023: todo lo que necesita saber | Vea ahora

Comprobación de código MISRA C / C ++

Foto de cabeza de Ricardo Camacho, Director de Cumplimiento de Seguridad y Seguridad
30 de noviembre.
10 min leer

Los estándares MISRA son puntos de referencia utilizados en varias industrias para medir los estándares de código fuente escritos por los desarrolladores. Siga leyendo para descubrir cómo el análisis estático de Parasoft y las soluciones SAST pueden ayudarlo a cumplir con los requisitos de cumplimiento de MISRA.

MISRA es el legendario estándar de codificación con el que los equipos de desarrollo miden una gran parte del software actual. pero exactamente que es MISRA?

  • ¿Cómo se desarrolló MISRA?
  • ¿Cómo evalúan los desarrolladores de C y C++ los estándares en su contra?
  • ¿Cómo saben que cumplen con las pautas de MISRA?

En este artículo, examinamos los convincentes antecedentes de cómo surgió MISRA. También respondemos las preguntas anteriores y revelamos cómo MISRA ayuda a los programadores de código C ++ y C a escribir código de manera eficiente mientras aborda las preocupaciones actuales de seguridad y protección.

Específicamente, miramos:

  • Definición y antecedentes de MISRA
  • Reglas y pautas de MISRA
  • Cumplimiento
  • Informes
  • Usar con código heredado

¿Qué es MISRA?

Los estándares MISRA contienen pautas de codificación y reglas para escribir software. Las industrias automotriz, aeroespacial y de defensa, médica, de automatización industrial y ferroviaria, entre otras, utilizan el estándar para ayudar a sus desarrolladores a escribir código fuente que garantice la seguridad y la confiabilidad en el software.

Debido a que los ingenieros de software integrado usan los lenguajes de programación C y C++ para escribir código para software crítico para la seguridad, los creadores del estándar MISRA los crearon para programadores que usan estos dos lenguajes.

Antecedentes

El consorcio Motor Industry Software Reliability Association (MISRA) está compuesto por varias empresas que comparten sus mejores prácticas de codificación C y C++. Es similar a la ISO (Organización Internacional de Normalización) y la IEC (Comisión Electrotécnica Internacional), que establecen pautas generales de cumplimiento de la industria, como estándares para el desarrollo de sistemas eléctricos/electrónicos.

ISO 26262, publicado en 2011, es el estándar internacional para certificar la seguridad de los vehículos de carretera electrónicos. Los sistemas de software que han logrado el cumplimiento de ISO/IEC pueden ser certificados como seguros por las autoridades de verificación.

MISRA, un consorcio de industrias relacionadas con la automoción, desarrolló sus primeras directrices en 1998, MISRA C:1998. El consorcio se formó como resultado del Programa de Investigación de Sistemas Críticos de Seguridad del Reino Unido, que el gobierno del Reino Unido instituyó para abordar algunos de los desafíos que enfrentó la industria automotriz debido al mayor uso de software en la fabricación y operación de vehículos. Algunas de las industrias originales que ayudaron a desarrollar el estándar, todas las cuales también son actualmente miembros activos del comité directivo, incluyeron:

  • Bentley Motors
  • Sistemas diesel Delphi
  • Ford Motor Company Ltd.
  • Horiba Mira Ltda.
  • Jaguar Land Rover
  • Protean Electric Ltd.
  • ricardo plc
  • La Universidad de Leeds
  • Visteon Ingeniería Servicios Ltd
  • ZF TRW

Aunque el consorcio creó originalmente el estándar para el industria del automóvil, otras industrias integradas han adoptado el estándar, incluidas aquellas que usan tecnología integrada que conecta dispositivos como Internet de las cosas (IoT) y sistemas IoT médicos.

El cómo y el por qué de MISRA

A principios de la década de 1990, la electrónica se estaba volviendo cada vez más importante en los automóviles. También lo era el software integrado que formaba parte integral de estos componentes electrónicos. Por lo tanto, los ingenieros y fabricantes comenzaron a darse cuenta de que la confiabilidad del software era de vital importancia, tanto por razones comerciales como de seguridad. ¡El desafío es aún mayor hoy porque el software para un solo automóvil puede implicar más de 100 millones de líneas de codificación!

Software en automóviles y camiones

Los fabricantes de automóviles utilizan software en las operaciones de motor y tren motriz. Supervisa y proporciona la cantidad correcta de combustible en los ICE (motores de combustión interna) y proporciona datos al ECM (módulo de control del motor, a veces llamado ECU o unidad de control del motor). Esta es la computadora automotriz principal que recopila información sobre el consumo de combustible, la potencia que genera el motor, las emisiones y otros datos vitales relacionados con el motor, esenciales para una conducción segura y eficiente. Los vehículos eléctricos (EV) y los vehículos híbridos tienen requisitos de software similares relacionados con el motor y el tren motriz.

Los fabricantes también emplean software para operar computadoras a bordo para los sensores omnipresentes en los vehículos actuales, incluido el monitoreo de puertas y ventanas, sistemas de control de clima y sensores de estacionamiento y tráfico. También los usan en sistemas críticos para la seguridad, como bolsas de aire y ABS.

Sin duda, más software relacionado con la operación está en el futuro de los vehículos de carretera, con ingenieros y diseñadores dedicando gran atención a las capacidades de conducción autónoma, la eficiencia energética mejorada y la seguridad mejorada.

Más allá de la industria del motor

Las industrias de todo el mundo aceptan las reglas MISRA C para escribir código C crítico para la seguridad y la protección. Las reglas y pautas inspiran confianza porque son legibles, concisas y se enfocan en lo esencial.

Si bien la aplicación del estándar MISRA no garantiza que el software esté libre de problemas de seguridad y calidad, ayuda a los ingenieros de software a escribir código que sea más seguro, más robusto, más portátil y más fácil de mantener.

Las pautas de MISRA también abordan las vulnerabilidades de seguridad, pero otros estándares de codificación como CERT C abordan específicamente las vulnerabilidades de seguridad escritas en el código.

Estándares de codificación MISRA para seguridad funcional

Hoy en día, los equipos de desarrollo emplean estándares de codificación como método para definir, administrar y utilizar un grupo de prácticas de codificación, con el objetivo principal de la coherencia. El objetivo principal de una regla de codificación es limitar el uso incorrecto del lenguaje para evitar que el desarrollador haga cosas "incorrectas" y que puedan ser potencialmente peligrosas.

Los desarrolladores pueden evitar muchos defectos en el software mediante la adopción de restricciones sensatas en el uso del lenguaje. Esto también da como resultado una uniformidad de estilo, que es valiosa como disciplina en un proyecto de software.

Versatilidad y vulnerabilidad de C y C ++

El aspecto de versatilidad de los lenguajes C y C++ permite que un desarrollador escriba código que puede ser involuntariamente incorrecto y posiblemente peligroso. Es fácil para él o ella escribir código que se adhiera a los requisitos del estándar del lenguaje, pero esto, no obstante, puede resultar en un comportamiento no deseado y bloqueos del programa. Por ejemplo, el código que accede a la memoria más allá de los parámetros de un proceso aritmético o de una matriz que genera violaciones de la memoria o de los límites.

Es importante identificar estos problemas potenciales. Sin embargo, el objetivo de MISRA es prevenir problemas, no solo identificarlos. Un compilador puede detectar algunos de ellos, pero usar una herramienta de análisis dedicada es más efectivo.

El estándar MISRA enfatiza que adherirse a las reglas de codificación es solo un componente para desarrollar software con éxito. Los desarrolladores deben integrar cada proyecto de programación en un entorno de ingeniería disciplinado que incluya flujos de trabajo de desarrollo metódicos y aplique herramientas de validación comprobadas en uso.

Pautas y reglas de lenguaje MISRA C y C ++ de uso común

Cada estándar MISRA incorpora un conjunto de parámetros y reglas de codificación, además de materiales de apoyo. Los materiales de apoyo son una parte complementaria del estándar y brindan información básica importante esencial para cualquier programador que desee obtener el cumplimiento.

Veamos los estándares de codificación C y C++ MISRA y sus breves descripciones.

MISRA C 2012. MISRA C 2012 se lanzó en 2013. Se basó en la experiencia de la interacción con miles de organizaciones y las mejores prácticas de los ingenieros de software para proporcionar las mejores pautas de codificación para el lenguaje de programación C.

La primera edición del estándar fue MISRA C 1998, evolucionando a lo largo de los años a MISRA C:2004 y luego a MISRA C:2012. Inicialmente, el estándar brindó soporte para C90 y evolucionó para ampliar sus pautas en soporte de C99, C11 y C18. MISRA C 2012 también realizó una serie de mejoras que redujeron la complejidad y el costo del cumplimiento.

  • MISRA C 2012 enmiendas para seguridad y protección. Con el lenguaje de programación C en evolución y para enfatizar que MISRA C 2012 era igualmente valioso en aplicaciones de seguridad, MISRA publicó varios apéndices y enmiendas de apoyo al estándar que ofrecían nuevas reglas y pautas para mejorar la cobertura de seguridad y vulnerabilidades de seguridad conocidas.

MISRA C 2023. Este es el último estándar MISRA C. Consolida MISRA C 2012 junto con todas las enmiendas y correcciones que se han publicado hasta la fecha. El estándar es compatible con el lenguaje de programación C, versiones C90, C99, C11 y C18, y reemplaza a MISRA C 2012.

MISRA C ++ 2008. Publicado en junio de 2008 y desarrollado con soporte para C++98 y C++11. Aunque el lenguaje de programación C siguió siendo el lenguaje de codificación predominante, este estándar habló del mayor desarrollo de las aplicaciones C++. Sin embargo, muchas empresas optaron por estandarizar utilizando el estándar de codificación AUTOSAR C++ 14 porque admite la versión C++14 del lenguaje de codificación C++ en lugar del antiguo C11. La versión de codificación C ++, oficialmente ISO / IEC 14882: 2014, se publicó en diciembre de 2014.

MISRA C ++ 2023. AUTOSAR y MISRA unieron fuerzas para producir la próxima generación del estándar de codificación C++. MISRA C++ 2023 se lanzó en octubre de 2023 y ofrece a los ingenieros de software la capacidad de escanear su código moderno C++17 y C++20 en busca de problemas de seguridad.

Cumplimiento de MISRA 2020. Este documento establece un marco para cumplir con el estándar de codificación MISRA. Reemplaza los requisitos de cumplimiento y de proceso y desviación en versiones anteriores de la norma.

Cómo lograr el cumplimiento de MISRA mediante el análisis estático

El estándar de codificación MISRA proporciona reglas y pautas completas para que las empresas puedan proteger sus aplicaciones contra errores de tiempo de ejecución y fallas de software y hacerlas menos propensas a vulnerabilidades de seguridad y protección.

El cumplimiento del estándar MISRA ayuda a mejorar la sintaxis, crea conformidad con el código y facilita la portabilidad. Para equipos que no usar análisis estático or SAST (pruebas de seguridad de aplicaciones estáticas) soluciones o herramientas, la validación del cumplimiento puede ser problemática. Parasoft simplifica el proceso, que es fundamental para garantizar la entrega oportuna del software y la seguridad de la codificación.

Introducción al análisis estático

Para lograr un cumplimiento exitoso, las soluciones deben proporcionar lo siguiente.

  • Cumplimiento dinámico al verificar el cumplimiento de MISRA a través del análisis de código estático cada vez que los codificadores modifican el software.
  • Integración de análisis estático en su canalización optimizada de CI/CD con pruebas continuas que ofrecen software de alta calidad rápidamente.
  • Validación de cumplimiento mediante la creación de resúmenes e informes detallados de alto nivel a los que puede consultar rápidamente.

Es importante aplicar el cumplimiento de MISRA durante todo el ciclo de vida del desarrollo de software, incluso durante la implementación del código para las pruebas de cambio a la izquierda y para acelerar las revisiones del código. Esto proporciona mejoras de calidad, así como métricas de progreso, trazabilidad continua y cumplimiento.

Automatizar la documentación y los informes de cumplimiento según MISRA Compliance 2020 es un factor clave para conservar recursos y tiempo, y para evitar la frustración cuando se trata de corregir las violaciones en sí.

Las herramientas como Parasoft se pueden configurar para detectar un subconjunto de todo el estándar MISRA. Esto reduce la cantidad de ruido producido por el análisis y aumenta el enfoque en abordar violaciones graves.

Demostrar cumplimiento con los informes

Uno de los problemas asociados con las empresas que logran el cumplimiento de MISRA ha sido la ausencia de un mecanismo estándar para demostrar el cumplimiento. Para abordar este problema, MISRA publicó el "Cumplimiento de MISRA 2020: Lograr el cumplimiento de las pautas de codificación de MISRA" mencionado anteriormente. Proporciona una definición más concreta del cumplimiento de MISRA e identifica varios entregables necesarios para demostrar el cumplimiento del estándar MISRA.

El Resumen de Cumplimiento de las Pautas (GCS). Un registro obligatorio y principal del cumplimiento general del proyecto. La GCS incluye una entrada para cada directriz, su nivel de cumplimiento, cualquier desviación y/o recategorización.

Captura de pantalla del Informe de cumplimiento de MISRA C 2023 para un proyecto que enumera la pauta, la categoría (consulta o requerida), Cumplimiento (cumple con violaciones, no cumple o cumple), número de violaciones y número de desviaciones.

El plan de reclasificación de la guía. Se deben seguir todas las pautas obligatorias para lograr el cumplimiento. Sin embargo, las pautas Obligatorias y de Asesoramiento se pueden volver a clasificar en categorías más estrictas, como de Asesoría a Obligatorio. Sin embargo, solo las pautas de aviso se pueden recategorizar en categorías menos estrictas, por ejemplo, de aviso a desaplicado.

Captura de pantalla de un plan de recategorización de la guía MISRA utilizando la prueba Parasoft C / C ++ como herramienta de análisis. El plan enumera las descripciones de las pautas de MISRA con categorías originales y revisadas.

Informe de desviaciones. Su proyecto puede tener desviaciones de las pautas o violaciones de las reglas y aún así ser considerado en cumplimiento si las desviaciones están justificadas, documentadas en el informe y no afectan la seguridad.

Captura de pantalla del Informe de desviación de MISRA utilizando la prueba Parasoft C / C ++ como herramienta de análisis. El informe enumera cada regla y estado de Sin reglas habilitadas, Sin desviaciones o desviaciones. Para aquellos con desviaciones, proporciona detalles como el ID de la regla, el tipo de desviación y el historial de modificaciones.

Plan de aplicación de las directrices. Demuestra cómo verificar cada pauta de MISRA. En el contexto del cumplimiento de MISRA con Parasoft, el GEP asigna las pautas de MISRA a las reglas de análisis de código de Parasoft y la funcionalidad DTP.

Captura de pantalla del plan de cumplimiento de las pautas de MISRA que enumera las pautas, la categoría, la descripción, el compilador, los ID de regla de Parasoft para MISRA C 2023 y los detalles de revisión manual.

Certificado para su uso en software de seguridad crítica, incluso en dispositivos médicos

Certificado por TÜV SÜD, C/C++test automatiza la aplicación y el seguimiento de criterios de codificación de análisis como MISRA. Esto incluye una plataforma de prueba unitaria que integra la creación de pruebas y su ejecución, y también informes de cobertura. Luego, el centro centralizado de análisis e informes DTP de Parasoft, que también cuenta con la certificación TÜV, agrega y correlaciona análisis y datos de prueba de Parasoft C / C ++test.

Cómo lograr el cumplimiento total de MISRA con el código heredado, incluidos los sistemas integrados

Es un hecho que los desarrolladores reutilizan el código heredado para software crítico para la seguridad. Sin embargo, reutilizar el código heredado y lograr el cumplimiento completo de MISRA C 2023 puede ser abrumador.

El cumplimiento de MISRA es mucho más fácil de administrar y lograr a medida que se escribe el código. El documento MISRA C 2023 incluso brinda una advertencia que podemos interpretar al aplicarlo a programas heredados:

“… Es probable que un proyecto que verifica el cumplimiento de MISRA al final de su ciclo dedique una cantidad considerable de tiempo a volver a codificar, revisar y probar. Por lo tanto, se espera que el proceso de desarrollo de software requiera la aplicación temprana de los principios de MISRA C ".

Teniendo en cuenta la reutilización del software heredado, MISRA Consortium Limited, la organización responsable de crear y mantener el estándar MISRA, creó MISRA Compliance: 2020. Este documento proporciona orientación para los desarrolladores que escriben código nuevo y para aquellos que utilizan código heredado o adoptado.

Sin embargo, la distinción puede no ser del todo clara. Por ejemplo, durante el desarrollo de un producto, un codificador escribe software para un prototipo solo para descubrir que el proyecto necesita el cumplimiento de MISRA, por lo que debe retroceder y aplicar las pautas.

Si bien esto no aplica MISRA al código heredado, es similar en el sentido de que cuando se escanea o analiza el código, los resultados revelan miles, si no decenas de miles, de infracciones. Agregue esto al hecho de que los escritores de software integrado a menudo afirman que desarrollar un código totalmente compatible es demasiado difícil y que la tarea de cumplir con MISRA puede parecer abrumadora. Pero es posible encontrar un término medio realista entre intimidación y cumplimiento.

Considere el objetivo final

MISRA Compliance 2020 ayuda a aclarar cómo probar y demostrar conformidad al final de un proyecto. Es imprescindible entregar los cuatro documentos obligatorios. Considere lo siguiente para el cumplimiento del código heredado y nuevo.

  1. ¿Ha establecido un GRP (Plan de Recategorización de Directrices) al inicio del proyecto? Los estándares MISRA sugieren negociar con el cliente y también crear varios GRP adaptados al código adoptado, que los desarrolladores pueden usar sin modificar, así como para el nuevo código.
  2. ¿Ha revisado el cliente las plantillas de GPS (Resumen de cumplimiento de directrices) al inicio del proyecto? ¿Están completos y son aceptables?

Parasoft automatiza los informes necesarios para ayudar a las empresas a cumplir con la agenda de cumplimiento de MISRA 2020.

Un enfoque incremental

Es inteligente establecer un flujo de trabajo para corregir las infracciones en un horario razonable sin interrumpir el desarrollo del código y, por lo tanto, degradarlo. Las recomendaciones cruciales incluyen:

  • Establecer una línea de base. Después de la exploración inicial, marque las infracciones como "abordar más tarde", estableciendo esto como una línea de base. A partir de ese momento, cuando los programadores desarrollen un código nuevo, mantenga una estrategia de "no nuevas infracciones".
  • Establezca una fecha límite. Establezca una fecha después de la cual los desarrolladores deben haber resuelto todas las infracciones para cada archivo fuente.
  • Priorizar según la gravedad. El líder del equipo selecciona las infracciones en función de su importancia y los desarrolladores corrigen todas las que les asigna.

Para facilitar esto, el centro de informes DTP de Parasoft incluye un panel de estado de cumplimiento.

Calificación de la herramienta

El objetivo de calificar herramientas es certificar que son válidas para el uso previsto. Incluye prueba de cómo el equipo llegó a clasificarlos y la razón detrás de ello. La prueba C/C++ y DTP de Parasoft han sido certificadas por TÜV SÜD para su uso en aplicaciones críticas para la seguridad. Existe un kit de calificación de herramientas para algunos de los estándares de proceso más estrictos y sus requisitos, como DO-178C.

Capacitación y competencia del personal

El estándar MISRA también enfatiza la competencia, la experiencia y la capacitación del personal como factores clave para evaluar la preparación del producto. Esto incluye reconocer los riesgos de infracciones y configurar y utilizar correctamente las herramientas de desarrollo y el análisis estático.

Conclusión

Es importante respaldar el cumplimiento de MISRA durante todo el ciclo de vida del desarrollo de software. Alcanzar el cumplimiento de MISRA es más fácil con la solución integral de Parasoft. Con el cumplimiento continuo, la trazabilidad y la documentación automatizada, los equipos pueden ahorrar tiempo, recursos y aliviar las frustraciones que surgen con el cumplimiento de esta guía.

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.