Seminario web destacado: Presentación de la prueba CT de Parasoft C/C++ para pruebas continuas y excelencia en el cumplimiento | Vea ahora

Desglose de las pautas de codificación AUTOSAR C++14

Foto de cabeza de Miroslaw Zielinski, director de gestión de productos de Parasoft
13 de diciembre de 2023
8 min leer

¿Cuáles son las pautas de codificación de AUTOSAR C++ 14? Lea para saber cuáles son las pautas y cómo han proporcionado una actualización al C++ moderno.

AUTOSAR adaptativo

MISRA C++ 2008 se incorporó a las pautas de AUTOSAR C++14, que proporcionan pautas de codificación para C++14 según lo definido por ISO/IEC 14882:2014. MISRA C++ 2023 contiene muchas de las pautas de AUTOSAR C++14. Sin embargo, MISRA C++ 2023 se centra estrictamente en C++17, el lenguaje de implementación, mientras que AUTOSAR se centra en gran medida en la industria automotriz e incluye pautas sobre cadenas de herramientas, documentación e infraestructura.

La industria automotriz ha experimentado cambios radicales en la última década. Las nuevas funcionalidades introducidas en los automóviles modernos los han convertido fundamentalmente en centros informáticos. Esto se refleja en el desarrollo de las plataformas que se utilizan para la construcción de software automotriz, específicamente AUTOSAR.

El enfoque clásico, que asumía una configuración estática en el momento de la compilación, sin asignación de memoria dinámica y el predominio del lenguaje C, ya no es suficiente. Las nuevas funciones como estas requieren una gran cantidad de código avanzado:

  • Asistente de mantenimiento de carril
  • Frenado automático de emergencia
  • Monitoreo de punto ciego
  • Comunicación V2X (comunicación de vehículo a vehículo y de vehículo a infraestructura)
  • Actualizaciones continuas por aire
  • Multimedia de alta definición
  • Computación AI, reconocimiento de imágenes

Estas nuevas características también requieren cambios en los paradigmas que fueron suficientes para el enfoque clásico. Para abordar estos desafíos y mejorar el desarrollo automotriz, el Consorcio AUTOSAR, que incluye a la mayoría de los principales fabricantes de automóviles del mundo, lanzó la nueva edición del estándar AUTOSAR en marzo de 2017, llamado Adaptive AUTOSAR.

El lanzamiento del nuevo estándar no invalida la Plataforma Clásica, seguirá siendo una opción principal para las unidades de control sin necesidades de conectividad, requisitos de hardware limitados y funcionalidad estricta en tiempo real.

Adaptive AUTOSAR define una plataforma para desarrollar unidades de control automotriz que brindan funciones sofisticadas como sistemas avanzados de asistencia a la conducción, transmisión de medios o actualizaciones de software a través de Internet. La plataforma contiene la especificación de interfaces que definen servicios y APIs. Algunas de las novedades introducidas en Adaptive AUTOSAR incluyen:

  • Enfoque orientado a objetos
  • Lenguaje de programación C ++
  • Arquitectura orientada a Servicios
  • Sistema operativo POSIX
  • Cambios en la configuración de la ECU durante el tiempo de ejecución del sistema
  • Implementación y actualizaciones inalámbricas

C no es suficiente

Adaptive AUTOSAR fue una respuesta a la creciente complejidad de los requisitos de los automóviles modernos y los nuevos desafíos que el paradigma del mundo conectado imponía a los sistemas automotrices. El lenguaje C, que en el pasado era la opción principal para los desarrolladores de automóviles, se convirtió en un obstáculo, o al menos en una desaceleración.

La complejidad de los sistemas obligó a cambiar del lenguaje C a C++, que ofrece un mejor soporte para estructurar sistemas grandes y distribuidos y proporciona mejores mecanismos para la encapsulación de datos.

Adaptive AUTOSAR se basa en el estándar del lenguaje C++14. La elección de la versión estándar del idioma fue una elección entre “no demasiado antiguo” y “no demasiado nuevo”. Por un lado, tenemos C++98 y C++03, que todavía se utilizan ampliamente en la industria del automóvil, pero están obsoletos y no se corresponden con los patrones de desarrollo modernos. Por otro lado, cuando se publicó el estándar C++17, era nuevo y había argumentos para dejar atrás C++98 y C++03, entre ellos:

  • Evolución / mejoras sustanciales del lenguaje C ++
  • Disponibilidad de mejores compiladores
  • Disponibilidad de mejores herramientas de prueba y análisis

Una de las principales razones para no optar por C++17 fue que las nuevas características introducidas en el estándar pueden generar riesgos de seguridad para los sistemas: detectar y comprender las vulnerabilidades de seguridad requiere algo de tiempo. Además, los compiladores de C++ que cumplen con el estándar C++17 aún eran nuevos y requerían más pruebas y mejor soporte para su uso en desarrollo crítico para la seguridad. Por lo tanto, se tomó la decisión de confiar en el estándar C++ 14 como una opción intermedia razonable.

A medida que el lenguaje C++ continúa evolucionando, hoy tenemos C++20 (ISO/IEC 14882:2020) reemplazando a C++17.

En apoyo de C++17, AUTOSAR y MISRA unieron fuerzas en el desarrollo de pautas de codificación seguras para el uso de C++17 con planes de continuar en C++20. Para muchas organizaciones, esto es muy importante porque las características modernas de C++ ofrecen innovaciones que son importantes en el desarrollo de sistemas. El uso de IA, por ejemplo, se basa en arquitecturas modernas, plataformas modernas y bibliotecas modernas desarrolladas en las últimas ediciones de C++.

¿Qué pasa con las pautas de codificación de AUTOSAR?

El lanzamiento de la plataforma Adaptive AUTOSAR aumentó la adopción de C ++ moderno en proyectos automotrices. Esto hizo que un problema específico fuera mucho más visible: mientras que la evolución del lenguaje C++ se ha acelerado en los últimos años, los estándares de codificación automotriz parecen haberse quedado atrás. MISRA C++ 2023 actualiza la industria.

En el momento en que se lanzaron C++11 y C++14, el estándar de codificación automotriz más popular para C++, MISRA C++2008, ya estaba muy desactualizado y solo abordaba la versión C++03 del lenguaje.

Con cada año, el problema crecía y se volvía más persistente. Los desarrolladores aceptaron ampliamente las nuevas características de los últimos estándares de C++ y comenzaron a usarlos sin la orientación adecuada o las mejores prácticas. Esta situación fue especialmente problemática para los equipos que desarrollan sistemas críticos para la seguridad, que son requerido por ISO 26262 utilizar el análisis estático con un subconjunto adecuado de pautas de codificación.

Para resolver este problema, el Consorcio AUTOSAR publicó la documentación dedicada a las pautas como parte de la plataforma Adaptive AUTOSAR, que se titula "Pautas para el uso del lenguaje C++ 14 en sistemas críticos y relacionados con la seguridad". Confiar en MISRA C++ 2008 sin modificar sería simplemente una ofensa. La situación se representa en la línea de tiempo a continuación.

1998 - Lanzamiento del estándar C ++ 98

2003 - Lanzamiento del estándar C ++ 03

2008 - MISRA C ++ 2008 (cubre C ++ 03)

2011 - Lanzamiento del estándar C ++ 11

2014 - Lanzamiento del estándar C ++ 14

2017 - AUTOSAR C ++ 14 (marzo)

2017 - Lanzamiento del estándar C ++ 17

2020 - Lanzamiento del estándar C ++ 20

2023 - MISRA C ++ 2023 (cubre C ++ 17)

Directrices de codificación AUTOSAR C ++ 14

El documento de pautas de AUTOSAR C++ 14 es una actualización de MISRA C++ 2008 y proporciona pautas de codificación para C++ moderno según lo definido por ISO/IEC 14882:2014. Estos están incorporados en MISRA C++ 2023. La principal aplicación de este estándar de codificación es la industria automotriz, pero se puede utilizar en otras industrias donde se requiere programación integrada.

El estándar especifica 342 reglas:

  • Se adoptaron 154 reglas de MISRA C ++ 2008 sin modificaciones (67%)
  • 131 reglas se basan en estándares C ++ existentes
  • 57 reglas se basan en la investigación u otra literatura o recursos

El estándar está bien documentado y proporciona trazabilidad a otros estándares C++ existentes, como HIC++ 4.0, JSF, SEI. CERTIFICADO C++, Directrices básicas de C++ y, por supuesto, MISRA C++ 2008.

AUTOSAR C ++ 14 sigue el enfoque de clasificación de reglas de MISRA C ++ 2008. Las reglas se clasifican según el nivel de obligación:

  • Reglas requeridas: obligatorio para reclamar el cumplimiento de la norma
  • Asesor reglas: recomendado pero sin estado obligatorio

Además, las reglas también se clasifican si se aplican automáticamente mediante herramientas de análisis estático:

  • Automated: puede ser totalmente compatible con herramientas de análisis estático
  • Parcialmente automatizado: puede ser compatible con herramientas de análisis estático, pero puede requerir prácticas adicionales, como la revisión de código.
  • No automatizado: no se puede admitir con herramientas de análisis estático.

Finalmente, las reglas se clasifican según los objetivos de asignación: implementación, verificación, cadena de herramientas e infraestructura. Las reglas en el estándar AUTOSAR C++14 están etiquetadas con información sobre clasificación, por ejemplo:

Cómo seleccionar la herramienta adecuada para el cumplimiento de AUTOSAR C ++ en apoyo de ISO 26262

¿Cómo puedo cumplir?

En 2016, el consorcio MISRA publicó un documento titulado "Cumplimiento de MISRA: 2016 Lograr el cumplimiento de las pautas de codificación de MISRA". Este documento ha sido actualizado y reemplazado por el documento "Cumplimiento de MISRA: 2020".

Los documentos de cumplimiento han sido muy bien recibidos en la industria, ya que abordaron una necesidad importante de definir el proceso para lograr el cumplimiento, especificando qué significa exactamente cumplir.

AUTOSAR C ++ 14 no proporciona ninguna orientación similar sobre el proceso de lograr el cumplimiento, al menos no directamente. Pero dado que las pautas de AUTOSAR C ++ se basan en MISRA C ++ 2008, es razonable volver a consultar el estándar MISRA para buscar orientación sobre el proceso para lograr el cumplimiento.

  • Producir una matriz de cumplimiento que indique cómo se aplica cada regla.
  • Producir un procedimiento de desviación.
  • Formalizar las prácticas de trabajo dentro del sistema de gestión de la calidad.

El cumplimiento de estos requisitos significa algunos trámites adicionales. Lo primero que debería suceder es una definición de la matriz de cumplimiento, que es efectivamente una declaración de cómo vamos a hacer cumplir cada directriz. Vea el ejemplo a continuación.

La situación deseada es tener una herramienta de análisis estático que cubra tantas pautas como sea posible. Las reglas que no se pueden hacer cumplir con el análisis estático probablemente requerirán revisiones manuales, que son costosas.

Además de la matriz de cumplimiento, es necesario establecer un procedimiento de manejo de desviaciones. El procedimiento de desviación formaliza los pasos que deben tomarse cuando el desarrollo necesita desviarse de una directriz específica. Como lo prescribe MISRA, se espera que

"... el procedimiento se basará en obtener una aprobación para cada desviación o clase de desviación".

—MISRA

Ésta es una pieza importante del rompecabezas. Previene el abuso del concepto de desviación por parte de los desarrolladores que se desvían a voluntad. Efectivamente, necesitaremos algún tipo de tickets formales almacenados en nuestro sistema que documenten cada desviación en el código fuente. Lo mismo se aplica a la matriz de cumplimiento y a cualquier configuración adicional y descripción de procesos creada para hacer cumplir el cumplimiento. MISRA C++ 2008 es muy claro aquí y requiere "formalización dentro del sistema de calidad".

Finalmente, si todos los procedimientos descritos en MISRA C ++ 2008 punto 4.3 están en su lugar, podemos reclamar el cumplimiento demostrando lo siguiente:

  • Se ha completado una matriz de cumplimiento que muestra cómo se ha aplicado el cumplimiento.
  • Todo el código C++ del producto cumple con las reglas del documento MISRA C++2008 o está sujeto a desviaciones documentadas.
  • Se mantiene una lista de todas las instancias de las reglas que no se siguen y, para cada instancia, hay una desviación debidamente firmada.

El documento "Cumplimiento de MISRA: 2020" debe utilizarse con todas las versiones futuras de las Directrices de MISRA al realizar una reclamación de cumplimiento de MISRA. Es posible que algunos equipos prefieran usarlo como base para el proceso de cumplimiento de AUTOSAR C++14, ya que es más nuevo y más detallado.

Al igual que con MISRA C++ 2008, "MISRA Cumplimiento: 2020" requiere un proceso formal para manejar las desviaciones y debe documentar los métodos de cumplimiento para cada pauta aplicable. Este documento se denomina Plan de Cumplimiento de las Directrices (GEP).

“Cumplimiento de MISRA: 2020” amplía los requisitos para el proceso de cumplimiento e introduce algunos conceptos nuevos, como el Plan de Recategorización de Pautas (GRP), que documenta de manera formal los cambios que se introducen en las categorías de reglas, y el Resumen de Cumplimiento de Pautas (GCS ), que es básicamente un artefacto final del proceso de cumplimiento que presenta el nivel de cumplimiento que se logró para cada directriz.

"MISRA Cumplimiento: 2020" también utiliza categorizaciones de reglas que se introdujeron en MISRA C 2012 y son diferentes de las de los estándares MISRA C++ 2008 y AUTOSAR C++14.

Soporte para AUTOSAR C ++ 14 en la prueba Parasoft C / C ++

La única forma práctica de exigir el cumplimiento de un estándar de codificación como AUTOSAR C ++ 14 es con una herramienta de análisis estático, como Parasoft C / C ++test, una herramienta de calidad de código que admite múltiples tecnologías de prueba. La prueba Parasoft C/C++ es compatible con AUTOSAR C++ 14 mejor que cualquier otra herramienta de calidad de código y ofrece soporte completo para MISRA C++ 2023.

Las reglas de AUTOSAR C++14 son parte del paquete de cumplimiento automotriz de Parasoft, que amplía la funcionalidad de la prueba Parasoft C/C++ para desarrolladores de automóviles específicamente. Además de las reglas de análisis estático específicas de la industria, como AUTOSAR C++14, HIC++ y MISRA, Automotive Compliance Pack de Parasoft brinda un sofisticado sistema interactivo de informes que se personaliza según los requisitos impuestos por AUTOSAR, HIC++ y MISRA, y permite un flujo de trabajo diario eficiente para el equipo.

La prueba Parasoft C / C ++ permite a los desarrolladores verificar el cumplimiento de su código sin dejar sus IDE e integra el proceso de escaneo en las compilaciones de CI en los servidores. Con el sistema de informes específico para automóviles de Parasoft, los miembros del equipo pueden monitorear continuamente su proceso de cumplimiento con facilidad.

Al limpiar las bases de código existentes, los equipos se benefician de la capacidad de crear políticas de cumplimiento que definan lo que asegura la consistencia de la práctica de prueba. En tales casos, es una práctica recomendada comenzar con el subconjunto de reglas del estándar y aumentar progresivamente el número de reglas activas a medida que avanza la limpieza del código. Esta capa de informes le permite monitorear constantemente el progreso de su base de código, controlar el proceso de desviación y tomar decisiones informadas sobre la extensión del conjunto de reglas.

Pruebe la prueba Parasoft C / C ++: una solución unificada de pruebas de desarrollo C y C ++ para proyectos de software integrados y críticos para la seguridad.

Solicitar Demo

¿A dónde vamos desde aquí?

La industria automotriz está evolucionando dinámicamente. Entre muchos otros cambios, estamos siendo testigos de la transformación del automóvil en una experiencia que se parece más a usar un teléfono inteligente. El concepto de comprar una funcionalidad específica de un automóvil en forma de aplicación es una realidad. ¿Largo viaje de vacaciones? ¿Por qué no comprar el control de crucero durante 2 semanas?

Para hacer frente a estos desafíos y reducir potencialmente el tiempo de desarrollo, la industria automotriz necesita una innovación constante en el área de las plataformas de hardware y software que se utilizan en los automóviles modernos. Estas innovaciones deben estar respaldadas con estándares apropiados, en varios niveles, que garanticen la seguridad funcional, la calidad y la seguridad. AUTOSAR C++14 ciertamente contribuye a este proceso.

Pero los estándares en sí mismos son solo una hoja de papel (si los imprimimos) y su implementación simplemente no es posible sin herramientas que lleven la automatización a las prácticas y procesos y permitan a los equipos de desarrollo de software automotriz enfocarse en ofrecer funcionalidades mejores y más avanzadas. Parasoft C / C ++test es la solución más completa para el desarrollo de C/C++ crítico para la seguridad, con más soporte para estándares de codificación automotriz (AUTOSAR C++ 14, CERT C/C++, MISRA C/C++) que cualquier otro proveedor de herramientas, y una solución dinámica, flexible y útil. sistema de informes que permite a todo su equipo tener éxito en el cumplimiento.

Utilice las pautas de codificación AUTOSAR C ++ para optimizar el cumplimiento de ISO 26262

“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.