miércoles, 7 de marzo de 2007

Integración continua

Quizás uno de los mayores problemas que tenemos los desarrolladores que trabajamos en grupos es la de mantener consistencia en el código que modificamos. Mantener la integridad de una aplicación cuando muchas personas "le meten mano" se puede convertir en un caos si no se mantienen ciertos controles. Esto se evidencia mas si los desarrolladores no están en una misma ubicación física sino regados por el mundo. Este escenario particular es el que me encuentro actualmente, donde los desarrolladores se encuentra ubicados en Venezuela, Ecuador, Colombia, Argentina, España y USA.

Aquí la pregunta de las "40 mil lochas" es como hacer para lograr estos controles de tal forma que los desarrolladores puedan trabajar de forma estable sin verse afectados por los otros, y si ocurre el caso en que un desarrollador introduce un problema en el código este sea detectado de forma rápida. Bueno, la respuesta a esta pregunta la podemos encontrar aplicando el concepto de Integración Continua el cual es descrito en uno de los artículos mas famosos de Martin Fowler.

Básicamente el articulo indica que la mejor forma de mantener la integridad durante el desarrollo de software es que cada programador integre sus cambios al menos una vez por día y que una herramienta automatizada se encargue de verificarla además de ejecutar los unit tests respectivos, de tal forma de poder detectar errores lo mas pronto posible.

Actualmente existen una gran cantidad de herramientas que nos permiten realizar estas tareas. A continuación las enumero:

  1. Control de versiones: Es importante tener un repositorio donde se mantengan los fuentes y se lleve la historia de todos los cambios y quen los hizo. Varios ejemplos son Subversion, CVS, PVCS, Source Safe, etc. Todos los cambios en la aplicacion se ven reflejados en el repositorio, y la herramienta automatica genera los componentes a partir de alli. Es recomendable usar uno que este integrado al IDE de desarrollo.
  2. Generación de componentes (Build & Test) : En vez de realizar compilaciones manuales se deben usar herramientas que permitan la construcción de los componentes de una forma rapida, basicamente con la ejecucion de un solo comando, y que ademas permitan ejecutar una serie de test unitarios para verificar la integridad funcional de la aplicación. Varios ejemplos son make, Maven, Rake, Ant, Nant, etc.
  3. Automatización de la generación (Automate): La idea es tener una herramienta que permita obtener la ultima versión del repositorio, generar los artefactos de forma automatizada y ejecutar los test que permitan verificar la integridad funcional de la aplicación. En este grupo tenemos Cruise Control y Continuum. Adicionalmente la herramienta puede notificar los problemas encontrados usando diferentes medios como emails, irc, messengers, etc.
Los puntos 2 y 3 también son conocidos como BAT (Build, Automate & Test). El hecho de usar estas técnicas realmente nos facilita la vida y nos permiten dedicar mas tiempo a lo que realmente nos interesa, programar ... o navegar por internet :)

En un próximo articulo voy a explicar como implementar una solución completa de Integración continua usando algunas de las herramientas mencionadas arriba.


Publicar un comentario