SlideShare una empresa de Scribd logo
1 de 25
BDDAgustín RamosChristian Ramírezcertum
¿Qué significa BDD? BeerDrivenDevelopment
¿Qué significa BDD? BehaviorDrivenDevelopment … de preferencia sin cervezas
4 Agenda Desarrollo Dirigido por Pruebas (TDD) Obstáculos al implementar TDD Descripción de BDD Lenguajes específicos de dominio (DSL) Ejemplo simple de BDD Ejemplos ‘en vivo’: Chess Beneficios de BDD
DesarrolloDirigidoporPruebas (TDD)  En TDD, las pruebas SON LA ESPECIFICACIÓN DEL SISTEMA La cual es ejecutable. Diseñay Codificaprueba EjecutaPrueba Codifica EjecutaPrueba Refactor
Obstáculosparaimplementar TDD  Tiempos comprometidos.  Requiere conocer más técnicas/herramientas.  Criterios sobre qué constituye una buena prueba unitaria. ATRIP (Automated, Thorough, Repeteable, Independent, Professional)  Malentendidos Aunque involucra la palabra ‘test’…  TDD no es una técnica de pruebas  Es una técnica de diseño y codificación!  Las herramientas  no ayudan a asimilar la idea de diseñar con pruebas.
Ejemplo de prueba en JUnit
Descripción de BDD ¿Qué es? Método de diseño y codificación Que integra pruebas. De aceptación Unitarias Orienta a un desarrollo “outside -> In” Define el uso de un DSL para pruebas Un subconjunto del lenguaje natural
Lenguaje especifico de dominio (DSL) ¿Qué es? “Un lenguaje de programación o especificación dedicado a un dominio de problema particular” Características: Especializado en una cosa, pero bien hecha Mas expresivo, mas eficiente, pero limitado Muy alto nivel de descripción Ejemplos muy conocidos:  SQL, Wiki Markup, Mathematica, etc.
Ejemplo simple de BDD 1. Escribe un escenario (parte de un feature)
Ejemplo simple de BDD 2. Escribe el código que ejercita el feature (el código de prueba) 3. Escribe el código que implementa la funcionalidad
DSL para pruebas de aceptación Enfoque del DSL en pruebas de aceptación. Describe las pruebas en el lenguaje del negocio. Aprovecha el interés reciente en la especificación del escenario.
DesarrolloPolíglota en la JVM
AplicaciónEjemplo  Desarrollada en un curso de capacitación  Estudiantes que no sabían POO  Mucho menos Java!  2 módulos: motor y ui  2 interfaces de usuario: Linea de comandos  Swing  Tiene algunas pruebas unitarias
Escenario simple (motor) Feature: pawns can make only valid movements   We want to be sure a pawn can only move   from a given initial position to a valid final position Scenario: advance 1 position Given a board with a black Pawn in A7 And no other piece in the board When I choose to move the Pawn to A6   Then the Pawn should be in A6
Definición de pasos (groovy) Given(~"a board with a (w+) (w+) in (w)(d+)") { String color, type, column, row -> this.board = new Board()  def clazz = "com.certum.training.chess.pieces.${type}" as Class  this."${type}" = clazz.newInstance(board, column, row,       ChessPiece."${color.toUpperCase()}") board.set(this."${type}", column, row) } Given(~"no other piece in the board") { board.gameStarted() } When(~"I choose to move the (w+) to (w+)(d+)") { String type, column, row ->   this."${type}".move(column, row)  } Then(~"the (w+) should be in (w+)(d+)") { String type, column, row ->   assert column == this."${type}".getColumn()   assert row == this."${type}".row }
Plantilla de escenario simple Scenario Outline: advance 2 positions   Given a board with a <color> Pawn in <init_column><init_row>   And no other piece in the board   When I choose to move the Pawn to <final_column><final_row>   Then the Pawn should be in <final_column><final_row> Scenarios: All valid 2 position movements | color | init_column | init_row | final_column | final_row |  | white | A | 2 | A | 4 | | white | B | 2 | B | 4 | | white | C | 2 | C | 4 | …  | black | E | 7 | E | 5 | | black | F | 7 | F | 5 | | black | G | 7 | G | 5 | | black | H | 7 | H | 5 |
Definición de pasos (groovy) ,[object Object]
Los pasos ya están implementados =)
De manera tabular puedes probar tantos escenarios como necesites.,[object Object]
Beneficios de BDD En la Administración de proyectos Las historias pueden ser estimadas              (pequeños fragmentos de información) Se puede medir el “velocity” Se puede medir la eficiencia
Pero hay mas … Automatizando las pruebas de aceptación tenemos… Requerimientos ejecutables (y menos ambiguos) Capacidad de realizar pruebas de regresión Proceso de “release” mas confiable Encontramos más bugs.
¿Preguntas?
Referencias… Artículo de Dan North (creador de BDD).  http://bit.ly/ay8sjI  Libro: TheRspecBook Reflección sobre BDD y TDD http://bit.ly/dkDcG2  cuke4duke http://bit.ly/95XUtc

Más contenido relacionado

La actualidad más candente

[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development TechniquesEduardo Turiño
 
Análisis estático de código en Java
Análisis estático de código en JavaAnálisis estático de código en Java
Análisis estático de código en JavaCésar Hernández
 
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)Javier_J
 
Cas 2017 bdd-colaborando_de_verdad_con_negocio
Cas 2017 bdd-colaborando_de_verdad_con_negocioCas 2017 bdd-colaborando_de_verdad_con_negocio
Cas 2017 bdd-colaborando_de_verdad_con_negocioEduardo Riol
 
Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014Javier_J
 
Taller SOLID Refactor
Taller SOLID RefactorTaller SOLID Refactor
Taller SOLID RefactorAgile Spain
 
Introducción al Test-Driven Development (TDD) por Eric Mignot
Introducción al Test-Driven Development (TDD) por Eric MignotIntroducción al Test-Driven Development (TDD) por Eric Mignot
Introducción al Test-Driven Development (TDD) por Eric MignotPablo Lischinsky
 

La actualidad más candente (17)

TDD
TDDTDD
TDD
 
Creando rascacielos con tdd
Creando rascacielos con tddCreando rascacielos con tdd
Creando rascacielos con tdd
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques
 
Análisis estático de código en Java
Análisis estático de código en JavaAnálisis estático de código en Java
Análisis estático de código en Java
 
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
 
Day01
Day01Day01
Day01
 
Cas 2017 bdd-colaborando_de_verdad_con_negocio
Cas 2017 bdd-colaborando_de_verdad_con_negocioCas 2017 bdd-colaborando_de_verdad_con_negocio
Cas 2017 bdd-colaborando_de_verdad_con_negocio
 
Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014
 
Unit Testing en iOS
Unit Testing en iOSUnit Testing en iOS
Unit Testing en iOS
 
Workshop Calabash Appium
Workshop Calabash AppiumWorkshop Calabash Appium
Workshop Calabash Appium
 
Prácticas de Desarrollo Ágil
Prácticas de Desarrollo ÁgilPrácticas de Desarrollo Ágil
Prácticas de Desarrollo Ágil
 
Kata tdd
Kata tddKata tdd
Kata tdd
 
Taller SOLID Refactor
Taller SOLID RefactorTaller SOLID Refactor
Taller SOLID Refactor
 
Introducción al Test-Driven Development (TDD) por Eric Mignot
Introducción al Test-Driven Development (TDD) por Eric MignotIntroducción al Test-Driven Development (TDD) por Eric Mignot
Introducción al Test-Driven Development (TDD) por Eric Mignot
 
Cobertura de pruebas unitarias - NetBaires
Cobertura de pruebas unitarias - NetBairesCobertura de pruebas unitarias - NetBaires
Cobertura de pruebas unitarias - NetBaires
 
Java Fundamentos 01 - Introducción
Java Fundamentos 01 - IntroducciónJava Fundamentos 01 - Introducción
Java Fundamentos 01 - Introducción
 
TDD Code Retreat
TDD Code RetreatTDD Code Retreat
TDD Code Retreat
 

Destacado

Eliminando la brecha entre clientes y desarrolladores mediante BDD
Eliminando la brecha entre clientes y desarrolladores mediante BDDEliminando la brecha entre clientes y desarrolladores mediante BDD
Eliminando la brecha entre clientes y desarrolladores mediante BDDJorge Gamba
 
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
 
Exactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in KostromaExactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in KostromaIosif Itkin
 
Behavior Driven Development Pros and Cons
Behavior Driven Development Pros and ConsBehavior Driven Development Pros and Cons
Behavior Driven Development Pros and ConsIosif Itkin
 
BDD en 5 minutos
BDD en 5 minutosBDD en 5 minutos
BDD en 5 minutosAdrian Moya
 
Td dvs bdd
Td dvs bddTd dvs bdd
Td dvs bddlsajrf
 

Destacado (10)

Introducción a gherkin
Introducción a gherkinIntroducción a gherkin
Introducción a gherkin
 
BDD para la mejora de la calidad software
BDD para la mejora de la calidad softwareBDD para la mejora de la calidad software
BDD para la mejora de la calidad software
 
Eliminando la brecha entre clientes y desarrolladores mediante BDD
Eliminando la brecha entre clientes y desarrolladores mediante BDDEliminando la brecha entre clientes y desarrolladores mediante BDD
Eliminando la brecha entre clientes y desarrolladores mediante BDD
 
BDD TDD ATDD
BDD TDD ATDDBDD TDD ATDD
BDD TDD ATDD
 
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
 
Selenium
SeleniumSelenium
Selenium
 
Exactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in KostromaExactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in Kostroma
 
Behavior Driven Development Pros and Cons
Behavior Driven Development Pros and ConsBehavior Driven Development Pros and Cons
Behavior Driven Development Pros and Cons
 
BDD en 5 minutos
BDD en 5 minutosBDD en 5 minutos
BDD en 5 minutos
 
Td dvs bdd
Td dvs bddTd dvs bdd
Td dvs bdd
 

Similar a BDD - Desarrollo dirigido por comportamiento

Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
AdV - Programación para no Programadores
AdV - Programación para no ProgramadoresAdV - Programación para no Programadores
AdV - Programación para no ProgramadoresJavier_J
 
Primera Interaula, 'Programación para no programadores'
Primera Interaula, 'Programación para no programadores'Primera Interaula, 'Programación para no programadores'
Primera Interaula, 'Programación para no programadores'AulaDeVideojuegos
 
Clase 1 Itinerario
Clase 1 ItinerarioClase 1 Itinerario
Clase 1 Itinerariovbalda
 
Automatización de interfaces e introducción a bdd
Automatización de interfaces e introducción a bddAutomatización de interfaces e introducción a bdd
Automatización de interfaces e introducción a bddJorge Ortiz
 
El_pensamiento_computacional_y_programacion_.pptx
El_pensamiento_computacional_y_programacion_.pptxEl_pensamiento_computacional_y_programacion_.pptx
El_pensamiento_computacional_y_programacion_.pptxKarinaLeticiaKovvali
 
Gu is awt_swing
Gu is awt_swingGu is awt_swing
Gu is awt_swingLCA
 
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)Rodrigo Branas
 
Mda Para Dummies
Mda Para DummiesMda Para Dummies
Mda Para Dummiessolnatec
 
No estaba muerto... cleanroom software engineering
No estaba muerto... cleanroom software engineeringNo estaba muerto... cleanroom software engineering
No estaba muerto... cleanroom software engineeringSoftware Guru
 
Actividad autoformación y evaluación no.2 tarea
Actividad autoformación y evaluación no.2 tareaActividad autoformación y evaluación no.2 tarea
Actividad autoformación y evaluación no.2 tareajenny21071
 
Utp pds_lab1 introduccion a mat_lab
 Utp pds_lab1 introduccion a mat_lab Utp pds_lab1 introduccion a mat_lab
Utp pds_lab1 introduccion a mat_labjcbenitezp
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDDAlfredo Chavez
 
¿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
 

Similar a BDD - Desarrollo dirigido por comportamiento (20)

Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
AdV - Programación para no Programadores
AdV - Programación para no ProgramadoresAdV - Programación para no Programadores
AdV - Programación para no Programadores
 
Primera Interaula, 'Programación para no programadores'
Primera Interaula, 'Programación para no programadores'Primera Interaula, 'Programación para no programadores'
Primera Interaula, 'Programación para no programadores'
 
Clase 1 Itinerario
Clase 1 ItinerarioClase 1 Itinerario
Clase 1 Itinerario
 
Automatización de interfaces e introducción a bdd
Automatización de interfaces e introducción a bddAutomatización de interfaces e introducción a bdd
Automatización de interfaces e introducción a bdd
 
Introduccion a awt
Introduccion a awtIntroduccion a awt
Introduccion a awt
 
ZWCad
ZWCadZWCad
ZWCad
 
El_pensamiento_computacional_y_programacion_.pptx
El_pensamiento_computacional_y_programacion_.pptxEl_pensamiento_computacional_y_programacion_.pptx
El_pensamiento_computacional_y_programacion_.pptx
 
Gu is awt_swing
Gu is awt_swingGu is awt_swing
Gu is awt_swing
 
TDD: ¿Cómo escribir código testeable?
TDD: ¿Cómo escribir código testeable?TDD: ¿Cómo escribir código testeable?
TDD: ¿Cómo escribir código testeable?
 
Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)Clean Code (EN ESPANOL)
Clean Code (EN ESPANOL)
 
Mda Para Dummies
Mda Para DummiesMda Para Dummies
Mda Para Dummies
 
No estaba muerto... cleanroom software engineering
No estaba muerto... cleanroom software engineeringNo estaba muerto... cleanroom software engineering
No estaba muerto... cleanroom software engineering
 
Actividad autoformación y evaluación no.2 tarea
Actividad autoformación y evaluación no.2 tareaActividad autoformación y evaluación no.2 tarea
Actividad autoformación y evaluación no.2 tarea
 
Web Mapping con Django
Web Mapping con DjangoWeb Mapping con Django
Web Mapping con Django
 
Utp pds_lab1 introduccion a mat_lab
 Utp pds_lab1 introduccion a mat_lab Utp pds_lab1 introduccion a mat_lab
Utp pds_lab1 introduccion a mat_lab
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDD
 
Decompiladores
DecompiladoresDecompiladores
Decompiladores
 
¿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
 
Diseno dealgoritmos
Diseno dealgoritmosDiseno dealgoritmos
Diseno dealgoritmos
 

Más de Agustin Ramos

Exploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerExploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerAgustin Ramos
 
From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017Agustin Ramos
 
Pairwise and property based testing
Pairwise and property based testingPairwise and property based testing
Pairwise and property based testingAgustin Ramos
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasAgustin Ramos
 
¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?Agustin Ramos
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskellAgustin Ramos
 
Técnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoTécnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoAgustin Ramos
 
Acercándose a la entrega continua
Acercándose a la entrega continuaAcercándose a la entrega continua
Acercándose a la entrega continuaAgustin Ramos
 
Modelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaModelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaAgustin Ramos
 
Arquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noArquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noAgustin Ramos
 
Arqueología de software
Arqueología de softwareArqueología de software
Arqueología de softwareAgustin Ramos
 
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroLa nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroAgustin Ramos
 
Modularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraModularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraAgustin Ramos
 

Más de Agustin Ramos (14)

Exploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerExploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with Archeometer
 
From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017
 
Pairwise and property based testing
Pairwise and property based testingPairwise and property based testing
Pairwise and property based testing
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a Fallas
 
¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskell
 
Técnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoTécnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseño
 
Acercándose a la entrega continua
Acercándose a la entrega continuaAcercándose a la entrega continua
Acercándose a la entrega continua
 
Modelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaModelos de paralelismo y concurrencia
Modelos de paralelismo y concurrencia
 
Arquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noArquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que no
 
Arqueología de software
Arqueología de softwareArqueología de software
Arqueología de software
 
Hola OSGi
Hola OSGiHola OSGi
Hola OSGi
 
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroLa nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
 
Modularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraModularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidra
 

Último

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 eyvanamcerpam
 
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.FlorenciaCattelani
 
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 JUNITMaricarmen Sánchez Ruiz
 
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 estossgonzalezp1
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
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.pptxAlan779941
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
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.pptxMiguelAtencio10
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
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...JohnRamos830530
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 

Último (12)

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
 
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.
 
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
 
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
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
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
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
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
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.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...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 

BDD - Desarrollo dirigido por comportamiento

  • 2. ¿Qué significa BDD? BeerDrivenDevelopment
  • 3. ¿Qué significa BDD? BehaviorDrivenDevelopment … de preferencia sin cervezas
  • 4. 4 Agenda Desarrollo Dirigido por Pruebas (TDD) Obstáculos al implementar TDD Descripción de BDD Lenguajes específicos de dominio (DSL) Ejemplo simple de BDD Ejemplos ‘en vivo’: Chess Beneficios de BDD
  • 5. DesarrolloDirigidoporPruebas (TDD) En TDD, las pruebas SON LA ESPECIFICACIÓN DEL SISTEMA La cual es ejecutable. Diseñay Codificaprueba EjecutaPrueba Codifica EjecutaPrueba Refactor
  • 6. Obstáculosparaimplementar TDD Tiempos comprometidos. Requiere conocer más técnicas/herramientas. Criterios sobre qué constituye una buena prueba unitaria. ATRIP (Automated, Thorough, Repeteable, Independent, Professional) Malentendidos Aunque involucra la palabra ‘test’… TDD no es una técnica de pruebas Es una técnica de diseño y codificación! Las herramientas no ayudan a asimilar la idea de diseñar con pruebas.
  • 7. Ejemplo de prueba en JUnit
  • 8. Descripción de BDD ¿Qué es? Método de diseño y codificación Que integra pruebas. De aceptación Unitarias Orienta a un desarrollo “outside -> In” Define el uso de un DSL para pruebas Un subconjunto del lenguaje natural
  • 9. Lenguaje especifico de dominio (DSL) ¿Qué es? “Un lenguaje de programación o especificación dedicado a un dominio de problema particular” Características: Especializado en una cosa, pero bien hecha Mas expresivo, mas eficiente, pero limitado Muy alto nivel de descripción Ejemplos muy conocidos: SQL, Wiki Markup, Mathematica, etc.
  • 10. Ejemplo simple de BDD 1. Escribe un escenario (parte de un feature)
  • 11. Ejemplo simple de BDD 2. Escribe el código que ejercita el feature (el código de prueba) 3. Escribe el código que implementa la funcionalidad
  • 12. DSL para pruebas de aceptación Enfoque del DSL en pruebas de aceptación. Describe las pruebas en el lenguaje del negocio. Aprovecha el interés reciente en la especificación del escenario.
  • 14.
  • 15. AplicaciónEjemplo Desarrollada en un curso de capacitación Estudiantes que no sabían POO Mucho menos Java! 2 módulos: motor y ui 2 interfaces de usuario: Linea de comandos Swing Tiene algunas pruebas unitarias
  • 16. Escenario simple (motor) Feature: pawns can make only valid movements We want to be sure a pawn can only move from a given initial position to a valid final position Scenario: advance 1 position Given a board with a black Pawn in A7 And no other piece in the board When I choose to move the Pawn to A6 Then the Pawn should be in A6
  • 17. Definición de pasos (groovy) Given(~"a board with a (w+) (w+) in (w)(d+)") { String color, type, column, row -> this.board = new Board() def clazz = "com.certum.training.chess.pieces.${type}" as Class this."${type}" = clazz.newInstance(board, column, row, ChessPiece."${color.toUpperCase()}") board.set(this."${type}", column, row) } Given(~"no other piece in the board") { board.gameStarted() } When(~"I choose to move the (w+) to (w+)(d+)") { String type, column, row -> this."${type}".move(column, row) } Then(~"the (w+) should be in (w+)(d+)") { String type, column, row -> assert column == this."${type}".getColumn() assert row == this."${type}".row }
  • 18. Plantilla de escenario simple Scenario Outline: advance 2 positions Given a board with a <color> Pawn in <init_column><init_row> And no other piece in the board When I choose to move the Pawn to <final_column><final_row> Then the Pawn should be in <final_column><final_row> Scenarios: All valid 2 position movements | color | init_column | init_row | final_column | final_row | | white | A | 2 | A | 4 | | white | B | 2 | B | 4 | | white | C | 2 | C | 4 | … | black | E | 7 | E | 5 | | black | F | 7 | F | 5 | | black | G | 7 | G | 5 | | black | H | 7 | H | 5 |
  • 19.
  • 20. Los pasos ya están implementados =)
  • 21.
  • 22. Beneficios de BDD En la Administración de proyectos Las historias pueden ser estimadas (pequeños fragmentos de información) Se puede medir el “velocity” Se puede medir la eficiencia
  • 23. Pero hay mas … Automatizando las pruebas de aceptación tenemos… Requerimientos ejecutables (y menos ambiguos) Capacidad de realizar pruebas de regresión Proceso de “release” mas confiable Encontramos más bugs.
  • 25. Referencias… Artículo de Dan North (creador de BDD). http://bit.ly/ay8sjI Libro: TheRspecBook Reflección sobre BDD y TDD http://bit.ly/dkDcG2 cuke4duke http://bit.ly/95XUtc
  • 26. ¡Gracias! Twitter Agustín: @MachinesAreUs Christian: @chrix2