Estos son los slides de nuestra charla de Ágiles 2016 en Quito, Ecuador. Trata de Integracion Continua, Despliegue Continuo, Infraestructura como código
Cabalgando a la bestia: una experiencia de rediseño legacy
1. Cabalgando a
la Bestia
Una experiencia de rediseño legacy
Diego Fontdevila Marcelo Gore
@dfontde @marcelogore
2.
3. El camino
El contexto del proyecto
Decisiones tomadas
Mejoras implementadas en el producto
Prácticas implementadas
Lecciones aprendidas
4. Contexto del proyecto
Fue desarrollado en dos etapas para un cliente original
Fue repensado como un producto
Vendido a un primer cliente
144 pruebas unitarias y de integración en tres generaciones
(1 que fallaba aleatoriamente)
1 prueba de regresión de interfaz de usuario
Muchas dependencias innecesarias
8. Decisiones tomadas
1. Refactorizar en la primera etapa solamente el módulo de
inconsistencias.
2. Invertir fuerte en ejecutar continuamente la prueba
general de regresión.
3. Automatizar los procesos (build, deploy) de punta a
punta.
4. Realizar las mejoras incrementalmente.
9. Decisiones tomadas [I]
Refactorizar en la primera etapa solamente el módulo de
inconsistencias (también borrar lo que no servía)
Antes pensamos en refactorizar el módulo web
Antes aún, en refactorizar el módulo de Cuestionarios
Nos ayudó la presión de las fechas a reconcebir nuestra ideas
Tomamos la decisión con autonomía, pero con restricciones
11. Mejoras implementadas
Migración a Postgres
Refactoring de módulo de inconsistencias
Versionado de base de datos con FlyWay
Despliegues automatizados
Entornos con software de base idéntico
Homogeneización de estilos con Bootstrap
14. Infraestructura
como código
./ Utilizamos Vagrant como
abstracción para administrar
máquinas virtuales VirtualBox y
cajas en la nube con DigitalOcean
./ Ansible como abstracción de la
provisión de software de base a las
máquinas virtuales
./ Bash para automatizar despliegues
./ Maven para automatizar builds
./ Repositorio de infraestructura
Administrar la configuración de
infra (máquinas virtuales,
software de base,
automatización) como código
16. Lecciones (re)aprendidas
● Es fundamental gestionar efectivamente la configuración
○ En particular, separar la configuración dependiente del ambiente
(puertos, usuario y clave, etc.)
● Manejar las tareas en jenkins con scripts que
empaqueten toda la información
○ Por ejemplo deploy y deploy-test que llama a deploy con los
parámetros para test.
○ Permite ejecutar rápidamente maximizando el feedback.
● Ejercitar el proceso múltiples veces para encontrar
errores y aumentar su claridad/eficiencia.
● Usar smokeTest
18. Integración
continua total
./ Ejecutar continuamente las prueba
s unitarias.
./ Desplegar continumante a una
máquina virtual
./ Ejecutar continuamente la prueba
de aceptación (regresión) general.
Ejecutar continuamente las
pruebas
24. TDD de punta a punta (BDD)
Creamos pruebas para la poquísima funcionalidad nueva
Escribimos las pruebas antes de escribir la funcionalidad
Lo hicimos probando desde la interfaz de usuario
26. Lecciones aprendidas
Vale la pena no abandonar aunque el andamiaje sea frágil.
Vale la pena invertir en abstracciones de infraestructura.
Siempre hay alguna forma de cortar que permite mejorar.
Las pruebas heredadas son difíciles pero pueden ser útiles.
Es importante hacer versiones iniciales y mejorarlas luego.