stringtranslate.com

Misra C

MISRA C es un conjunto de pautas 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 confiabilidad del código en el contexto de los sistemas integrados , específicamente aquellos sistemas programados en ISO C /C90/ C99 . [1 ]

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

Historia

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 Directrices: las Directivas cuyo cumplimiento está más abierto a la interpretación o se relaciona con cuestiones procesales o de procedimiento.

Adopción

Aunque originalmente estaba destinado específicamente a la industria automotriz, MISRA C ha evolucionado hasta convertirse en un modelo ampliamente aceptado de mejores prácticas por los principales desarrolladores de sectores como el automotriz, aeroespacial, telecomunicaciones, dispositivos médicos, defensa, ferrocarriles y otros. Por ejemplo:

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 aún están disponibles para su uso en proyectos de software antiguos que necesitan hacer referencia a él. [9]

Clasificación

Cada directriz se clasifica [10] como obligatoria (novedad en MISRA C:2012), obligatoria o consultiva . Además, el documento de cumplimiento de MISRA permite que las directrices consultivas no se apliquen .

Categorización

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

Alcance

La norma MISRA C:2012 clasifica por separado cada directriz 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 para comprender y lograr el cumplimiento de MISRA.

Cumplimiento

Para que un software pueda considerarse conforme a las Directrices MISRA C, se deben cumplir todas las normas obligatorias y todas las normas y directivas obligatorias o deben estar sujetas a una desviación formal. Las normas recomendadas pueden dejar de aplicarse sin una desviación formal, pero esto debe quedar registrado en la documentación del proyecto.

Nota: Para efectos de cumplimiento, no existe distinción entre reglas y directivas .

Desviaciones

Muchas reglas de MISRA C pueden caracterizarse como pautas porque, en determinadas condiciones, los ingenieros de software pueden desviarse de las reglas y, aun así, considerarse que cumplen con el estándar. Las desviaciones deben documentarse en el código o en un archivo. Además, se debe proporcionar una prueba de 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:

Documentos publicados

Misra C:1998

La primera edición de MISRA C, "Directrices para el uso del lenguaje C en software basado en 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 consultivas; las reglas están numeradas en secuencia del 1 al 127.

MISRA C:2004

En 2004, se produjo una segunda edición, "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 "recomendadas"; están divididas en 21 categorías temáticas, desde "Entorno" hasta "Errores en tiempo de ejecución".

MISRA C:2012

Documento principal

En 2013 se publicó la tercera edición, MISRA C:2012, que amplía el soporte a 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 favorecen un uso coherente y seguro de C en sistemas críticos. [15]

MISRA-C:2012 contiene 143 reglas y 16 "directivas" (es decir, reglas cuyo cumplimiento está más abierto a la interpretación o se relaciona con cuestiones procesales o de procedimiento); cada una de las cuales 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: Pautas de seguridad adicionales [16] que agregó catorce nuevas pautas 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 de apoyo

MISRA ha publicado las siguientes adendas para apoyar MISRA C:2012:

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 Corrigendum Técnica 2 (TC2) e incorpora soporte para las características lingüísticas C11 y C17 . [21]

Ejemplo de suite

Hay disponible un conjunto de ejemplos (para MISRA-C:2004 y MISRA C:2012) 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, ofrece a los implementadores de herramientas cierta orientación sobre la intención de las Directrices de MISRA.

Herramientas

Si bien existen muchas herramientas de software que afirman verificar el código para determinar su “conformidad con MISRA”, no existe un proceso de certificación MISRA. [23]

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

Las herramientas que verifican el código para verificar su conformidad con MISRA incluyen:

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

Crítica

Algunos resultados de investigaciones cuestionan 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]

En vista de la aparente ampliación de la influencia de la norma MISRA C, este artículo intenta evaluar si se han abordado satisfactoriamente importantes deficiencias de la norma original. Lamentablemente, no ha sido así y la importante relación entre resultados positivos reales y falsos positivos no es mucho mejor en la MISRA C 2004 que en la MISRA C 1998 y es inaceptablemente baja en ambas.

Continúa afirmando: [30]

En su forma actual, los únicos que se beneficiarían con la actualización de MISRA C 2004 aparentemente serían los proveedores de herramientas y es de esperar que se tomen medidas para simplificar la redacción y reducir la tasa de falsos positivos en futuras revisiones, prestando un poco más de atención a los datos experimentales publicados y estando menos tentados a inventar reglas sobre la base de que parecen una buena idea.

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

A partir de los datos obtenidos, podemos hacer las siguientes observaciones clave. En primer lugar, hay 9 de las 72 reglas para las que se observaron violaciones que funcionan significativamente mejor (α = 0,05) que un predictor aleatorio en la localización de líneas relacionadas con fallas. Las tasas de verdaderos positivos para estas reglas varían entre el 24 y el 100 %. En segundo lugar, 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. Tomado en conjunto 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 adherencia 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 desde el original el 4 de agosto de 2020. Consultado el 9 de octubre de 2019 .
  2. ^ En la primavera de 1997, los ingenieros de software del Austin Rover Group (ARG) enviaron un borrador de la norma de codificación C a Programming Research Ltd (PRL) para su revisión. La revisión estuvo a cargo del entonces consultor principal de PRL, David Blyth, quien propuso reemplazar el borrador con un conjunto de reglas de codificación considerablemente más sólidas. Esas reglas, con cambios menores, formaron la base de la primera edición de MISRA C.
  3. ^ "Estándares de codificación C++ para el avión de combate Joint Strike Fighter" (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 . Consultado el 16 de julio de 2019 .
  8. ^ "AUTOSAR 4.3 Especificación general de módulos básicos de software" (PDF) . autosar.org . AutoSAR. 2016-11-30 . Consultado el 2019-07-16 .
  9. ^ Publicaciones de MISRA
  10. ^ ab "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 la norma MISRA C:2012". Parasoft . Consultado el 29 de mayo de 2017 .
  14. ^ "Una breve historia de MISRA C". MISRA. 2013-03-18 . Consultado el 2014-06-30 .
  15. ^ "Anunciada 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 frente a 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 MISRA GitLab
  23. ^ "Lista de preguntas frecuentes sobre MISRA C". Consorcio MISRA
  24. ^ "Helix QAC para C y C++ | Perforce".
  25. ^ "Perforce Software, respaldado 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. ^ Comprobación de conformidad con MISRA, PC-lint/FlexeLint, Gimpel Software.
  29. ^ Idiomas y estándares; iar.com
  30. ^ ab Subconjunto del lenguaje 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.

Enlaces externos