Logotipo de Parasoft
Imagen de portada del informe técnico

White Paper

La guía definitiva de CI/CD para sistemas de software integrados

¿Te interesa saber qué contiene la guía? Empieza con la vista previa a continuación.

Descripción general

La integración continua y la entrega continua (CI/CD) constituyen la base del desarrollo continuo de software. La CI fusiona frecuentemente unidades de compilación más pequeñas en aplicaciones, mientras que la CD requiere pruebas exhaustivas y puede incluir la certificación del software antes de su implementación en campo.

Este documento técnico proporciona las mejores prácticas para integrar pruebas automatizadas en flujos de trabajo de CI para detectar defectos de manera temprana y entregar código de alta calidad a través de pruebas continuas (CT), donde el desarrollo de software se combina con las pruebas como parte del proceso de compilación.

La Integración Continua es una práctica de desarrollo de software en la que los miembros de un equipo integran su trabajo con frecuencia; normalmente, cada persona integra al menos una vez al día, lo que da lugar a múltiples integraciones diarias. Cada integración se verifica mediante una compilación automatizada (incluidas las pruebas) para detectar errores de integración lo antes posible.

—Martín Fowler

Automatización en la integración y entrega continuas

Sin la automatización del proceso de compilación y de los procesos conectados con la creación de artefactos de implementación y la verificación de la compilación, la CI/CD sería tediosa y consumiría mucho tiempo: la antítesis de lo continuo.

La integración continua se basa en un repositorio compartido y herramientas automatizadas de compilación de software. Es importante identificar de inmediato los problemas de integración y las compilaciones defectuosas. El paso más crítico es integrar las pruebas continuas en el flujo de trabajo de CI/CD para garantizar que los cambios en el código se prueben de forma automática y continua durante todo el ciclo de desarrollo.

Cuando los desarrolladores confirman cambios en el código base, se inicia el proceso de compilación, que incluye la compilación del código y la preparación del entorno para las pruebas. Los desarrolladores pueden realizar análisis estáticos, pruebas unitarias, cobertura de código y otros métodos de prueba rápidamente con retroalimentación inmediata.

Las pruebas fallidas obligan a corregir el código al principio del ciclo de desarrollo, y cuando todas las pruebas superan el proceso, se implementa en la rama principal. Este flujo de trabajo continuo garantiza que los cambios en el código se verifiquen constantemente mediante pruebas automatizadas, lo que proporciona retroalimentación rápida y mantiene la salud y la calidad general del software durante todo su ciclo de vida.

Integración y entrega continuas para sistemas integrados

CI/CD es popular y una buena práctica en el desarrollo de software embebido, que enfrenta limitaciones únicas. Soluciones como Prueba CT de Parasoft C/C++ Acomode las pruebas continuas integrándose con las herramientas más populares marcos de pruebas unitarias de código abierto como GoogleTest, Boost.Test, CppUnit y soluciones personalizadas, mejoradas con cobertura de código, trazabilidad de requisitos y capacidades de generación de informes.

Además de las limitaciones físicas y computacionales de las plataformas de hardware de destino, los mercados de software embebido presentan requisitos únicos de seguridad, privacidad y ciclos de vida extremadamente largos. Los productos pueden permanecer en el mercado durante décadas.

Diagrama de infinito que muestra la retroalimentación continua y la integración continua como parte de un ciclo de desarrollo continuo
Integración continua como parte de un ciclo de desarrollo continuo.

A nivel de desarrollo, el software embebido requiere IDE, compiladores, análisis estático y dinámico, y herramientas de compilación, de forma similar al desarrollo de aplicaciones típico. Sin embargo, las herramientas suelen estar orientadas a diferentes arquitecturas (host y entorno de destino), lo que requiere entornos de desarrollo homogéneos para todos los equipos.

Automatización de pruebas para software integrado Es un desafío debido a la complejidad de iniciar y observar pruebas en objetivos integrados y al acceso limitado al hardware del objetivo. La automatización de pruebas de software es esencial para que las pruebas integradas sean viables de forma continua desde el host hasta los sistemas de destino.

Arquitectura de automatización de pruebas

Realizar pruebas unitarias y cobertura de código en el hardware de destino

Una vista de alto nivel de la implementación, ejecución y observación de pruebas desde el host hasta el destino.

Prueba de software integrado Es especialmente laborioso. Automatizar la suite de pruebas de regresión proporciona un ahorro significativo de tiempo y costes. La recopilación de datos de los resultados de las pruebas y la cobertura de código de los sistemas de destino es esencial para la validación y el cumplimiento de los estándares. 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 hace que la recopilación de datos sea crucial.

Las soluciones de prueba de C y C++ como las de Parasoft ofrecen herramientas de prueba optimizadas para una huella binaria mínima y se proporcionan como código fuente para una personalización específica de la plataforma, si es necesario.

Una de las principales ventajas de Parasoft C/C++test son las integraciones dedicadas con IDE y depuradores integrados, que facilitan y automatizan la ejecución de casos de prueba. Los entornos IDE compatibles incluyen Eclipse, Código VS, Green Hills Multi, Wind River Workbench, IAR EW, ARM MDK, ARM DS-5, TI CCS, Visual Studio y muchos otros.

C/C++test permite la creación de líneas base para pruebas de regresión como conjuntos organizados de pruebas con verificación automática de resultados. Los equipos pueden ejecutar pruebas automáticamente y con regularidad para verificar si las modificaciones del código alteran o interrumpen la funcionalidad capturada por las pruebas de regresión, y recibir alertas cuando los casos de prueba fallan.

Plataforma de desarrollo en contenedores en el escritorio de cada desarrollador

Al gestionar entornos de desarrollo complejos en el desarrollo de software crítico para la seguridad, los equipos generalmente tienen dificultades con:

  • Sincronizar actualizaciones para todo el equipo con nuevas versiones del compilador o de la cadena de herramientas de compilación.
  • Reaccionar dinámicamente a los parches de seguridad para bibliotecas o kits de desarrollo de software (SDK).
  • Garantizar la coherencia de la cadena de herramientas para todos los miembros del equipo y la infraestructura automatizada (CI/CD).
  • Versionar el entorno de desarrollo para dar servicio a versiones anteriores de productos certificados.
  • Incorporación y creación de nuevos desarrolladores.

Todos estos problemas son fáciles de solucionar con contenedores.

Una infografía que muestra un ejemplo de implementación de Parasoft C/C++test con contenedores de compilación y ejecución de Docker

Un ejemplo de implementación de Parasoft C/C++test con contenedores de compilación y ejecución de Docker

Parasoft C/C++test Professional trabaja con cadenas de herramientas de compilación y entornos de ejecución implementados en contenedores, admitiendo implementaciones basadas en contenedores Linux y Docker.

Beneficios de la integración y entrega continuas

La mayor ventaja de CI/CD es la reducción del riesgo del proyecto. Anteriormente, muchos proyectos dependían de integraciones de software masivas, donde los equipos intentaban integrar el software demasiado cerca del final del desarrollo del producto, encontrando graves problemas de integración con plazos ajustados.

Las pruebas se posponen hasta el final del proyecto, donde se vuelve demasiado insuficiente y demasiado tarde. integración continuaLos equipos siempre tienen compilaciones completas de productos listas para probar, entregar y lanzar. En lugar de una gran implementación, los equipos trabajan continuamente en pasos de integración más pequeños, detectando problemas con anticipación y reduciendo el riesgo de integración en etapas tardías.

Ventajas adicionales incluyen:

  • Las pruebas de integración se realizan con frecuencia y en etapas tempranas., exponiendo errores antes, donde se pueden solucionar de forma más fácil y económica.
  • Las pruebas de regresión comienzan antes De esta manera, se prueban las nuevas características para determinar su impacto en el código existente y se agregan nuevas pruebas a los conjuntos de regresión después de cada iteración.
  • Mejora incremental de productos a través de nuevas características agregadas y probadas, errores eliminados, construyendo calidad y seguridad de manera incremental
  • Permite pruebas y entregas continuas como partes iguales del desarrollo continuo. La integración continua por sí sola no es eficaz sin pruebas y entregas continuas.

CI/CD y pruebas continuas: la base de DevSecOps

DevOps y Metodologías DevSecOps Compartir el uso de la automatización y los procesos continuos para establecer ciclos colaborativos de desarrollo. Mientras que DevOps prioriza la velocidad de entrega, DevSecOps desplaza la seguridad hacia la izquierda, lo cual es más importante en software clasificado como crítico para la seguridad integrada.

La automatización de pruebas de software desempeña un papel importante, pero es solo una pieza del rompecabezas de DevSecOps. Las pruebas suelen ser una de las mayores limitaciones del ciclo de vida del desarrollo de software (SDLC), por lo que optimizar los procesos de seguridad que permiten comenzar las pruebas antes y reducir la cantidad de pruebas necesarias tiene un impacto significativo en la seguridad del software y la eficiencia del desarrollo.

Adopción de un proceso de prueba continua ayuda a promover los 6 pilares de DevSecOps: responsabilidad colectiva, colaboración e integración, implementación pragmática, cumplimiento y desarrollo, automatización y medición, y monitoreo e informes.

Seguridad Shift-Left en DevSecOps

El impulso para una seguridad orientada a la izquierda en el ciclo de vida del desarrollo de software (SDLC) proviene del deseo de detectar y corregir errores y vulnerabilidades de seguridad lo antes posible. Es mucho más fácil, económico y menos arriesgado solucionar los problemas antes, no después.

Los requisitos esenciales para una seguridad descentralizada se centran en la necesidad de incorporar seguridad en todas las aplicaciones desde el principio. La seguridad no se puede añadir, sino que debe estar integrada.

Automatizar la trazabilidad bidireccional

La trazabilidad de requisitos se define como “la capacidad de describir y seguir la vida de un requisito, tanto hacia adelante como hacia atrás (es decir, desde sus orígenes, a través de su desarrollo y especificación, hasta su posterior implementación y uso, y a través de períodos de refinamiento e iteración continuos en cualquiera de estas fases)”.

En pocas palabras, la trazabilidad de requisitos es necesaria para realizar un seguimiento preciso de lo que se construye al escribir software. Esto significa garantizar que el software cumpla con su función y que solo se construye lo necesario.

La trazabilidad funciona tanto para demostrar que cumplió con los requisitos como para identificar lo que no. Si hay elementos arquitectónicos o código fuente que no se pueden rastrear hasta un requisito, entonces es un riesgo y no debería estar allí. Los beneficios van más allá de proporcionar una prueba de la implementación. La trazabilidad disciplinada es una visibilidad importante del progreso del desarrollo.

Es importante comprender que muchos requisitos del software embebido se derivan del análisis de seguridad y la gestión de riesgos. El sistema debe realizar sus funciones previstas, por supuesto, pero también debe mitigar los riesgos para reducir considerablemente la posibilidad de lesiones. Además, para documentar y demostrar que estas funciones de seguridad se implementan y prueban completa y correctamente, la trazabilidad es fundamental.

El mantenimiento de registros de trazabilidad a cualquier escala requiere automatización. Esto es especialmente importante en una canalización de CI/CD, ya que la trazabilidad manual ralentizaría cada iteración.

Las herramientas de prueba de software integradas pueden completar la verificación y validación de requisitos al proporcionar una trazabilidad bidireccional automatizada hasta el caso de prueba ejecutable, que incluye el resultado de aprobación o rechazo y rastrea hasta el código fuente que implementa el requisito.

Parasoft se integra con sistemas líderes del mercado de gestión de requisitos y planificación ágil, como IBM DOORS Next, Intland, Codebeamer, Polarion de Siemens, Jama Connect, Atlassian Jira, CollabNet, VersionOne y TeamForge. La trazabilidad se gestiona mediante un panel central de informes y análisis, Parasoft DTP.

Parasoft proporciona trazabilidad bidireccional desde elementos de trabajo hasta casos de prueba y resultados de pruebas, mostrando informes de trazabilidad con Parasoft DTP e informando los resultados al sistema de gestión de requisitos.

Trazabilidad bidireccional desde los elementos de trabajo hasta los casos de prueba y sus resultados. Se muestran informes de trazabilidad y los resultados se envían al sistema de gestión de requisitos.

La correlación bidireccional entre los resultados de las pruebas y los elementos de trabajo proporciona la base de la trazabilidad de los requisitos. Parasoft DTP agrega análisis de cobertura de código y prueba para evaluar la integridad de la prueba. Mantener esta correlación bidireccional entre los requisitos, las pruebas y los artefactos que los implementan es un componente esencial de la trazabilidad.

Resumen

La integración y entrega continuas se han convertido en prácticas estándar en el desarrollo embebido, lo que ayuda a los equipos a migrar de los procesos tradicionales en cascada a flujos de trabajo más ágiles y eficientes. Esta transición reduce el riesgo y mejora tanto la calidad como la seguridad. Dado que la seguridad sigue siendo una prioridad, la CI/CD sienta las bases para DevSecOps al integrar requisitos y controles de seguridad en todo el proceso de desarrollo. Los entornos de desarrollo en contenedores refuerzan aún más este enfoque, facilitando la portabilidad, el control de versiones y el control centralizado, a la vez que permiten entornos de aplicaciones reproducibles y seguros.

Las pruebas continuas son fundamentales para mantener un flujo de trabajo de CI/CD fluido, especialmente porque las pruebas suelen ser la actividad que más tiempo y recursos consume en el desarrollo embebido. Al automatizar estratégicamente las pruebas y centrarse en las áreas de alto riesgo, los equipos pueden acelerar los ciclos de retroalimentación y reducir los retrasos. La eficacia de las pruebas continuas aumenta con herramientas que optimizan la automatización, amplían la cobertura del código, permiten la ejecución inteligente de pruebas y mantienen una trazabilidad bidireccional completa a lo largo del ciclo de vida del software.

¿Listo para sumergirte más profundamente?

Obtenga el documento técnico completo