Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de...

12
Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Behavior Driven Development Sesión 11c

Transcript of Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de...

Page 1: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Behavior Driven DevelopmentSesión 11c

Page 2: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Repaso de TDD

• Práctica de desarrollo de software propuesta por Kent Beck• Parte de XP y de metodologías ágiles, pero puede ser usada también

con cualquier otra metodología

�2

John Ferguson Smart - BDD in Action

Page 3: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Las 3 reglas de Tío Bob

• Las 3 reglas de Tío Bob Martin (@unclebobmartin) sobre TDD:!

1. No está permitido que escribas código para producción a menos que sea para hacer pasar un test unitario que falla.

2. No está permitido que escribas más de un test unitario que falle; y los fallos de compilación son fallos.

3. No está permitido que escribas más código para producción que el que sea suficiente para pasar un test unitario que falla.

�3

“If you think about this you will realize that you simply cannot write very much code at all without compiling and executing something. Indeed, this is really the point. In everything we do, whether writing tests, writing production code, or refactoring, we

keep the system executing at all times. The time between running tests is on the order of seconds, or minutes. Even 10 minutes is too long.”

Page 4: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

The Bowling Game Kata

• Uncle Bob propone un ejemplo de aprendizaje que se ha hecho muy popular entre los practicantes de TDD: aprendizaje basado en Katas. Propone la Kata del Juego de Bolos.

• Prueba la Kata, repítela, memorízala. La preguntaremos en el examen. Al final interiorizas decisiones y empiezas a conseguir “sentido de diseño”.

• Memoriza las secciones, repítelas• El Primer Test• El Segundo Test• El Tercer Test• El Cuarto Test• El Quinto Test

�4

Page 5: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Prerrequisitos para BDD

• Para hacer bien BDD se supone que:• Sabemos hacer tests unitarios (The Art of Unit Testing - proquest)• Sabemos la técnica de TDD y todas las técnicas asociadas (mocks,

inyección de dependencias, etc.) (TDD by example - proquest)

• Pero la técnica no es suficiente, hay que saber cómo usarla:• Qué nombre poner a los tests para que sean legibles y mantenibles• Cómo definir los tests para ampliar las características del proyecto y

conseguir más valor• Cómo convertir las historias de usuarios en conjuntos de tests

�5

Page 6: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Nombrado correcto de los tests

• Estilo tradicional (mal):

!

!

!

• Usando “When” y “Should”:

�6

public class BankAccountTest {! @Test! public void testTransfer() {...}!! @Test! public void testDeposit() {...}!}

public class WhenTransferringInternationalFunds {! @Test! public void shouldTransferFundsToDestinationAccount() {...}!! @Test! public void shouldDeductFeesAsSeparateTransation() {...}!!}

Page 7: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Escenarios

• Estructura para definir criterios de aceptación y pruebas• “Given” (condiciones previas)• “When” (situación)• “Then should” (resultado)

�7

Given a customer has a current account!When the customer transfers funds from this account to an overseas account !Then the funds should be deposited in the overseas account! and the transaction fee should be deducted from the current account

Cucumber Spec2

Page 8: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Especificaciones ejecutables

• Al ser de muy alto nivel, las pruebas se convierten en especificaciones ejecutables

• Se definen a partir de los ejemplos y de los criterios de aceptación, en el lenguaje del modelo del dominio de negocio (siguiendo las propuestas de Domain Driven Design charla de Eric Evans)

• Sirven • Para guiar el desarrollo de TDD y de la programación del sistema• Documentación viva• Ejemplos de uso

• La ejecución de las pruebas y de las especificaciones ejecutables se realiza de forma automática en la tubería de despliegue

�8

Page 9: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

El funcionamiento básico de BDD

�9

John Ferguson Smart - BDD in Action

Page 10: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Lenguajes

• Las especificaciones son DSLs (Domain Specific Languages) que se traducen a frameworks de testing de más bajo nivel• El framework más conocido es Cucumber, con implementación en más de

40 idiomas y traducción a Ruby, Java, .Net, y muchos otros lenguajes• El lenguaje en el que se definen las especificaciones en Cucumber se llama

Gherkin

�10

Feature: Search courses! Courses should be searchable by topic! Search results should provide the course code!! Scenario: Search by topic! Given there are 240 courses which do not have the topic "biology"! And there are 2 courses A001, B205 that each have "biology" as one of the topics! When I search for "biology"! Then I should see the following courses:! | Course code |! | A001 |! | B205 |

Page 11: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Building the right software right

• Debemos conseguir:• Software que funciona

(building the software right)• Software que aporta valor

(building the right software)

• BDD integra las técnicas de TDD, automatización, continuous delivery (building the software right) junto con las de retroalimentación frecuente, desarrollo incremental (building the right software)

�11

John Ferguson Smart - BDD in Action

Page 12: Behavior Driven DevelopmentBehavior Driven Development Sesión 11c Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Repaso de TDD • Práctica

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Lecturas

• John Ferguson Smart - BDD in Action, cap. 1

�12