¡Descubre GoogleTest, con certificación TÜV y la tecnología Agentic AI para pruebas de C/C++!
Obtenga los detalles »
White Paper
Antes de comenzar, vea una vista previa a continuación.
A medida que la industria automotriz adopta la metodología de desarrollo ágil , descubre otros procesos que pueden acelerarse, como la entrega mediante DevOps, en particular las pruebas continuas. DevOps busca automatizar todos los pasos necesarios para que el código de la aplicación llegue al usuario final.
DevOps funciona como una cinta transportadora para mover el código de la aplicación a través de las distintas fases. Las iniciativas actuales de DevOps y de "continuidad total" requieren la capacidad de evaluar los riesgos asociados con una versión candidata, de forma instantánea y continua.
Las pruebas continuas ofrecen una forma automatizada y discreta de obtener retroalimentación inmediata sobre los riesgos empresariales asociados a una versión candidata de software. Guían a los equipos de desarrollo para cumplir con las expectativas empresariales y ayudan a los gerentes a tomar decisiones informadas sobre las compensaciones necesarias para optimizar el valor empresarial de una versión candidata. Gran parte de esto se realiza mediante la integración continua (CI).
En este documento técnico, profundizaremos en las siguientes mejores prácticas para DevOps en el software automotriz :
Es importante comprender completamente las fases de DevOps y cuándo empezar a usar las herramientas adecuadas para obtener los mejores resultados. También existen diversas herramientas o soluciones de canalización de CI/CD de eficacia comprobada en el mercado que respaldan la implementación de DevOps. Algunas herramientas utilizadas en la industria automotriz incluyen Parasoft, Jenkins, GitHub, GitLab, Azure DevOps, Bitbucket, Bamboo, Docker (contenedores) y más.
Uno de los componentes fundamentales de DevOps es la integración continua. La CI consiste en la fusión de características, correcciones o pequeños cambios de código, respaldada por procesos que incluyen el control de versiones y la automatización de la compilación de software. El objetivo de la CI es establecer una forma consistente y automatizada de compilar, empaquetar y probar aplicaciones en lo que se denomina un "pipeline" de software.
En la mayoría de los casos, las pruebas representan un obstáculo para lograr una integración continua fluida y eficiente. Las pruebas manuales son inviables, por lo que la disyuntiva es automatizarlas o no realizarlas en absoluto. Las pruebas automatizadas van más allá de las pruebas unitarias e incluyen buenas prácticas como el análisis estático y las pruebas de regresión. Además, generan retroalimentación inmediata que se utiliza para ajustar y replanificar la siguiente iteración o sprint.
La automatización de pruebas en DevOps implica automatizar los métodos de prueba. Es importante familiarizarse con cada fase de esta metodología y saber dónde activar los métodos de verificación y validación de pruebas.
También es posible que hayas oído hablar del término DevSecOps, que consiste en integrar la seguridad en el flujo de trabajo de DevOps . Requiere un cambio de mentalidad en los equipos para integrar las herramientas y prácticas de seguridad en esta metodología. La seguridad se ha vuelto importante para muchos fabricantes de automóviles debido a los requisitos normativos del WP.29 R155 y la necesidad de incorporar procesos de estándares como ISO 21434.
Una ventaja importante del flujo de trabajo de la canalización de CI/CD es el ciclo de retroalimentación que proporciona para que la parte "continua" funcione correctamente. Cualquier interrupción en el ciclo causa ineficiencias que provocan retrasos en el desarrollo y la implementación.
Las herramientas de automatización de pruebas proporcionan una forma de evitar los siguientes obstáculos en las pruebas unitarias:
Al hacer que las pruebas sean más eficientes dentro del flujo de trabajo de CI/CD, es posible mejorar la cobertura de las pruebas con cada ciclo y no impedir el progreso del proyecto con pruebas continuas.
Las herramientas de análisis estático son esenciales durante la fase de codificación, tanto desde el punto de vista de la calidad y la seguridad como en lo que respecta al cumplimiento de los estándares de codificación . Para el software automotriz que debe cumplir con MISRA C o C++, por ejemplo, se necesitan informes precisos durante la codificación y la confirmación del código para garantizar el cumplimiento continuo.
La etapa de compilación activa el análisis estático de toda la aplicación y las pruebas de regresión. En esta etapa, las herramientas de análisis estático se ejecutan en todo el proyecto, ofreciendo mayor precisión y detectando errores que podrían pasarse por alto a nivel de unidad. También es en esta etapa que se inician las pruebas de regresión. Los resultados de estas pruebas impulsan la siguiente fase: las pruebas.
En esta etapa, comienzan las pruebas de las nuevas funciones añadidas y la gestión de las pruebas de regresión fallidas. Los resultados de la regresión y las nuevas pruebas impulsan el siguiente ciclo de planificación.
La integración continua es solo una parte de un proceso de desarrollo continuo que necesita pruebas y entrega para aprovechar los beneficios del enfoque.
Las pruebas continuas proporcionan una forma automatizada y discreta de obtener retroalimentación inmediata sobre una versión candidata de software. Las pruebas continuas no son simplemente más automatización de pruebas. Su propósito es incorporar calidad y seguridad al producto como parte de un proceso continuo de integración, lanzamiento y entrega.
A nivel de desarrollo, el software automotriz no difiere mucho del desarrollo de aplicaciones típico. Requiere IDE, compiladores, análisis estático y dinámico, y herramientas de compilación. Sin embargo, las herramientas suelen estar orientadas a arquitecturas diferentes a las que funcionan, por ejemplo, el entorno host frente al entorno de destino. Las versiones de las herramientas son importantes para garantizar un entorno de desarrollo homogéneo para todo el equipo.
La automatización de las pruebas de software para la industria automotriz es más compleja debido a la dificultad de iniciar y supervisar las pruebas en sistemas embebidos, sin mencionar el acceso limitado al hardware que tienen los equipos de desarrollo. La automatización de las pruebas de software es fundamental para que las pruebas automotrices sean viables de forma continua, desde el sistema de desarrollo hasta el sistema de destino.
Las pruebas de software automotriz requieren mucho tiempo. Automatizar el conjunto de pruebas de regresión proporciona un ahorro significativo de tiempo y costos. Además, la recopilación de los resultados de las pruebas y los datos de cobertura de código del sistema de destino son esenciales para la validación y el cumplimiento de las normas.
La trazabilidad entre los casos de prueba, los resultados de las pruebas, el código fuente y los requisitos debe registrarse y mantenerse, lo que significa que la recopilación de datos es fundamental en la ejecución de las pruebas.
Una solución como Parasoft C/C++test incluye un entorno de prueba optimizado para minimizar la sobrecarga adicional en cuanto al tamaño del binario y lo proporciona en forma de código fuente, que se puede personalizar si se requieren modificaciones específicas de la plataforma.
Una gran ventaja de la solución de pruebas Parasoft C/C++ es la integración con IDEs y depuradores integrados, lo que facilita y automatiza la ejecución de casos de prueba. Los entornos IDE compatibles incluyen:
La solución Parasoft permite la creación de líneas base para pruebas de regresión como un conjunto organizado de pruebas y verifica automáticamente todos los resultados. Estas pruebas se ejecutan automáticamente de forma periódica para verificar si las modificaciones del código alteran o interrumpen la funcionalidad capturada en las pruebas de regresión. Si se introduce algún cambio, estos casos de prueba no alertarán al equipo sobre el problema. Durante las pruebas posteriores, C++test informará sobre las tareas si detecta cambios en el comportamiento capturado en la prueba inicial.
La paridad de capacidades de ejecución de objetivos remotos con las pruebas basadas en host significa que los equipos de software automotriz pueden obtener los mismos beneficios de la automatización que cualquier otro tipo de desarrollo de aplicaciones.
Los equipos de desarrollo saben que los flujos de trabajo de CI/CD funcionan igual, independientemente de si están en contenedores o no. El valor que los contenedores aportan a los equipos de DevOps reside en que facilitan la implementación y la aplicación de parches a las aplicaciones. Las organizaciones pueden adaptar los contenedores a sus necesidades para acelerar el desarrollo, las pruebas y la producción en casos de uso ágiles y DevOps.
Cuando se trata de administrar entornos de desarrollo complejos, especialmente en el espacio crítico para la seguridad, los equipos generalmente enfrentan los siguientes desafíos:
Todos estos problemas son fáciles de resolver con contenedores. Cada contenedor contiene las versiones estandarizadas de la cadena de herramientas de desarrollo, incluyendo herramientas de análisis estático, compilador, IDE y herramientas de compilación. Estos contenedores se actualizan de forma centralizada y se implementan según sea necesario cuando un desarrollador trabaja en el código del proyecto.
La consistencia del entorno de desarrollo elimina cualquier error que pueda surgir si los desarrolladores tienen versiones ligeramente diferentes de las herramientas en sus escritorios. Es una buena manera de garantizar que todos usen la versión correcta de cada herramienta, lo cual podría ser importante posteriormente para el cumplimiento normativo. Los contenedores también proporcionan una forma centralizada de actualizar las herramientas y garantizan que estas actualizaciones se propaguen inmediatamente por toda la organización.
DevOps en software automotriz exige una visión instantánea y continua de los riesgos y la calidad de cada versión candidata, lo cual se obtiene mediante pruebas continuas mediante retroalimentación automatizada en tiempo real. Si bien la transición del desarrollo tradicional en cascada a Agile y CI/CD puede ser un desafío para sistemas embebidos y críticos para la seguridad, es posible con la preparación adecuada y las mejores prácticas, incluyendo la automatización de pruebas para facilitar la integración continua, la eliminación de cuellos de botella de V&V mediante pruebas tanto en sistemas host como de destino, el uso de contenedores para garantizar entornos de desarrollo consistentes y seguros, la ampliación de la cobertura de pruebas mediante la generación automatizada de pruebas y la ejecución inteligente, y el aprovechamiento de informes centralizados para la toma de decisiones basadas en datos. En conjunto, estas técnicas modernas reducen significativamente las ineficiencias de las pruebas automotrices manuales y hacen que los enfoques automatizados actuales sean mucho más efectivos.
¿Listo para sumergirte más profundamente?