Está en la página 1de 18

TDD o Test-Driven Development (desarrollo dirigido por tests) es una

práctica de programación que consiste en escribir primero las pruebas


(generalmente unitarias), después escribir el código fuente que pase la
z
prueba satisfactoriamente y, por último, refactorizar el código escrito

TDD
código más robusto, más seguro, más mantenible y
una mayor rapidez en el desarrollo.
z
Nesitamos cumplir:

§ Tener bien definidos los requisitos de la función a realizar. Sin


una definición de requisitos no podemos comenzar a codificar.
Debemos saber qué se quiere y qué posibles implicaciones puede
tener en el código a desarrollar.

§ Criterios de aceptación, contemplando todos los casos


posibles, tanto exitosos como de error.

§ Cómo vamos a diseñar la prueba. Para realizar un buen test


unitario debemos ceñirnos únicamente a testear la lógica de
negocio que queremos implementar, abstrayéndonos en cierto
modo de otras capas o servicios que puedan interactuar con
nuestra lógica.
z
Nesitamos cumplir:

§ Qué queremos probar. Tener claro qué deberíamos probar


antes de codificar. Cada casuística para cada criterio de
aceptación debería llevar su prueba asociada.

§ ¿Cuántos test son necesarios? Tantos como casuísticas nos


encontremos. De esta manera aseguramos que nuestra
cobertura de pruebas es lo suficientemente fuerte como para
asegurar el correcto funcionamiento del código desarrollado.
z
Ciclo de vida:

§ Elegir un requisito. Se elige de una lista el requisito que, en un


principio, pensamos que nos dará mayor conocimiento del
problema y que a la vez sea fácilmente implementable.

§ Codificar la prueba. Se comienza escribiendo una prueba


para el requisito. Necesitamos que las especificaciones y los
requisitos de la funcionalidad que se están por implementar
sean claros. Este paso fuerza al programador a tomar la
perspectiva de un cliente considerando el código a través de
sus interfaces.
z

§ Tener claro qué vamos a probar y qué filosofía vamos a llevar a


cabo para que lo que probemos sea significativo y demuestre
que nuestro desarrollo es correcto.

§ Verificar que la prueba falla. Si la prueba no falla es porque el


requerimiento ya estaba implementado o porque la prueba es
errónea.
z

§ Codificar la implementación. Escribir el código más sencillo


posible que haga que la prueba funcione.

§ Ejecutar las pruebas automatizadas. Verificar si todo el


conjunto de pruebas funciona correctamente.

§ Refactor. El paso final es la refactorización, que se utilizará


principalmente para eliminar código duplicado, eliminar
dependencias innecesarias, etc.

§ Actualización de la lista de requisitos. Se actualiza la lista de


requisitos tachando el requisito implementado.
z
BENEFICIOS

§ Detectar requisitos que faltan por parte de negocio,


§ Diseñar mejor la lógica de negocio separando componentes y
capas

§ Prevenir errores.

§ Menos horas de mantenimiento.

§ Simplicidad
§ Calidad en el codigo.

§ Reducir el número de errores (la parte técnica, la organización, la


comunicación).
z
Agile testing:

§ Es un conjunto de prácticas que siguen reglas, procedimientos y


principios del desarrollo ágil de software.
z
Etapas:

§ Planificación de sprints

§ Diseño de casos de prueba

§ Verificación y validación de calidad

§ Revisión de la estabilidad del producto (muchas veces


consecuencia de los cambios e introducciön de
caracterîsticas)

§ Regresión e implementación
z
Principios:
§ Feedback o retroalimentación continua.

§ Equipo de pruebas integrado con el de desarrollo

§ Entregar valor al cliente.

§ Comunicación directa.

§ Tener valor.

§ Manténgalo simple.

§ Practicar la mejora continua.

§ Responder al cambio.

§ Autoorganizarse.

§ Concéntrese en las personas.

§ Disfrutar.
z
Buenas prácticas:
§ Flexibilidad, sostenibilidad y calidad son pilares del
desarrollo ágil.

§ Satisfacción del cliente a través de la colaboración del


cliente.

§ Trabajo en equipo

§ Personas motivadas

§ Equipo auto organizado

§ Disminuye el Time to Market


z
Desafîos:

§ Requisitos cambiantes

§ No hay suficiente informaciön para realizar las pruebas

§ Pruebas continuas

§ Necesidad de habilidades técnicas

§ Falta de comunicaciôn
El sistema de cuandrantes ayuda a los evaluadores a responder ¿qué prueba
ejecutar? ¿cuándo ejecutar una prueba? y ¿cómo ejecutar pruebas?
z
El sistema de cuandrantes ayuda a los evaluadores a responder ¿qué prueba
ejecutar? ¿cuándo ejecutar una prueba? y ¿cómo ejecutar pruebas?
z
Adaptar
z el testing segün:

•¿Utilizamos tests unitarios y de componentes?


•¿Contamos con un automated build process que nos da feedback al instante
sobre errores?
•¿Estamos utilizando ejemplos facilitados por el cliente para testear que el
software se comporta de la forma deseada?
•¿Mostramos prototipos u diseños de UI a los clientes o usuarios, antes de
empezar a programar?
•¿Dejamos suficiente tiempo para hacer testeo exploratorio?
•¿Cómo testeamos la usabilidad?
•¿Estamos implicando al cliente o usuario en el testing?
•¿Cómo testeamos la seguridad o el rendimiento de la aplicación?
•…

https://www.scrumio.com/blog/agile-testing/
z
z
Agile Testing es mucho más que solo
una fase del proceso

Agile Testing, incorpora una serie de prácticas, como por ejemplo


las pruebas de “todo el equipo”, pruebas independientes,
integración continua, testing guiado por pruebas, desarrollo guiado
por comportamiento, desarrollo guiado por pruebas de aceptación,
entre otros.
z Prácticas de Agile Testing:

• Test Driven Development (TDD): Técnica que combina un enfoque de refactorizacion del lado
de desarrollo con un enfoque de probar primero en cuanto al testing.

• Acceptance Test Driven Development (ATDD): Es una dimensión del TDD aplicada al nivel de
gestión de requerimientos de software, en el cual las pruebas escritas son a nivel de cliente, es
decir, lo equivalente a una prueba de aceptación o test funcional.

• Behaviour Driven Development (BDD): Bajo este enfoque primero se desarrolla una prueba
funcional o de historia de usuario automatizada, luego se ejecuta el desarrollo aplicando TDD
hasta que la prueba es exitosa.

• Testing exploratorio: Enfoque en el cual el aprendizaje de la funcionalidad, diseño de pruebas


y ejecución de pruebas ocurren simultáneamente.

• Automatización de pruebas de regresión: Tanto la integración continua como la


refactorización son prácticas necesarias para poder implementar agile.

• Automatización de pruebas unitarias: Consiste en usar un marco de trabajo o framework


para ejecutar tus tests unitarios, en lugar de ejecutar estos manualmente una y otra vez cada
vez que se modifica el código.

También podría gustarte