Ventajas y/o puntos fuertes de la integración continua

Ahora está cada vez más a la orden del día eso de la “integración continua”, “entrega continua”, “inspección continua” y palabros parecidos. Pero cómo explicarle a alguien puramente de negocio qué es eso de la integración/inspección continua y que beneficios conlleva el esfuerzo y la inversión en todo eso. Este artículo es una traducción “libre” de este http://blog.codeship.io/2013/04/11/a-business-case-for-continuous-integration.html

Aunque hablamos de integración continua, este término engloba también el hecho de realizar inspección continua, test unitarios, aseguramiento de la calidad, etc. sobre el producto/proyecto software.

En este artículo se analizan las ventajas de la integración continua de la implementación del software.

Sobre el terreno los beneficios de la integración continua son:

  •  Prevención y reducción de errores de “puesta en producción”.
  •  Generación de análisis y presentación de informes sobre la “salud” del código.
  •  Erradicación de los extensos manuales de instalación.

En términos de negocio, el valor de la integración continua es:

  • Reducción del riego.
  • Reducción de los gastos generales en todo el proceso de desarrollo y despliegue.
  • Aumento de la reputación de la empresa, proporcionando Aseguramiento de la Calidad.

CI reducción de riesgos

La integración de código más frecuentemente conduce a la reducción de los niveles de riesgo de cualquier proyecto. Los defectos de código se pueden detectar más pronto y se arreglan más rápido, por tanto podemos tener métricas para medir el estado de la aplicación. Cuando un equipo de desarrollo integra su trabajo con frecuencia significa que hay poco recorrido entre el estado actual de la aplicación y lo que el desarrollador está implementando. Y así se reduce la posibilidad de supuestos.

Análisis y presentación de informes

La incorporación de las pruebas y la inspección continua en el proceso de CI es valioso para los desarrolladores y administradores por igual. Es útil disponer de una línea de tiempo histórica de métricas para aprovechar y buscar a las tendencias, los puntos débiles del código,… La disponibilidad de estos análisis tiende a fomentar un período de reflexión después de cada integración que será la base de la dirección del proyecto.

Los indicadores de mayor interés dependerán de los requisitos clave del proyecto. Algunas métricas de código típicos incluyen:

  •  pruebas unitarias
  •  complejidad
  •  dependencia
  •  longitud
  •  la “pinta” del código

Errores en cuarentena

Debido a la integración continua integra y ejecuta las pruebas e inspecciones con regularidad, hay una buena probabilidad de que se descubran problemas. Tener un buen sistema de CI es como tener una alarma de incendio en su casa. No vas a encontrar todos los bugs, pero vamos a tener la seguridad de que vamos a encontrar el error muy pronto, lo que hará evitarnos “quebraderos de cabeza” en entornos de producción.

Validando Hipótesis

En mi ordenador funciona. Normalmente un equipo de desarrolladores tiene PC’s diferentes, con diferentes SO, diferentes configuraciones,… Todos “suben” su trabajo al sistema de control de versiones. Todos han hecho pruebas a nivel local y todos los miembros están contentos con lo que han subido. Ahora liberamos el código y para sorpresa no funciona en preproducción, o no funciona en Linux o no funciona en Internet Explorer. ¿Qué ha pasado? Pues que hemos hecho suposiciones que nunca han sido verificadas hasta el final.

La Integración continua unida a pruebas unitarias te da la posibilidad de sustituir las hipótesis por conocimiento. Volviendo al ejemplo, cada vez que haya una subida al control de versiones, se puede hacer una integración y validar si esos cambios son correctos del todo.

CI reduce los gastos generales

La sobrecarga inicial de la creación/adopción de un sistema de CI se ve compensado por las horas-hombre que se ahorran después. Encontrar un error mientras estamos desarrollando es la forma más barata posible para encontrarlo. Si el fallo se encuentra en fases más avanzada el coste es más alto. Todos hemos visto alguna vez un diagrama como este

Otra cosa a tener en cuenta es que tenemos que adaptar el proceso de aseguramiento de la calidad a CI, la cantidad de horas asignadas a pasar test puede verse drásticamente reducida al implantar un sistema de CI.

Automatización de procesos

Los procesos manuales repetitivos son lentos y propensos a errores humanos. Una imagen vale más que mil palabras

Reducir los procesos manuales repetitivos le permite estar seguro de que:

  • Seguir un proceso ordenado
  • El proceso funciona de la misma manera cada vez
  • El proceso se ejecuta cada vez que se sube un cambio al control de versiones

Estas garantías le sirven para:

  •          La reducción de trabajos en procesos repetitivos, liberando a la gente para realizar trabajos de mayor valor.

–          La capacidad de superar la resistencia (de otros miembros del equipo) para implementar mejoras.

Con demasiada frecuencia vemos como se dedica tiempo a tareas que podrían ejecutarse mediante un simple script.

CI es garantía de calidad

La integración continua nos permite liberar software en cualquier momento. Desde la perspectiva del cliente este es el beneficio más obvio. Los proyectos que no adoptan este enfoque de integración continua podrían tener problemas de “última hora” , en el momento de la puesta en producción.

CI permite una mayor visibilidad del proyecto

Integración Continua ofrece la oportunidad de hacer notar las tendencias y tomar decisiones informadas. Ayuda a construir la confianza necesaria para innovar y/o mejorar. Los proyectos sufren cuando no hay datos reales y recientes que apoyen a las decisiones. Por lo general, el avance del proyecto está (a veces demasiado) sustentado por la experiencia.

La Integración continua puede facilitar:

–          Las decisiones eficaces: Tenemos información del estado de la construcción, así como métricas de calidad del código.

–          Darse cuenta de las tendencias: Como se producen integraciones con frecuencia podemos ver el éxito o fracaso de nuestras construcciones y actuar en consecuencia.

–          Documentación: La integración continua ofrece la posibilidad de generar documentación para la API, por lo que tenemos documentación visible para los posibles nuevos miembros del equipo.

CI aumenta la confianza en el software

En general, la aplicación efectiva de prácticas de Integración Continua puede proporcionar una mayor confianza en la producción software. Con cada generación, el equipo sabe qué pruebas se ejecutan para verificar el comportamiento, que las normas de codificación de los proyectos se están cumpliendo, y que el resultado es un producto comprobable funcionalmente.

Desde la integración continua podemos realizar informes y alertas cuando algo sale mal, los desarrolladores y otros miembros del equipo tienen más confianza a la hora de hacer cambios.

Conclusiones

El CI acelera el flujo de trabajo, lo que alienta al equipo a realizar mejorar y cambios sin tener miedo a romper nada.

Comentario personal

Bueno, todo esto de la integración continua está muy bien, pero por dónde empezar.

Tenemos un montón de herramientas desde Jenkins, Altassian Bamboo, SonarSource, Apache Continuum,…

Tenemos algunas plataformas SaaS para hacerlo como Cloudbees, CollabNet,…

Aunque una de mis preferidas por es Clinker, ya que ofrece un montón de herramientas OpenSource integradas ayudadas con un sistema SSO (Single Sing On). Además tienen una distribución Ubuntu Debian 6 que podemos descargarnos de manera gratuita. Aunque para un primer vistazo aquí esta un demo con algunos proyectos OpenOurce ya integrados: http://live.clinkerhq.com/

 

Anuncios

3 comentarios en “Ventajas y/o puntos fuertes de la integración continua

  1. Hola, buenas:

    En primer lugar darte la enhorabuena por el artículo. De esta práctica de desarrollo de software se ha escrito mucho, pero pocos son los que la llevan a buen puerto.

    Agradecerte enormemente tu referencia a Clinker. Sin lugar a dudas nos has alegrado el día.

    Clinker es un ecosistema de desarrollo software pensado para que las empresas y/o grupos de desarrollo en general, se centren en los procesos (prácticas) y no en el mantenimiento de herramientas, integraciones, etc. Por lo tanto, hacer integración continua, inspección de código y otras prácticas, está la mano si se desea.

    Tanto en su versión SaaS, con Clinker Cloud, como con su Virtual Appliance lista para ser desplegada en tu propia infraestructura.

    Un saludo

    Me gusta

    1. Sí es cierto hay mucha “literatura” sobre CI, pero pornerla en marcha dentro de un grupo de trabajo es muy costoso.
      No solo por el esfuerzo para “convencer” a la gente de negocio, sino por convencer también a los propios desarrolladores.

      Clinker es un gran producto y se nota que intentáis hacer las cosas bien por eso la referencia es merecida.

      Un saludo

      Me gusta

Comenta la entrada

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s