SlideShare una empresa de Scribd logo
1 de 17
CURSO DE TESTING OSL
        12 – 16 DE ABRIL 2010



            Test Driven Development – TDD
           (Desarrollo dirigido por pruebas)

Alberto Perdomo

Web:       http://albertoperdomo.net
Email:     alberto.perdomo@aentos.es
Twitter:   @albertoperdomo             http://www.aentos.com
DESARROLLO WEB ÁGIL
 FUNCIONALIDAD n        FUNCIONALIDAD n+1



      DISEÑO                 DISEÑO




  IMPLEMENTACIÓN         IMPLEMENTACIÓN




PRUEBAS / VALIDACIÓN   PRUEBAS / VALIDACIÓN



    DESPLIEGUE             DESPLIEGUE
TDD: EL ORÍGEN

→ El test-driven development es un concepto estrechamente
relacionado con el extreme programming, que emerge en
1999.


→ Recientemente ha obtenido atención como técnica
individual.


→ Creador: Kent Beck, uno de los frmantes originales del
Manifesto Ágil
TDD: EL CONCEPTO


  PRUEBA
 PRIMERO,

IMPLEMENTA
  DESPUÉS
PROBLEMAS DE ESCRIBIR LAS
  PRUEBAS DESPUÉS DEL
       CÓDIGO I

→ Sabemos cómo está escrito el código y por lo tanto estamos
viciados a la hora de probarlo


→ Pensamos en probar cómo está implementado y no en
probar cómo debería funcionar desde la perspectiva del
usuario
EJEMPLO
Implementación

class User < ActiveRecord::Base

  def full_name
    first_name + " " + last_name
  end                                         Para una instancia del modelo User
                                              con atributos frst_name “Alberto”
                                              y last_name “Perdomo” el método
end

                                              full_name debe devolver “Alberto
                                              Perdomo”



Test

  def test_full_name
    person = User.new(:first_name => "Alberto", :last_name => "Perdomo")
    assert_equal "Alberto Perdomo", user.full_name
  end
PROBLEMAS DE ESCRIBIR LAS
  PRUEBAS DESPUÉS DEL
       CÓDIGO II

Estamos viciados con la implementación


  → Pruebas inadecuadas


  → Pruebas que no funcionan


  → Pruebas frágiles basadas en la implementación, no en el
  comportamiento
EJEMPLO
Implementación

class User < ActiveRecord::Base

  def full_name
    first_name + " " + last_name
  end

end                                           El test nunca dará error aunque el
                                              método deje de funcionar
                                              correctamente




Test

  def test_full_name
    person = User.new(:first_name => "Alberto", :last_name => "Perdomo")
    #assert_equal "Alberto Perdomo", user.full_name
  end
DESARROLLO TDD
 FUNCIONALIDAD n        FUNCIONALIDAD n+1



      DISEÑO                 DISEÑO




PRUEBAS / VALIDACIÓN   PRUEBAS / VALIDACIÓN




  IMPLEMENTACIÓN         IMPLEMENTACIÓN



    DESPLIEGUE             DESPLIEGUE
TDD: PASO 1

Escribir un test automatizado que defna la mejora o nueva
funcionalidad


→ Esta prueba debe fallar, ya que aún no hemos
implementado el código


→ FAILURE
EJEMPLO PASO 1: ESCRIBIR
        PRUEBA

 def test_full_name_without_first_name
   person = User.new(:first_name => nil, :last_name => "Perdomo")
   assert_equal "Perdomo", user.full_name
 end

 def test_full_name_without_last_name
   person = User.new(:first_name => "Alberto", :last_name => nil)
   assert_equal "Alberto", user.full_name
 end

 def test_full_name
   person = User.new(:first_name => "Alberto", :last_name => "Perdomo")
   assert_equal "Alberto Perdomo", user.full_name
 end

 def test_full_name_anonymous
   person = User.new(:first_name => nil, :last_name => nil)
   assert_equal "", user.full_name
 end
TDD: PASO 2


Implementar el código para satisfacer la prueba


→ Al fnalizar este paso la prueba debe pasar con éxito


→ OK
EJEMPLO PASO 2: IMPLEMENTAR

       class User < ActiveRecord::Base

         def full_name
           if first.name.nil? && last.name.nil?
             ""
           elsif first.name.nil?
             last_name
           elsif last.name_nil?
             first_name
           else
             first_name + " " + last_name
           end
         end

       end
TDD: PASO 3


Refactorizamos el código manteniendo el comportamiento


Al fnal de este paso la prueba debe seguir pasando con éxito


→ OK
EJEMPLO PASO 3:
 REFACTORIZAR

 class User < ActiveRecord::Base

   def full_name
     [first_name, last_name].join(" ").strip
   end

 end
EL MANTRA DEL TDD



RED
GREEN
REFACTOR
¿PREGUNTAS?

Más contenido relacionado

La actualidad más candente

Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUGJordi Gerona
 
Ocho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptOcho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptDavid Ballén
 
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...jaircazarin
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticasjaespinmora
 
Estructuras de control en js
Estructuras de control en jsEstructuras de control en js
Estructuras de control en jsmariazeballos
 
Constructores
ConstructoresConstructores
ConstructoresUCE
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 javajbersosa
 
Clase 2 3 estructuras de control
Clase 2 3 estructuras de controlClase 2 3 estructuras de control
Clase 2 3 estructuras de controlBoOriz Hero
 
IntroduccióN A Visual C
IntroduccióN A Visual CIntroduccióN A Visual C
IntroduccióN A Visual Coswchavez
 
Vocabulario java isabella o'byrne paz 11 2
Vocabulario java isabella o'byrne paz 11 2Vocabulario java isabella o'byrne paz 11 2
Vocabulario java isabella o'byrne paz 11 2Juan pablo Obregon
 

La actualidad más candente (19)

Taller de PHP Básico
Taller de PHP BásicoTaller de PHP Básico
Taller de PHP Básico
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
 
Documento Margarita
Documento MargaritaDocumento Margarita
Documento Margarita
 
Comandos de Java
Comandos de JavaComandos de Java
Comandos de Java
 
Comandos Java
Comandos JavaComandos Java
Comandos Java
 
Ocho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptOcho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScript
 
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
 
Toi Tdd 20080409
Toi Tdd 20080409Toi Tdd 20080409
Toi Tdd 20080409
 
Semana 1 Estructuras de Datos en Java
Semana 1   Estructuras de Datos en JavaSemana 1   Estructuras de Datos en Java
Semana 1 Estructuras de Datos en Java
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas
 
Estructuras de control en js
Estructuras de control en jsEstructuras de control en js
Estructuras de control en js
 
Entidades
EntidadesEntidades
Entidades
 
Constructores
ConstructoresConstructores
Constructores
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 java
 
Clase 2 3 estructuras de control
Clase 2 3 estructuras de controlClase 2 3 estructuras de control
Clase 2 3 estructuras de control
 
Semana 6 Módulos en Python Entrega 2
Semana 6   Módulos en Python Entrega 2Semana 6   Módulos en Python Entrega 2
Semana 6 Módulos en Python Entrega 2
 
IntroduccióN A Visual C
IntroduccióN A Visual CIntroduccióN A Visual C
IntroduccióN A Visual C
 
Vocabulario java isabella o'byrne paz 11 2
Vocabulario java isabella o'byrne paz 11 2Vocabulario java isabella o'byrne paz 11 2
Vocabulario java isabella o'byrne paz 11 2
 
Best Practices
Best PracticesBest Practices
Best Practices
 

Similar a Curso TDD Abril 2010

Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytestHector Canto
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareIker Canarias
 
Tdd y clean code SG campus
Tdd y clean code SG campusTdd y clean code SG campus
Tdd y clean code SG campusSoftware Guru
 
Seminario de Test Development Driven
Seminario de Test Development DrivenSeminario de Test Development Driven
Seminario de Test Development DrivenParadigma Digital
 
Shell script
Shell scriptShell script
Shell scriptuniminuto
 
Fundamentos De Algoritmia
Fundamentos De AlgoritmiaFundamentos De Algoritmia
Fundamentos De Algoritmiacckokyco
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013dayaorte
 
Tdd con PHPUnit y netbeans
Tdd con PHPUnit y netbeansTdd con PHPUnit y netbeans
Tdd con PHPUnit y netbeanschabal
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd introfperezplain
 
Desarrollar un módulo para Visuse
Desarrollar un módulo para VisuseDesarrollar un módulo para Visuse
Desarrollar un módulo para VisuseJose Luis Lopez Pino
 
Lambdas y API Stream #PerúJUG #Java20
Lambdas y API Stream #PerúJUG #Java20Lambdas y API Stream #PerúJUG #Java20
Lambdas y API Stream #PerúJUG #Java20Alexis Lopez
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmockkaolong
 
Samuel bailon sanchez
Samuel bailon sanchezSamuel bailon sanchez
Samuel bailon sanchezsamo509
 
Samuel bailon sanchez
Samuel bailon sanchezSamuel bailon sanchez
Samuel bailon sanchezsamo509
 
Samuel bailon sanchez
Samuel bailon sanchezSamuel bailon sanchez
Samuel bailon sanchezsamo509
 

Similar a Curso TDD Abril 2010 (20)

Cap7 2
Cap7 2Cap7 2
Cap7 2
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 
Introducción a TDD
Introducción a TDDIntroducción a TDD
Introducción a TDD
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de software
 
Tdd y clean code SG campus
Tdd y clean code SG campusTdd y clean code SG campus
Tdd y clean code SG campus
 
Unidad ii. tdd
Unidad ii. tddUnidad ii. tdd
Unidad ii. tdd
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
Seminario de Test Development Driven
Seminario de Test Development DrivenSeminario de Test Development Driven
Seminario de Test Development Driven
 
Shell script
Shell scriptShell script
Shell script
 
Fundamentos De Algoritmia
Fundamentos De AlgoritmiaFundamentos De Algoritmia
Fundamentos De Algoritmia
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013
 
Tdd con PHPUnit y netbeans
Tdd con PHPUnit y netbeansTdd con PHPUnit y netbeans
Tdd con PHPUnit y netbeans
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd intro
 
Desarrollar un módulo para Visuse
Desarrollar un módulo para VisuseDesarrollar un módulo para Visuse
Desarrollar un módulo para Visuse
 
Lambdas y API Stream #PerúJUG #Java20
Lambdas y API Stream #PerúJUG #Java20Lambdas y API Stream #PerúJUG #Java20
Lambdas y API Stream #PerúJUG #Java20
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
 
Samuel bailon sanchez
Samuel bailon sanchezSamuel bailon sanchez
Samuel bailon sanchez
 
Samuel bailon sanchez
Samuel bailon sanchezSamuel bailon sanchez
Samuel bailon sanchez
 
Samuel bailon sanchez
Samuel bailon sanchezSamuel bailon sanchez
Samuel bailon sanchez
 
Samuel bailon sanchez
Samuel bailon sanchezSamuel bailon sanchez
Samuel bailon sanchez
 

Más 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 Neo4jAlberto Perdomo
 
Leveraging relations at scale with Neo4j
Leveraging relations at scale with Neo4jLeveraging relations at scale with Neo4j
Leveraging relations at scale with Neo4jAlberto Perdomo
 
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...Alberto Perdomo
 
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 2011Alberto 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
 
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...Alberto Perdomo
 
Curso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasCurso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasAlberto Perdomo
 
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 DevelopmentAlberto Perdomo
 
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 stubsAlberto Perdomo
 
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: ShouldaAlberto Perdomo
 
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/...Alberto Perdomo
 

Más de Alberto Perdomo (11)

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 #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasCurso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticas
 
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 #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
 
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
 
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/...
 

Último

trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
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 UninoveFagnerLisboa3
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 

Último (19)

trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
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
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 

Curso TDD Abril 2010

  • 1. CURSO DE TESTING OSL 12 – 16 DE ABRIL 2010 Test Driven Development – TDD (Desarrollo dirigido por pruebas) Alberto Perdomo Web: http://albertoperdomo.net Email: alberto.perdomo@aentos.es Twitter: @albertoperdomo http://www.aentos.com
  • 2. DESARROLLO WEB ÁGIL FUNCIONALIDAD n FUNCIONALIDAD n+1 DISEÑO DISEÑO IMPLEMENTACIÓN IMPLEMENTACIÓN PRUEBAS / VALIDACIÓN PRUEBAS / VALIDACIÓN DESPLIEGUE DESPLIEGUE
  • 3. TDD: EL ORÍGEN → El test-driven development es un concepto estrechamente relacionado con el extreme programming, que emerge en 1999. → Recientemente ha obtenido atención como técnica individual. → Creador: Kent Beck, uno de los frmantes originales del Manifesto Ágil
  • 4. TDD: EL CONCEPTO PRUEBA PRIMERO, IMPLEMENTA DESPUÉS
  • 5. PROBLEMAS DE ESCRIBIR LAS PRUEBAS DESPUÉS DEL CÓDIGO I → Sabemos cómo está escrito el código y por lo tanto estamos viciados a la hora de probarlo → Pensamos en probar cómo está implementado y no en probar cómo debería funcionar desde la perspectiva del usuario
  • 6. EJEMPLO Implementación class User < ActiveRecord::Base def full_name first_name + " " + last_name end Para una instancia del modelo User con atributos frst_name “Alberto” y last_name “Perdomo” el método end full_name debe devolver “Alberto Perdomo” Test def test_full_name person = User.new(:first_name => "Alberto", :last_name => "Perdomo") assert_equal "Alberto Perdomo", user.full_name end
  • 7. PROBLEMAS DE ESCRIBIR LAS PRUEBAS DESPUÉS DEL CÓDIGO II Estamos viciados con la implementación → Pruebas inadecuadas → Pruebas que no funcionan → Pruebas frágiles basadas en la implementación, no en el comportamiento
  • 8. EJEMPLO Implementación class User < ActiveRecord::Base def full_name first_name + " " + last_name end end El test nunca dará error aunque el método deje de funcionar correctamente Test def test_full_name person = User.new(:first_name => "Alberto", :last_name => "Perdomo") #assert_equal "Alberto Perdomo", user.full_name end
  • 9. DESARROLLO TDD FUNCIONALIDAD n FUNCIONALIDAD n+1 DISEÑO DISEÑO PRUEBAS / VALIDACIÓN PRUEBAS / VALIDACIÓN IMPLEMENTACIÓN IMPLEMENTACIÓN DESPLIEGUE DESPLIEGUE
  • 10. TDD: PASO 1 Escribir un test automatizado que defna la mejora o nueva funcionalidad → Esta prueba debe fallar, ya que aún no hemos implementado el código → FAILURE
  • 11. EJEMPLO PASO 1: ESCRIBIR PRUEBA def test_full_name_without_first_name person = User.new(:first_name => nil, :last_name => "Perdomo") assert_equal "Perdomo", user.full_name end def test_full_name_without_last_name person = User.new(:first_name => "Alberto", :last_name => nil) assert_equal "Alberto", user.full_name end def test_full_name person = User.new(:first_name => "Alberto", :last_name => "Perdomo") assert_equal "Alberto Perdomo", user.full_name end def test_full_name_anonymous person = User.new(:first_name => nil, :last_name => nil) assert_equal "", user.full_name end
  • 12. TDD: PASO 2 Implementar el código para satisfacer la prueba → Al fnalizar este paso la prueba debe pasar con éxito → OK
  • 13. EJEMPLO PASO 2: IMPLEMENTAR class User < ActiveRecord::Base def full_name if first.name.nil? && last.name.nil? "" elsif first.name.nil? last_name elsif last.name_nil? first_name else first_name + " " + last_name end end end
  • 14. TDD: PASO 3 Refactorizamos el código manteniendo el comportamiento Al fnal de este paso la prueba debe seguir pasando con éxito → OK
  • 15. EJEMPLO PASO 3: REFACTORIZAR class User < ActiveRecord::Base def full_name [first_name, last_name].join(" ").strip end end
  • 16. EL MANTRA DEL TDD RED GREEN REFACTOR