Únase a nosotros el 30 de abril: Presentación de la prueba CT de Parasoft C/C++ para pruebas continuas y excelencia en el cumplimiento | Regístrese ahora

Cumplimiento de estándares de codificación para pruebas de software de conducción autónoma

Foto de cabeza de Ricardo Camacho, Director de Cumplimiento de Seguridad y Seguridad
20 de Octubre de 2023
9 min leer

Los estándares de codificación para vehículos autónomos cambian constantemente debido a la evolución de la tecnología y las necesidades de las personas. Continúe leyendo para conocer los desafíos en las pruebas de software de conducción autónoma y las mejores prácticas para garantizar el cumplimiento de los estándares de codificación.

La conducción autónoma añade desafíos adicionales al cumplimiento al desarrollar vehículos en comparación con los requisitos tradicionales. Es más, la conducción autónoma es un ámbito extremadamente competitivo. Quien sea el primero en lanzar un producto certificado al mercado tendrá una ventaja significativa sobre la competencia. Como tal, es fácil para los desarrolladores ver el análisis estático y otras iniciativas de calidad como un obstáculo para el desarrollo.

Aunque la aceptación cultural puede ser un desafío para los equipos de desarrollo, la educación sobre los procesos de calidad necesarios para el desarrollo de software crítico para la seguridad es crucial para flujos de trabajo más rápidos y de menor costo con mejor documentación y mayores tasas de cumplimiento. Entonces, ¿cómo se abordan las pruebas de software de conducción autónoma?

Exploremos el mundo de los automóviles sin conductor, el análisis estático, los requisitos de seguridad funcional y más.

¿Qué es la conducción autónoma?

La conducción autónoma es cuando los vehículos funcionan solos sin necesidad de intervención humana. Esta operación utiliza una variedad de tecnologías que incluyen algoritmos de inteligencia artificial, sensores, cámaras, microprocesadores y más. Tenga en cuenta que “conducción autónoma” y “autónoma” no son lo mismo.

Un coche autónomo o automatizado seguirá requiriendo intervención humana en algún momento. Los vehículos totalmente autónomos pueden detectar y navegar en sus entornos sin intervención humana. Para categorizar el nivel de autonomía de un automóvil, existen seis niveles desarrollados por SAE International en 2014.

  • Nivel 0. El sistema no tiene un control continuo del vehículo y sólo puede intervenir temporalmente o dar avisos.
  • Nivel 1. Este sistema avanzado de asistencia al conductor (ADAS) es lo que muchos automóviles tienen para conjuntos de seguridad como cámaras retrovisoras, control de crucero adaptativo, alertas de cambio de carril y más.
  • Nivel 2. Este sistema ADAS requiere que el ser humano actúe como conductor, pero puede girar, acelerar o frenar mientras conduce.
  • Nivel 3. Esta categoría de conducción autónoma o sistema de conducción automatizada (ADS) puede hacer cosas como estacionar un automóvil, pero los humanos deben estar listos para operar el vehículo, ya que siguen siendo el operador principal del automóvil.
  • Nivel 4. El vehículo es mayoritariamente autónomo y apenas necesita que un conductor humano preste atención.
  • Nivel 5. Un vehículo totalmente autónomo capaz de conducir en todas las situaciones. Al momento de escribir este blog, todavía no hemos alcanzado completamente este nivel de conducción autónoma.

Este sistema de niveles sugiere que la automatización aumenta de forma lineal, lo que no siempre es así. Sin embargo, sigue siendo una herramienta útil para clasificar los tipos de automatización en vehículos.

¿Qué es el software de conducción autónoma?

El software de conducción autónoma es cualquier software utilizado en plataformas de conducción autónoma. Esto incluye mucho más que inteligencia artificial y aprendizaje automático. También incluye elementos que se encuentran en vehículos con capacidad de conducción no autónoma, como unidades de control electrónico o ECU. Estos recursos computarizados a bordo controlan todo, desde los frenos hasta las puertas y los sistemas de asistencia al conductor. Sin embargo, son las redes neuronales las que impulsan la conducción autónoma.

Estas redes pueden encontrar patrones de datos para que los algoritmos de aprendizaje automático los analicen y los traduzcan en acciones. Una situación de ejemplo podría ser que el sistema del automóvil autónomo vea una luz verde que cambie a amarilla y reduzca la velocidad en respuesta.

¿Cómo funciona el software de conducción autónoma?

El software de conducción autónoma utiliza muchos tipos de sensores para percibir y analizar datos. Pueden determinar dónde se encuentra un vehículo en el espacio físico o en relación con objetos como bordillos u otros automóviles. Otro software traza una ruta para el vehículo hacia una ubicación específica o controla la aceleración, el frenado, la dirección y más.

Es como manejar un vehículo, excepto que una serie de programas, algoritmos e inteligencia artificial lo hacen por usted.

¿Qué son las pruebas de software de conducción autónoma?

Como ocurre con cualquier sistema diseñado para uso humano, las plataformas de conducción autónoma requieren pruebas rigurosas y el cumplimiento de estándares específicos. Por ejemplo, ISO 26262 actúa como estándar de seguridad funcional automotriz para todo el proceso de desarrollo de productos automotrices. Ayuda a los fabricantes de automóviles a detectar, gestionar y mitigar los efectos de las fallas del sistema y del hardware para garantizar la seguridad. Sin embargo, no es suficiente para cubrir todos los desafíos de ingeniería que conllevan los vehículos autónomos. Pueden funcionar según lo diseñado, pero no logran hacer frente a escenarios del mundo real, como condiciones climáticas extremas o la conducta de las personas. Por ejemplo, consideremos el comportamiento de un niño que sale disparado en la calle o el de un adulto borracho.

En lugar de muchos escenarios interesantes y para ayudar con el análisis del comportamiento ambiental y humano, se agregó la norma automotriz ISO 21448:2021 para brindar orientación sobre las medidas de diseño, verificación y validación aplicables, así como las actividades durante la fase de operación que son necesarios para lograr y mantener la seguridad de la funcionalidad prevista (SOTIF).

AUTOSAR, o Arquitectura de sistema abierto automotriz, es una asociación de organismos interesados ​​que buscan y desarrollan una arquitectura de software estandarizada para ECU en vehículos. Además, MISRA, la Asociación de Confiabilidad del Software de la Industria del Motor, crea pautas mediante las cuales los desarrolladores pueden crear componentes electrónicos para la industria automotriz.

Por lo tanto, probar el software de conducción autónoma es más que simplemente probar que los componentes del software garanticen la seguridad incluso si se produce una falla. Incluye probar la respuesta autónoma del vehículo a condiciones del mundo real y garantiza la seguridad. Además, las organizaciones deben demostrar que el software autónomo cumple con todos los requisitos reglamentarios.

¿Cómo se prueban los vehículos autónomos?

Los vehículos autónomos requieren simulaciones de casos de prueba del mundo real. Estos incluyen entornos de conducción realistas, modelos de otros vehículos y situaciones que encontrarían los automóviles automatizados. Sin embargo, al tratarse de sistemas informatizados, también es necesario abordar las preocupaciones relativas a los ciberataques.

Comprensión de los estándares de codificación para el software de conducción autónoma

Los estándares de codificación para vehículos autónomos están en constante evolución gracias a la tecnología y las necesidades de las personas que también evolucionan. A pesar de esto, los desarrolladores siempre pueden recurrir a los estándares tradicionales de cumplimiento críticos para la seguridad al escribir código para los automóviles del mañana.

Estándares de codificación comunes en la industria del software

Existen varios estándares de codificación comunes en el software para diversas industrias. Sin embargo, un estándar de codificación en sí mismo es simplemente un conjunto de reglas de codificación, mejores prácticas y pautas según las cuales los desarrolladores deben escribir código.

Esto va más allá de los consejos generales, como limitar el uso de convenciones de nomenclatura globales o estandarizadas. Existen pautas o mejores prácticas de personas y empresas con décadas de experiencia en el desarrollo de software que garantizan un aumento en la calidad del código.

Desde la industria automotriz hasta los dispositivos médicos, la aviación, el ferrocarril y más, las industrias han adoptado estándares de codificación de seguridad C y/o C++. Algunos de estos incluyen:

  1. MISRA C 2023 es el último estándar de codificación en lenguaje de programación C para seguridad, confiabilidad y portabilidad del código para sistemas integrados.
  2. MISRA C++ 2023, que es el estándar de codificación que se anunciará próximamente para la seguridad, confiabilidad de la seguridad y portabilidad del código C++ 17 para sistemas integrados.
  3. AUTOSAR C ++ 14 es el estándar de codificación para la seguridad, confiabilidad y portabilidad del código C++ 14 para sistemas integrados. Será reemplazado por MISRA C++ 2023.
  4. CERTIFICADO SEI C es el estándar de codificación segura del lenguaje de programación C para identificar riesgos de seguridad del software y reducir eficazmente las vulnerabilidades en las aplicaciones desarrolladas.
  5. SEI CERT C++ es el estándar de codificación segura del lenguaje de programación C++ que ayuda a aumentar la seguridad del software y reducir las vulnerabilidades en las aplicaciones desarrolladas.

Estándares de codificación específicos para la conducción autónoma

Cuando se trata de conducción autónoma, los equipos deben utilizar los estándares de codificación enumerados anteriormente. Estos serían los más recomendados, pero debido a la naturaleza de los vehículos autónomos, estos estándares de codificación de seguridad no son suficientes.

Otros estándares, como CWE y OWASP, tienen reglas y pautas de codificación, pero van más allá del alcance del código. También tienen en cuenta el flujo de trabajo de desarrollo general, las políticas organizativas y los procesos que las personas deben seguir para garantizar la seguridad de los vehículos autónomos.

Entran en juego estándares y regulaciones adicionales al considerar los vehículos autónomos y los sistemas avanzados de inteligencia artificial involucrados en los procesos autónomos. Esta lista no es exhaustiva, pero proporciona orientación general:

  1. ISO 26262, seguridad funcional de los vehículos de carretera
  2. ISO 21434, ciberseguridad de los vehículos de carretera
  3. ISO 21448, SOTIF (Seguridad de la Funcionalidad Destinada)
  4. ESPECIA automotriz, gestión de la calidad
  5. CEPE WP.29, ciberseguridad del vehículo

Los aspectos clave de los vehículos autónomos que estos y otros estándares toman en consideración son:

  • Restricciones en tiempo real. La autonomía en la conducción requiere el procesamiento de datos en tiempo real. Como tal, los sistemas deben poder procesar cantidades sustanciales de datos rápidamente para tomar decisiones en una fracción de segundo.
  • Ciberseguridad. Un vehículo pirateado es una mala noticia. Los estándares de codificación deberían garantizar contingencias para tales escenarios.
  • Interacciones hombre/máquina. Los humanos son impredecibles. Como resultado, los desarrolladores tendrán que generar expectativas de lo inesperado.

Desafíos en las pruebas de software de conducción autónoma

La naturaleza inherentemente crítica para la seguridad del desarrollo de software de conducción autónoma conduce naturalmente a la necesidad de realizar pruebas exhaustivas y continuas. Pero, como todo tipo de desarrollo de software, la creación de sistemas impulsados ​​por IA tiene sus propios obstáculos y desafíos.

  • Cumplimiento de múltiples estándares de codificación. Esta tarea requiere planificación, pruebas consistentes y que los desarrolladores estén atentos a cómo escriben el código.
  • Riesgos de ciberseguridad. Todos los sistemas informáticos son vulnerables a riesgos de seguridad. Que un mal actor se haga cargo de un vehículo autónomo, por ejemplo, es una situación del mundo real que debe anticiparse durante el desarrollo y las pruebas.
  • Código heredado Ya sea su propio código antiguo o algo heredado, el código heredado puede representar un obstáculo en el desarrollo. Abordelo con dos mantras: “limpiar sobre la marcha” y “cero nuevas infracciones”.
  • Recogida de datos del vehículo. Será necesario recopilar, analizar y revisar toneladas de datos nuevos en tiempo real para lograr una conducción verdaderamente autónoma. Como tal, es importante contar con sistemas sólidos en torno a la recopilación de datos.
  • Deuda tecnológica. Algunos desarrolladores quieren trabajar de manera más eficiente al no hacer que todo lo que escriben cumpla con el estándar de codificación antes de realizar la prueba. Esto podría llevar a la creación de prototipos de algo con código que no cumpla con las normas de seguridad, lo que provocaría retrasos. Es mejor limpiar sobre la marcha.
  • Limitaciones de las pruebas. Probar solo un prototipo a la vez obstaculiza cualquier actualización que se pueda realizar y los errores pueden resultar costosos.
  • Infraestructura compatible con la automatización. Las vías y autopistas públicas en su estado actual suponen un obstáculo importante para los vehículos autónomos. Están diseñados en torno a conductores humanos. Como resultado, el desarrollo de software para estos sistemas puede verse obstaculizado.
  • Tecnología en evolución. La IA y el aprendizaje automático cambian rápidamente, pero también lo hacen las tecnologías auxiliares de la conducción autónoma, como sensores, radares, etc.

Mejores prácticas para garantizar el cumplimiento de los estándares de codificación

Lograr el cumplimiento no es una tarea fácil. Incluso los profesionales más experimentados pueden fracasar en algún aspecto. Pero existen mejores prácticas generales fuera del desarrollo de software de conducción autónoma que benefician a todos los ingenieros de software.

Estableciendo estándares de codificación desde el principio

Independientemente del alcance, el cronograma o el presupuesto del proyecto, es fundamental establecer expectativas y estándares desde el principio. Esto no solo garantizará que todos los miembros del equipo entiendan más fácilmente su código, sino que también garantizará que haya menos problemas para solucionar errores rápidamente. Nadie tendrá que jugar al teléfono ni a un juego de adivinanzas.

Revisiones y auditorías periódicas de código

Al igual que las pruebas continuas, la revisión periódica del código le permite hacer cumplir mejor los estándares y abordar los problemas tempranamente. Esto le permite detectar cosas como anidamiento profundo, código ilegible, convenciones de nomenclatura correctas y más.

Formación continua y desarrollo de habilidades

Poseer una mentalidad de estudiante, incluso como experto en un campo, puede ayudar a reforzar y mejorar sus habilidades. Como tal, vale la pena invertir en sus desarrolladores con educación y capacitación más allá de lo que podrían haber sido contratados inicialmente. Además, la tecnología siempre está cambiando. Eso significa que su equipo necesita mantenerse al día.

Utilizando automatización y herramientas

Las pruebas de análisis estático no son lo favorito de todos los desarrolladores. Pero la automatización ha hecho que sea mucho más fácil aprovechar los beneficios de este tipo de pruebas. Utilizar todas las herramientas del arsenal, incluida la inteligencia artificial y el aprendizaje automático, es una obviedad en una configuración ágil o de desplazamiento a la izquierda.

Documentación e informes

Una vez más, la forma más sencilla de evitar problemas es prevenirlos en primer lugar. La documentación y los informes permiten a los equipos realizar referencias cruzadas según sea necesario en lugar de tomar tiempo adicional para localizar a la persona que escribió originalmente el código. O peor aún, podrían simplemente hacer una suposición y seguir adelante con algo que no será utilizable.

Beneficios de las pruebas

Al presentar el análisis estático con los estándares de codificación MISRA C++ 2023 que se anunciarán próximamente y los estándares de codificación AUTOSAR C++ 14 heredados que próximamente se anunciarán, el cumplimiento como proceso sostenible puede parecer desalentador. Pero las pruebas siguen siendo una parte integral de las mejores prácticas, incluso en un campo tan innovador como la conducción autónoma.

Pruebas utilizando herramientas como Prueba C/C++ de Parasoft integra beneficios en su flujo de trabajo que incluyen:

  1. Certificación y cumplimiento. Todas las organizaciones automotrices reconocen la ISO 26262 como el principal estándar de seguridad funcional que simplifica la aprobación y certificación. El software para automóviles autónomos debe aprobarse y certificarse antes de pasar a la producción en masa, por lo que realizar pruebas tempranas y frecuentes puede permitirle obtener la certificación más rápidamente.
  2. Calidad a menor costo. Crear código compatible y de alta calidad desde el principio y probarlo lo antes posible hace que sea más rápido solucionar los problemas. Evitará errores comunes porque los desarrolladores comenzarán a adoptar las mejores prácticas desde el principio. Es esencial realizar pruebas mientras se escribe el código para crear software complejo a un ritmo rápido. El análisis estático es uno de los métodos que encaja bien en este panorama.
  3. Responsabilidad y documentación. Con millones de automóviles en las carreteras, se producirán accidentes y algunos de ellos se deben a errores de software. Las organizaciones deben poder demostrar que han hecho todo lo posible en la práctica para evitar riesgos de seguridad. Tener un proceso documentado de cumplimiento de estándares de codificación resultará beneficioso.
  4. Ensayos en sistemas de bucle cerrado. La creación de casos de prueba en entornos virtuales ayuda a reducir los costos y el tiempo de las pruebas. La simulación de diversas situaciones para el análisis permite realizar ajustes mínimos o revisiones importantes a lo largo del proceso de prueba para permitir más datos procesables.

Tendencias y consideraciones futuras para las pruebas de software de conducción autónoma

Existen numerosas empresas que intentan ser las primeras en tener un vehículo verdaderamente autónomo en el mercado. Esta tecnología requiere pruebas exhaustivas para proteger la vida, funcionar correctamente y adaptarse a la vida cotidiana.

Aunque no es un documento oficial de la Administración Nacional de Seguridad del Tráfico en Carreteras (NHTSA), el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) publicó un conjunto preliminar de pautas para los estándares ADS en 2022. Borrador de estándar IEEE P2846 para supuestos para modelos en comportamiento automatizado de vehículos relacionados con la seguridad busca abordar los problemas únicos con la autonomía y la conducción. Sin embargo, tener una guía estándar para este caso de uso no es la única consideración futura.

Como se mencionó anteriormente, las pruebas de software de conducción autónoma también se basan en el mundo real para dar la bienvenida a los autos autónomos reales. Es posible que la tecnología y los modales tradicionales con los que navegamos tengan que cambiar con la adopción generalizada de la conducción automatizada. Surge la pregunta: ¿qué pasaría si las ciudades estuvieran diseñadas en torno al uso humano y no al estacionamiento de automóviles?

Resumen

Incorporando análisis estático u otros tipos de pruebas continuas en su flujo de trabajo ofrecen resultados tangibles. Pero con herramientas como una de las muchas soluciones de Parasoft, lograr el cumplimiento de la seguridad con el software para automóviles automatizados es mucho más alcanzable. Solo recuerda hacer lo siguiente:

  1. Deje en claro por qué está realizando la prueba.
  2. Abordar el costo de los lanzamientos retrasados.
  3. Haga que la adopción sea lo más relevante y sencilla posible.
  4. Sea intencional al implementar su herramienta de análisis estático.
  5. Seleccione las reglas y verificadores adecuados para un flujo de trabajo que se integre en los procesos de los desarrolladores.

Con el objetivo de ser eficiente, minucioso y orientado al desarrollador, logrará el cumplimiento de la seguridad antes de lo que cree.

Conozca el papel crucial que desempeña ISO 26262 en la industria automotriz para ofrecer software seguro y protegido.