Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.

Slides:



Advertisements
Presentaciones similares
BizTalk Server 2006 & Test Driven Development Kabel Sistemas S.L.
Advertisements

CICLO DE VIDA DEL DESARROLLO DE SOFTWARE
Pruebas de Diseño Diplomado en Calidad en el Software NOTAS
Acercándonos a las Pruebas en Google
Guía metodológica para la gestión de proyectos de software en PyMEs que no son fábricas de software por medio de Metodologías ágiles.
VV&T and QA software departments in a medical company
Pruebas de Unidad y Refactorización
PRODUCTOS DE INVESTIGACIÓN
FLAN “F- LINKS AND NODES”
Guía metodológica para la gestión de proyectos de software en PyMEs que no son fábricas de software por medio de Metodologías ágiles.
Ciclo de desarrollo del software
Por: Carlos Aucancela Tatiana Pozo
Codificación.
Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.
Índice 1. Introducción, objetivos y justificación del proyecto.
Empresa: Liebre Primer ciclo Proyecto TripleC. Conseguir soluciones inteligentes para satisfacer de una manera rápida y segura las necesidades de nuestros.
Soporte GO-LIVE Crear y seguir tareas, escenarios, requerimientos Asignar trabajo al equipo Uso de workflow para hacer cumplir el proceso.
Visual Studio 2005 Gestión del Ciclo de Vida Jose Murillo Responsable programas técnicos para Fabricantes.
Presentación del estado del arte
CheckIn4Android.
Encapsulamiento y Abstracción
SISTEMAS DE DISEÑO ASISTIDO POR COMPUTADORA
Test Driven Development TDD
Modelado Arquitectónico
Test Driven Development
Ciclos de vida ágiles.  Es una metodología ágil que plantea: ◦ Iteraciones cortas ◦ Entregables periódicos ◦ Colaboración con el cliente full time ◦
DEPARTAMENTO DE INGENIERÍA INFORMÁTICA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
(c) P. Gomez-Gil, INAOE DISEÑO DE COMPONENTES DE SOFTWARE * NOTAS DEL CURSO Ingeniería de Software I DRA. MARIA DEL PILAR GÓMEZ GIL INAOEP.
 Tema del proyecto  Integrantes y roles del equipo  Objetivos del proyecto  Alcance.
 Fue en el año 1945 cuando el matemático Jhon Von Neumann, fascinado por las posibilidades del ENIAC, demostró que una computadora podía tener una estructura.
ASEGURANDO LA CALIDAD DEL CODIGO REFACTORING. Refactorizar (o Refactoring) es realizar una transformación al software preservando su comportamiento, modificando.
Programación orientada a objetos Capítulo 6 Objetos con buen comportamiento.
Software Testing Juan Carlos Olivares Rojas MSN:
Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software.
agile-tester-foundation- chapter-2-fundamental-agile-testing- principles-practices-and-processes-1-of-3-
INTRODUCCIÓN A JAVA. Índice ¿Qué es Java? La plataforma Java 2 La Máquina Virtual de Java Características principales ¿Qué ventajas tengo como desarrollador?
Ingeniería del Software
Introducción a la tecnología Realizado por: Miguel Ángel Arias.
Test-Driven Development Juan Carlos Olivares Rojas MSN:
INGENIERÍA DE SOFTWARE
FRAMEWORK VS Código fuente
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
Pruebas y La Vida del Ciclo de Desarrollo del Software
Introducción al Lenguaje. ¿ Qué es PHP ? O Hypertext Pre-processoes (PHP) es un lenguaje de "código abierto" interpretado, de alto nivel, embebido en.
Términos y Conceptos Básicos
El rol de SQA en PIS.
INGENIERIA DE SOFTWARE
Metodología de Desarrollo Unidad Educativa Bolívar Sebastián Torres 6° 18°
Juan Carlos Olivares Rojas
Guía metodológica para la gestión de proyectos de software en PyMEs que no son fábricas de software por medio de metodologías ágiles Tatiana Alejandra.
Terminología de proceso del software
Roles de Open UP.
INTEGRANTES: ISABEL SALVATIERRA BORIS SANCAN ZEND FRAMEWORK.
Elaborado por: Mayoral Cruz Matilde Morales Espinoza Anllhins
M.C. Juan Carlos Olivares Rojas
Tecnologías Cliente / Servidor Capitulo II Richard Jiménez V. clienteserver.wordpress.com.
Por qué? Probar el Código rido abr2010. Demostración Empírica Método Fáctico Veríficación – contrastación por medio de la percepción Es autocorrectivo.
Programación, Orquestación y Unificación: los 3 pilares del test Alejandro Blengio Alvaro Gareppe
Edwin Oliveros.  El diseño de sistemas consiste en la transformación del modelo de diseño, que toma en cuenta los requerimientos no funcionales y las.
ADN2 Diseño ágil de noticias Historia de un trabajo profesional.
Test Driven Development
Ciclo de Vida del Software
Ciclo de desarrollo del software
Carolina Rangel Felipe Montaño Alexis García
INTRODUCCIÓN A LA INGENIERIA DE SOFTWARE ALUMNO MILLER ANDRES GALINDO DUCUARA (412088)
Modelo de procesos de software
CICLO DE VIDA DE UN SOFTWARE. Es el conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados, que forman parte de.
Programación orientada a objetos Capítulo 7 Objetos con buen comportamiento.
ALUMNO ALUMNO: DIEGO URES LEGAJO LEGAJO: La prueba unitaria es la herramienta para la Calidad Presentación Trabajo Final de Grado.
Transcripción de la presentación:

Introducción a TDD

Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas utilizadas. El objetivo es clarificar el proceso de TDD de una forma práctica.

Objetivos de la charla - - Introducir TDD como una alternativa viable al desarrollo tradicional. - - Crear cierta inquietud por profundizar mas en el tema. - - Exponer las ventajas que TDD tiene para el desarrollador. - - Explicar paso a paso como afrontar una funcionalidad con esta práctica.

¿Que es TDD? Practica de desarrollo de software Test First + Refactor

¿Que ventajas trae TDD al desarrollador? Confianza en el funcionamiento. Foco en el desarrollo. Código mas limpio. (Buenas practicas de desarrollo y patrones). Menos Bugs y mas localizados. Documentación del código con los Tests. Menos reinicio del servidor para probar.

Realizar el menor diseño posible antes de empezar. Solo lo necesario (Generalmente la Infraestructura de la aplicación). Los test guiarán el diseño. El ciclo de TDD

Refacto r Escribir un test Unitario que falle Hacer que el test pase Escribir un Test Funcional Que falle

Conocido como el ciclo ROJO->VERDE- >REFACTOR

¿Cuanto tiempo pueden estar los tests en rojo? - - Test Unitarios deben pasar cuanto antes. - - Test funcionales tardarán mas en pasar. Y estarán en un ciclo distinto del BUILD. - - Nunca se subirán tests que fallan al repositorio de código fuente. - - Solo se desarrolla funcionalidad cuando exista un Test fallido que lo requiera.

¿Cuanto del código probar? - - Probar TODO lo que tenga sentido probar. - - No probar lo trivial obligatoriamente. - - Spikes para Código de terceros.

Nuestro ejemplo

Herramientas de Soporte Junit Jmock Cargo Selenium Spring Test Context Framework

Iteracion 0 Preparación de la infraestructura.

¿Como comenzar?. - - Escoger la funcionalidad (feature) mas pequeña posible que la aplicación deba cumplir. - - Luego ir escogiendo funcionalidades de nuestro Product Backlog.

Nuestro ejemplo. Situación Inicial Situación Final

No debe conocer los objetos internos del sistema. Debe reaccionar ante eventos que se produzcan en la capa "visible" (GUI, LOG, etc). Usualmente haciendo un poll para ver si hay cambios. Test Funcional

El primer Test Funcional Selenium

Prueba comportamientos en aislamiento TOTAL respecto al resto del sistema. Prueba una y solo una caracteristica sin que los demas elementos del sistema afecten su ejecución. Test Unitario

El primer Test Unitario. Ingreso a una cuenta. Test AccountTest no compila. Test AccountTest compila. Test AccountTest pasa el Test (Implementacion Falsa) Triangulación. Test AccountTest pasa el Test. Sin Refactor.

Cuando se sepa claramente la implementación obvia, aplicarla. No es necesario siempre dar los pasos mas pequeños posibles. Si la implementación obvia resulta no ser tan obvia, y al implementarla los test fallan. Hacer los pasos mas pequeños posibles. El primer Test unitario.

Probando las situaciones de error. Segundo Test Unitario

- Retiro de una cuenta - Test con expectativa de excepción no compila - Test con expectativa de excepción si compila - Test con expectativa de excepción Pasa (Implementación) - Refactorizamos

Segundo Test Unitario Se deben probar todas las situaciones Realistas que pensemos que se pueden producir en la funcionalidad que probamos.

Tercer Test Unitario - Soporte de divisas EUR, USD, VNB - Test no compila - Pensar en el diseño del API desde el Test. (La divisa debe ir en el construtor) - El Test compila - Adaptación de tests a los cambios de diseño. - Ejecución total de la suite de tests

Tercer test unitario. Refactorizando y cambiando el diseño de la currency. Aplicando buenas practicas (Valores String) Pensar en el diseño (Añadir nuevo constructor a Account con el monto)

Probando un Servicio Servicio de Transferencia de dinero - El Test no compila. Primera aproximación - Pensar en el diseño. Se cambia el Test para invocar al API deseada - Implementamos. - Ejecutamos el Test. - Test de Regresión - Ejecutamos la suite de tests y arreglamos los fallos.

Probando un Servicio Los Tests son una red de seguridad contra la introducción de Bugs.

Refactorización de la Transfer Operation - Mejorando aun mas las APIs - Implementar Un builder - Ejecutar los Tests Probando un Servicio

Transferencias entre 2 monedas distintas. - Sin factor de conversión - Con factor de conversión. Primera aproximación. - Ejecutamos los tests. - Nuevamente los Tests impiden que un bug llegue a producción. Probando un Servicio

- Refactorización del Transfer Service. - Single Responsibilty Principle - Extraemos un nuevo tipo. Creamos el CurrencyService. Con TDD por supuesto. Probando un Servicio

En TDD existen dos momentos en los que se estudia el diseño de la aplicación. En la creación de los Tests y en la refactorización.

Mock Objects Introduciremos un Mock para la dependencia. ¿Qué es un Mock Object? Mock Hecho a mano. Jmock

JMOCK Nos permite con un lenguaje especifico de dominio definir Dobles de objetos para nuestros Test, y establecer las expectativas sobre estos objetos. Haciendo las dependencias Explicitas

El uso de mocks Se puede establecer su necesidad en cualquiera de los dos tiempos de diseño. Escribir el Test, o la refactorización.

Probando un servicio - Refactorizamos CurrencyService - La responsabilidad de Conversión la pasamos al enum. - Escribimos los Tests - Implementamos.

Mock del DAO Creamos el AccountServiceTest pensando en sus dependencias. Que nos guíen al diseño correcto.

Test Driving el DAO. Test de Integración. ¿Qué es un test de integración? Spring Test Context Framework

Modificando Tests Agregamos la dependencia de Persistencia a la transferencia. Primero al Test.

TDD el controlador. Probando el Get de la funcionalidad. Probando el Post. Mock de HttpServletRequest

TDD el controlador. Un controlador es tan fácil de probar como cualquier otra clase.

Ejecutando el Test Funcional Cargo para iniciar el servidor. Selenium.

Dao JDBC Spring Test Context Framework

Revisando el Code Coverage Cobertura. Mvn site Mas que medir la cobertura por porcentaje. Estar conscientes de que hemos probado lo necesario.

Conclusiones Principales - - TDD nos ayudan a mantener el foco de lo que queremos desarrollar. - - TDD nos sirve como red de seguridad para atrapar Bugs lo antes posible. - - TDD nos da seguridad de que lo que desarrollamos funciona. - - Tdd acelera el proceso de desarrollo.

Bibliografía

Preguntas