Articulo de referencia

MISRA C

MISRA C es un conjunto de directrices de desarrollo de software para el lenguaje de programación C , desarrollado por el Consorcio MISRA . Sus objetivos son facilitar la segurid...

MISRA C es un conjunto de directrices de desarrollo de software para el lenguaje de programación C , desarrollado por el Consorcio MISRA . Sus objetivos son facilitar la seguridad , la portabilidad y la fiabilidad del código en el contexto de los sistemas embebidos , específicamente aquellos sistemas programados en ISO C / C90 / C99 . [ 1 ]

También existe un conjunto de directrices para MISRA C++ que no se tratan en este artículo.

Historia

  • Borrador: 1997 [ 2 ]
  • Primera edición: 1998 (reglas, obligatorias/recomendativas)
  • Segunda edición: 2004 (reglas, obligatorias/recomendativas)
  • Tercera edición: 2012 (directivas; reglas, Decidible/Indecidible)
  • Cumplimiento de MISRA: 2016, actualizado en 2020
  • MISRA C:2023 (MISRA C Tercera edición, Segunda revisión)

En las dos primeras ediciones de MISRA-C (1998 y 2004), todas las Directrices se consideraban Reglas. Con la publicación de MISRA C:2012, se introdujo una nueva categoría de Directriz: la Directiva , cuyo cumplimiento es más susceptible de interpretación o se refiere a cuestiones procesales o de procedimiento.

Adopción

Aunque originalmente se concibió específicamente para la industria automotriz, MISRA C ha evolucionado hasta convertirse en un modelo ampliamente aceptado de mejores prácticas por desarrolladores líderes en sectores como el automotriz, aeroespacial, telecomunicaciones, dispositivos médicos, defensa, ferroviario y otros. Por ejemplo:

  • Los estándares de codificación C++ del proyecto Joint Strike Fighter [ 3 ] se basan en MISRA-C:1998.
  • Los estándares de codificación C del Laboratorio de Propulsión a Chorro de la NASA [ 4 ] se basan en MISRA-C:2004.
  • La norma IEC 81001-5-1:2021 , Seguridad, eficacia y protección del software sanitario y de los sistemas informáticos sanitarios - Parte 5-1: Seguridad - Actividades en el ciclo de vida del producto, cita a MISRA C como ejemplo de buenas prácticas de codificación segura.
  • La norma ISO 26262 sobre seguridad funcional en vehículos de carretera cita a MISRA C como un subconjunto apropiado del lenguaje C:
    • ISO 26262-6:2011 Parte 6: Desarrollo de productos a nivel de software [ 5 ] cita MISRA-C:2004 y MISRA AC AGC.
    • ISO 26262-6:2018 Parte 6: Desarrollo de productos a nivel de software [ 6 ] cita MISRA C:2012.
  • La especificación general de software AUTOSAR (SRS_BSW_00007) también cita MISRA C:
    • La especificación general de software AUTOSAR 4.2 [ 7 ] requiere que si la implementación del módulo BSW está escrita en lenguaje C, entonces debe ajustarse al estándar MISRA C:2004.
    • La especificación general de software AUTOSAR 4.3 [ 8 ] requiere que si la implementación del módulo BSW está escrita en lenguaje C, entonces debe ajustarse al estándar MISRA C:2012.

Clasificación y categorización de las directrices

Cuando se inicia un nuevo proyecto de software, se debe utilizar el estándar MISRA más reciente. Los estándares anteriores siguen estando disponibles para su uso con proyectos de software heredados que necesiten hacer referencia a ellos. [ 9 ]

Clasificación

Cada directriz se clasifica [ 10 ] como Obligatoria (novedad para MISRA C:2012), Requerida o Recomendada . Además, el documento de Cumplimiento de MISRA permite que las directrices recomendadas se desapliquen .

  • Las directrices obligatorias deberán cumplirse siempre.
  • Se deberán cumplir las directrices requeridas , a menos que estén sujetas a una desviación.
  • Las directrices de asesoramiento se consideran una buena práctica, pero el cumplimiento es menos formal.

Categorización

Las reglas se pueden dividir lógicamente en varias categorías:

  • Para evitar posibles diferencias entre compiladores, por ejemplo, el tamaño del inttipo de C puede variar, pero int16_t(estandarizado en C99) siempre es de 16 bits.
  • Evitar el uso de funciones y estructuras propensas a fallar, por ejemplo, mallocpuede provocar fallos.
  • Producir código que sea mantenible y depurable, por ejemplo, mediante convenciones de nomenclatura y comentarios.
  • Reglas de buenas prácticas.
  • La complejidad limita.

Alcance

MISRA C:2012 clasifica cada directriz por separado como Unidad de Traducción Única o Sistema . [ 10 ]

Decidibilidad

MISRA C:2012 clasifica las reglas (pero no las directivas ) como Decidibles o Indecidibles .

Lograr el cumplimiento

Cumplimiento de MISRA

MISRA publicó documentos para brindar orientación adicional sobre cómo comprender y lograr el cumplimiento de las normas de MISRA.

  • MISRA Compliance:2016 fue publicado por MISRA en abril de 2016. [ 11 ]
  • MISRA Compliance:2020 , edición revisada, se publicó en febrero de 2020. [ 12 ]

Cumplimiento

Para que un software pueda considerarse conforme a las Directrices MISRA C, deberá cumplir con todas las normas obligatorias y con todas las normas y directivas requeridas , o bien, estar sujetas a una excepción formal. Las normas de recomendación pueden no aplicarse sin una excepción formal, pero esto debe quedar registrado en la documentación del proyecto.

Nota: A efectos de cumplimiento, no se distingue entre normas y directivas .

Desviaciones

Muchas reglas de MISRA C pueden considerarse directrices, ya que, bajo ciertas condiciones, los ingenieros de software pueden desviarse de ellas y aun así cumplir con el estándar. Las desviaciones deben documentarse en el código o en un archivo. Además, se debe demostrar que el ingeniero de software ha considerado la seguridad del sistema y que desviarse de la regla no tendrá un impacto negativo. Los requisitos para las desviaciones también incluyen:

  • La regla se desvió de.
  • Justificación de la desviación. [ 13 ]

Documentos publicados

MISRA C:1998

La primera edición de MISRA C, "Directrices para el uso del lenguaje C en software para vehículos", que se publicó en 1998 y se conoce oficialmente como MISRA-C:1998 . [ 14 ]

MISRA-C:1998 tiene 127 reglas, de las cuales 93 son obligatorias y 34 son de carácter consultivo; las reglas están numeradas secuencialmente del 1 al 127.

MISRA C:2004

En 2004 se publicó una segunda edición de las "Directrices para el uso del lenguaje C en sistemas críticos ", o MISRA-C:2004 , con muchos cambios sustanciales en las directrices, incluida una renumeración completa de las reglas.

MISRA-C:2004 contiene 142 reglas, de las cuales 122 son "obligatorias" y 20 son "recomendatorias"; están divididas en 21 categorías temáticas, desde "Entorno" hasta "Fallos en tiempo de ejecución".

MISRA C:2012

Documento principal

En 2013 se publicó la tercera edición, MISRA C:2012. MISRA C:2012 amplía la compatibilidad con la versión C99 del lenguaje C (manteniendo las directrices para C90), además de incluir una serie de mejoras que pueden reducir el coste y la complejidad del cumplimiento, al tiempo que facilitan el uso seguro y coherente de C en sistemas críticos. [ 15 ]

MISRA-C:2012 contiene 143 reglas y 16 directivas (es decir, reglas cuyo cumplimiento es más susceptible de interpretación o que se refieren a cuestiones procesales o de procedimiento); cada una de ellas se clasifica como obligatoria , requerida o consultiva . Se clasifican por separado como Unidad Única de Traducción o Sistema . Además, las reglas se clasifican como Decidibles o Indecidibles .

Enmienda 1

En abril de 2016, MISRA publicó (como descarga gratuita) MISRA C:2012 - Enmienda 1: Directrices de seguridad adicionales [ 16 ] que agregó catorce nuevas directrices de seguridad .

Enmienda 2

En febrero de 2020, MISRA publicó (como descarga gratuita) MISRA C:2012 - Enmienda 2: Actualizaciones para la funcionalidad principal de ISO/IEC 9899:2011/18 [ 17 ] que agrega mapeo para los comportamientos no definidos, no especificados y definidos por la implementación dentro de C11/C18.

Documentos justificativos

MISRA ha publicado los siguientes anexos para dar soporte a MISRA C:2012:

  • MISRA C:2012 - Anexo 1: Asignaciones de reglas , [ 18 ] que contiene asignaciones de reglas bidireccionales entre MISRA C:2004 y la nueva versión. Su objetivo es ayudar a los usuarios en la migración.
  • MISRA C:2012 - Anexo 2: Cobertura de MISRA C:2012 según ISO/IEC TS 17961:2013 "C Secure" [ 19 ]
  • MISRA C:2012 - Anexo 3: Cobertura de MISRA C:2012 frente a CERT C [ 20 ]

MISRA C:2023

En mayo de 2023, MISRA publicó MISRA C:2023 (MISRA C Tercera edición, Segunda revisión) que incorpora las Enmiendas 2 a 4 (AMD2, AMD3, AMD4) y ​​la Corrección Técnica 2 (TC2) e incorpora soporte para las características de lenguaje C11 y C17 . [ 21 ]

MISRA C:2025

En marzo de 2025, MISRA publicó MISRA C:2025.

Suite de ejemplo

Un conjunto de ejemplos (para MISRA-C:2004 y MISRA C:2012) está disponible en el repositorio GitLab de MISRA [ 22 ] (se requiere iniciar sesión). Esto permite a los usuarios de las herramientas evaluar y comparar el soporte de verificación que ofrecen las distintas herramientas de MISRA; además, proporciona a los implementadores de herramientas algunas pautas sobre la intención de las Directrices de MISRA.

Herramientas

Aunque existen muchas herramientas de software que afirman comprobar el código para verificar su "conformidad con MISRA", no existe un proceso de certificación MISRA. [ 23 ]

La mayoría de las directrices se pueden comprobar utilizando herramientas que realizan análisis de código estático . Las directrices restantes requieren el uso de análisis de código dinámico .

Entre las herramientas que comprueban el código para verificar su conformidad con MISRA se incluyen:

Los compiladores de C/C++ que admiten la conformidad con MISRA incluyen:

Crítica

Algunos resultados de investigaciones ponen en duda la eficacia de MISRA C 2004.

En un artículo que compara trabajos anteriores sobre MISRA C:1998 con MISRA C:2004, Les Hatton llega a la conclusión de que: [ 30 ]

Ante la creciente influencia del estándar MISRA C, este artículo intenta evaluar si se han corregido satisfactoriamente las deficiencias importantes del estándar original. Lamentablemente, no es así, y la importante relación entre resultados reales y falsos positivos no es mucho mejor en MISRA C 2004 que en MISRA C 1998, siendo inaceptablemente baja en ambas versiones.

Continúa afirmando: [ 30 ]

En su forma actual, los únicos que parecen beneficiarse de la actualización MISRA C 2004 son los proveedores de herramientas, y cabe esperar que en futuras revisiones se tomen medidas para simplificar la redacción y reducir la tasa de falsos positivos, prestando más atención a los datos experimentales publicados y evitando la tentación de inventar reglas basándose en que parezcan una buena idea.

Un estudio realizado en la TU Delft por Cathal Boogerd y Leon Moonen evalúa empíricamente el valor de MISRA C:2004. Llega a resultados similares: [ 31 ]

A partir de los datos obtenidos, podemos realizar las siguientes observaciones clave. Primero, hay 9 de las 72 reglas para las que se observaron violaciones que funcionan significativamente mejor (α = 0,05) que un predictor aleatorio para localizar líneas relacionadas con fallas. Las tasas de verdaderos positivos para estas reglas oscilan entre el 24 % y el 100 %. Segundo, observamos una correlación negativa entre las violaciones de las reglas MISRA y las fallas observadas. Además, 29 de las 72 reglas tuvieron una tasa de verdaderos positivos de cero. Si se considera junto con la observación de Adams de que todas las modificaciones tienen una probabilidad distinta de cero de introducir una falla, esto hace posible que la adhesión al estándar MISRA en su conjunto hubiera hecho que el software fuera menos confiable.

Véase también

Referencias

  1. "MISRA aclara los usos seguros del lenguaje C" . www.misra.org.uk. Archivado del original el 4 de agosto de 2020. Consultado el 9 de octubre de 2019 .
  2. En la primavera de 1997, los ingenieros de software de Austin Rover Group (ARG) enviaron un borrador del estándar de codificación C a Programming Research Ltd (PRL) para su revisión. La revisión fue realizada por David Blyth, entonces consultor sénior de PRL, quien propuso reemplazar el borrador con un conjunto de reglas de codificación considerablemente más rigurosas. Dichas reglas, con algunas modificaciones menores, constituyeron la base de la primera edición de MISRA C.
  3. "Estándares de codificación C++ para vehículos aéreos de combate de ataque conjunto" (PDF) . Consultado el 16 de julio de 2019 .
  4. "Estándar de codificación institucional del JPL para el lenguaje de programación C" (PDF) . Consultado el 16 de julio de 2019 .
  5. "ISO 26262-6:2011 Vehículos de carretera - Seguridad funcional - Parte 6: Desarrollo de productos a nivel de software" . iso.org . ISO . Consultado el 16 de julio de 2019 .
  6. "ISO 26262-6:2018 Vehículos de carretera - Seguridad funcional - Parte 6: Desarrollo de productos a nivel de software" . iso.org . ISO . Consultado el 16 de julio de 2019 .
  7. "Especificación general del software AUTOSAR 4.2" (PDF) . autosar.org . Archivado del original (PDF) el 20 de septiembre de 2018. Consultado el 16 de julio de 2019 .
  8. "Especificación general de los módulos de software básicos de AUTOSAR 4.3" (PDF) . autosar.org . AutoSAR. 30 de noviembre de 2016. Archivado del original (PDF) el 20 de septiembre de 2018. Consultado el 16 de julio de 2019 .
  9. "Publicaciones de MISRA" . Archivado del original el 14 de junio de 2016. Consultado el 18 de junio de 2016 .
  10. 1 2 "Hoja informativa: MISRA C:2012 (PDF)" (PDF) . programmingresearch.com . Consultado el 10 de junio de 2013 .
  11. "Cumplimiento de MISRA: 2016 (PDF)" . MISRA . Consultado el 22 de julio de 2016 .
  12. "Cumplimiento de MISRA: 2020 (PDF)" (PDF) . MISRA . Consultado el 8 de abril de 2020 .
  13. "Lograr el cumplimiento de MISRA C:2012" . Parasoft . Consultado el 29 de mayo de 2017 .
  14. "Una breve historia de MISRA C" . MISRA. 18 de marzo de 2013. Archivado del original el 7 de junio de 2017. Consultado el 30 de junio de 2014 .
  15. "Se anuncia la fecha de lanzamiento de MISRA C:2012" . MISRA. 26 de febrero de 2013. Consultado el 10 de junio de 2013 .
  16. "MISRA C:2012 - Enmienda 1 (PDF)" . MISRA. Abril de 2016. Consultado el 31 de octubre de 2019 .
  17. "MISRA C:2012 - Enmienda 2 (PDF)" . MISRA. Febrero de 2020. Consultado el 6 de enero de 2021 .
  18. "MISRA C:2012 - Anexo 1: Mapeo de reglas (PDF)" .
  19. "MISRA C:2012 - Anexo 2: Cobertura de MISRA C:2012 según ISO/IEC TS 17961:2013 "C Secure" (PDF)" .
  20. "MISRA C:2012 - Anexo 3: Cobertura de MISRA C:2012 frente a CERT C (PDF)" .
  21. "MISRA" .
  22. Repositorio de MISRA en GitLab
  23. "Lista de preguntas frecuentes de MISRA C." Archivado el 6 de julio de 2017 en Wayback Machine del Consorcio MISRA.
  24. "Helix QAC para C y C++ | Perforce" .
  25. "Perforce Software, respaldada por Clearlake Capital, adquirirá Rogue Wave Software | Perforce" .
  26. "Klocwork para C, C++, C#, Java y JavaScript | Perforce" .
  27. "Configuraciones de prueba integradas de C/C++" . Parasoft. 17 de octubre de 2022. Consultado el 9 de marzo de 2023 .
  28. Verificación de conformidad MISRA, PC-lint/FlexeLint, Gimpel Software.
  29. Idiomas y estándares; iar.com
  30. 1 2 Subconjuntos lingüísticos en un contexto industrial: una comparación de MISRA C 1998 y MISRA C; Les Hatton; Universidad de Kingston; 2004.
  31. Evaluación del valor de los estándares de codificación: un estudio empírico; CJ Boogerd y L. Moonen; Universidad Tecnológica de Delft; 2008.
  • Sitio web oficialEdita esto en Wikidata
  • "Introducción a MISRA C" . embedded.com. Julio de 2002.
  • "MISRA C: Más seguro es mejor" . Revista Electronic Design. 3 de febrero de 2003.
  • "Comentario sobre la primera edición de las directrices MISRA C" . knosof.co.uk.
  • "Nueva versión de MISRA C: ¿Por qué debería importarte?" . Revista Electronic Design. 25 de febrero de 2013.
  • "MISRA C:2012: Muchas buenas razones para cambiar" . Revista Electronic Design. 25 de febrero de 2013.
  • "Hoja informativa MISRA C:2012" (PDF) . programmingresearch.com.
  • "MISRA C:2012 garantiza la seguridad del software para automóviles" . Revista EE Times.
  • "Cumplimiento de MISRA C: Generación de código" . Mathworks. Archivado del original el 8 de diciembre de 2015. Consultado el 7 de febrero de 2016 .
Obtenido de " https://en.wikipedia.org/w/index.php?title=MISRA_C&oldid=1358088659 "