SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
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/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
3/30



Introducción
¿Dónde se especifica el comportamiento de un
software dado?

● Documentos
● Código
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/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
6/30



Herramientas de BDD


          RSpec




                  ...
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/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/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/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/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/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/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
14/30



BDD en Pharo Smalltalk

● Tecnologías utilizadas
● Diseño
● Implementación
● Demostración
● Testing
15/30



Tecnologías
                 Distribución de Smalltalk
                 open source


Herramientas       Frameworks

● Monticello       ● PetitParser
● Metacello        ● Mocketry
● SqueakSource
16/30



Diseño
Componentes más relevantes


   Parser
                  runner              Resultados
   Gherkin




                           Interfaz
                            gráfica
17/30



Parser



Especificación                          AST
                    tokens         (Abstract Syntax
   Gherkin                              Tree)



Sintaxis Gherkin aún no definida de manera
formal
18/30



Parser (II)
Ejemplo
scenario                     scenario

  ^self comment                ^super scenario ==> [:tokens|
  , self tagGroup trim
  , self scenarioKeyword           ScenarioASTNode new
    , #blank asParser star           comment: tokens first;
    , self untilEndOfLine            tagGroup: tokens second;
  , self untilKeyword trim           title: tokens fifth;
                                     description:
  , self steps
                                       tokens sixth trimBoth;
                                     steps: tokens seventh
                               ]
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/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/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/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
23/30



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



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



Demostración
Ejemplo: Cálculo de promedios del fútbol
argentino
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/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/30



Conclusiones

● Funcionalidad de Cucumber implementada
● Punto de partida para BDD en Smalltalk
● Proyecto open source ==> más feedback de
  la comunidad
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
30/30

Behaviour-Driven Development en Pharo
Smalltalk

Gracias ....

Preguntas?

Weitere ähnliche Inhalte

Andere mochten auch

Economic issues and trends in India 2013-14
Economic issues and trends in India 2013-14Economic issues and trends in India 2013-14
Economic issues and trends in India 2013-14Abinash Pandia
 
264 indep dep-clauses-c
264 indep dep-clauses-c264 indep dep-clauses-c
264 indep dep-clauses-cSamuel Flores
 
Build Confidence In Your Youth Sports Athlete
Build Confidence In Your Youth Sports AthleteBuild Confidence In Your Youth Sports Athlete
Build Confidence In Your Youth Sports AthleteMental Toughness Academy
 
Smalltalks 2011 - Bringing BDD ideas to Pharo
Smalltalks 2011 - Bringing BDD ideas to PharoSmalltalks 2011 - Bringing BDD ideas to Pharo
Smalltalks 2011 - Bringing BDD ideas to PharoNahuel Garbezza
 
Economic growth and development and Income
Economic growth and development and IncomeEconomic growth and development and Income
Economic growth and development and IncomeAbinash Pandia
 
Employee Involvement And Participation
Employee Involvement And ParticipationEmployee Involvement And Participation
Employee Involvement And ParticipationAbinash Pandia
 
STRESS PSIKOLOGI INDUSTRI, VIKRAM
 STRESS PSIKOLOGI INDUSTRI, VIKRAM STRESS PSIKOLOGI INDUSTRI, VIKRAM
STRESS PSIKOLOGI INDUSTRI, VIKRAMYussiwi Purwitasari
 
Dev ops 簡介
Dev ops 簡介Dev ops 簡介
Dev ops 簡介hugo lu
 

Andere mochten auch (13)

sistem informasi marketing
sistem informasi marketingsistem informasi marketing
sistem informasi marketing
 
pendahuluan pemasaran
pendahuluan pemasaranpendahuluan pemasaran
pendahuluan pemasaran
 
MEMBANGUN POSISI BRAND
MEMBANGUN POSISI BRANDMEMBANGUN POSISI BRAND
MEMBANGUN POSISI BRAND
 
analisis regresi dan korelasi
analisis regresi dan korelasianalisis regresi dan korelasi
analisis regresi dan korelasi
 
Economic issues and trends in India 2013-14
Economic issues and trends in India 2013-14Economic issues and trends in India 2013-14
Economic issues and trends in India 2013-14
 
264 indep dep-clauses-c
264 indep dep-clauses-c264 indep dep-clauses-c
264 indep dep-clauses-c
 
Build Confidence In Your Youth Sports Athlete
Build Confidence In Your Youth Sports AthleteBuild Confidence In Your Youth Sports Athlete
Build Confidence In Your Youth Sports Athlete
 
distribusi sampling
distribusi samplingdistribusi sampling
distribusi sampling
 
Smalltalks 2011 - Bringing BDD ideas to Pharo
Smalltalks 2011 - Bringing BDD ideas to PharoSmalltalks 2011 - Bringing BDD ideas to Pharo
Smalltalks 2011 - Bringing BDD ideas to Pharo
 
Economic growth and development and Income
Economic growth and development and IncomeEconomic growth and development and Income
Economic growth and development and Income
 
Employee Involvement And Participation
Employee Involvement And ParticipationEmployee Involvement And Participation
Employee Involvement And Participation
 
STRESS PSIKOLOGI INDUSTRI, VIKRAM
 STRESS PSIKOLOGI INDUSTRI, VIKRAM STRESS PSIKOLOGI INDUSTRI, VIKRAM
STRESS PSIKOLOGI INDUSTRI, VIKRAM
 
Dev ops 簡介
Dev ops 簡介Dev ops 簡介
Dev ops 簡介
 

Ähnlich wie UNQ - Tecnicatura en Programación Informática - Trabajo de Inserción Profesional

Programación de videojuegos con Godot Engine
Programación de videojuegos con Godot EngineProgramación de videojuegos con Godot Engine
Programación de videojuegos con Godot Enginepythoncanarias
 
Optimización del rendimiento
Optimización del rendimientoOptimización del rendimiento
Optimización del rendimientoFederico Peinado
 
DEV 04-01 Optimización del rendimiento.pdf
DEV 04-01 Optimización del rendimiento.pdfDEV 04-01 Optimización del rendimiento.pdf
DEV 04-01 Optimización del rendimiento.pdfFederico Peinado
 
Charla C++
Charla C++Charla C++
Charla C++yiown
 
Del free style al mvp
Del free style al mvpDel free style al mvp
Del free style al mvpJuanjo Marti
 
Introducción a swing. taller de programación 2016
Introducción a swing. taller de programación 2016Introducción a swing. taller de programación 2016
Introducción a swing. taller de programación 2016angeles104
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilagilenavarra
 
Plantilla implementación proyecto final
Plantilla implementación proyecto  finalPlantilla implementación proyecto  final
Plantilla implementación proyecto finalYorleny Ureña
 
TECNOLOGIA.docx (2).pdf
TECNOLOGIA.docx (2).pdfTECNOLOGIA.docx (2).pdf
TECNOLOGIA.docx (2).pdfCoffe9
 
Tema 4 -_introduccion_a_razonamiento_algoritmico
Tema 4 -_introduccion_a_razonamiento_algoritmicoTema 4 -_introduccion_a_razonamiento_algoritmico
Tema 4 -_introduccion_a_razonamiento_algoritmicoLincoln School
 
PPT_Sesión 02 Principios de Algoritmo.ppt
PPT_Sesión 02 Principios de Algoritmo.pptPPT_Sesión 02 Principios de Algoritmo.ppt
PPT_Sesión 02 Principios de Algoritmo.pptyohannygarciasalazar1
 
Plantilla implementación proyecto final
Plantilla implementación proyecto  finalPlantilla implementación proyecto  final
Plantilla implementación proyecto finalYorleny Ureña
 
Programación Modular - Subprogramas o funciones
Programación Modular - Subprogramas o funcionesProgramación Modular - Subprogramas o funciones
Programación Modular - Subprogramas o funcionesAlexanderAloid
 

Ähnlich wie UNQ - Tecnicatura en Programación Informática - Trabajo de Inserción Profesional (20)

Programación de videojuegos con Godot Engine
Programación de videojuegos con Godot EngineProgramación de videojuegos con Godot Engine
Programación de videojuegos con Godot Engine
 
Optimización del rendimiento
Optimización del rendimientoOptimización del rendimiento
Optimización del rendimiento
 
DEV 04-01 Optimización del rendimiento.pdf
DEV 04-01 Optimización del rendimiento.pdfDEV 04-01 Optimización del rendimiento.pdf
DEV 04-01 Optimización del rendimiento.pdf
 
Charla C++
Charla C++Charla C++
Charla C++
 
ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
Del free style al mvp
Del free style al mvpDel free style al mvp
Del free style al mvp
 
Herramientas de autoría
Herramientas de autoríaHerramientas de autoría
Herramientas de autoría
 
Introducción a swing. taller de programación 2016
Introducción a swing. taller de programación 2016Introducción a swing. taller de programación 2016
Introducción a swing. taller de programación 2016
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvil
 
Kubuntu - Aplicaciones
Kubuntu - AplicacionesKubuntu - Aplicaciones
Kubuntu - Aplicaciones
 
Plantilla implementación proyecto final
Plantilla implementación proyecto  finalPlantilla implementación proyecto  final
Plantilla implementación proyecto final
 
Tarea 5
Tarea 5Tarea 5
Tarea 5
 
Tarea 5
Tarea 5Tarea 5
Tarea 5
 
Introducción a CoffeeScript
Introducción a CoffeeScriptIntroducción a CoffeeScript
Introducción a CoffeeScript
 
TECNOLOGIA.docx (2).pdf
TECNOLOGIA.docx (2).pdfTECNOLOGIA.docx (2).pdf
TECNOLOGIA.docx (2).pdf
 
Tema 4 -_introduccion_a_razonamiento_algoritmico
Tema 4 -_introduccion_a_razonamiento_algoritmicoTema 4 -_introduccion_a_razonamiento_algoritmico
Tema 4 -_introduccion_a_razonamiento_algoritmico
 
PPT_Sesión 02 Principios de Algoritmo.ppt
PPT_Sesión 02 Principios de Algoritmo.pptPPT_Sesión 02 Principios de Algoritmo.ppt
PPT_Sesión 02 Principios de Algoritmo.ppt
 
Plantilla implementación proyecto final
Plantilla implementación proyecto  finalPlantilla implementación proyecto  final
Plantilla implementación proyecto final
 
Programacion
Programacion Programacion
Programacion
 
Programación Modular - Subprogramas o funciones
Programación Modular - Subprogramas o funcionesProgramación Modular - Subprogramas o funciones
Programación Modular - Subprogramas o funciones
 

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
  • 3. 3/30 Introducción ¿Dónde se especifica el comportamiento de un software dado? ● Documentos ● Código
  • 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
  • 14. 14/30 BDD en Pharo Smalltalk ● Tecnologías utilizadas ● Diseño ● Implementación ● Demostración ● Testing
  • 15. 15/30 Tecnologías Distribución de Smalltalk open source Herramientas Frameworks ● Monticello ● PetitParser ● Metacello ● Mocketry ● SqueakSource
  • 16. 16/30 Diseño Componentes más relevantes Parser runner Resultados Gherkin Interfaz gráfica
  • 17. 17/30 Parser Especificación AST tokens (Abstract Syntax Gherkin Tree) Sintaxis Gherkin aún no definida de manera formal
  • 18. 18/30 Parser (II) Ejemplo scenario scenario ^self comment ^super scenario ==> [:tokens| , self tagGroup trim , self scenarioKeyword ScenarioASTNode new , #blank asParser star comment: tokens first; , self untilEndOfLine tagGroup: tokens second; , self untilKeyword trim title: tokens fifth; description: , self steps tokens sixth trimBoth; steps: tokens seventh ]
  • 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
  • 25. 25/30 Demostración Ejemplo: Cálculo de promedios del fútbol argentino
  • 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
  • 30. 30/30 Behaviour-Driven Development en Pharo Smalltalk Gracias .... Preguntas?