BDDAgustín RamosChristian Ramírezcertum<br />
¿Qué significa BDD?<br />BeerDrivenDevelopment<br />
¿Qué significa BDD?<br />BehaviorDrivenDevelopment<br />… de preferencia sin cervezas<br />
4<br />Agenda<br />Desarrollo Dirigido por Pruebas (TDD)<br />Obstáculos al implementar TDD<br />Descripción de BDD<br />L...
DesarrolloDirigidoporPruebas (TDD)<br /> En TDD, las pruebas SON LA ESPECIFICACIÓN DEL SISTEMA<br />La cual es ejecutable....
Obstáculosparaimplementar TDD<br /> Tiempos comprometidos.<br /> Requiere conocer más técnicas/herramientas.<br /> Criteri...
Ejemplo de prueba en JUnit<br />
Descripción de BDD<br />¿Qué es?<br />Método de diseño y codificación<br />Que integra pruebas.<br />De aceptación<br />Un...
Lenguaje especifico de dominio (DSL)<br />¿Qué es?<br />“Un lenguaje de programación o especificación<br />dedicado a un d...
Ejemplo simple de BDD<br />1. Escribe un escenario (parte de un feature)<br />
Ejemplo simple de BDD<br />2. Escribe el código que ejercita el feature (el código de prueba)<br />3. Escribe el código qu...
DSL para pruebas de aceptación<br />Enfoque del DSL en pruebas de aceptación.<br />Describe las pruebas en el lenguaje del...
DesarrolloPolíglota en la JVM<br />
AplicaciónEjemplo<br /> Desarrollada en un curso de capacitación<br /> Estudiantes que no sabían POO<br /> Mucho menos Jav...
Escenario simple (motor)<br />Feature: pawns can make only valid movements<br />  We want to be sure a pawn can only move<...
Definición de pasos (groovy)<br />Given(~"a board with a (+) (+) in ()(+)") { String color, type, column, row -><br />this...
Plantilla de escenario simple<br />Scenario Outline: advance 2 positions<br />  Given a board with a <color> Pawn in <init...
Definición de pasos (groovy)<br /><ul><li>¡Ninguno nuevo!
Los pasos ya están implementados =)
De manera tabular puedes probar tantos escenarios como necesites.</li></li></ul><li>Beneficios de BDD <br />En cuanto a re...
Beneficios de BDD<br />En la Administración de proyectos<br />Las historias pueden ser estimadas              (pequeños fr...
Pero hay mas …<br />Automatizando las pruebas de aceptación tenemos…<br />Requerimientos ejecutables (y menos ambiguos)<br...
¿Preguntas?<br />
Referencias…<br />Artículo de Dan North (creador de BDD).<br /> http://bit.ly/ay8sjI<br /> Libro: TheRspecBook<br />Reflec...
Próxima SlideShare
Cargando en…5
×

BDD - Desarrollo dirigido por comportamiento

3.318 visualizaciones

Publicado el

Publicado en: Tecnología
0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
3.318
En SlideShare
0
De insertados
0
Número de insertados
330
Acciones
Compartido
0
Descargas
5
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

BDD - Desarrollo dirigido por comportamiento

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

×