Download Clase modelo

Document related concepts
no text concepts found
Transcript
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
• 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
• 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
• 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
• 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
• 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
• Ejemplo
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
“””
Test-Driven
• Los DSL aun no están estandarizados del todo
se puede utilizar Cucumber junto con Groovy.
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
Test-Driven
• Java
es
actualmente
multilenguaje.
Java
Groovy
JRuby
Jython
una
Scala
plataforma
Clojure
Máquina Virtual Java
???
Test-Driven
• 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
• 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
• 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
Test-Driven
• 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
• Concretar escribiendo criterios para los test de
aceptación
• Probar/Implementar: Sí, primero las pruebas
• Entregar y evolucionar.
Test-Driven
• 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
• Para mejorar las historias de usuario se
recomienda colocar ejemplo: Example Driven
Development.
• Ejemplo:
Test-Driven
• 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.
¿Preguntas?