¿Cómo funciona la integración continua y el modelo de entrega continua en el desarrollo de software integrado con dependencias de software y hardware?

Es un poco más difícil que para otras tecnologías, pero funciona si inviertes un poco de tiempo en ello. Voy a entrar en más detalles, pero es importante comprender que no es necesario hacer todo lo siguiente, o hacerlo al mismo tiempo. La mejora paso a paso es mejor que ninguna mejora.

Compilación: es mejor hacer que el código se compile tanto en las computadoras de los desarrolladores como en el destino. Para esto, es mejor ver el sistema operativo del dispositivo como un complemento a su código y conectar otra implementación para desarrolladores (generalmente Linux estándar)

Pruebas automatizadas: escríbalas y haga que se ejecuten tanto en las máquinas de los desarrolladores como en el dispositivo. A veces es más difícil activarlos en dispositivos, y puede ser necesario un poco de pensamiento creativo. No importa los días de su equipo, es posible hacer eso; He ayudado a los equipos a hacerlo para el código C en tiempo real y para firmwares integrados. Puede ser un desafío, pero es posible.

Integración continua : haga que un servidor actúe como sistema CI, instale un servidor CI típico como Jenkins, conéctelo al dispositivo. Obtenga las últimas fuentes, compile para el dispositivo, implemente, active las pruebas. Una vez más, podría ser necesario un pensamiento creativo.

Si prueba varios dispositivos, necesita más canales de implementación y una conexión clara entre el código y el dispositivo. En otras palabras, una estrategia de gestión de la configuración.

Implementación continua : eso depende de la actualización modelo. Idealmente, debería poder publicar una nueva versión en algún lugar y los dispositivos de todo el mundo se actualizarán. Incluso puede hacer implementaciones por etapas con un poco más de trabajo.

Espero que esto responda tu pregunta.

Para un campo como el software integrado, es aún más importante tener CI / CD ya que el nivel de pruebas necesarias es mucho más alto que el software tradicional, imagine construir un sitio web en lugar de construir un módulo de inyección de combustible en un automóvil.

Dicho esto, CI / CD optimiza el esfuerzo necesario para las pruebas generales, lo que facilita el lanzamiento de más funciones / parches.

La clave para que esto funcione es tratar su infraestructura como código. Eso significa que debe invertir en algún momento asegurando los emuladores adecuados para TODO el hardware que necesita. Más importante aún, esos emuladores pueden ser acelerados, integrados y eliminados por código (a través de su canal de compilación).

Cualquier dependencia de software también se puede manejar de la misma manera que en el desarrollo de software tradicional utilizando tecnologías como la contenedorización y la virtualización.

Colectivamente, podrá registrar todos sus emuladores de hardware, dependencias de software en su control de origen y desde allí, puede acelerar los entornos de desarrollo y prueba en cualquier lugar que desee para realizar sus pruebas.

Espero que esto ayude.

Creo que el principal desafío en la integración continua para el software embebido proviene de ejecutar pruebas automatizadas para su software en el hardware: no es fácil desencadenar pruebas automatizadas, tiene fallas debido a problemas de EMI y HW y más. Puedes echar un vistazo a esta publicación de blog y aprender cómo Google probó Chromecast. Creo que una de las herramientas que debe tener es un clon virtual de su hardware. Los dispositivos virtuales pueden agilizar y facilitar la automatización de sus pruebas de software integrado y disfrutar de un verdadero proceso de integración continua. Para dispositivos virtuales, eche un vistazo a QEMU y Jumper Virtual Lab.

Espero haberte ayudado.

No creo que funcionen de manera diferente con hardware, firmware o software. Se aplican las mismas presiones. ¿Se pregunta cómo las dependencias de software y hardware afectan su implementación de la entrega continua?

Muy bien, como en todos los demás casos. Pero, por supuesto, dado que el sistema ‘host’ rara vez está disponible gratuitamente para que lo use el desarrollador, debe ser simulado por bancos de pruebas muy exigentes.

Funciona de la misma manera.

Las construcciones identificadas se cargan en el dispositivo de prueba y luego se hacen pruebas de humo automáticamente. El estímulo se activa, se ejecutan pruebas aleatorias dirigidas y restringidas, se generan informes y se emiten alarmas si algo realmente malo sucedió.

Las versiones atractivas son candidatos de lanzamiento y obtienen un escrutinio más profundo.

More Interesting

¿Qué debo hacer después del diploma en CSE, cuando odio la codificación y quiero dejar mi BE en CSE?

¿Vale la pena aprender C #? Actualmente estoy inmerso en un proyecto que gira en torno a Java, Android SDK y NoSQL. Soy un estudiante universitario. Tengo una buena formación en muchos lenguajes de programación. ¿Vale la pena agregar C # a la caja de herramientas?

¿Hay ejemplos en la historia cuando los programadores experimentaron responsabilidad penal por el mal funcionamiento de su software?

¿Dónde puedo encontrar agencias de outsourcing de proyectos de software en los Estados Unidos?

¿Es mejor obtener un título en informática o alguna experiencia práctica si quiero comenzar a programar?

¿Cómo ayuda un probador con la recopilación de requisitos?

¿Qué tan común es en el software que un gerente venda un producto como se hace cuando no lo es?

¿Es una buena forma de violar las reglas de puntuación para la documentación técnica?

Desde la perspectiva de los desarrolladores, ¿por qué hay una oferta tan escasa de desarrolladores móviles cuando hay tanta demanda?

¿Cuánto más rápido es CoreFoundation que Cocoa / Cocoa Touch?

¿Cómo debo ordenar un archivo que no cabe en la memoria?

¿Cuál es mejor probador s / w o desarrollador s / w?

Como gerente de proyectos de software, ¿cómo puedo motivar a mi equipo para obtener el mejor resultado de mi equipo?

¿Cómo se construye un juego móvil multijugador en tiempo real?

¿Qué se entiende por una actualización continua en el desarrollo de software?