18
Test-Driven Development Juan Carlos Olivares Rojas MSN: [email protected] [email protected] http://antares.itmorelia.edu.mx/~jcolivar/ @jcolivares Social Network: Facebook, LinkedIn. Hi5

Test-Driven Development Juan Carlos Olivares Rojas MSN: [email protected] [email protected] jcolivar

Embed Size (px)

Citation preview

Page 1: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

Test-Driven Development

Juan Carlos Olivares Rojas

MSN: [email protected]@itmorelia.edu.mx

http://antares.itmorelia.edu.mx/~jcolivar/@jcolivares

Social Network: Facebook, LinkedIn. Hi5

Page 2: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Escribir una clase de test de forma conjunta a la clase que queremos implementar nos ayuda a pensar en los requisitos que deben cumplir los métodos antes de escribirlos.

• Un test unitario es además la mejor documentación que podemos dar a una clase, no solo muestra como se espera que se use, si no que además puede ejecutarse.

Test-Driven

Page 3: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Mientras que los documentos de texto suelen quedar rápidamente obsoletos un test siempre estará actualizado.

• Corregir un fallo durante la fase de aceptación del producto cuesta varias veces más que corregirlo durante la fase de desarrollo.

Test-Driven

Page 4: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Solo hay 3 reglas:

• No se permite escribir código de producción al menos que sea con el objetivo de escribir una prueba que esta fallando.

• No se permite escribir más código de prueba del que sea necesario para que la prueba falle.

Test-Driven

Page 5: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• No se permite escribir más código de producción del que es suficiente para pasar la prueba que falla.

• TDD realmente funciona pero: • Es muy difícil de hacer TDD de manera

correcta.

• Muchos terminan conformándose con hacer pruebas unitarias, pero no TDD.

Test-Driven

Page 6: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• TDD no es una técnica de prueba!!!• Es una técnica de diseño y construcción

• BDD es una técnica de diseño y codificación que integra tanto pruebas unitarias como de aceptación.

• Tiene un enfoque desde fuera hacia a dentro. Utiliza un DSL (Lenguaje de Dominio Específico).

Test-Driven

Page 7: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• EjemploTest-Driven

Feature: Search In order to learn more As an information seeker I want to find more information when I need it

Scenario: Find what I’ looking for Given I am on the Kvasir search page When I search for “cucumber github” Then I should see “”” Behavior Driven Development “””

Feature: Search In order to learn more As an information seeker I want to find more information when I need it

Scenario: Find what I’ looking for Given I am on the Kvasir search page When I search for “cucumber github” Then I should see “”” Behavior Driven Development “””

Page 8: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Los DSL aun no están estandarizados del todo se puede utilizar Cucumber junto con Groovy.

Test-Driven

Given /^I am on the Kvasir search page$/ do visit(‘http://www.kvasir.mx/’) end

When /^I search for “cucumber github”$/ do fill_in(‘q’, :with => query) click_button(‘go’) end Then /^I should see $/ do |text| response_body.should contain(text) end

Given /^I am on the Kvasir search page$/ do visit(‘http://www.kvasir.mx/’) end

When /^I search for “cucumber github”$/ do fill_in(‘q’, :with => query) click_button(‘go’) end Then /^I should see $/ do |text| response_body.should contain(text) end

Page 9: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Java es actualmente una plataforma multilenguaje.

Test-Driven

Page 10: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Razones por las que no se hacen testing:

• El código es demasiado difícil de testear.

• El desarrollo de los test está despriorizado y no forma parte integral del proceso de desarrollo.

• Los programadores no quieren escribir test.

Test-Driven

Page 11: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Para la realización de pruebas unitarias en muchos casos se recomienda el uso de “mock”

• Los mocks son objetos simulados muy parecidos a los “crash dummies” en pruebas de auto.

• Los mocks se utilizan en “pruebas sintéticas” cuando el objeto real no puede emplearse o es sumamente complejo.

Test-Driven

Page 12: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Un ejemplo de mock podría darse en pruebas de integración: un módulo depende de datos proporcionados por la interfaz que aun no está disponible.

• Otro ejemplo podría ser el acceder a datos que se encuentran en una base de datos. Para fines prácticos se manejan desde un archivo o bien de manera directa.

• Un mock implementa las mismas funcionalidades que un objeto real.

Test-Driven

Page 13: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Los mocks pueden catalogarse como “Fake” cuando devuelven un arreglo de respuestas predeterminadas.

• En general el ciclo de desarrollo se recomienda que sea:

• Escuchar al cliente

• Transcribir los requisitos en historias de usuario

Test-Driven

Page 14: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Concretar escribiendo criterios para los test de aceptación

• Probar/Implementar: Sí, primero las pruebas

• Entregar y evolucionar.

Test-Driven

Page 15: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Para realizar las pruebas se realiza el siguiente ciclo repetitivo:

• Agregar un test• Correr el test y ver las fallas• Escribir código• Correr de nuevo y ver que todas las

pruebas pasen• Refactorizar

Test-Driven

Page 16: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Para mejorar las historias de usuario se recomienda colocar ejemplo: Example Driven Development.

• Ejemplo:

Test-Driven

Page 17: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

• Con este enfoque ya sabemos lo que quiere el cliente, por lo tanto ya podemos construir el software adecuado.

• No se implementa lo que no será usado.

• Minimizamos errores.

• Está diseñado para cambiar.

Test-Driven

Page 18: Test-Driven Development Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx jcolivar

¿Preguntas?