SlideShare una empresa de Scribd logo
1 de 28
¿Qué significa BDD?
  Beer Driven Development
¿Qué significa BDD?
      ¡ No !
¿Qué significa BDD?
Behavior Driven Development
                     … ¡y sin cervezas!
Agenda

Desmitificando TDD
Introducción a BDD
Lenguajes específicos de dominio (DSL)
Ejemplo simple de BDD
Ejemplos „en vivo‟: Ajedrez
Beneficios de BDD
Desarrollo Dirigido por Pruebas
                   (TDD)
Solo hay 3 reglas:

  1. No se permite escribir código de producción al menos
     que sea con el objetivo de escribir una prueba que
     esta fallando.
  2. No se permite escribir más código de prueba del que
     sea necesario para que la prueba falle.
  3. No se permite escribir más código de producción del
     que es suficiente para pasar la prueba que falla.
Desarrollo Dirigido por Pruebas
               (TDD)
¡TDD funciona!

  No, es broma.
  Es broma, ¡en serio!

  De manera más precisa:
     Es muy difícil de hacer TDD de manera correcta.
     Para la mayoría no es posible.
     Muchos terminan conformándose con hacer
   pruebas unitarias, pero no TDD.
Obstáculos para implementar TDD (1/2)
 Tiempos comprometidos.

 Requiere conocer más técnicas/herramientas.
   jUnit y derivados
   TestNG y derivados
   Mocks
   etc

  Desconocimiento de los criterios sobre qué constituye una
buena prueba unitaria.
     ATRIP
   (Automated, Thorough, Repeteable, Independent, Professi
   onal).
Obstáculos para implementar TDD (2/2)

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 mediante la codificación de
 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 específico 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 sola cosa
     Mas expresivo, mas eficiente, pero limitado


Ejemplos muy conocidos:
 SQL, Wiki Markup, Mathematica, etc.
Ejemplo simple (1/2)
1. Escribe un escenario (parte de un feature)
  Feature: Search
   In order to learn more
   As an information seeker
   I want to find more information when I need it

  Scenario: Find what I‟ looking for
   Given I am on the Kvasir search page
   When I search for “cucumber github”
   Then I should see
     “””
     Behavior Driven Development
     “””
Ejemplo simple (1/2)
2. Escribe el código que ejercita el feature
   Given /^I am on the Kvasir search page$/ do
     visit(„http://www.kvasir.mx/‟)
    end

    When /^I search for “cucumber github”$/ do
     fill_in(„q‟, :with => query)
     click_button(„go‟)
    end

    Then /^I should see $/ do |text|
     response_body.should contain(text)
    end

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.


               Cliente     Analista/     Tester
                         Desarrollador
Leer

Escribir
Desarrollo Políglota en la JVM


Java    Groovy   JRuby   Jython   Scala   Clojure   ???




           Máquina Virtual Java
Aplicación Ejemplo

            Desarrollada en un curso de
           capacitación
           2 módulos: motor y ui
           2 interfaces de usuario:
                Linea de comandos
                Swing
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 en groovy (1/2)
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()
}
Definición de pasos en groovy (2/2)

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 escenarios
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)

 ¡ Ninguno nuevo!

 Los pasos ya están implementados =)

 De manera tabular puedes probar tantos
 escenarios como necesites.
Beneficios de BDD
 En cuanto a requerimientos

    Ejecutables, sin ambigüedades, útiles.
    En pequeños fragmentos


 En la Administración de proyectos

    Las historias pueden ser estimadas (pequeños
     fragmentos de información)
Pero hay más …
 Automatizando las pruebas de aceptación
 tenemos…

    Capacidad de realizar pruebas de regresión.

    Proceso de “release” mas confiable.

    Encontramos más bugs con menos esfuerzo.
¿Preguntas?
Referencias…
Artículo de Dan North (creador de BDD).
   http://bit.ly/ay8sjI

Libro: The Rspec Book

Reflección sobre BDD y TDD
   http://bit.ly/dkDcG2

cuke4duke
   http://bit.ly/95XUtc
¡Gracias!

Twitter: @MachinesAreUs
Blog: http://machinesareus.blogspot.com
e-mail: aramos@certum.com

Más contenido relacionado

La actualidad más candente

Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automationCas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automationAgile Spain
 
[Meetup] Code Quality
[Meetup] Code Quality[Meetup] Code Quality
[Meetup] Code QualityIvan Mirson
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
 
(Behavior driven development (bdd ) [sólo lectura])
(Behavior driven development  (bdd ) [sólo lectura])(Behavior driven development  (bdd ) [sólo lectura])
(Behavior driven development (bdd ) [sólo lectura])rakel_ita
 
TDD y Python
TDD y PythonTDD y Python
TDD y PythonJavier_J
 
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
Introduccion a TDD y XP en la Universidad de Santiago de CompostelaIntroduccion a TDD y XP en la Universidad de Santiago de Compostela
Introduccion a TDD y XP en la Universidad de Santiago de CompostelaCarlos Ble
 
Meetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poderMeetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poderEduardo Riol
 
[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
 
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
 
15 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 200915 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 2009Pepe
 
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
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando softwareGabriel Moral
 
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
 

La actualidad más candente (20)

Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automationCas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
 
TDD Course (Spanish)
TDD Course (Spanish)TDD Course (Spanish)
TDD Course (Spanish)
 
[Meetup] Code Quality
[Meetup] Code Quality[Meetup] Code Quality
[Meetup] Code Quality
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
TDD talk
TDD talkTDD talk
TDD talk
 
(Behavior driven development (bdd ) [sólo lectura])
(Behavior driven development  (bdd ) [sólo lectura])(Behavior driven development  (bdd ) [sólo lectura])
(Behavior driven development (bdd ) [sólo lectura])
 
TDD
TDDTDD
TDD
 
TDD y Python
TDD y PythonTDD y Python
TDD y Python
 
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
Introduccion a TDD y XP en la Universidad de Santiago de CompostelaIntroduccion a TDD y XP en la Universidad de Santiago de Compostela
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
 
Kata tdd
Kata tddKata tdd
Kata tdd
 
Meetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poderMeetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poder
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
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
 
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)
 
15 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 200915 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 2009
 
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
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando software
 
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
 
Day01
Day01Day01
Day01
 

Similar a Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)

Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMjavier ramirez
 
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
 
Bdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamientoBdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamientoRoberto Andres Remonda
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDKFe
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndkBarcelona GTUG
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDDAlfredo Chavez
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARPablo Godel
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18Young Suk Ahn Park
 
Los test de integración tambien merecen tener vida: AzureDevOps para dar ALMa...
Los test de integración tambien merecen tener vida:AzureDevOps para dar ALMa...Los test de integración tambien merecen tener vida:AzureDevOps para dar ALMa...
Los test de integración tambien merecen tener vida: AzureDevOps para dar ALMa...Nacho Fanjul Corteguera
 
Grails en Expo FISI 2011
Grails en Expo FISI 2011Grails en Expo FISI 2011
Grails en Expo FISI 2011jose diaz
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDDAlfredo Chavez
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
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
 

Similar a Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy) (20)

Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
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
 
Testing Ruby on Rails (spanish)
Testing Ruby on Rails (spanish)Testing Ruby on Rails (spanish)
Testing Ruby on Rails (spanish)
 
Bdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamientoBdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamiento
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndk
 
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?
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDD
 
Testing, tipos y otros flamewars
Testing, tipos y otros flamewarsTesting, tipos y otros flamewars
Testing, tipos y otros flamewars
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18
 
Los test de integración tambien merecen tener vida: AzureDevOps para dar ALMa...
Los test de integración tambien merecen tener vida:AzureDevOps para dar ALMa...Los test de integración tambien merecen tener vida:AzureDevOps para dar ALMa...
Los test de integración tambien merecen tener vida: AzureDevOps para dar ALMa...
 
Grails en Expo FISI 2011
Grails en Expo FISI 2011Grails en Expo FISI 2011
Grails en Expo FISI 2011
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDD
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
HTML5
HTML5HTML5
HTML5
 
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'
 

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

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
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
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
 
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
 
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
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
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
 
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
 
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
 
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
 
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
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 

Último (13)

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
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
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
 
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)
 
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
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
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
 
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
 
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
 
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
 
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...
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 

Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)

  • 1.
  • 2. ¿Qué significa BDD? Beer Driven Development
  • 4. ¿Qué significa BDD? Behavior Driven Development … ¡y sin cervezas!
  • 5. Agenda Desmitificando TDD Introducción a BDD Lenguajes específicos de dominio (DSL) Ejemplo simple de BDD Ejemplos „en vivo‟: Ajedrez Beneficios de BDD
  • 6. Desarrollo Dirigido por Pruebas (TDD) Solo hay 3 reglas: 1. No se permite escribir código de producción al menos que sea con el objetivo de escribir una prueba que esta fallando. 2. No se permite escribir más código de prueba del que sea necesario para que la prueba falle. 3. No se permite escribir más código de producción del que es suficiente para pasar la prueba que falla.
  • 7. Desarrollo Dirigido por Pruebas (TDD) ¡TDD funciona! No, es broma. Es broma, ¡en serio! De manera más precisa: Es muy difícil de hacer TDD de manera correcta. Para la mayoría no es posible. Muchos terminan conformándose con hacer pruebas unitarias, pero no TDD.
  • 8. Obstáculos para implementar TDD (1/2) Tiempos comprometidos. Requiere conocer más técnicas/herramientas. jUnit y derivados TestNG y derivados Mocks etc Desconocimiento de los criterios sobre qué constituye una buena prueba unitaria. ATRIP (Automated, Thorough, Repeteable, Independent, Professi onal).
  • 9. Obstáculos para implementar TDD (2/2) 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 mediante la codificación de pruebas.
  • 10. Ejemplo de prueba en JUnit
  • 11. 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
  • 12. Lenguaje específico 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 sola cosa  Mas expresivo, mas eficiente, pero limitado Ejemplos muy conocidos:  SQL, Wiki Markup, Mathematica, etc.
  • 13. Ejemplo simple (1/2) 1. Escribe un escenario (parte de un feature) Feature: Search In order to learn more As an information seeker I want to find more information when I need it Scenario: Find what I‟ looking for Given I am on the Kvasir search page When I search for “cucumber github” Then I should see “”” Behavior Driven Development “””
  • 14. Ejemplo simple (1/2) 2. Escribe el código que ejercita el feature Given /^I am on the Kvasir search page$/ do visit(„http://www.kvasir.mx/‟) end When /^I search for “cucumber github”$/ do fill_in(„q‟, :with => query) click_button(„go‟) end Then /^I should see $/ do |text| response_body.should contain(text) end 3. Escribe el código que implementa la funcionalidad
  • 15. DSL para pruebas de aceptación  Enfoque del DSL en pruebas de aceptación.  Describe las pruebas en el lenguaje del negocio. Cliente Analista/ Tester Desarrollador Leer Escribir
  • 16. Desarrollo Políglota en la JVM Java Groovy JRuby Jython Scala Clojure ??? Máquina Virtual Java
  • 17.
  • 18. Aplicación Ejemplo Desarrollada en un curso de capacitación 2 módulos: motor y ui 2 interfaces de usuario: Linea de comandos Swing
  • 19. 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
  • 20. Definición de pasos en groovy (1/2) 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() }
  • 21. Definición de pasos en groovy (2/2) 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 }
  • 22. Plantilla de escenarios 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 |
  • 23. Definición de pasos (groovy)  ¡ Ninguno nuevo!  Los pasos ya están implementados =)  De manera tabular puedes probar tantos escenarios como necesites.
  • 24. Beneficios de BDD  En cuanto a requerimientos  Ejecutables, sin ambigüedades, útiles.  En pequeños fragmentos  En la Administración de proyectos  Las historias pueden ser estimadas (pequeños fragmentos de información)
  • 25. Pero hay más …  Automatizando las pruebas de aceptación tenemos…  Capacidad de realizar pruebas de regresión.  Proceso de “release” mas confiable.  Encontramos más bugs con menos esfuerzo.
  • 27. Referencias… Artículo de Dan North (creador de BDD). http://bit.ly/ay8sjI Libro: The Rspec Book Reflección sobre BDD y TDD http://bit.ly/dkDcG2 cuke4duke http://bit.ly/95XUtc