Integración continua: objetivos

Ya nadie discute las ventajas de desarrollar software de manera iterativa e incremental. En cada iteración, se recorre el flujo completo de desarrollo de un programa:
  • Análisis –> diseño –> Implementacion –> Pruebas –> Despliegue.

En cada iteración, las fases de Análisis –> Diseño –> Implementación, se harán SOLO para las nuevas funcionalidades. Si las fases de Pruebas –> Despliegue se hacen también SOLO para las nuevas funcionalidades, se caerá inevitablemente en la vergüenza de la Ingeniería del Software. Así que, en cada iteración, todas las funcionalidades de la aplicación deben ser probadas antes del despliegue. Pero no sólo eso, antes del despliegue, también deberán aplicarse una serie de métricas, y realizar tareas como generar la documentación para controlar la calidad del software.

O sea que, las funcionalidades f1 desarrolladas en la primera iteración I1 deberán ser probadas en la N iteraciones posteriores que se planifiquen durante el desarrollo.
Iteración –> funcionalidades a probar
I1 –> f1
I2 –> f1,f2
I3 –> f1,f2,f3
I4 –> f1,f2,f3,f4
El coste de probar las funcionalides desarrolladas en la fase 1 (f1) se multiplica por el número de iteraciones N. Es un coste inasumible.

¿Cómo mejorar éste proceso? Haciendo que el coste de probar unas funcionalides se reduzca a cero. (O más bien, se reduzca a la propia implementación de las pruebas en su fase correspondiente).
Un servidor de integración continua tiene como objetivo automatizar el proceso de integración entre el código desarrollado por los diferentes programadores del proyecto, ejecutar todas las pruebas sobre ese código, aplicar todas las métricas y ser capaz de desplegar la aplicación. De tal manera que la integración de funcionalidades nuevas, prueba de todas las funcionalidades, aplicación de métricas o generación de documentación ya no ocurre iterativamente ni se hace manualmente, sino que son procesos que se ejecutan continuamente y de manera automatizada.
Como ayuda la integración continua a la ingeniería del software (entendida como maximizar calidad y minimizar coste):
  • minimizar el coste de desarrollo 1: evitar que el coste de las pruebas de las funcionalidades de la iteración 1 (f1) en la iteración N sea = f1*N.
  • minimizar el coste de desarrollo 2: detección y solución temprana de problemas (colisiones entre lo desarrollado por dos programadores, colisión con funcionalidades anteriores, etc.), si se integra cada semana, un desarrollador puede pasarse una semana entera desarrollando algo que choca contra otra cosa codificada por otro desarrollador, haciendo inútil todas sus horas de trabajo.
  • maximizar la calidad: evitando entregar versiones donde el código nuevo puede haber estropeado el que ya funcionaba.

Comenta el articulo:

Requerido

Requerido,