MISRA C es un conjunto de pautas de desarrollo de software para el lenguaje de programación C desarrollado por MISRA (Motor Industry Software Reliability Association). Sus objetivos son facilitar la seguridad , la protección , la portabilidad y la confiabilidad del código en el contexto de los sistemas integrados , específicamente los 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
- Borrador: 1997 [2]
- Primera edición: 1998 (reglas, obligatorio / advertencia)
- Segunda edición: 2004 (reglas, obligatorio / aviso)
- Tercera edición: 2012 (directivas; reglas, Decidible / Indecidible)
- Cumplimiento de MISRA: 2016, actualizado 2020
Para las dos primeras ediciones de MISRA-C (1998 y 2004) todas las Directrices se consideraron Reglas. Con la publicación de MISRA C: 2012 se introdujo una nueva categoría de Directriz: la Directiva cuyo cumplimiento está más abierto a la interpretación o se relaciona con procesos o cuestiones de procedimiento.
Adopción
Aunque originalmente estaba dirigido específicamente a la industria automotriz, MISRA C ha evolucionado como un modelo ampliamente aceptado de mejores prácticas por desarrolladores líderes en sectores que incluyen automotriz, aeroespacial, telecomunicaciones, dispositivos médicos, defensa, ferrocarriles 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.
- ISO 26262 Seguridad funcional - Vehículos de carretera cita MISRA C como un subconjunto apropiado del lenguaje C:
- 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á escrito en lenguaje C, debe cumplir con el 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á escrito en lenguaje C, debe cumplir con el Estándar MISRA C: 2012.
Clasificación y categorización de pautas
Cuando se inicia un nuevo proyecto de software, se debe utilizar el último estándar MISRA. Los estándares anteriores todavía están disponibles para su uso con proyectos de software heredados que necesitan hacer referencia a ellos. [9]
Clasificación
Cada Directriz se clasifica [10] como Obligatoria (nueva para MISRA C: 2012), Requerida o Asesora . Por otra parte, el documento Misra Cumplimiento permite Advisory directrices para ser inaplicada .
- Siempre se cumplirán las directrices obligatorias.
- Se cumplirán las pautas requeridas , a menos que estén sujetas a una desviación.
- Las directrices de asesoramiento se consideran buenas prácticas, pero el cumplimiento es menos formal.
Categorización
Las reglas se pueden dividir lógicamente en varias categorías:
- Evitando posibles diferencias en el compilador, por ejemplo, el tamaño de un entero C puede variar, pero un INT16 es siempre de 16 bits. (C99 estandarizado en
int16_t
.) - Evitar el uso de funciones y construcciones que son propensas a fallar, por ejemplo,
malloc
puede fallar. - Produzca código mantenible y depurable, por ejemplo, convenciones de nomenclatura y comentarios.
- Reglas de mejores prácticas.
- Límites de complejidad.
Alcance
MISRA C: 2012 clasifica por separado cada directriz como Unidad o Sistema de Traducción Única . [10]
Decidibilidad
Misra C: 2012 clasifica las reglas (pero no las directivas ) como decidible o Undecidable .
Lograr el cumplimiento
Cumplimiento de MISRA
MISRA publicó documentos para proporcionar orientación adicional para comprender y lograr el cumplimiento de MISRA.
- Cumplimiento de MISRA: 2016 , fue publicado por MISRA en abril de 2016. [11]
- Cumplimiento de MISRA: 2020 , edición revisada, se publicó en febrero de 2020. [12]
Cumplimiento
Para que una pieza de software con la reivindicación para que sea compatible con las Directrices MISRA C, todas obligatorias normas deberán cumplirse y todas necesarias normas y directivas o bien se cumplirán o sujeto a una desviación formal. Las reglas de asesoramiento pueden no aplicarse sin una desviación formal, pero esto aún debe registrarse en la documentación del proyecto.
Nota: Para fines de cumplimiento, no hay distinción entre reglas y directivas .
Desviaciones
Muchas reglas de MISRA C se pueden caracterizar como pautas porque, bajo ciertas condiciones, los ingenieros de software pueden desviarse de las reglas y aún así ser considerados compatibles con el estándar. Las desviaciones deben documentarse en el código o en un archivo. Además; Se debe proporcionar 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:
- 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 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 nueva numeración completa de las reglas.
MISRA-C: 2004 contiene 142 reglas, de las cuales 122 son "obligatorias" y 20 son "consultivas"; se dividen 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 el soporte a la versión C99 del lenguaje C (mientras se mantienen las pautas para C90), además de incluir una serie de mejoras que pueden reducir el costo y la complejidad del cumplimiento, al tiempo que ayudan a un uso consistente y seguro de C en situaciones críticas. sistemas. [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 asuntos procesales o procesales); cada uno de los cuales se clasifica como obligatorio , requerido o consultivo . Se clasifican por separado como unidad o sistema de traducción única . Además, las reglas se clasifican como decidible o Undecidable .
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 ISO / IEC 9899: 2011/18 Funcionalidad central [17] que agrega mapeo para los comportamientos definidos por implementación, no definidos y no definidos dentro de C11 / C18.
Documentos de respaldo
MISRA ha publicado los siguientes apéndices para respaldar 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. Está destinado a ayudar a los usuarios en la migración.
- MISRA C: 2012 - Anexo 2: Cobertura de MISRA C: 2012 contra ISO / IEC TS 17961: 2013 "C Secure" [19]
- MISRA C: 2012 - Addendum 3: Cobertura de MISRA C: 2012 contra CERT C [20]
Suite de ejemplo
Una suite ejemplar (para MISRA-C: 2004 y MISRA C: 2012) está disponible en el repositorio de MISRA GitLab [21] . Esto permite a los usuarios de la herramienta evaluar y comparar el soporte de verificación proporcionado por las diversas herramientas MISRA; Además, brinda a los implementadores de herramientas alguna 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 de "conformidad con MISRA", no existe un proceso de certificación MISRA. [22]
La mayoría de las pautas se pueden verificar utilizando 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 la conformidad con MISRA incluyen:
- Astrée de AbsInt
- Suite Axivion Bauhaus de Axivion GmbH. MISRA C: 2004, C: 2012, C: 2012 Enmienda 1, C ++: 2008, Cumplimiento: 2016 .
- CodeSonar por GrammaTech
- Coverity by Synopsys - Análisis estático
- Cppcheck : herramienta de análisis estático de código abierto para C / C ++
- ECLAIR de BUGSENG
- Goanna de Red Lizard Software: una herramienta de análisis de software para C / C ++.
- Helix QAC de Perforce Software . MISRA C: 1998, C: 2004, C: 2012, C ++: 2008 . [23]
- Klocwork de Rogue Wave Software (ahora propiedad de Perforce Software [24] ). MISRA C: 2012, C: 2012 Enmienda 1, C ++: 2008 . [25]
- Banco de pruebas LDRA por Liverpool Data Research Associates
- Prueba de Parasoft C / C ++ por Parasoft
- PC-Lint de Gimpel Software. MISRA C: 1998, C: 2004, C: 2012, C ++: 2008 . [26]
- Polyspace de MathWorks
- PVS-Studio por sistemas de verificación de programas
- SonarQube de SonarSource ( código abierto con algunos componentes comerciales enchufables)
- SQuORE por Squoring Technologies
- Entender por SciTools
Los compiladores de C / C ++ que admiten la conformidad con MISRA incluyen:
- Software de Green Hills
- Sistemas IAR - MISRA C: 1998, C: 2004, C: 2012, C ++: 2008 . [27]
- TAREA - MISRA C: 1998, C: 2004, C: 2012 .
Crítica
Algunos resultados de investigación cuestionan la efectividad de MISRA.
En un documento que compara trabajos anteriores sobre MISRA C: 1998 con MISRA C: 2004, Les Hatton llega a la conclusión de que: [28]
En vista de la aparente influencia cada vez mayor de la norma MISRA C, este documento intenta evaluar si las deficiencias importantes en la norma original se han abordado satisfactoriamente. Desafortunadamente, no lo han hecho y la importante proporción de falsos positivos reales no es mucho mejor en MISRA C 2004 que en MISRA C 1998 y es inaceptablemente baja en ambos.
Continúa diciendo: [28]
En su forma actual, las únicas personas que se beneficiarían de la actualización de MISRA C 2004 parecerían ser los proveedores de herramientas y es de esperar que se tomen medidas tanto para simplificar la redacción como para reducir la proporción de falsos positivos en futuras revisiones tomando un poco más de atención a los datos experimentales publicados y menos tentados a inventar reglas sobre la base de que parecen una buena idea.
Un estudio en la TU Delft , por Cathal Boogerd y Leon Moonen, evalúa empíricamente el valor de MISRA C: 2004. Se obtienen resultados similares: [29]
A partir de los datos obtenidos, podemos hacer las siguientes observaciones clave. Primero, hay 9 de 72 reglas para las cuales se observaron violaciones que funcionan significativamente mejor (α = 0.05) que un predictor aleatorio para localizar líneas relacionadas con fallas. Las verdaderas tasas positivas de estas reglas oscilan entre el 24 y el 100%. En segundo lugar, observamos una correlación negativa entre las violaciones de las reglas de MISRA y las fallas observadas. Además, 29 de las 72 reglas tenían una tasa de verdaderos positivos cero. Tomado 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 el cumplimiento del estándar MISRA en su conjunto hubiera hecho que el software fuera menos confiable.
Ver también
- Estilo de programación
Referencias
- ^ "MISRA aclara los usos seguros y protegidos del lenguaje C" . www.misra.org.uk . Consultado el 9 de octubre de 2019 .
- ^ En la primavera de 1997, los ingenieros de software del 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 el entonces consultor senior de PRL, David Blyth, quien propuso reemplazar el borrador con un conjunto de reglas de codificación apreciablemente más sólido. Esas reglas, con cambios menores, formaron la base de la primera edición de MISRA C.
- ^ "Estándares de codificación C ++ de vehículos aéreos de combate de ataque conjunto" (PDF) . Consultado el 16 de julio de 2019 .
- ^ "Estándares de codificación de la NASA JPC C" (PDF) . Consultado el 16 de julio de 2019 .
- ^ "ISO 26262-6: 2011 Vehículos de carretera - Seguridad funcional - Parte 6: Desarrollo de producto a nivel de software" . iso.org . ISO . Consultado el 16 de julio de 2019 .
- ^ "ISO 26262-6: 2018 Vehículos de carretera - Seguridad funcional - Parte 6: Desarrollo de producto a nivel de software" . iso.org . ISO . Consultado el 16 de julio de 2019 .
- ^ "Especificación general del software AUTOSAR 4.2" (PDF) . autosar.org . Consultado el 16 de julio de 2019 .
- ^ "AUTOSAR 4.3 Especificación general de los módulos de software básicos" (PDF) . autosar.org . AutoSAR. 2016-11-30 . Consultado el 16 de julio de 2019 .
- ^ Publicaciones de MISRA
- ^ a b "Hoja de datos: MISRA C: 2012 (PDF)" (PDF) . programaciónresearch.com . Consultado el 10 de junio de 2013 .
- ^ "Cumplimiento de MISRA: 2016 (PDF)" . MISRA . Consultado el 22 de julio de 2016 .
- ^ "Cumplimiento de MISRA: 2020 (PDF)" . MISRA . Consultado el 8 de abril de 2020 .
- ^ "Lograr el cumplimiento de MISRA C: 2012" . Parasoft . Consultado el 29 de mayo de 2017 .
- ^ "Una breve historia de MISRA C" . MISRA. 2013-03-18 . Consultado el 30 de junio de 2014 .
- ^ "MISRA C: anunciada la fecha de lanzamiento de 2012" . MISRA. 26 de febrero de 2013 . Consultado el 10 de junio de 2013 .
- ^ "MISRA C: 2012 - Enmienda 1 (PDF)" . MISRA. Abril de 2016 . Consultado el 31 de octubre de 2019 .
- ^ "MISRA C: 2012 - Enmienda 2 (PDF)" . MISRA. Febrero de 2020 . Consultado el 6 de enero de 2021 .
- ^ "MISRA C: 2012 - Anexo 1: Mapeo de reglas (PDF)" .
- ^ "MISRA C: 2012 - Anexo 2: Cobertura de MISRA C: 2012 contra ISO / IEC TS 17961: 2013" C Secure "(PDF)" .
- ^ "MISRA C: 2012 - Anexo 3: Cobertura de MISRA C: 2012 contra CERT C (PDF)" .
- ^ Repositorio de MISRA GitLab
- ^ "Lista de preguntas frecuentes de MISRA C". Consorcio MISRA
- ^ https://www.perforce.com/products/helix-qac
- ^ https://www.roguewave.com/company/news/2019/perforce-software-acquires-rogue-wave-software
- ^ https://www.perforce.com/products/klocwork
- ^ Verificación de conformidad MISRA, PC-lint / FlexeLint, Gimpel Software.
- ^ Idiomas y estándares; iar.com
- ^ a b Subconjunto de idiomas en un contexto industrial: una comparación de MISRA C 1998 y MISRA C; Les Hatton; Universidad de Kingston; 2004.
- ^ 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
- Página web oficial
- "Introducción a MISRA C" . embedded.com.
- "MISRA C: Más seguro es mejor" . Revista de diseño electrónico.
- "Comentario sobre la primera edición de las directrices MISRA C" . knosof.co.uk.
- "Nueva versión de MISRA C: ¿Por qué debería importarle?" . Revista de diseño electrónico.
- "MISRA C: 2012: muchas buenas razones para cambiar" . Revista de diseño electrónico.
- "MISRA C: hoja de datos de 2012" (PDF) . programaciónresearch.com.
- "MISRA C: 2012 garantiza la seguridad del software automotriz" . Revista EE Times.
- "Cumplimiento de MISRA C: Generación de código" . Mathworks.