Top Banner
Cabalgando a la Bestia Una experiencia de rediseño legacy Diego Fontdevila Marcelo Gore @dfontde @marcelogore
28

Cabalgando a la bestia: una experiencia de rediseño legacy

Jan 21, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cabalgando a la bestia: una experiencia de rediseño legacy

Cabalgando a la Bestia

Una experiencia de rediseño legacy

Diego Fontdevila Marcelo Gore

@dfontde @marcelogore

Page 2: Cabalgando a la bestia: una experiencia de rediseño legacy
Page 3: Cabalgando a la bestia: una experiencia de rediseño legacy

El camino

El contexto del proyecto

Decisiones tomadas

Mejoras implementadas en el producto

Prácticas implementadas

Lecciones aprendidas

Page 4: Cabalgando a la bestia: una experiencia de rediseño legacy

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

Page 5: Cabalgando a la bestia: una experiencia de rediseño legacy

Arquitectura de módulos

Page 6: Cabalgando a la bestia: una experiencia de rediseño legacy
Page 7: Cabalgando a la bestia: una experiencia de rediseño legacy

Decisiones tomadas

Page 8: Cabalgando a la bestia: una experiencia de rediseño legacy

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.

Page 9: Cabalgando a la bestia: una experiencia de rediseño legacy

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

Page 10: Cabalgando a la bestia: una experiencia de rediseño legacy

RefactorRenombrar 5 tablas y sus columnas

Page 11: Cabalgando a la bestia: una experiencia de rediseño legacy

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

Page 12: Cabalgando a la bestia: una experiencia de rediseño legacy

Prácticas implementadas

Page 13: Cabalgando a la bestia: una experiencia de rediseño legacy

Prácticas implementadas

Infraestructura como código

Integración continua (incluyendo despliegue)

Entrega continua

TDD de punta a punta o BDD

Page 14: Cabalgando a la bestia: una experiencia de rediseño legacy

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

Page 15: Cabalgando a la bestia: una experiencia de rediseño legacy

Infraestructura como código[demo]

Page 16: Cabalgando a la bestia: una experiencia de rediseño legacy

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

Page 17: Cabalgando a la bestia: una experiencia de rediseño legacy

Nos equivocamos (I)

Page 18: Cabalgando a la bestia: una experiencia de rediseño legacy

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

Page 19: Cabalgando a la bestia: una experiencia de rediseño legacy

Integración Continua

Page 20: Cabalgando a la bestia: una experiencia de rediseño legacy

Tablero de Jenkins

Page 21: Cabalgando a la bestia: una experiencia de rediseño legacy

Despliegue continuo

Page 22: Cabalgando a la bestia: una experiencia de rediseño legacy
Page 23: Cabalgando a la bestia: una experiencia de rediseño legacy

Delivery pipeline

SEGTCI

SEGTGenerar

Test

SEGT Desplegar

Test

SEGT Desplegar

Cliente

SEGT Desplegar

Test

SEGT Desplegar

Prod

Page 24: Cabalgando a la bestia: una experiencia de rediseño legacy

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

Page 25: Cabalgando a la bestia: una experiencia de rediseño legacy

TDD de punta a punta[demo]

Page 26: Cabalgando a la bestia: una experiencia de rediseño legacy

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.

Page 27: Cabalgando a la bestia: una experiencia de rediseño legacy

¿Preguntas o reflexiones?

Page 28: Cabalgando a la bestia: una experiencia de rediseño legacy

Muchas gracias

Diego [email protected]@grupoesfera.com.ar

Marcelo [email protected]@grupoesfera.com.ar