Slide 1

Slide 1 text

Trabajo de Inserción Profesional Behaviour-Driven Development en Pharo Smalltalk Nahuel Garbezza Universidad Nacional de Quilmes Tecnicatura en Programación Informática Departamento de Ciencia y Tecnología Director: Gabriela Arévalo, Ph.D.

Slide 2

Slide 2 text

Contenidos ● Introducción ○ ¿Qué es BDD? Principios y herramientas ○ Especificaciones Gherkin, sintaxis y funcionamiento ○ El ciclo de BDD ● BDD en Pharo Smalltalk ○ Diseño ○ Implementación ○ Demostración ○ Testing ● Conclusiones 2/30

Slide 3

Slide 3 text

Introducción ¿Dónde se especifica el comportamiento de un software dado? ● Documentos ● Código 3/30

Slide 4

Slide 4 text

¿Qué es BDD? ● 2006: Dan North publica Introducing BDD ● Especificaciones deben ser: ○ de fácil lectura ○ ejecutables ● Especificaciones, luego código ● Problema: Falta de marco teórico 4/30

Slide 5

Slide 5 text

¿Qué es BDD? (II) Principios ● It's all behaviour ● Deliver stakeholder value ● Enough is enough Otras características ● Adhiere al manifiesto ágil ● Ayuda a construir un lenguaje en común (Domain-Driven Design, Eric Evans) ● Propone desarrollo outside-in 5/30

Slide 6

Slide 6 text

Herramientas de BDD RSpec ... 6/30

Slide 7

Slide 7 text

Gherkin Lenguaje para escribir las especificaciones ● No es un lenguaje de programación ● Fácil de leer ● Ejecutable (con código asociado) ● Levemente estructurado ● Internacionalizable 7/30

Slide 8

Slide 8 text

Gherkin (II) Feature: Serve coffee In order to earn money Customers should be able to buy coffee at all times Scenario: Buy last coffee Given there are 1 coffee left in the machine And I have deposited 1 dollar When I press the coffee button Then I should be served a coffee Feature 8/30

Slide 9

Slide 9 text

Gherkin (III) Scenario Feature: Serve coffee In order to earn money Customers should be able to buy coffee at all times Scenario: Buy last coffee Given there are 1 coffee left in the machine And I have deposited 1 dollar When I press the coffee button Then I should be served a coffee 9/30

Slide 10

Slide 10 text

Gherkin (IV) Steps Feature: Serve coffee In order to earn money Customers should be able to buy coffee at all times Scenario: Buy last coffee Given there are 1 coffee left in the machine And I have deposited 1 dollar When I press the coffee button Then I should be served a coffee 10/30

Slide 11

Slide 11 text

Gherkin (V) Tipos de steps ● Contexto inicial Given I am logged in as "test" user ● Acciones When I add a product to the cart ● Verificación de resultados Then the table should be empty 11/30

Slide 12

Slide 12 text

Parámetro La especificación por sí sola no se ejecuta, necesita de código que "responda" a ella. step definition: código asociado a un step Ejemplo (Cucumber): Given /^there are (\d+) coffees left$/ do |coffees| # Some Ruby code here end Gherkin (VI) 12/30

Slide 13

Slide 13 text

El ciclo de BDD 1. Especificar un nuevo escenario (que generará valor para el usuario) 2. Ejecutar el escenario (no debería pasar) 3. Implementar los steps definitions que sean necesarios 4. Implementar la lógica necesaria para que el escenario funcione 5. Refactorizar 6. Comenzar de nuevo 13/30

Slide 14

Slide 14 text

BDD en Pharo Smalltalk 14/30 ● Tecnologías utilizadas ● Diseño ● Implementación ● Demostración ● Testing

Slide 15

Slide 15 text

Tecnologías Distribución de Smalltalk open source 15/30 ● Monticello ● Metacello ● SqueakSource Herramientas Frameworks ● PetitParser ● Mocketry

Slide 16

Slide 16 text

Diseño Componentes más relevantes 16/30 Parser Gherkin runner Resultados Interfaz gráfica

Slide 17

Slide 17 text

Parser Sintaxis Gherkin aún no definida de manera formal 17/30 Especificación Gherkin tokens AST (Abstract Syntax Tree)

Slide 18

Slide 18 text

Parser (II) scenario ^self comment , self tagGroup trim , self scenarioKeyword , #blank asParser star , self untilEndOfLine , self untilKeyword trim , self steps 18/30 scenario ^super scenario ==> [:tokens| ScenarioASTNode new comment: tokens first; tagGroup: tokens second; title: tokens fifth; description: tokens sixth trimBoth; steps: tokens seventh ] Ejemplo

Slide 19

Slide 19 text

runner (interfaz) Responsable de armar configuraciones de ejecución: ● features ○ desde archivos de texto ○ desde métodos en la imagen de Pharo ● clases con steps definitions ● filtro por tags Retorna resultados en cada ejecución 19/30

Slide 20

Slide 20 text

runner (implementación) ● Recorre el AST ○ Feature -> ejecutar scenarios ○ Scenario -> ejecutar steps ○ Step -> buscar step definitions y ejecutarlas ● Genera resultados ● Implementado como visitor 20/30

Slide 21

Slide 21 text

step definitions Implementadas como métodos anotados con diferentes pragmas. Ejemplo: 21/30 Parámetro AnyClass >> givenThereAreNCoffeesLeft: qty machine := CoffeeMachine new. machine stock: qty.

Slide 22

Slide 22 text

Resultados ● Contienen información de una ejecución ● Posibles estados de un step: ○ undefined ○ passed ○ failed ○ pending ○ skipped ● Información adicional ○ Método con step definition encontrado ○ Error ocurrido 22/30

Slide 23

Slide 23 text

Interfaz gráfica Configuración del runner 23/30

Slide 24

Slide 24 text

Interfaz gráfica Visualización y navegación de resultados 24/30

Slide 25

Slide 25 text

Demostración 25/30 Ejemplo: Cálculo de promedios del fútbol argentino

Slide 26

Slide 26 text

Testing 26/30 ● Tests unitarios (SUnit) ○ 130 Tests OK ○ 73% cobertura s0 sobre Core ● Tests de aceptación ○ auto-test ○ Cucumber Technology Kit ○ Feature 'core' actualmente OK

Slide 27

Slide 27 text

Extra ● Más elementos de Gherkin ○ Background ○ Scenario Outline ○ Tablas y Strings ○ Tags ● Perfiles de ejecución ○ API declarativa ○ Asocia nombre y configuración ● Formatter 27/30

Slide 28

Slide 28 text

Conclusiones ● Funcionalidad de Cucumber implementada ● Punto de partida para BDD en Smalltalk ● Proyecto open source ==> más feedback de la comunidad 28/30

Slide 29

Slide 29 text

Trabajos Futuros ● Integración ○ Frameworks (ej: Seaside) ○ Herramientas de desarrollo (browser, integración continua) ● Interfaz gráfica utilizando Glamour ● Generación de step definitions ● Reportes ● Gherkin ○ definir formalmente la gramática ○ incorporar traducciones 29/30

Slide 30

Slide 30 text

Behaviour-Driven Development en Pharo Smalltalk 30/30 Gracias .... Preguntas?