integración continua

3
Integración Continua La integración continua es una práctica de desarrollo de software en la cual los miembros de un equipo integran su trabajo con mucha frecuencia. Cada integración es verificada por un build automatizado para detectar errores de integración lo más rápido posible. Una historia común entre los proyectos de software es que la integración es un proceso largo e impredecible. Sin embargo, muchos proyectos tratan a la integración como algo completamente convencional. El trabajo individual de un desarrollador está solamente a un par de horas de un proyecto compartido, y puede ser reintegrado al estado anterior en cuestión de minutos. Cualquier error de integración es encontrado rápidamente y puede ser arreglado rápidamente. Este contraste no es el resultado de una herramienta cara y compleja. La esencia de ello recae simplemente en llevar a la práctica la integración frecuente, usualmente diaria, junto con un repositorio controlado de código fuente. A pesar de que la Integración Continua es una práctica que no requiere ninguna herramienta en particular para desplegarse, hemos descubierto que es útil utilizar un servidor de Integración Contínua, como CruiseControl. Construyendo una Característica Con Integración Contínua Se comienza obteniendo en la máquina donde estoy desarrollando, una copia del código integrado sobre el que se está trabajando. Esto se lleva a cabo utilizando un sistema de administración del código fuente. Un sistema de control del código fuente almacena todo el código de un proyecto en un repositorio. Para referirnos al estado actual del sistema, utilizamos el término mainline. En cualquier momento, un desarrollador puede hacer una copia controlada del mailine en su computadora, esto es llamado checking out (comprobación). La copia almacenada en la computadora del desarrollador se llama working copy(copia en progreso). Se toma la working copy y se hace lo que se necesite para completar la tarea. Una vez que se hace esto, se realiza un montaje automatizado en la computadora donde se está desarrollando. Esto toma el código fuente en la working copy, lo compila y linkea en un ejecutable, y corre las pruebas automatizadas. Se considera que el montaje es bueno si todos los montajes y las pruebas resultan sin errores. Con un buen montaje, se puede pensar en enviar los cambios al repositorio. Lo interesante es que otra gente debe haber hecho cambios al mainline antes de que se hubiera enviado el cambio al repositorio. Por lo tanto primero se debe actualizar la working copy con los nuevos cambios y volver a hacer el montaje. Si los cambios entran en conflicto, se manifestará una falla, o en la compilación o en las pruebas. En este caso, es responsabilidad del desarrollador arreglar esto y repetirlo hasta que se pueda montar una working copy que esté sincronizada de manera adecuada con el mainline. Una vez que se haya sincronizado adecuadamente la working copy, se pueden enviar los cambios al mainline, y actualizar el repositorio. Sin embargo, el trabajo no termina allí. En ese punto, se vuelve a montar, pero esta vez con una máquina de integración basada en el código del mainline. Sólo se puede afirmar que los cambios serán aceptados y permanentes cuando este nuevo montaje sea exitoso. Si ocurre un conflicto entre dos desarrolladores, generalmente es notado cuando el segundo desarrollador monta su working copy. La tarea más importante es arreglarlo y hacer que funcione apropiadamente. Las fallas de integración no deben permanecer por demasiado tiempo. El resultado es una porción estable de software que trabaja apropiadamente y contiene pocos bugs.

Upload: rocio-impaglione

Post on 25-Nov-2015

7 views

Category:

Documents


1 download

TRANSCRIPT

  • Integracin Continua

    La integracin continua es una prctica de desarrollo de software en la cual los miembros de un equipo integran

    su trabajo con mucha frecuencia. Cada integracin es verificada por un build automatizado para detectar

    errores de integracin lo ms rpido posible.

    Una historia comn entre los proyectos de software es que la integracin es un proceso largo e impredecible.

    Sin embargo, muchos proyectos tratan a la integracin como algo completamente convencional. El trabajo

    individual de un desarrollador est solamente a un par de horas de un proyecto compartido, y puede ser

    reintegrado al estado anterior en cuestin de minutos. Cualquier error de integracin es encontrado

    rpidamente y puede ser arreglado rpidamente.

    Este contraste no es el resultado de una herramienta cara y compleja. La esencia de ello recae simplemente en

    llevar a la prctica la integracin frecuente, usualmente diaria, junto con un repositorio controlado de cdigo

    fuente.

    A pesar de que la Integracin Continua es una prctica que no requiere ninguna herramienta en particular para

    desplegarse, hemos descubierto que es til utilizar un servidor de Integracin Contnua, como CruiseControl.

    Construyendo una Caracterstica Con Integracin Contnua

    Se comienza obteniendo en la mquina donde estoy desarrollando, una copia del cdigo integrado sobre el que

    se est trabajando. Esto se lleva a cabo utilizando un sistema de administracin del cdigo fuente. Un sistema

    de control del cdigo fuente almacena todo el cdigo de un proyecto en un repositorio. Para referirnos al

    estado actual del sistema, utilizamos el trmino mainline. En cualquier momento, un desarrollador puede

    hacer una copia controlada del mailine en su computadora, esto es llamado checking out (comprobacin). La

    copia almacenada en la computadora del desarrollador se llama working copy (copia en progreso). Se toma la

    working copy y se hace lo que se necesite para completar la tarea. Una vez que se hace esto, se realiza un

    montaje automatizado en la computadora donde se est desarrollando. Esto toma el cdigo fuente en la

    working copy, lo compila y linkea en un ejecutable, y corre las pruebas automatizadas. Se considera que el

    montaje es bueno si todos los montajes y las pruebas resultan sin errores.

    Con un buen montaje, se puede pensar en enviar los cambios al repositorio. Lo interesante es que otra gente

    debe haber hecho cambios al mainline antes de que se hubiera enviado el cambio al repositorio. Por lo tanto

    primero se debe actualizar la working copy con los nuevos cambios y volver a hacer el montaje. Si los cambios

    entran en conflicto, se manifestar una falla, o en la compilacin o en las pruebas. En este caso, es

    responsabilidad del desarrollador arreglar esto y repetirlo hasta que se pueda montar una working copy que

    est sincronizada de manera adecuada con el mainline.

    Una vez que se haya sincronizado adecuadamente la working copy, se pueden enviar los cambios al mainline, y

    actualizar el repositorio. Sin embargo, el trabajo no termina all. En ese punto, se vuelve a montar, pero esta

    vez con una mquina de integracin basada en el cdigo del mainline. Slo se puede afirmar que los cambios

    sern aceptados y permanentes cuando este nuevo montaje sea exitoso.

    Si ocurre un conflicto entre dos desarrolladores, generalmente es notado cuando el segundo desarrollador

    monta su working copy. La tarea ms importante es arreglarlo y hacer que funcione apropiadamente. Las fallas

    de integracin no deben permanecer por demasiado tiempo.

    El resultado es una porcin estable de software que trabaja apropiadamente y contiene pocos bugs.

  • Prcticas de Integracin Contnua

    Mantenga un nico repositorio de cdigo: Con el correr de los aos, los equipos de desarrollo de

    software han creado herramientas para manejar los archivos necesarios para crear un proyecto. Estas

    herramientas son una parte importantsima de muchos proyectos de desarrollo, por lo tanto es

    conveniente asegurarse de que se tiene un sistema de administracin de cdigo fuente decente. El

    costo no es un problema, ya que hay buenas herramientas open source.

    Una vez que se tiene un sistema de administracin de cdigo fuente, asegrese de que sea un lugar

    conocido por todos los miembros del equipo para poder acceder al cdigo.

    All se debe alojar todo lo necesario para un montaje, pero no algo que se monte.

    Una de las caractersticas del sistema de control de versiones es que permite que se creen mltiples

    ramas, para poder manejar diferentes corrientes de desarrollo. Sin embargo, a pesar de ser til, muy

    frecuentemente se sobreutiliza. Lo conveniente es minimizar el uso de ramificaciones, e intentar tener

    una nica rama: el mainline.

    Automatice el montaje: Los entornos automatizados para montaje son una caracterstica comn de los

    sistemas. Asegrese de que puede montar y lanzar su sistema utilizando estos scripts utilizando un

    nico comando.

    Un error comn es no incluir todo en el montaje automtico.

    En sntesis: Cualquiera debera poder traer una computadora virgen, sacar el cdigo del repositorio, y

    con un solo comando hacer correr el sistema en su mquina.

    Haga que su montaje se auto testee: Una buena manera de encontrar bugs de manera ms rpida y

    eficiente es incluyendo pruebas automatizadas en el proceso de montaje. Para auto-testear el cdigo

    se necesita un conjunto de pruebas automatizadas que pueden comprobar una gran parte del cdigo

    buscando bugs.

    Obviamente, no se puede contar con que los tests encontrarn todo, pues como ya se ha dicho antes,

    los tests no prueban la ausencia de bugs.

    Todos deben enviar al mainline todos los das: La integracin permite que los desarrolladores se

    mantengan informados acerca de los cambios que realizan. El nico prerrequisito para que un

    desarrollador pueda enviar al mainline es que pueda montar su cdigo correctamente.

    Al hacer esto con frecuencia, los desarrolladores encuentran rpidamente si existe un conflicto entre

    dos desarrollos. La clave para arreglar los problemas es encontrarlos con rapidez. El hecho de que se

    monte cuando se actualiza la working copy significa que se detectan conflictos de compilacin o

    textuales. Dado que el montaje se autotestea, tambin se detectan conflictos en el funcionamiento del

    cdigo.

    Como regla general: Todo desarrollador debera enviar al repositorio todos los das.

    Cada envo debe montar el mainline en una mquina integradora: Debera asegurarse de que los

    montajes regulares se realicen en una mquina integradora, y el envo debe considerarse eficaz slo si

    este montaje de integracin es exitoso. Un corolario de esto es que no debera irse a su casa hasta que

    el montaje del mainline haya pasado correctamente con cualquier envo que haya agregado en el da.

    Hay dos maneras de asegurar esto:

    o Utilizar un montaje manual: es similar al montaje local que un desarrollador hace antes de

    enviar al repositorio. El desarrollador va a la mquina integradora, comprueba el mainline y

    corre el montaje de integracin. Vigila el progreso y si el montaje es exitoso, el envo est

    terminado.

  • o Un servidor de integracin contnua: Acta como un monitor del repositorio. Cada vez que un

    envo llega al servidor, automticamente comprueba lo necesario. El envo no se considera

    terminado hasta que el desarrollador recibe una notificacin satisfactoria.

    Haga que el montaje sea rpido: El punto mas importante de la Integracin Contnua es proveer una

    respuesta rpida.

    Testee en un clon del entorno de produccin: El punto de testear es detectar, en condiciones

    controladas, cualquier problema que el sistema pueda tener en produccin. Una parte significativa de

    esto es el entorno en el cual corre el sistema de produccin. Si se prueba en un entorno diferente, cada

    diferencia en el resultado pasar bajo prueba, y no en produccin.

    Haga que sea sencillo para todos conseguir el ltimo ejecutable: Una de las partes ms difciles del

    desarrollo de software es asegurarse de que se est desarrollando el software correcto. Para hacer que

    esto funcione, cualquiera involucrado con un proyecto de software debera poder conseguir la ltima

    versin y correrla.

    En sntesis: Asegrese de que hay un lugar conocido por todos en donde se puede encontrar el ltimo

    ejecutable.

    Todos pueden ver lo que est sucediendo: La Integracin Contnua se basa en la comunicacin, de

    modo que se quiere asegurar que todos puedan ver el estado del sistema y los cambios que se le han

    estado haciendo. Una de las cosas ms importantes para comunicar es el estado del montaje del

    mainline.

    Automatice el despliegue: Para realizar integracin contnua se requieren mltiples entornos, uno para

    correr pruebas, otro o ms para realizar pruebas secundarias. Es importante tener scripts que permitan

    desplegar la aplicacin en cualquier entorno con facilidad.

    Una caracterstica que debe considerarse es la vuelta atrs automtica, es decir, en caso de que se

    produzca un error, tener la posibilidad de volver a un estado anterior satisfactorio.

    Beneficios de la Integracin Contnua

    El mayor beneficio de la Integracin Contnua es la reduccin del riesgo. La integracin continua permite

    acortar los tiempos de integracin, y se elimina la incerteza de saber cunto tiempo se tardar, o si se est

    yendo en la direccin correcta. Todo el tiempo se sabe dnde se est, qu trabaja y qu no, y los bugs ms

    importantes en el sistema. Si bien la integracin continua no se deshace de los bugs, al menos hace que sean

    muchsimo ms sencillos de encontrar y eliminar. Como resultado, los proyectos con integracin continua

    tienden a tener muchos menos bugs, tanto en produccin como en proceso. De todos modos, esto tambin

    tiene que ver con qu tan buenos sean los paquetes de pruebas.

    Primeros pasos en Integracin Continua

    Automatice el montaje

    Agregue pruebas automatizadas al montaje

    Intente agilizar el envo

    Si est comenzando un nuevo proyecto, comience con Integracin Continua desde el principio

    Consiga ayuda de alguien que ya haya hecho Integracin Continua antes.