SlideShare une entreprise Scribd logo
1  sur  59
Télécharger pour lire hors ligne
¡Mejor prevenir que curar!
  Lidiando con código legacy en rails
Felipe Talavera Armero

    twitter || github => flype

     hello@iamfelipe.com
Rails ya no es un
   pubertario,
empieza su edad
     "adulta"
Cada vez hay mas apps
  escritas en rails :)
Son ya ~5 años
escribiendo código
Muchas generan
mucho (valor || €€) a
  sus propietarios
La mayoría están
escritas con versiones
   antiguas de rails
¡Todas necesitan amor!
¿Qué es el código legacy?
¿Qué opinais vosotros?
“Code written > 3 months
  or by someone else”


“Code dificult to change”
“Code you wrote when weren’t
   as good as you are now”
           by DHH
“Code without tests”
      by Michael Feathers
“Acummulated technical debt”
        by Ward Cunningham
¿Qué es la deuda técnica?
Deuda Técnica
            por 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.
Muchas maneras de incurrir en ella
metáfora que los
manager entienden,

¡los necesitamos en
     este barco!
http://blog.hasmanythrough.com/2009/9/3/circle-of-death
Frena el desarrollo
 Aparecen mas bugs
Se retrasan los plazos
 Crece la frustración
mejor pagarla poco a poco
Testing y refactorización
   como modo de vida
     (TAFT & RAFT)
básicamente:
Nuestro código tiene que ser :

       mantenible
         legible
       entendible

            osea:
    facil de modificar
Si no pagamos...
consecuencia
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...
Detectar olores
   Ruby o Rails

  sugieren problemas
   futuros atajarlos a
      tiempo ayuda
en ruby:
          duplicación
     métodos muy largos
muchos parámetros en métodos
       case statements
         acoplamiento
    ley de demeter (LoD)
               ...
recordar chicos:
           Ruby muy flexible, todo el
     control está en manos del programador

"With great power comes great responsibility."
en rails:
     No a la rails way
   Violaciones del MVC
mucho código en controllares
poco código en los modelos
    poco uso de plugins
Si todo lo anterior ha fallado
¿Re-escribir o Refactorizar?
¿ Has deseado tirar
todo y empezar de
      nuevo ?
Reescribir a veces no
   es buena idea.
En realidad pocas veces
     es buena idea.
       ¿ Por qué ?
A veces no tenemos
todo el conocimiento
      de la app.
El problema parace, más
 sencillo desde fuera y
creemos que podemos
     hacerlo mejor
Perderemos todo el
conocimiento adquirido
de los bugs solucionados
Decidimos re-escribir
      ¿Por donde empiezo?
Nuevo proyecto e ir
moviendo funcionalidad
    Mejor con algo de testing, ¿no?

    nivel funcional o de integración
  De afuera hacia dentro, ¿cucumber?
Preparemonos para
la gran refactorización
necesitamos tener una
buena red de seguridad
Normalmente inviable
PARAR el desarrollo y
empezar a testear todo
vayamos despacito
no empezar a rescribir por reescribir

        Limpia y testea solo el código
        con el que te vayas cruzando
           mientras añadas nuevas
               funcionalidades
Saca métricas y apóyate
 en ellas para ver por
   dónde comenzar
    metric_fu, flog, rcov, saikuru ...
y paciencia, poquito a
  poquito se puede
  conseguir mucho
plugins útiles

• Inherited_resources
• resources_controller
• partial_dependencies
• noisy_partials
• metric_fu
Bibliografía:
¡Mejor prevenir que      currar...
           ... de mas!

Contenu connexe

Similaire à legacy

Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Consejos de un perro viejo programador
Consejos de un perro viejo programadorConsejos de un perro viejo programador
Consejos de un perro viejo programadorBraulio Diez Botella
 
Volviendo a poner el “soft” en software
Volviendo a poner el “soft” en softwareVolviendo a poner el “soft” en software
Volviendo a poner el “soft” en softwareDanijel Arsenovski
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.jsINSIGNIA4U
 
DevOps, por donde comenzar? - DrupalCon Latin America 2015
DevOps, por donde comenzar?  - DrupalCon Latin America 2015DevOps, por donde comenzar?  - DrupalCon Latin America 2015
DevOps, por donde comenzar? - DrupalCon Latin America 2015Taller Negócio Digitais
 
Extreme Programing y Devops - Código de Calidad
Extreme Programing y Devops - Código de CalidadExtreme Programing y Devops - Código de Calidad
Extreme Programing y Devops - Código de CalidadJose Antonio Jimenez Bisbe
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacionAiko Himeko
 
Interceptando conversaciones messenger
Interceptando conversaciones messengerInterceptando conversaciones messenger
Interceptando conversaciones messengerdrako drako
 
DevOps & Infraestructura como código: Promesas Rotas
DevOps & Infraestructura como código: Promesas RotasDevOps & Infraestructura como código: Promesas Rotas
DevOps & Infraestructura como código: Promesas RotasRicard Clau
 
Mejores formas de aprender a programar
Mejores formas de aprender a programarMejores formas de aprender a programar
Mejores formas de aprender a programarEduardo Enriquez
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simplepsluaces
 
Quasi - Introducción al Lenguaje C
Quasi - Introducción al Lenguaje CQuasi - Introducción al Lenguaje C
Quasi - Introducción al Lenguaje Cdegarden
 

Similaire à legacy (20)

Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
200610 - Antipatrones de Software
200610 - Antipatrones de Software200610 - Antipatrones de Software
200610 - Antipatrones de Software
 
Consejos de un perro viejo programador
Consejos de un perro viejo programadorConsejos de un perro viejo programador
Consejos de un perro viejo programador
 
Volviendo a poner el “soft” en software
Volviendo a poner el “soft” en softwareVolviendo a poner el “soft” en software
Volviendo a poner el “soft” en software
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.js
 
DevOps, por donde comenzar? - DrupalCon Latin America 2015
DevOps, por donde comenzar?  - DrupalCon Latin America 2015DevOps, por donde comenzar?  - DrupalCon Latin America 2015
DevOps, por donde comenzar? - DrupalCon Latin America 2015
 
Extreme Programing y Devops - Código de Calidad
Extreme Programing y Devops - Código de CalidadExtreme Programing y Devops - Código de Calidad
Extreme Programing y Devops - Código de Calidad
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 
Interceptando conversaciones messenger
Interceptando conversaciones messengerInterceptando conversaciones messenger
Interceptando conversaciones messenger
 
Testing, tipos y otros flamewars
Testing, tipos y otros flamewarsTesting, tipos y otros flamewars
Testing, tipos y otros flamewars
 
DevOps & Infraestructura como código: Promesas Rotas
DevOps & Infraestructura como código: Promesas RotasDevOps & Infraestructura como código: Promesas Rotas
DevOps & Infraestructura como código: Promesas Rotas
 
Mejores formas de aprender a programar
Mejores formas de aprender a programarMejores formas de aprender a programar
Mejores formas de aprender a programar
 
Taller de laravel
Taller de laravelTaller de laravel
Taller de laravel
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
Scrum y craftsmanship
Scrum y craftsmanshipScrum y craftsmanship
Scrum y craftsmanship
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simple
 
Cuida tu código: Clean Code
Cuida tu código: Clean CodeCuida tu código: Clean Code
Cuida tu código: Clean Code
 
Quasi - Introducción al Lenguaje C
Quasi - Introducción al Lenguaje CQuasi - Introducción al Lenguaje C
Quasi - Introducción al Lenguaje C
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 

legacy