Pregunta

Puedo pensar en muchas buenas razones para usarlo; sin embargo, ¿cuáles son las desventajas de esto?

(Aparte de comprar otro servidor)

¿Cuáles son algunas ventajas de usar una compilación diaria en lugar de ella?

¿Fue útil?

Solución

(Vale la pena señalar que con " integración continua " me refiero a automatización con un proceso de compilación automatizado y automáticamente ejecuta pruebas y < fuerte> automáticamente detecta el fallo de cada pieza.

También vale la pena señalar que " integración continua " sólo significa un servidor de prueba o troncal. No significa "empujar cada cambio en vivo".

Hay muchas maneras de hacer mal la integración continua.)


No se me ocurre ninguna razón para no realizar pruebas de integración continua. Supongo que asumo que " integración continua " incluye pruebas. El hecho de que compile no significa que funcione.

Si su compilación y / o pruebas llevan mucho tiempo, la integración continua puede resultar costosa. En ese caso, ejecute las pruebas obviamente relacionadas con su cambio antes de la confirmación (herramientas de análisis de cobertura, como Devel :: CoverX :: Covered puede ayudar a descubrir qué pruebas van con qué código), haga su prueba de integración después del compromiso usando algo como SVN :: Notify , y avisa a los desarrolladores si falla. Archiva los resultados de la prueba utilizando algo como Smolder . Eso permite que los desarrolladores trabajen rápidamente sin tener que sentarse a ver cómo se ejecutan las suites de prueba, al mismo tiempo que detectan errores antes.

Dicho esto, con un poco de trabajo a menudo puedes acelerar tu proceso de desarrollo y prueba. Muchas veces, las pruebas lentas son el resultado de cada prueba que tiene que hacer demasiada configuración y desmontaje apuntando a un sistema que está demasiado acoplado y requiere que todo el sistema se configure solo para probar una pequeña parte.

El desacoplamiento a menudo ayuda, dividiendo los subsistemas en proyectos independientes. El alcance más pequeño facilita la comprensión y las construcciones y pruebas más rápidas. Cada confirmación puede realizar una compilación y una prueba completas sin incomodar al programador. Luego, todos los subproyectos se pueden recopilar para realizar pruebas de integración.

Una de las principales ventajas de ejecutar el conjunto de pruebas en cada confirmación, incluso si es posterior a la confirmación, es que sabes exactamente lo que rompió la compilación. En lugar de " algo que hicimos ayer rompió la compilación " o peor 'cuatro cosas que hicimos ayer rompieron la compilación de diferentes maneras y ahora tenemos que desenredarla " es " la revisión 1234 rompió la compilación " ;. Solo tienes que examinar esa única revisión para encontrar el problema.

La ventaja de hacer una compilación diaria es que, al menos, sabes que todos los días se realiza una compilación y una prueba completas y limpias. Pero deberías estar haciendo eso de todos modos.

Otros consejos

No creo que haya ningún inconveniente en ello. Pero por el bien del argumento, aquí está artículo de Eric Minick en UrbanCode (" Se trata de pruebas no compilaciones. ") Critica las herramientas que se basan en el trabajo de Martin Fowler diciendo que no dejan suficiente tiempo para las pruebas.

" Para ser verdaderamente exitoso en CI, Fowler afirma que la compilación debe ser autocomprobada y que estas pruebas incluyen pruebas de unidad y de extremo a extremo. Al mismo tiempo, la compilación debería ser muy rápida, idealmente menos de diez minutos, porque debería ejecutarse en cada confirmación. Si hay un número significativo de pruebas de extremo a extremo, no es realista ejecutarlas en tiempo de compilación mientras se mantiene todo el proceso en menos de diez minutos.

Agregue la demanda de una compilación en cada compromiso y los requisitos comienzan a parecer improbables. Las opciones son comentarios más lentos o la eliminación de algunas pruebas. & Quot;

James Shore tenía una gran serie de entradas de blog sobre los peligros de pensar que el uso de una herramienta de CI como CruiseControl significaba que estabas haciendo una integración continua:

Un peligro de configurar un servidor CI es el desplazamiento de la meta, pensando que lo importante es mantener el paso de compilación " a diferencia de " asegurando que tenemos software de alta calidad " ;. Así que la gente deja de preocuparse por el tiempo que tardan las pruebas en correr. Luego toman demasiado tiempo para ejecutarlos todos antes del registro. Entonces la construcción sigue rompiendo. Entonces la construcción siempre está rota. Así que la gente comenta las pruebas para hacer que la compilación pase. Y la calidad del software disminuye, pero bueno, la compilación está pasando ...

En general, hay dos casos en los que he visto que la integración continua realmente no tiene sentido. Tenga en cuenta que soy un gran defensor de la IC y trato de usarla cuando puedo.

El primero es cuando el roi simplemente no tiene sentido. Actualmente desarrollo varias pequeñas aplicaciones internas. Las aplicaciones normalmente son muy triviales y todo el ciclo de vida del desarrollo es de aproximadamente una semana o dos. Configurar correctamente todo para CI probablemente duplicaría eso y probablemente nunca volvería a ver esa inversión. Puede argumentar que lo volveré a poner en mantenimiento, pero es probable que estas aplicaciones se desechen a medida que se actualicen. Tenga en cuenta que su trabajo es probablemente enviar software, no alcanzar una cobertura de código del 100%.

El otro escenario que he oído mencionar es que CI no tiene sentido si no vas a hacer nada con los resultados. Por ejemplo, si su software debe enviarse a control de calidad y el personal de control de calidad solo puede ver una nueva versión cada dos días, no tiene sentido tener compilaciones cada pocas horas. Si otros desarrolladores no van a mirar las métricas de código e intentar mejorarlas, no tiene sentido rastrearlas. Por supuesto, esto no es culpa de que la CI no sea una buena técnica, es la falta de un equipo que esté dispuesto a aceptar la IC. Sin embargo, la implementación de un sistema de IC en tal escenario no tiene sentido.

Al comenzar, toma un tiempo configurar todo.

Si agrega pruebas, cobertura, inspecciones de código estático, búsqueda duplicada, compilación y despliegue de documentación, puede llevar mucho tiempo (semanas) lograrlo. Después de eso, mantener la construcción puede ser un problema.

por ejemplo, si agrega pruebas a la solución, puede hacer que la compilación las detecte automáticamente en función de algunos criterios o que tenga que actualizar manualmente la configuración de compilación. La detección automática es mucho más difícil de hacer bien. Lo mismo para la cobertura. Lo mismo de la generación de documentación ...

La única buena razón para no hacer una integración continua se produce cuando su proyecto ha funcionado hasta el punto en que sus pruebas de integración no habían identificado ningún defecto en mucho tiempo y se están tomando demasiado tiempo para ejecutarlas. vez que haces una compilación. En otras palabras: has hecho suficiente integración continua para demostrarte que ya no la necesitas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top