test driven development giannina costa. ¿quÉ es tdd? el desarrollo dirigido por tests (test driven...

14
Radio-Frequency Characteristics of Ultraviolet Optical Links J. Deng , S. Halder, and J. C. M. Hwang, Lehigh University A. Osinsky, SVT Associates H. Seigneur, W. V. Schoenfeld, and L. Chernyak, University of Central Florida

Upload: yolanda-aguilera-villanueva

Post on 25-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

TEST

DRIVEN

DEVELOPM

ENT

GIANNIN

A COSTA

Page 2: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

¿QUÉ ES TDD?

El Desarrollo Dirigido por Tests (Test Driven Development)

Centrada en tres pilares fundamentales: La implementación de las funciones justas que el cliente

necesita y no más. La minimización del número de defectos que llegan al

software en fase de producción. La producción de software modular, altamente

reutilizable y preparado para el cambio.

Page 3: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

¿QUÉ ES TDD?

No se trata de escribir pruebas como locos, sino de diseñar

adecuadamente según los requisitos. Pasamos de pensar en implementar tareas, a pensar en

ejemplos

certeros que eliminen la ambigüedades. Con TDD se intenta traducir el requerimiento, hasta que el

número de

ejemplos sea suficiente como para describir la tarea sin lugar a

malinterpretaciones de ningún tipo. En TDD dejamos que la propia implementación de pequeños

ejemplos, en constantes iteraciones, haga emerger la arquitectura quenecesitamos usar.

Page 4: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

PASOS DE TDD

1.- Escribir la especificación del requisito (el ejemplo, el test) Una vez que tenemos claro cuál es el requisito, lo

expresamos en forma de código. Pensar primero en cómo queremos que sea la API, es decir,

tenemos que trazar antes de implementar. Tenemos que hacer el esfuerzo de imaginar cómo seria el

código como si ya estuviera implementado y cómo comprobaríamos que, efectivamente, hace lo que le pedimos que haga.

Page 5: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

PASOS DE TDD

2.- Implementar el código según dicho ejemplo

Teniendo el ejemplo escrito, codificamos lo mínimo necesario para que se cumpla, para que el test pase.

Lo primordial es no implementar nada más que lo estrictamente obligatorio para cumplir la especificación actual.

Muchas veces vendrán a la mente dudas sobre el comportamiento ante distintas entradas (los distintos flujos condicionales). La solución a esto es anotar las preguntas que nos han surgido en un lugar al margen para convertirlas en especificaciones que se retomaran en posteriores iteraciones.

Page 6: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

PASOS DE TDD

3.- Refactorizar para eliminar duplicidad y hacer mejoras.

Según Martín Fowler, refactorizar es "modificar el diseño sin alterar su comportamiento“Rastrear el código (también el del test) en busca de líneas duplicadas y las eliminarlas. Revisar que el código cumpla con ciertos principios de diseño (S.O.L.I.D) y refactorizamos para que así sea.La clave de una buena refactorización es hacerlo en pasitos muy pequeños. Se hace un cambio, se ejecutan todos los tests y, si todo sigue funcionando, se hace otro pequeño cambio.

Page 7: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

7

3.- Refactorizar para eliminar duplicidad y hacer mejoras.

• Mejorar el código existente

• Elevar la flexibilidad – tolerancia al cambio

Código Spaghetti vs Código Raviol

Entregar más rápido Menos depuración

PASOS DE TDD

Page 8: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

¿QUÉ ES TDD?

Dos reglas importantes:

• Nunca escribir una línea de código a menos quetengamos un test. Los tests representan losrequerimientos que el código debe satisfacer, si no

hayrequerimiento es porque no hay nada que

implementar.

• Eliminar duplicación de código.

Page 9: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

9

CODIFICAR - REFACTORIZAR

Dos Sombreros

Uno para codificar

Otro para refactorizar

Dos Objetivos

Cuando codificamos, agregamos nueva funcionalidad

Cuando refactorizamos, sólo mejoramos el diseño del código.

Cuando hacemos que la prueba pase, sólo codificamos.

Page 10: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

TDD IMPLICA DISEÑO SIMPLE

Nuestro código debe satisfacer los requerimientos (tests)

ni menos ni más.

Si no escribimos el código necesario para satisfacer los

requerimientos no estamos cumpliendo con lo solicitado,

si escribimos de más agregamos complejidad innecesaria

que luego hay que mantener.

Page 11: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

TDD IMPLICA DISEÑO SIMPLE

Guías para lograr ni menos ni más:El código es apropiado para quien está dirigido.

El código pasa todos los tests.El código comunica todo lo necesario.El código tiene la menor cantidad de clases.El código tiene la menor cantidad de métodos.

Page 12: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

EL PROCESO DE TDD

Armar una lista de tests. Esto permite describir losrequerimientos de forma no ambigua e indicar el scopede los mismos.• Red• Green• RefactorEl proceso se debe realizar en pasos pequeños lo que

permitedeterminar rápidamente donde cometimos un error en

casode hacerlo.

Page 13: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

EL PROCESO DE TDD

1.- Escribir el código asociado a un test.2.-Compilar el código asociado al test. (no compila

porqueaún no se ha implementado)3.-Implementar sólo lo suficiente para que el código

escritocompile.4.- Correr el test y ver si falla.5.- Implementar sólo lo suficiente para que el test pase.6.- Correr el test y ver que efectivamente pasa.7.- Refactorizar para aclarar y eliminar duplicación.8.- Repetir con todos los tests de la lista.

Page 14: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

14

BENEFICIOS DE TDD

• No hay código sin pruebas asociadas

• El código se origina y permanece sólido

• Las pruebas perduran

• Las pruebas son documentación

• Efecto psicológico

Page 15: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

HERRAMIENTAS

xUnit (JUnit, NUnit, DbUnit, HttpUnit, etc.)

Easy Mock

JMock

TestNG

Selenium

Page 16: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

BDD (BEHAVIOR DRIVEN DEVELOPMENT)

El Desarrollo Guiado por el Comportamiento, es un proceso que amplia las ideas de TDD y las combina con diseño de software y análisis de negocio para proporcionar un proceso a los desarrolladores, con la intención de mejorar el desarrollo del software.

En BDD no se prueban solo unidades o clases, se prueban escenarios y el comportamiento de las clases a la hora de cumplir dichos escenarios, los cuales pueden estar compuestos de varias clases.

Page 17: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

BDD (BEHAVIOR DRIVEN DEVELOPMENT)

Ayuda a centrarse en lo importante para el negocio.Pueden servir como base a las pruebas de aceptación

BDD usa una plantilla para poder pensar en el comportamiento de las pruebas del código:

En BDD se escriben primero el comportamiento esperado de la aplicación, haciéndolo demostrable y automatizándolo en pruebas de aceptación, lo que se denomina especificación activa.

Dado (Given): Un contexto inicialCuando (When):   Un evento se produceEntonces (Then):  Asegure algunos resultados.

Page 18: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

Historia de Usuario“Como un cliente, quiero sacar dinero del cajero automático”

Hay varios escenarios a considerar.:• Que la cuenta tenga saldo.• Que monto un supere el límite de crédito.

Escenario 1: Cuenta tiene crédito

Dado que la cuenta posee créditoY la tarjeta es válidaY el cajero automático tiene dineroCuando el cliente pide dineroEntonces, asegurare que la cuenta sea debitadaY asegure que el dinero sea entregadoY asegure que la tarjeta sea devuelta.

BDD (BEHAVIOR DRIVEN DEVELOPMENT)

Page 19: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

CUCUMBER

Page 20: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

ATDD

Las pruebas de aceptación son escritas ANTES de la funcionalidad. Siguiendo los siguientes pasos:

Tome una historia de usuario Escriba las pruebas de aceptación en el lenguaje de dominio del cliente Automatice las pruebas de aceptaciónImplemente la funcionalidad.

Page 21: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

El ciclo ATDD consta de 4 fases:

1. Discusión: En las reuniones de planeación, se discute las HU que se van abordar y lo queSe espera de cada una de ellas.

2. Destilar:  Una vez se han discutido las pruebas funcionales de aceptación y el comportamiento esperado, se deben capturar en formato de pruebas, para posteriormente ser aplicadas.

3. Desarrollar el código: Se debe abordar el desarrollo del código.

4. Producir un Demo: Con frecuencia se debe integrar el código producido con el finde producir una versión preliminar y aplicarle el set de pruebas diseñado previamente.Si una o varias de las pruebas fallan, se vuelve al proceso de codificación para hacer los ajustes correspondientes

ATDD

Page 22: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

Herramientas ATDD TucídidesEspectacularFitNesseConcordion 

ATDD

Page 23: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

RELACIÓN TDD Y ATDD

Page 24: TEST DRIVEN DEVELOPMENT GIANNINA COSTA. ¿QUÉ ES TDD? El Desarrollo Dirigido por Tests (Test Driven Development) Centrada en tres pilares fundamentales:

NIVELES DE PRUEBAS