UNQ - Tecnicatura en Programación Informática - Trabajo de Inserción Profesional
1. Universidad Nacional de Quilmes
Departamento de Ciencia y Tecnología
Tecnicatura en Programación Informática
Trabajo de Inserción Profesional
Behaviour-Driven Development en Pharo
Smalltalk
Nahuel Garbezza
Director: Gabriela Arévalo, Ph.D.
2. 2/30
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
4. 4/30
¿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
5. 5/30
¿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
7. 7/30
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
8. 8/30
Gherkin (II)
Feature: Serve coffee
Feature
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. 9/30
Gherkin (III)
Feature: Serve coffee
In order to earn money
Customers should be able to
buy coffee at all times
Scenario: Buy last coffee Scenario
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. 10/30
Gherkin (IV)
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
Steps
And I have deposited 1 dollar
When I press the coffee button
Then I should be served a coffee
11. 11/30
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
12. 12/30
Gherkin (VI)
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
Parámetro
13. 13/30
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
19. 19/30
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
20. 20/30
runner (implementación)
● Recorre el AST
○ Feature -> ejecutar scenarios
○ Scenario -> ejecutar steps
○ Step -> buscar step definitions y ejecutarlas
● Genera resultados
● Implementado como visitor
21. 21/30
step definitions
Implementadas como métodos anotados con
diferentes pragmas.
Ejemplo:
AnyClass >> givenThereAreNCoffeesLeft: qty
<given: 'there are (d+) coffees left'>
Parámetro
machine := CoffeeMachine new.
machine stock: qty.
22. 22/30
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
26. 26/30
Testing
● Tests unitarios (SUnit)
○ 130 Tests OK
○ 73% cobertura s0 sobre Core
● Tests de aceptación
○ auto-test
○ Cucumber Technology Kit
○ Feature 'core' actualmente OK
27. 27/30
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
28. 28/30
Conclusiones
● Funcionalidad de Cucumber implementada
● Punto de partida para BDD en Smalltalk
● Proyecto open source ==> más feedback de
la comunidad
29. 29/30
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