¿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 vi...
Desarrollo Dirigido por Pruebas
                   (TDD)
Solo hay 3 reglas:

  1. No se permite escribir código de producc...
Desarrollo Dirigido por Pruebas
               (TDD)
¡TDD funciona!

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

  De manera m...
Obstáculos para implementar TDD (1/2)
 Tiempos comprometidos.

 Requiere conocer más técnicas/herramientas.
   jUnit y der...
Obstáculos para implementar TDD (2/2)

Malentendidos
  Aunque involucra la palabra „test‟…
     TDD no es una técnica de p...
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

 ...
Lenguaje específico de dominio (DSL)
¿Qué es?
        “Un lenguaje de programación o especificación
        dedicado a un ...
Ejemplo simple (1/2)
1. Escribe un escenario (parte de un feature)
  Feature: Search
   In order to learn more
   As an in...
Ejemplo simple (1/2)
2. Escribe el código que ejercita el feature
   Given /^I am on the Kvasir search page$/ do
     visi...
DSL para pruebas de aceptación

 Enfoque del DSL en pruebas de aceptación.
 Describe las pruebas en el lenguaje del nego...
Desarrollo Políglota en la JVM


Java    Groovy   JRuby   Jython   Scala   Clojure   ???




           Máquina Virtual Ja...
Aplicación Ejemplo

            Desarrollada en un curso de
           capacitación
           2 módulos: motor y ui
     ...
Escenario simple (motor)

Feature: pawns can make only valid movements
 We want to be sure a pawn can only move
 from a gi...
Definición de pasos en groovy (1/2)
Given(~"a board with a (w+) (w+) in (w)(d+)") { String
color, type, column, row ->
  t...
Definición de pasos en groovy (2/2)

When(~"I choose to move the (w+) to (w+)(d+)") { String type, column, row ->
 this."$...
Plantilla de escenarios
Scenario Outline: advance 2 positions
 Given a board with a <color> Pawn in <init_column><init_row...
Definición de pasos (groovy)

 ¡ Ninguno nuevo!

 Los pasos ya están implementados =)

 De manera tabular puedes probar...
Beneficios de BDD
 En cuanto a requerimientos

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


...
Pero hay más …
 Automatizando las pruebas de aceptación
 tenemos…

    Capacidad de realizar pruebas de regresión.

   ...
¿Preguntas?
Referencias…
Artículo de Dan North (creador de BDD).
   http://bit.ly/ay8sjI

Libro: The Rspec Book

Reflección sobre BDD ...
¡Gracias!

Twitter: @MachinesAreUs
Blog: http://machinesareus.blogspot.com
e-mail: aramos@certum.com
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Próxima SlideShare
Cargando en…5
×

Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)

2.540 visualizaciones

Publicado el

Plática dada el 19 de Junio del 2010 en el marco del Evento Spring !O organizado por javamexico.org y springhispano.org

0 comentarios
3 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
2.540
En SlideShare
0
De insertados
0
Número de insertados
457
Acciones
Compartido
0
Descargas
9
Comentarios
0
Recomendaciones
3
Insertados 0
No insertados

No hay notas en la diapositiva.

Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)

  1. 1. ¿Qué significa BDD? Beer Driven Development
  2. 2. ¿Qué significa BDD? ¡ No !
  3. 3. ¿Qué significa BDD? Behavior Driven Development … ¡y sin cervezas!
  4. 4. Agenda Desmitificando TDD Introducción a BDD Lenguajes específicos de dominio (DSL) Ejemplo simple de BDD Ejemplos „en vivo‟: Ajedrez Beneficios de BDD
  5. 5. 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.
  6. 6. 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.
  7. 7. 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).
  8. 8. 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.
  9. 9. Ejemplo de prueba en JUnit
  10. 10. 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
  11. 11. 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.
  12. 12. 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 “””
  13. 13. 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
  14. 14. 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
  15. 15. Desarrollo Políglota en la JVM Java Groovy JRuby Jython Scala Clojure ??? Máquina Virtual Java
  16. 16. Aplicación Ejemplo Desarrollada en un curso de capacitación 2 módulos: motor y ui 2 interfaces de usuario: Linea de comandos Swing
  17. 17. 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
  18. 18. 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() }
  19. 19. 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 }
  20. 20. 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 |
  21. 21. Definición de pasos (groovy)  ¡ Ninguno nuevo!  Los pasos ya están implementados =)  De manera tabular puedes probar tantos escenarios como necesites.
  22. 22. 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)
  23. 23. 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.
  24. 24. ¿Preguntas?
  25. 25. 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
  26. 26. ¡Gracias! Twitter: @MachinesAreUs Blog: http://machinesareus.blogspot.com e-mail: aramos@certum.com

×