Vea cómo integrar fácilmente el análisis estático, las pruebas unitarias y otros métodos de prueba de software C y C++ en su canalización de CI/CD. Regístrese para la demostración >>

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

Por Miroslaw Zielinski

Febrero

8  min leer

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

AUTOSAR adaptable

Las pautas de AUTOSAR C ++ 14 son una actualización de MISRA C ++ 2008, que proporcionan pautas de codificación para C ++ moderno según lo definido por ISO / IEC 14882: 2014.

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 para los automóviles modernos y los nuevos desafíos que el paradigma del mundo conectado impuso a los sistemas automotrices. El lenguaje C, que era la opción principal en el pasado para los desarrolladores de automóviles, se convirtió en un bloqueador, o al menos en una ralentización.

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

AUTOSAR adaptativo se basa en el estándar de lenguaje C++14. La elección de la versión estándar del idioma fue una selección entre "no demasiado antiguo" y "no demasiado nuevo". Por un lado, tenemos C++98 y C++03, que todavía se usan mucho en la industria automotriz, pero están desactualizados y no se corresponden con los patrones de desarrollo modernos. Por otro lado, cuando se publicó el estándar C++17, estaba fresco 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 han unido fuerzas en el desarrollo de pautas de codificación seguras para el uso de C++17 con planes para continuar con C++20. Para muchas organizaciones, esto es muy importante porque las características modernas de C++ ofrecen nuevas 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.

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

2022 – MISRA Y AUTOSAR C++17 (TBA)

2022: MISRA y AUTOSAR C++20 (por determinar)

Directrices de codificación AUTOSAR C ++ 14

El documento de pautas de AUTOSAR C ++ 14 está destinado a ser 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. La principal aplicación de este estándar de codificación es la industria automotriz, pero puede usarse 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 los otros estándares de C ++ existentes, como HIC ++ 4.0, JSF, SEI CERT C ++, C ++ Core Guidelines y, por supuesto, a 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:

  • Email: 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.

Y finalmente, las reglas se clasifican según el objetivo de asignación: implementación, verificación, cadena de herramientas e infraestructura. Las reglas del estándar AUTOSAR C ++ 14 están etiquetadas con la información sobre la 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

Esta es una pieza importante del rompecabezas. Evita el abuso del concepto de desviación por parte de los desarrolladores que se desvían a voluntad. Efectivamente, necesitaremos algún tipo de ticket formal almacenado en nuestro sistema que documente cada desviación en el código fuente. Lo mismo se aplica a la matriz de cumplimiento y cualquier configuración adicional y descripciones de procesos creadas 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" ahora tiene el mandato de usarse con todas las versiones futuras de las Pautas de MISRA al realizar una declaración de cumplimiento de MISRA. "Cumplimiento de MISRA: 2020" actualiza las instrucciones proporcionadas en MISRA C++ 2008 para establecer el proceso de cumplimiento. Algunos equipos pueden preferir usarlo como base para el proceso de cumplimiento 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 compatible con múltiples tecnologías de prueba. Parasoft C/C++test admite AUTOSAR C++ mejor que cualquier otra herramienta de calidad de código.

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.

Solicita un 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 ++ de seguridad crítica, con más soporte para los estándares de codificación automotriz (AUTOSAR C ++, CERT C / C ++, MISRA) que cualquier otro proveedor de herramientas, y un sistema de informes dinámico, flexible y útil que permite todo su equipo para tener éxito con 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.

Por Miroslaw Zielinski

Gerente de producto para las soluciones de prueba integradas de Parasoft, las especialidades de Miroslaw incluyen C / C ++, RTOS, análisis de código estático, pruebas unitarias, gestión de la calidad del software para aplicaciones críticas de seguridad y cumplimiento del software con los estándares de seguridad.

Reciba las últimas noticias y recursos sobre pruebas de software en su bandeja de entrada.