SlideShare une entreprise Scribd logo
1  sur  26
CURSO DE TESTING OSL
        12 – 16 DE ABRIL 2010



                    Buenas prácticas
           en el desarrollo de aplicaciones web

Alberto Perdomo

Web:         http://albertoperdomo.net
Email:       alberto.perdomo@aentos.es
Twitter:     @albertoperdomo             http://www.aentos.com
EL CÓDIGO PERDURA


No escribas código del que te vayas a sentir
              avergonzado.

   Alguien lo va a ver tarde o temprano.



       http://www.flickr.com/photos/andre5/4408196113/
ESCRIBE CÓDIGO
      LIMPIO Y LEGIBLE
Un buen código Ruby no precisa de muchos
              comentarios


      http://www.flickr.com/photos/luisbg/2072134438/
CONVENCIONES

   “Sigue las convenciones”
      Están ahí por algo.
  No luches contra corriente.




http://www.flickr.com/photos/talaakso/3741346743/
USA HERRAMIENTAS




Hay herramientas, gemas y plugins para casi todo
           lo que puedas imaginar.

   Directorio: http://www.ruby-toolbox.com/

          http://www.flickr.com/photos/usefulguy/226373498/
D on't
R epeat
Y ourself         Introducing...

          Inherited Resources




    Imágen: http://www.fickr.com/photos/cowfsh/132547104/
DRY: REFACTORIZAR




       Primero repite,
      luego refactoriza




 http://www.flickr.com/photos/vinothchandar/4257167174/
Separation of concerns (SoC)
→ Modularidad
→ Encapsulamiento
→ Distribución de
responsabilidades
THE Fat model
&   the skinny controller




      Imágen: http://www.fickr.com/photos/kylemay/553916826/
Ley de Demeter:
“Habla sólo con tus
     amigos”
   Imágen: http://www.fickr.com/photos/desireedelgado/3423389473/
#1                                                                         NMO*: muy alto



#2                                                                         NMO*: MEDIO alto



                                                                            NMO*: MEDIO


#3                                                                      *NMO = NIVEL DE MAL OLOR


     Código:
     http://brian.maybeyoureinsane.net/blog/2006/12/15/law-of-demeter-or-how-to-avoid-coding-yourself-into-a-corner-in-rails/
DELEGATE, FTW!!




                                                                                AquI HUELE A
                                                                                ROSAS!!!!

Código:
http://brian.maybeyoureinsane.net/blog/2006/12/15/law-of-demeter-or-how-to-avoid-coding-yourself-into-a-corner-in-rails/
TAFT
“Test All the F***ing Time”
        Bryan Liles




    Video Ruby HoeDown 2008
El Zen del Testing




 “Encuentra el equilibrio”
Cada uno tiene su combo.
Imágen: http://www.fickr.com/photos/digitalart/2912152377/
Sé disciplinado:

                                                       Practica
                                                      tu combo

                                                       Haz TDD


                                                     “Dar cera,
                                                     pulir cera”

http://www.flickr.com/photos/kevinpoh/3650866967/
CÓDIGO / TESTING
Comportamiento
→ Piensa en comportamiento, no en implementación
→ El código expresa comportamiento
→ Tu código debe ser una “caja negra”


Tests = ejemplos de comportamiento


Haz que los tests dirijan tu código
→ RED → GREEN → REFACTOR
EVITA LOS TEST FRÁGILES

→ se rompen con facilidad


→ síntomas: cada vez que refactorizas tienes que
actualizarlos


→ prueban detalles de implementación no comportamiento
HAZ TESTS
CON LO QUE PREFIERAS, PERO HÁZLOS




     http://www.fickr.com/photos/sebastian_bergmann/2282734669/
HÁZLOS, EN SERIO




http://www.fickr.com/photos/sebastian_bergmann/2291013416/
USA CONTROL DE VERSIONES
Distribuídos
   → Git          → el más popular (recomendado)
   → Darcs
   → Mercurial
   →…


Centralizados
   → Subversion   → bueno para empezar
   → CVS          → bienvenidos a la prehistoria
   → Sourcesafe   → “si lo usas no me lo digas”
   → ...
CONTROL DE
VERSIONES

“Piensa en los gatitos”




  http://www.fickr.com/photos/mathias-erhart/2562106102/
AUTOMATIZA


   Todo tiene que ser
      reproducible

    Hacer las cosas a
     mano no sirve

    Tu tiempo es oro


http://www.fickr.com/photos/macinate/3454346075/
AUTOMATÍZAR LOS TEST

Integración continua (ejecutar los test en el
                 servidor)

          Integrity, CruiseControl.rb, Hudson



         Ejecutar los test en local

                  AutoTest, ZenTest
AUTOMATIZAR: SERVIDORES




  Instalar y confgurar servidores

            Chef, Puppet, ...
AUTOMATIZAR: DESPLIEGUE



Despliega la aplicación de forma automática
                 a los server

                 ¡Capistrano!
¿PREGUNTAS?

Contenu connexe

En vedette

En vedette (20)

Introduccion al desarrollo de aplicaciones web con Ruby on Rails
Introduccion al desarrollo de aplicaciones web con Ruby on RailsIntroduccion al desarrollo de aplicaciones web con Ruby on Rails
Introduccion al desarrollo de aplicaciones web con Ruby on Rails
 
Ruby 101 && Coding Dojo
Ruby 101 && Coding DojoRuby 101 && Coding Dojo
Ruby 101 && Coding Dojo
 
Ruby 101 session 5
Ruby 101 session 5Ruby 101 session 5
Ruby 101 session 5
 
Ruby 101 session 1
Ruby 101 session 1Ruby 101 session 1
Ruby 101 session 1
 
Ruby 101 session 4
Ruby 101 session 4Ruby 101 session 4
Ruby 101 session 4
 
Ruby 101
Ruby 101Ruby 101
Ruby 101
 
Ruby101
Ruby101Ruby101
Ruby101
 
Ruby 101 session 3
Ruby 101 session 3Ruby 101 session 3
Ruby 101 session 3
 
CSS Preprocessors - Sass
CSS Preprocessors - SassCSS Preprocessors - Sass
CSS Preprocessors - Sass
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubs
 
Conviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-endConviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-end
 
Desarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y RailsDesarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y Rails
 
Sass: CSS con Superpoderes
Sass: CSS con SuperpoderesSass: CSS con Superpoderes
Sass: CSS con Superpoderes
 
Desarrollo Ágil y Ruby on Rails
Desarrollo Ágil y Ruby on RailsDesarrollo Ágil y Ruby on Rails
Desarrollo Ágil y Ruby on Rails
 
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
 
Pre-procesadores CSS. SASS
Pre-procesadores CSS. SASSPre-procesadores CSS. SASS
Pre-procesadores CSS. SASS
 
Uso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaUso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en Astronomía
 
Ruby intro
Ruby introRuby intro
Ruby intro
 
Lenguaje de programación Ruby
Lenguaje de programación RubyLenguaje de programación Ruby
Lenguaje de programación Ruby
 
Sass y compass
Sass y compassSass y compass
Sass y compass
 

Similaire à Curso TDD Ruby on Rails #08: Buenas prácticas

Trash Robotic Router Platform (TRRP)
Trash Robotic Router Platform (TRRP)Trash Robotic Router Platform (TRRP)
Trash Robotic Router Platform (TRRP)
navajanegra
 

Similaire à Curso TDD Ruby on Rails #08: Buenas prácticas (14)

Expoembebidos
ExpoembebidosExpoembebidos
Expoembebidos
 
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
Madrid devops empaquetamientodeb_i
Madrid devops empaquetamientodeb_iMadrid devops empaquetamientodeb_i
Madrid devops empaquetamientodeb_i
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simple
 
Un newbie conoce a Sinatra
Un newbie conoce a SinatraUn newbie conoce a Sinatra
Un newbie conoce a Sinatra
 
Devs.info
Devs.infoDevs.info
Devs.info
 
Cómo ser un jedi developer
Cómo ser un jedi developerCómo ser un jedi developer
Cómo ser un jedi developer
 
Migrando CI a Docker
Migrando CI a DockerMigrando CI a Docker
Migrando CI a Docker
 
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDOLas reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
 
Trash Robotic Router Platform (TRRP)
Trash Robotic Router Platform (TRRP)Trash Robotic Router Platform (TRRP)
Trash Robotic Router Platform (TRRP)
 
Sysdig
SysdigSysdig
Sysdig
 
Pegandose con android
Pegandose con androidPegandose con android
Pegandose con android
 
Pegándose con Android
Pegándose con AndroidPegándose con Android
Pegándose con Android
 

Plus de Alberto Perdomo

Primeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4jPrimeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4j
Alberto Perdomo
 
Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...
Alberto Perdomo
 

Plus de Alberto Perdomo (13)

Primeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4jPrimeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4j
 
Leveraging relations at scale with Neo4j
Leveraging relations at scale with Neo4jLeveraging relations at scale with Neo4j
Leveraging relations at scale with Neo4j
 
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
 
Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011
 
Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...
 
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
 
Curso TDD Ruby on Rails #05: Shoulda
Curso TDD Ruby on Rails #05: ShouldaCurso TDD Ruby on Rails #05: Shoulda
Curso TDD Ruby on Rails #05: Shoulda
 
Curso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #04: Factorías de objetosCurso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #04: Factorías de objetos
 
Curso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosCurso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitarios
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven DevelopmentCurso TDD Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
 
Curso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testingCurso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testing
 
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
 

Dernier

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Dernier (11)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Curso TDD Ruby on Rails #08: Buenas prácticas

  • 1. CURSO DE TESTING OSL 12 – 16 DE ABRIL 2010 Buenas prácticas en el desarrollo de aplicaciones web Alberto Perdomo Web: http://albertoperdomo.net Email: alberto.perdomo@aentos.es Twitter: @albertoperdomo http://www.aentos.com
  • 2. EL CÓDIGO PERDURA No escribas código del que te vayas a sentir avergonzado. Alguien lo va a ver tarde o temprano. http://www.flickr.com/photos/andre5/4408196113/
  • 3. ESCRIBE CÓDIGO LIMPIO Y LEGIBLE Un buen código Ruby no precisa de muchos comentarios http://www.flickr.com/photos/luisbg/2072134438/
  • 4. CONVENCIONES “Sigue las convenciones” Están ahí por algo. No luches contra corriente. http://www.flickr.com/photos/talaakso/3741346743/
  • 5. USA HERRAMIENTAS Hay herramientas, gemas y plugins para casi todo lo que puedas imaginar. Directorio: http://www.ruby-toolbox.com/ http://www.flickr.com/photos/usefulguy/226373498/
  • 6. D on't R epeat Y ourself Introducing... Inherited Resources Imágen: http://www.fickr.com/photos/cowfsh/132547104/
  • 7. DRY: REFACTORIZAR Primero repite, luego refactoriza http://www.flickr.com/photos/vinothchandar/4257167174/
  • 8. Separation of concerns (SoC) → Modularidad → Encapsulamiento → Distribución de responsabilidades
  • 9. THE Fat model & the skinny controller Imágen: http://www.fickr.com/photos/kylemay/553916826/
  • 10. Ley de Demeter: “Habla sólo con tus amigos” Imágen: http://www.fickr.com/photos/desireedelgado/3423389473/
  • 11. #1 NMO*: muy alto #2 NMO*: MEDIO alto NMO*: MEDIO #3 *NMO = NIVEL DE MAL OLOR Código: http://brian.maybeyoureinsane.net/blog/2006/12/15/law-of-demeter-or-how-to-avoid-coding-yourself-into-a-corner-in-rails/
  • 12. DELEGATE, FTW!! AquI HUELE A ROSAS!!!! Código: http://brian.maybeyoureinsane.net/blog/2006/12/15/law-of-demeter-or-how-to-avoid-coding-yourself-into-a-corner-in-rails/
  • 13. TAFT “Test All the F***ing Time” Bryan Liles Video Ruby HoeDown 2008
  • 14. El Zen del Testing “Encuentra el equilibrio” Cada uno tiene su combo. Imágen: http://www.fickr.com/photos/digitalart/2912152377/
  • 15. Sé disciplinado: Practica tu combo Haz TDD “Dar cera, pulir cera” http://www.flickr.com/photos/kevinpoh/3650866967/
  • 16. CÓDIGO / TESTING Comportamiento → Piensa en comportamiento, no en implementación → El código expresa comportamiento → Tu código debe ser una “caja negra” Tests = ejemplos de comportamiento Haz que los tests dirijan tu código → RED → GREEN → REFACTOR
  • 17. EVITA LOS TEST FRÁGILES → se rompen con facilidad → síntomas: cada vez que refactorizas tienes que actualizarlos → prueban detalles de implementación no comportamiento
  • 18. HAZ TESTS CON LO QUE PREFIERAS, PERO HÁZLOS http://www.fickr.com/photos/sebastian_bergmann/2282734669/
  • 20. USA CONTROL DE VERSIONES Distribuídos → Git → el más popular (recomendado) → Darcs → Mercurial →… Centralizados → Subversion → bueno para empezar → CVS → bienvenidos a la prehistoria → Sourcesafe → “si lo usas no me lo digas” → ...
  • 21. CONTROL DE VERSIONES “Piensa en los gatitos” http://www.fickr.com/photos/mathias-erhart/2562106102/
  • 22. AUTOMATIZA Todo tiene que ser reproducible Hacer las cosas a mano no sirve Tu tiempo es oro http://www.fickr.com/photos/macinate/3454346075/
  • 23. AUTOMATÍZAR LOS TEST Integración continua (ejecutar los test en el servidor) Integrity, CruiseControl.rb, Hudson Ejecutar los test en local AutoTest, ZenTest
  • 24. AUTOMATIZAR: SERVIDORES Instalar y confgurar servidores Chef, Puppet, ...
  • 25. AUTOMATIZAR: DESPLIEGUE Despliega la aplicación de forma automática a los server ¡Capistrano!