Upload
diego-fontdevila
View
106
Download
5
Embed Size (px)
Citation preview
Cabalgando a la Bestia
Una experiencia de rediseño legacy
Diego Fontdevila Marcelo Gore
@dfontde @marcelogore
El camino
El contexto del proyecto
Decisiones tomadas
Mejoras implementadas en el producto
Prácticas implementadas
Lecciones aprendidas
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
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.
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
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
Prácticas implementadas
Infraestructura como código
Integración continua (incluyendo despliegue)
Entrega continua
TDD de punta a punta o BDD
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
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
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
Delivery pipeline
SEGTCI
SEGTGenerar
Test
SEGT Desplegar
Test
SEGT Desplegar
Cliente
SEGT Desplegar
Test
SEGT Desplegar
Prod
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
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.
Muchas gracias
Diego [email protected]@grupoesfera.com.ar
Marcelo [email protected]@grupoesfera.com.ar