BDD BEHAVIOR DRIVEN DEVELOPMENT
Agenda • • • • • • • •
Introducción Definición Objetivo Principios Framework Prácticas Proceso Herramientas Cucumber Specflow Watin
Behavior Driven Development
BDD INTRODUCCIÓN BDD surge como una nueva metodología Agile que busca mejorar un factor fundamental para el buen desarrollo de cualquier producto de software:
COMUNICACIÓN Como? Proporcionando un vocabulario común que derriba esa brecha que existe entre el negocio y la tecnología.
Customer Behavior Driven Development
BDD BEHAVIOR DRIVEN DEVELOPMENT “Es una práctica Agile De Software que fomenta la colaboración entre desarrolladores, testers, analistas y personas del negocio en un proyecto de software.” “Describe un ciclo de interacciones con salidas bien definidas, resultando en la entrega de un sofwtare que ha sido verificado y funciona, un software que interesa.” Originalmente fue concebido por Dan North en 2003 como respuesta y evolución de combinar Test Driven Development con conceptos de Domain Driven Design. Behavior Driven Development
BDD OBJETIVO BDD busca la implementación del desarrollo describiendo su comportamiento desde la perspectiva de los interesados en el producto (stakeholders). También busca la implementación de un software que atiende las necesidades concretas del usuario y que en lo posible exceda sus expectativas. La forma? Establecer una forma de comunicación clara, que tanto el cliente como nosotros podamos entender. Análisis previo al desarrollo entre Stakeholders, BA y Testers. Behavior Driven Development
Behavior Driven Development
BDD COMO SE DESARROLLA UN PROYECTO?
http://skillsmatter.com/podcast/java-jee/how-to-sell-bdd-to-the-business
Behavior Driven Development
BDD PRINCIPIOS Enough is enough No deberíamos hacer menos de lo que necesitamos para comenzar pero no mas de lo que nos de como resultado un esfuerzo perdido. Esto también aplica al proceso de automatización en cualquiera de sus etapas. Podemos tener el build y el deploy automatizado , pero debemos evitar automatizarlo todo. Deliver stakeholder value Si estamos haciendo algo que no aporta valor al negocio o no incrementa nuestra habilidad de entregar valor, entonces debemos dejar de ejecutar esas tareas y pasar a aquellas que sí cumplan con la premisa de agregar valor al negocio. Behavior Driven Development
BDD PRINCIPIOS It’s all behavior Ya sea a nivel del código, de la aplicación o el que fuere, siempre podemos usar el mismo pensamiento y el mismo lenguaje para describir el comportamiento esperado del software en cualquiera de sus niveles.
Behavior Driven Development
BDD FRAMEWORK 1. El Negocio y la Tecnología deberían referirse al sistema de la misma forma 2. Todo sistema/funcionalidad debería tener un valor identificado y verificable para el negocio 3. La planificación, el análisis, y el diseño por adelantado tienen un retorno decreciente
Behavior Driven Development
BDD PRACTICAS • Establecer los objetivos que se requieren para implementar la visión de los diferentes interesados en el producto. • Determinar las características que nos permitirán lograr esos objetivos • Involucrar a los interesados del negocio.(Outside–in software development) • Usar ejemplos para describir el comportamiento de la aplicación o una unidad de código. • Automatizar esos ejemplos para poder proveer feedback continuo y tener un testing de regresión permanente. Behavior Driven Development
BDD PROCESO • Un interesado del negocio trabaja en conjunto con un analista funcional para identificar los requerimientos del negocio. • De esta interacción surge la user story, que se redacta con el siguiente formato: As a Role I request a Feature To gain a Benefit El interlocutor, quien tiene el Rol, es la persona que obtendrá el Beneficio de la Funcionalidad requerida. Behavior Driven Development
BDD PROCESO El analista funcional ayuda al stakeholder en la definición de los requerimientos en términos de features que tienen sentido para él, usando sus términos propios del dominio. Luego el stakeholder y el analista trabajan en conjunto con el tester para determinar el alcance de cada uno de esos features. Una vez definido el alcance, el tester piensa en términos de escenarios concretos para el diseño de las pruebas de aceptación. Behavior Driven Development
BDD PROCESO • Es importante la identificación de los escenarios antes que comience el desarrollo porque el stakeholder puede especificar exactamente cual es el alcance y el esfuerzo que quiere del equipo para cada uno de los features. • El equipo de desarrollo no implementará mas allá de lo definido en los escenarios. • La ultima tarea antes de la codificación es la automatización de los escenarios. • La definición y automatización de estos escenarios es la razón de Cucumber Behavior Driven Development
Behavior Driven Development
Cucumber COMUNICACIÓN ENTRE STAKEHOLDERS Y EL EQUIPO • Cucumber soporta la comunicación clara que busca BDD entre los stakeholders y el equipo de desarrollo, entendiendo por equipo de desarrollo a todos los que participan de la elaboración del producto. • Utiliza un lenguaje simple para describir los escenarios que luego pueden ser leídos tanto por gente técnica como por aquella que no lo es. • Estos escenarios representan las pruebas de aceptación del cliente y son los que luego se utilizan para la automatización del sistema que estamos desarrollando. Behavior Driven Development
Cucumber OBJETIVO “Cucumber es una herramienta de automatización funcional para equipos Lean y Agile.” “Asiste al equipo en la creación de especificaciones “ejecutables”, que también son un objetivo para desarrollo, los criterios de aceptación y Testing de regresión.”
Behavior Driven Development
Cucumber COMPONENTES BÁSICOS • • • • • •
Behavior Driven Development
Stakeholder Feature Feature File Scenario Steps Step Definition
Cucumber STAKEHOLDER Un stakeholder es toda aquella persona que obtiene algĂşn valor del producto que vamos a desarrollar Usualmente representados por grupos de usuarios. FEATURE Es un pedazo del sistema que entrega valor a uno o mas stakeholders. Representan las especificaciones ejecutables Behavior Driven Development
Cucumber FEATURE FILE El archivo tipo Feature describe una feature o parte de ella con ejemplos representativos de la salida esperada. Cucumber usa este archivo para validar la funcionalidad del sistema contra las especificaciones. Son archivos de texto plano, idealmente almacenados en el mismo sistema de control de versiones del proyecto relacionado Behavior Driven Development
Cucumber FEATURE FILE - EJEMPLO Feature: Login In order to have access to LOL As a user I want to Login Scenario: Login with valid user and pass Given I am in the homepage And I enter my username "pberlanga" And I enter my password "prueba1234" When I press the "Ingresar" button Then I should be logged in Then I log out Behavior Driven Development
Cucumber SCENARIO Un escenario captura un ejemplo de una feature y se incluye en el feature file. Es una forma en la que el sistema representa alg煤n valor al stakeholder. Es la unidad de especificaci贸n para Cucumber. Es la descomposici贸n de una feature en cadenas que pueden discutirse y entregarse cada una en forma separada.
Behavior Driven Development
Cucumber STEPS Son frases del lenguaje del dominio que podemos combinar para escribir escenarios. Se pueden referir a: • El contexto del escenario: Given I am in the homepage • Una acción del escenario: When I press the "Ingresar" button • Una forma de validar la acción: Then I should be logged in Behavior Driven Development
Cucumber STEP DEFINITION Son componentes reutilizables de la automatizaci贸n que ejecutan los pasos que componen un escenario. Le dice a Cucumber que hacer cuando interpreta un paso en particular. Se dise帽an para la implementaci贸n de los escenarios y verificar que los mismos funcionan seg煤n la forma esperada. Una vez implementadas, estas definiciones pueden ser reutilizadas por otros escenarios. Behavior Driven Development
Cucumber STEPS DEFINITION - EJEMPLO [Given(@"I am in the homepage")] public void GivenHomepage() { WebBrowser.Current.GoTo("http://lol-stress-web:81"); } [When(@"I press the ""(.*)"" button")] public void WhenPressIngresarButton(string btn_ingresar) { WebBrowser.Current.Buttons.First(Find.ByValue(btn_ingresar)).Click(); } [Then(@"I should be logged in")] public void ThenShouldBeLoggedIn() { Assert.That(WebBrowser.Current.ContainsText("Salir")); } Behavior Driven Development
Behavior Driven Development
Cucumber POR QUÉ? • Es fácil de aprender • Es fácil de instalar • Soporta la escritura de las especificaciones en aproximadamente 40 idiomas. • Brinda snipets iniciales para la generación básica del código de automatización. • Se integra con casi todas las librerías de Testing. • Se integra con otros entornos de desarrollo. • Aunque es una herramienta en Ruby, no es necesario saber Ruby para poder hacer uso de ella. Se puede usar Cucumber con .NET Behavior Driven Development
Behavior Driven Development
Specflow OBJETIVO SpecFlow tiene como objetivo reducir la brecha de comunicación que usualmente existe entre los expertos del dominio y los desarrolladores uniendo las especificaciones de comportamiento del negocio con su implementación. Facilita la integración de Cucumber al entorno de desarrollo de .NET y a su vez interactúa con las librerías de testing.
Behavior Driven Development
Specflow CONCEPTOS TÉCNICOS
Behavior Driven Development
Specflow TÉCNICAMENTE…. Specflow actualmente consiste de tres partes: •Un convertidor del archivo feature en test fixtures (integrado al Visual Studio a través de un single file generator) •Un framework en tiempo de ejecución (handles, step bindings, events and tracing) •Integración con frameworks para Unit Test (NUnit, MSTest, xUnit.Net, MbUnit)
Behavior Driven Development
Specflow WORKFLOW Specflow convierte los archivos del tipo feature en clases de test unitario. La prueba dentro de esta clase se corresponde con los escenarios que se encuentran en el archivo feature, y contiene las llamadas a las definiciones de los pasos (steps definitions) Los steps definitions son el c贸digo que se ejecuta para cada uno de los pasos de los escenarios.
Behavior Driven Development
Behavior Driven Development
Watin FEATURES Watin es una librer铆a que posibilita la Automatizaci贸n del testing para aplicaciones web en lenguaje .NET Permite la automatizaci贸n no solo en IE sino tambi茅n en FF.
Behavior Driven Development
Watin FEATURES • Automatización de la mayoría de los elementos HTML con facilidad. • Permite el reconocimiento de objetos a traves de múltiples atributos. • Permite tomar screenshots de las páginas web. • Puede manejar los popup: alertas, confirmaciones, login, etc. • Supports HTML dialogs (modal and modeless) • Se integran con facilidad a las herramientas de testing • Funciona con Internet Explorer 6, 7, 8, 9 y FireFox 3 • Se puede usar con cualquier lenguaje .Net Behavior Driven Development
Referencias
http://behaviour-driven.org/ The RSpec Book, Behaviour -Driven Development with RSpec, Cucumber, and Friends de David Chelimsky Outside-In software development http:// skillsmatter.com/podcast/java-jee/how-to-sell-bdd-to-the-busi http://cukes.info/ http://cuke4ninja.com/ https://github.com/henritersteeg/cuke4vs http://specflow.org http://watin.org/ Behavior Driven Development
多Preguntas o sugerencias?
MUCHAS GRACIAS POR SU TIEMPO Patricia Coronel SQC Manager
patriciacoronel@gmail.com