14

Tenemos el "problema" de un gran conjunto automatizado de pruebas de integración. Si bien nuestros tiempos de construcción son razonables (< 1 hora), las pruebas generalmente demoran> 6 horas en completarse.compilaciones nocturnas frente a integración continua: pruebas automáticas de larga ejecución

Si bien es genial tener esta gran parte de la funcionalidad probada en nuestras ejecuciones de compilación, obviamente es una barrera para la implementación de CI, que me ha resultado muy útil para mantener los árboles fuente en un estado "siempre edificable" .

He revisado el debate como this one, que se detallan las distinciones.

Esto me lleva a algunas preguntas:

  1. ¿El dictado CI o recomiendan Unidad frente a la automatización de pruebas de integración? He escuchado unidades solo en el pasado, pero no encuentro ninguna declaración (o razón) para esto en una búsqueda rápida.

  2. ¿Cuál es una buena "mejor práctica" para que los tiempos combinados y los tiempos de prueba automatizados tengan un IC eficaz para un equipo? Mi instinto me dice que esto debería ser < 2 horas como el peor de los casos, y probablemente < 1 hora para ser realmente efectivo. En teoría, podríamos dividir las pruebas para que se ejecuten en paralelo y probablemente las ejecutemos en menos de 2 horas, pero esto aún sería una ejecución de 3 horas.

  3. ¿Cuál es la mejor forma de avanzar de Nightly Builds + Integration Tests de larga duración a CI? Estoy pensando en construir CI con algunas pruebas unitarias esqueléticas solamente, en combinación con versiones nocturnas que continúan con las pruebas de integración.

Cualquier recomendación de herramientas también son bienvenidos (sólo para Windows C#/C++ código base)

+0

Actualización: se han tratado los artículos 1-3, pero no se han recibido recomendaciones sobre herramientas. CruiseControl.NET es la elección obvia, ¿alguna otra que valga la pena considerar para una base de código de C#/C++ solo para Windows? – holtavolt

+0

Acabo de tropezar con esto. Estamos probando [Jenkins] (http://jenkins-ci.org/) para Windows C# y llegamos muy lejos en menos de un día. Además, tenga en cuenta TeamCity y Bamboo – KCD

Respuesta

13

Para la mayoría de los proyectos, sin embargo, la directriz XP de una acumulación diez por minuto es perfectamente dentro de lo razonable. La mayoría de nuestros proyectos modernos logran esto. Es vale la pena poner en esfuerzo concentrado para que esto suceda, porque cada minutos que reduce el tiempo de compilación es un minuto guardado para cada desarrollador cada vez que se comprometen. Como CI exige confirmaciones frecuentes, esto suma durante mucho tiempo.

Fuente: http://martinfowler.com/articles/continuousIntegration.html#KeepTheBuildFast

¿Por qué se tarda 6 horas? ¿Cuántas pruebas tienes? ¿Cuál es la razón de la unidad de prueba en comparación con los integrados? Es probable que tenga muchas más pruebas integradas o que su unidad de prueba no sea realmente una unidad. ¿Están sus pruebas de unidad tocando el DB? Este podría ser el problema.

6 horas es un largo largo tiempo. El artículo anterior tiene algunos consejos.

+0

Gracias por el enlace al artículo de Fowler. Sí, nuestro testbed está compuesto casi por completo de pruebas integradas, lo cual es claramente parte del problema (y algo que me gustaría convencer al equipo y la gerencia vale la pena invertir para cambiar) – holtavolt

+3

Una cosa a considerar es priorizar las pruebas. ¿Podría al menos convencer al equipo de dividir las pruebas en las suites de Prioridad 1, 2 y 3 y solo ejecutar las pruebas de Prioridad 1 en la IC? Por supuesto, esto significaría que el equipo de prueba tendría que realizar periódicamente (diariamente?) El resto de las pruebas en una estructura bendita determinada para garantizar una cobertura adecuada. Como una guía, las pruebas Pri1 podrían ser un pequeño conjunto de escenarios clave/pruebas de integración que, cuando fallan, significa que la compilación es generalmente excelente y la funcionalidad principal no está disponible, por ejemplo. – nithins

+0

si una prueba no se ejecuta en CI, cuando se rompe nadie lo sabrá. entonces, si no lo ejecutas, entonces bórralo, al menos entonces eres honesto contigo mismo. – time4tea

4

Hay algunas cosas aquí.

En general, tendrá una serie de compilaciones, una que compila & pruebas de unidad de funcionamiento, una que hace eso y ejecuta pruebas de aceptación locales, y una que ejecuta pruebas de integración.

Definitivamente no necesita necesita una compilación única que hace de todo.

Sus tiempos de construcción para mí suenan bastante largos - recuerde que el punto aquí es dar rápida comentarios de que algo salió mal. No sé mucho sobre tu proyecto, pero creo que deberías intentar que tu compilación y prueba de la unidad se reduzcan a menos de dos o tres minutos. Esto es perfectamente alcanzable, en todos los proyectos, pero muy grandes, por lo que si las pruebas de su unidad toman tiempo, entonces es hora de empezar a preguntar por qué.

6 horas es también un tiempo muy largo. ¿Estás seguro de que tus pruebas están probando lo correcto? ¿tienes demasiadas pruebas de amplio alcance? ¿Estás usando "sleep()" para maquillar por el hecho de que no has modelado bien la asincronía en tu código de prueba?

Probablemente deberías conseguir el libro "Entrega continua" de Jez Humbles, y echar un vistazo al Software orientado a objetos de crecimiento para saber cómo escribir pruebas de unidad/integración. GOOS usa Java como lenguaje de implementación, pero todos los conceptos son los mismos.

+0

- ¡se supone que las pruebas unitarias serán rápidas! - Deberías poder ejecutar varios miles de pruebas unitarias en menos de un minuto. – time4tea

+0

Sí - Entiendo que estas son las intenciones de CI, y enfatizaré que estamos ejecutando * pruebas de integración *, y no pruebas de unidades actualmente. Estas pruebas de integración son extensas y, a medida que se encuentran los errores y se corrigen, se agregan nuevas pruebas para cubrir estos casos (por ejemplo, pruebas de regresión mezcladas). – holtavolt

+1

Bueno, claro, pero ¿cuántos tienes? ¿Qué cosas cubren? ¿Cuánta duplicación hay? ¿Hay sueño() en todo el lugar? ¿Por qué tardan tanto? ¿Qué quieres decir con errores? ¿Los evaluadores solo informan un error si encuentras algo en UAT que no funciona? eso no es un error, solo una característica sin terminar, así que escriba una prueba de nivel más bajo ... – time4tea

Cuestiones relacionadas