2009-09-17 9 views
9

Joel parece think highly of daily builds. Para una aplicación compilada tradicional, ciertamente puedo ver su justificación, pero ¿cómo es esto paralelo al desarrollo web, o no?¿Las construcciones diarias son el camino a seguir para una aplicación web?

Un poco sobre el proyecto que estoy pidiendo - Hay 2 desarrolladores trabajando en una aplicación web Django (Python). Tenemos 1 repositorio svn. Cada desarrollador mantiene un pago y su propia copia de MySQL se ejecuta localmente (si no está familiarizado con Django, viene incluido con su propio servidor de prueba, del mismo modo que las aplicaciones ASP pueden ejecutarse dentro de Visual Studio). El desarrollo y las pruebas se realizan localmente y luego se vuelven a comprometer con el repositorio. La copia de trabajo real del sitio web es un checkout de SVN (sé de exportación de SVN y lleva demasiado tiempo). Lo más cercano que tenemos a una 'compilación' es un archivo por lotes que ejecuta una actualización SVN en la copia de trabajo, los bits django ('manage.py syncdb'), actualiza el caché del motor de búsqueda (solr) y luego reinicia apache.

Supongo que lo que no veo es el paralelo a las aplicaciones web.

¿Está haciendo una aplicación web controlada por fuente con 'compilaciones nocturnas'? En caso afirmativo, ¿cómo se ve?

Respuesta

11

Puede ejecutar fácilmente todas las pruebas de su unidad Django a través del marco de prueba de Django como su construcción nocturna.

Eso es lo que hacemos.

También tenemos algunas pruebas de unidades ordinarias que no aprovechan las características de Django, y las ejecutamos también.

Aunque Python (y Django) no requieren el tipo de prueba nocturna de compilación/enlace/unidad que hacen los lenguajes compilados, usted todavía se beneficia de la disciplina diaria de "Do not Break the Build". Y un ciclo diario de pruebas de unidad de todo lo que posee es algo bueno.

Estamos en pleno examen de Python 2.6 (que funciona perfectamente para nosotros) y ejecuta nuestras pruebas unitarias con la opción -3 para ver qué funciones obsoletas estamos usando. Tener un conjunto completo de pruebas unitarias nos asegura que un cambio para la compatibilidad de Python 3 no romperá la construcción. Y ejecutarlos todas las noches significa que tenemos que estar seguros estamos refabricando correctamente.

+1

+1 Las aplicaciones web en idiomas dinámicos a menudo no requieren una "compilación" en absoluto, pero las pruebas de integración continua son muy recomendables. –

3

Las aplicaciones web integradas en lenguajes dinámicos pueden no requerir un paso de "compilación", pero aún puede haber una serie de pasos de "compilación" necesarios para ejecutar la aplicación. Sus scripts de compilación pueden instalar o actualizar dependencias, realizar migraciones de bases de datos y luego ejecutar el conjunto de pruebas para asegurarse de que el código esté "limpio" w.r.t. la versión real registrada en el repositorio. O bien, puede implementar una copia del código en un servidor de prueba, luego ejecutar un conjunto de pruebas de integración de Selenium con la nueva versión para asegurar que la funcionalidad del sitio principal aún funcione.

Puede ser útil leer sobre el tema Integración continua, que es una práctica muy útil para los equipos de desarrollo de webapp. Cuanto más acelerado y ágil sea su proceso de desarrollo, más necesitará la aportación habitual de pruebas automatizadas y métricas de calidad para asegurarse de que falle rápido y fuerte en cualquier versión rota del código.

+0

+1 por ser la primera respuesta que vi que combina las ideas de los aspectos de no compilación del proceso de compilación con una sugerencia para la integración continua. FWIW, he tenido buena suerte con CruiseControl para una aplicación web. – rmeador

1

La idea general detrás de compilaciones frecuentes (cada noche o más frecuentes como en integración continua) es obtener retroalimentación inmediata para reducir el tiempo transcurrido entre la introducción de un problema y su detección. Por lo tanto, construir con frecuencia es útil solo si puede generar algunos comentarios a través de la compilación (pruebas idealmente automatizadas), controles de calidad, etc. Sin comentarios, no hay un punto real.

2

Si es solo usted y otro desarrollador trabajando en él, las compilaciones nocturnas probablemente no le darán mucho.

Yo diría que el equivalente a la aplicación web de las compilaciones nocturnas sería el de los sitios (que se pueden construir todas las noches).

Donde las construcciones nocturnas en un área de preparación comienzan a pagar dividendos reales es cuando tiene clientes, gerentes de proyecto y personas de QA que necesitan poder ver una versión actualizada, pero relativamente estable de la aplicación. Las cajas de arena de tu desarrollador (si eres como yo, al menos) probablemente pasen mucho tiempo en un estado inutilizable, ya que estás rompiendo cosas intentando que se implemente la siguiente función. Entonces, el problema típico es que una persona de QA quiere verificar que se solucionó un error, o un PM quiere verificar que alguna característica planificada se implementó correctamente, o un cliente quiere ver que ha progresado en el tema que le importa. acerca de. Si solo tienen acceso a los entornos limitados del desarrollador, es muy probable que cuando lo miren, la versión de la zona de pruebas no se esté ejecutando (ya que significa que el servidor de ejecución ./manage.py está en un terminal en alguna parte) o es en un estado roto por otra cosa. Eso realmente ralentiza a todo el equipo y desperdicia mucho tiempo.

Parece que no tiene una configuración de etapas ya que solo actualiza automáticamente la versión de producción. Eso podría estar bien si eres manera más cuidadoso y disciplinado que yo (y creo que la mayoría de los desarrolladores) y nunca cometeré nada que no sea totalmente a prueba de balas. Personalmente, prefiero asegurarme de que mi trabajo haya superado al menos una QA superficial por alguien que no sea yo antes de que llegue a la producción.

Así que, en conclusión, la configuración en la que trabajo:

  • cada desarrollador ejecuta su propia caja de arena local (igual que lo haces)
  • hay una caja de arena "común" puesta en escena en el servidor dev que se actualiza todas las noches de un cronjob. PMs, clientes y QA van allí. Nunca se les da acceso directo a las cajas de arena del desarrollador.
  • Hay una implementación automatizada (aunque iniciada manualmente) para la producción. Un desarrollador o el PM puede "presionar" a la producción cuando sentimos que las cosas han sido suficientemente controladas y son estables y seguras.

Yo diría que el único inconveniente (además de un poco de sobrecarga de configuración de las construcciones de puesta en escena nocturnas) es que hace un día de respuesta a la verificación de errores.es decir, QA informa un error en el software (basado en observar la compilación nocturna de ese día), el desarrollador corrige los errores y los compromisos, luego el control de calidad debe esperar hasta la compilación del día siguiente para verificar que el error esté resuelto. Por lo general, no es un gran problema ya que todo el mundo tiene suficientes cosas en juego que no afectan el horario. Sin embargo, cuando se acerque un hito y estemos en un modo de congelación de funciones con corrección de errores, realizaremos actualizaciones manuales más frecuentes del sitio de transición.

Cuestiones relacionadas