legacy

59
¡Mejor prevenir que curar! Lidiando con código legacy en rails

Upload: felipe-talavera

Post on 31-Oct-2014

1.001 views

Category:

Documents


0 download

Tags:

DESCRIPTION

 

TRANSCRIPT

Page 1: legacy

¡Mejor prevenir que curar!Lidiando con código legacy en rails

Page 2: legacy

Felipe Talavera Armero

[email protected]

twitter || github => flype

Page 3: legacy

Rails ya no es un pubertario,

empieza su edad "adulta"

Page 4: legacy
Page 5: legacy

Cada vez hay mas apps escritas en rails :)

Page 6: legacy

Son ya ~5 años escribiendo código

Page 7: legacy

Muchas generan mucho (valor || €€) a

sus propietarios

Page 8: legacy

La mayoría están escritas con versiones

antiguas de rails

Page 9: legacy

¡Todas necesitan amor! ¡Todas necesitan amor!

Page 10: legacy

¿Qué es el código legacy?

Page 11: legacy

¿Qué opinais vosotros?

Page 12: legacy

“Code written > 3 months or by someone else”

“Code dificult to change”

Page 13: legacy

“Code you wrote when weren’t as good as you are now”

by DHH

Page 14: legacy

“Code without tests”by Michael Feathers

Page 15: legacy

“Acummulated technical debt”by Ward Cunningham

Page 16: legacy

¿Qué es la deuda técnica?

Page 17: legacy

Deuda Técnicapor Ward Cunningham

Asumimos que cada vez que implementamos algo de manera “hacky” estamos incrementando una deuda técnica que como las fiscales pagaremos más cuanto

más tardemos en saldar.

Page 18: legacy
Page 19: legacy

Muchas maneras de incurrir en ella

Page 20: legacy

metáfora que los manager entienden,

¡los necesitamos en este barco!

Page 22: legacy

Frena el desarrolloAparecen mas bugs

Se retrasan los plazos Crece la frustración

Page 23: legacy

mejor pagarla poco a poco

Page 24: legacy

Testing y refactorización como modo de vida

(TAFT & RAFT)

Page 25: legacy
Page 26: legacy

básicamente: Nuestro código tiene que ser :

mantenible legible

entendible

osea: facil de modificar

Page 27: legacy

Si no pagamos...

Page 28: legacy
Page 29: legacy

consecuencia

Page 30: legacy
Page 31: legacy

Ventanas Rotas

"Consideren un edificio con una ventana rota. Si la ventana no se repara, los vándalos tenderán a romper unas cuantas

ventanas más. Finalmente, quizás hasta irrumpan en el edificio, y si está abandonado, es posible que sea ocupado

por ellos o que prendan fuegos adentro...

Page 32: legacy

Detectar olores Ruby o Rails

sugieren problemas futuros atajarlos a

tiempo ayuda

Page 33: legacy

en ruby:duplicación

métodos muy largosmuchos parámetros en métodos

case statementsacoplamiento

ley de demeter (LoD)...

Page 34: legacy

recordar chicos:

Ruby muy flexible, todo el control está en manos del programador

"With great power comes great responsibility."

Page 35: legacy

en rails:

No a la rails wayViolaciones del MVC

mucho código en controllarespoco código en los modelos

poco uso de plugins

Page 36: legacy

Si todo lo anterior ha fallado

Page 37: legacy

¿Re-escribir o Refactorizar?

Page 38: legacy

¿ Has deseado tirar todo y empezar de

nuevo ?

Page 39: legacy

Reescribir a veces no es buena idea.

Page 40: legacy

En realidad pocas veces es buena idea.

¿ Por qué ?

Page 41: legacy

A veces no tenemos todo el conocimiento

de la app.

Page 42: legacy

El problema parace, más sencillo desde fuera y

creemos que podemos hacerlo mejor

Page 43: legacy

Perderemos todo el conocimiento adquirido de los bugs solucionados

Page 44: legacy

Decidimos re-escribir¿Por donde empiezo?

Page 45: legacy

Nuevo proyecto e ir moviendo funcionalidad

Mejor con algo de testing, ¿no?

nivel funcional o de integración

De afuera hacia dentro, ¿cucumber?

Page 46: legacy

Preparemonos para

la gran refactorización

Page 47: legacy

necesitamos tener una buena red de seguridad

Page 48: legacy

Normalmente inviable PARAR el desarrollo y empezar a testear todo

Page 49: legacy

vayamos despacito

Page 50: legacy
Page 51: legacy

no empezar a rescribir por reescribir

Limpia y testea solo el código con el que te vayas cruzando

mientras añadas nuevas funcionalidades

Page 52: legacy

Saca métricas y apóyate en ellas para ver por

dónde comenzar

metric_fu, flog, rcov, saikuru ...

Page 53: legacy

y paciencia, poquito a poquito se puede conseguir mucho

Page 54: legacy

plugins útiles

• Inherited_resources

• resources_controller

• partial_dependencies

• noisy_partials

• metric_fu

Page 55: legacy

Bibliografía:

Page 56: legacy
Page 57: legacy
Page 58: legacy
Page 59: legacy

¡Mejor prevenir que currar...... de mas!