3. ¿Para que sirve?
•
Verificar del funcionamiento de la aplicación!
•
Automatización!
•
Evitar recurrir en bugs!
•
Construir casos de uso difíciles de reproducir!
•
Simplificar la introducción de cambios!
•
Simplificar la refactorización!
4. ¿Que vamos a ver?
•
Unit Testing!
•
Functional Testing
5. Unit Testing
Es una forma de probar el correcto funcionamiento de un módulo de
código. Esto sirve para asegurar que cada uno de los módulos funcione
correctamente por separado.
http://es.wikipedia.org/wiki/Prueba_unitaria
6. ¿Ventajas?
•
Facilita el debug!
•
Demuestra el funcionamiento del código sin importar el entorno!
•
Viendo el test puedo determinar que hace el código!
•
Confirma si el pequeño cambio en realidad fue tan pequeño!
•
El código tiende a ser más limpio!
•
Nos permite corregir bugs y asegurarnos que no vuelven a aparecer!
•
Simplifica la integración
18. Ejecución
$ phpunit
# Single test class!
$ phpunit tests/Namespace/ClassTest.php
# Proyecto de Symfony!
$ phpunit -c app
19. Test Driven Development
Es un proceso de desarrollo que se basa en la repetición de un corto ciclo
de desarrollo: Primero se desarrollan los test, definiendo como debe
funcionar la librería a desarrollar, luego se escribe la mínima cantidad de
código necesaria para que pasen los tests, y finalmente se hace la
refactorización del código a los estandares aceptables.
http://en.wikipedia.org/wiki/Test-driven_development
20. Escritura de test
Escritura del código necesario para pasar el test
Refactorización
Verificación de los tests
23. Mock Objects
Son objetos que imitan el comportamiento de objetos reales de una forma
controlada. Se usan para probar a otros objetos en pruebas unitarias que
esperan mensajes de una clase en particular para sus métodos, al igual
que los diseñadores de autos usan un crash dummy cuando simulan un
accidente.
http://es.wikipedia.org/wiki/Objeto_simulado
28. Functional Testing
Una prueba funcional es una prueba basada en la ejecución, revisión y
retroalimentación de las funcionalidades previamente diseñadas para el
software. Son pruebas específicas, concretas y exhaustivas para probar y
validar que el software hace lo que debe y sobre todo, lo que se ha
especificado.
http://es.wikipedia.org/wiki/Pruebas_funcionales
29. ¿Ventajas?
•
Se escriben una sola vez!
•
Ofrecen mayor cobertura de casos de uso!
•
Puedo ver como se comporta mi aplicación y para casos específicos!
•
Sirven como test de integración en algunos casos!
•
Confirma si los pequeños cambios en realidad fue tan pequeños
30. ¿Desventajas?
•
Es difícil descubrir todos los errores del código!
•
No siempre puedo determinar que hace el código!
•
Es difícil anticipar todos los casos de uso y futuros bugs
32. Pruebas de Integración
Son aquellas que se realizan en el ámbito del desarrollo de software una
vez que se han aprobado las pruebas unitarias. Únicamente se refieren a la
prueba o pruebas de todos los elementos unitarios que componen un
proceso, hecha en conjunto, de una sola vez.
http://es.wikipedia.org/wiki/Pruebas_de_integración
33. Behavior Driven Development
Es una técnica de desarrollo ágil de software que nos permite crear una
aplicación describiendo su funcionamiento desde la perspectiva de los
inversores.
http://www.ticketea.com/introduccion-bdd-granada
36. Behat
Se escriben historias en lenguaje entendible para cualquier
humano(Gherkin).!
Esas historias luego se comprueban con el funcionamiento de la aplicación.!
Se separan en features.!
Cada feature desarrolla uno o más escenarios.
37. Feature
Feature: ls!
In order to see the directory structure!
As a UNIX user!
I need to be able to list the current directory's contents!
!
Scenario: List 2 files in a directory!
Given I am in a directory "test"!
And I have a file named "foo"!
And I have a file named "bar"!
When I run "ls"!
Then I should get:!
"""!
bar!
foo!
"""
http://docs.behat.org/quick_intro.html
38. Feature para Web
Feature: Login!
Para poder acceder al sistema!
Como un usuario registrado!
Necesito poder identificarme con un usuario y contraseña!
!
Scenario: Ingreso al sistema con usuario válido!
Given I am on “/login”!
When I fill in “username” with “iambrosi”!
And I fill in “password” with “12345”!
And I press “Ingresar”!
Then I should see “Bienvenido Ismael”
39. Para los tests de funcionalidades web se debe utilizar la extensión Mink
y uno de los drivers para navegadores.
http://mink.behat.org/
40. Para los tests de funcionalidades web se debe utilizar la extensión Mink
y uno de los drivers para navegadores.
Goutte
Sahi
Zombie
Selenium
Selenium2
http://mink.behat.org/
43. Resumen
•
Utilizamos Unit Testing para probar pequeños módulos!
•
Utilizamos Integration Testing para probar la union de varios módulos
44. Resumen
•
Utilizamos Unit Testing para probar pequeños módulos!
•
Utilizamos Integration Testing para probar la union de varios módulos !
•
Utilizamos Fuctional Testing para probar el resultado de la ejecución
45. Resumen
•
Utilizamos Unit Testing para probar pequeños módulos!
•
Utilizamos Integration Testing para probar la union de varios módulos!
•
Utilizamos Fuctional Testing para probar el resultado de la ejecución!
•
Utilizamos BDD(Behat) para desarrollar los test tal cual es visto en el
negocio