TOI  Test-Driven Development (TDD) <ul><ul><li>Autores </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul><ul><ul><...
Resumen del TOI “ SÓLO ESCRIBIR CÓDIGO PARA ARREGLAR UN TEST QUE FALLA”
GRACIAS
Es un proceso 3 : REFACTOR 2 : ESCRIBIR CÓDIGO 1 : ESCRIBIR UN TEST
Pros y cons de usar TDD <ul><ul><li>HAY QUE CONTAR CON EL ESFUERZO EXTRA DE HACER Y MANTENER LOS TESTS </li></ul></ul><ul>...
¿Realmente es más esfuerzo? http://blog.objectmentor.com/articles/2007/09/30/why-you-have-time-for-tdd-but-may-not-know-it...
Buena práctica “ TDD incluye pruebas unitarias y funcionales automatizadas. Ambas se escriben ANTES que el código que espe...
Buena práctica http://homepage.mac.com/keithray/blog/2006/11/19#JanesRuleDishWasher
<ul><li>La  CALIDAD  es el resultado de acciones concretas: </li></ul><ul><li>Meticulosidad, procedimientos, metodología.....
Calidad LA CALIDAD ES  GRATIS PERO TIENE UN COSTE
Acceptance TDD Acceptance Test-Driven User Story DEFINITION OF DONE
¿Qué tiene que ver con IC? <ul><li>Un proceso de Integración Continua consiste en compilar todo el código y ejecutar los t...
LAB-1 : TestFirstChallenge <ul><ul><li>EJEMPLO PARA INTRODUCIR TDD </li></ul></ul><ul><ul><li>PRUEBA DE JUNIORS EN DEGESYS...
LAB-1 : TestFirstChallenge <ul><ul><li>ES FÁCIL PORQUE NOS DAN LOS TESTS: LO VERDADERAMENTE DIFÍCIL ES DISEÑAR LOS TESTS <...
LAB-2 : MoneyExample <ul><ul><li>TOMADO DEL LIBRO DE KENT BECK </li></ul></ul><ul><ul><li>MULTIMONEDA </li></ul></ul>
LAB-2 : MoneyExample <ul><li>REQUISITOS: </li></ul><ul><li>Si el cambio es 2:1, 5$ + 10€ = 10$ </li></ul><ul><li>5$ * 2 = ...
LAB-2 (testMultiplication) @Test public   void  testMultiplication() { Dollar  five =  new  Dollar(5); assertEquals ( new ...
LAB-2 (testEquality) @Test public   void  testMultiplication() { Dollar  five =  new  Dollar(5); assertEquals ( new  Dolla...
LAB-2 (testMultiplication) @Test public   void  testMultiplication() { Dollar  five =  new  Dollar(5); assertEquals ( new ...
LAB-2 (testEuroMultiplication) @Test public   void  testEuroMultiplication() { Euro  five =  new  Euro(5); assertEquals ( ...
LAB-2 (testEuroMultiplication) assertFalse ( new  Euro(5).equals(new Dollar(5))); <ul><ul><li>5 €  * 2 = 10 € </li></ul></...
LAB-2 (testSimpleAdditionSameCurrency) @Test public   void  testSimpleAdditionSameCurrency() { Money sumOfDollars =  new  ...
LAB-2 (testBankExchangeRate) @Test public   void  testBankExchangeRate() { Bank bank =  new  Bank(); bank.addRate(Euro. cl...
LAB-2 (testBankExchangeRate) @Test public   void  testBankExchangeEurosToDollars() { Bank bank =  new  Bank(); bank.addRat...
LAB-2 (testSimpleAdditionDifferentCurrency) @Test public   void  testSimpleAdditionDifferentCurrency() { Bank bank =  new ...
Conceptos (I) FIXTURE COLABORADORES
Conceptos (II) DOBLES DE PRUEBAS PROBAR EL ESTADO vs PROBAR LAS INTERACCIONES http://fry/dokeos/courses/TOIIPC003   http:/...
Temas relacionados <ul><li>¿Cómo diseñar pensando en las pruebas? </li></ul><ul><li>Patrones de pruebas </li></ul><ul><li>...
TDD en diferentes entornos <ul><li>Web </li></ul><ul><ul><li>TOI “Mocks en JSF” </li></ul></ul><ul><ul><li>TOI “Selenium” ...
Bibliografía recomendada
Enlaces http://www.theserverside.com/tt/articles/article.tss?l=JMockTestDrivenDev   http://www.jmock.org/oopsla2004.pdf   ...
GRACIAS
Upcoming SlideShare
Loading in …5
×

Toi Tdd 20080409

575 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
575
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Toi Tdd 20080409

    1. 1. TOI Test-Driven Development (TDD) <ul><ul><li>Autores </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul><ul><ul><li>INICIATIVA PRUEBAS DE CALIDAD </li></ul></ul><ul><ul><li>Alcobendas, 09/04/2008 </li></ul></ul>
    2. 2. Resumen del TOI “ SÓLO ESCRIBIR CÓDIGO PARA ARREGLAR UN TEST QUE FALLA”
    3. 3. GRACIAS
    4. 4. Es un proceso 3 : REFACTOR 2 : ESCRIBIR CÓDIGO 1 : ESCRIBIR UN TEST
    5. 5. Pros y cons de usar TDD <ul><ul><li>HAY QUE CONTAR CON EL ESFUERZO EXTRA DE HACER Y MANTENER LOS TESTS </li></ul></ul><ul><ul><li>SE REDUCE EL COSTE PORQUE SE REDUCEN LOS ERRORES </li></ul></ul><ul><ul><li>SE DEFINEN LOS REQUISITOS (NO SE QUEDAN OLVIDADOS EN UN DOCUMENTO) </li></ul></ul><ul><ul><li>SE MANTIENEN LOS REQUISITOS (CADA VEZ QUE SE CAMBIA UN REQUISITO HAY QUE CAMBIAR O AÑADIR AL MENOS UN TEST) </li></ul></ul>
    6. 6. ¿Realmente es más esfuerzo? http://blog.objectmentor.com/articles/2007/09/30/why-you-have-time-for-tdd-but-may-not-know-it-yet Evolución ideal del proyecto Evolución REAL del proyecto Evolución del proyecto haciendo TDD + IC
    7. 7. Buena práctica “ TDD incluye pruebas unitarias y funcionales automatizadas. Ambas se escriben ANTES que el código que especifican. Las pruebas unitarias se escriben segundos antes, y las pruebas de acpetación horas o incluso días antes. Es posible ganar lo mismo haciendo las pruebas DESPUÉS. Sin embargo, es mucho más difícil. Las pruebas que se escriben ANTES no están tan influidas por la implementación. Las pruebas de aceptación ANTES de implementar son especificaciones de lo que debería ser. Las pruebas de aceptación DESPUÉS de implementar son frecuentemente especificaciones de lo que es.” http://blog.objectmentor.com/articles/2007/09/30/why-you-have-time-for-tdd-but-may-not-know-it-yet
    8. 8. Buena práctica http://homepage.mac.com/keithray/blog/2006/11/19#JanesRuleDishWasher
    9. 9. <ul><li>La CALIDAD es el resultado de acciones concretas: </li></ul><ul><li>Meticulosidad, procedimientos, metodología... </li></ul><ul><li>Pruebas, pruebas y más pruebas </li></ul><ul><li>Profesionalidad </li></ul><ul><li>Buscamos la calidad porque : </li></ul><ul><li>El cliente está satisfecho (y un cliente satisfecho es un cliente fiel ) </li></ul><ul><li>Reducimos costes de mantenimiento (el coste de un error después de la entrega puede ser del orden de 30 veces más que de resolverlo durante el desarrollo o 100 veces más que de resolverlo durante el análisis). </li></ul><ul><li>Arreglar defectos de otro “no es divertido” </li></ul>CALIDAD
    10. 10. Calidad LA CALIDAD ES GRATIS PERO TIENE UN COSTE
    11. 11. Acceptance TDD Acceptance Test-Driven User Story DEFINITION OF DONE
    12. 12. ¿Qué tiene que ver con IC? <ul><li>Un proceso de Integración Continua consiste en compilar todo el código y ejecutar los tests. </li></ul><ul><li>Si escribimos los tests antes que el código , siempre tendremos un test para cada funcionalidad desarrollada. (No debemos olvidar este principio). Por cierto, sólo debemos subir código &quot;hecho-hecho&quot; . </li></ul>
    13. 13. LAB-1 : TestFirstChallenge <ul><ul><li>EJEMPLO PARA INTRODUCIR TDD </li></ul></ul><ul><ul><li>PRUEBA DE JUNIORS EN DEGESYS </li></ul></ul>
    14. 14. LAB-1 : TestFirstChallenge <ul><ul><li>ES FÁCIL PORQUE NOS DAN LOS TESTS: LO VERDADERAMENTE DIFÍCIL ES DISEÑAR LOS TESTS </li></ul></ul><ul><ul><li>LAB-2 </li></ul></ul><ul><ul><li>http://www.xp123.com/xplor/xp0201/index.shtml </li></ul></ul><ul><ul><li>http://wiki/index.php/TestFirstChallenge </li></ul></ul>
    15. 15. LAB-2 : MoneyExample <ul><ul><li>TOMADO DEL LIBRO DE KENT BECK </li></ul></ul><ul><ul><li>MULTIMONEDA </li></ul></ul>
    16. 16. LAB-2 : MoneyExample <ul><li>REQUISITOS: </li></ul><ul><li>Si el cambio es 2:1, 5$ + 10€ = 10$ </li></ul><ul><li>5$ * 2 = 10$ </li></ul>
    17. 17. LAB-2 (testMultiplication) @Test public void testMultiplication() { Dollar five = new Dollar(5); assertEquals ( new Dollar(10), five.times(2)); } <ul><ul><li>5$ * 2 = 10$ </li></ul></ul><ul><li>Inicialmente no compila, entonces creamos la clase Dollar </li></ul><ul><li>Necesitamos un constructor con parámetro int </li></ul><ul><li>Necesitamos un método public Dollar times ( int times ); </li></ul><ul><li>Necesitamos implementar equals </li></ul>
    18. 18. LAB-2 (testEquality) @Test public void testMultiplication() { Dollar five = new Dollar(5); assertEquals ( new Dollar(10), five.times(2)); } @Test public void testEquality() { assertTrue ( new Dollar(5).equals( new Dollar(5))); assertFalse ( new Dollar(5).equals( new Dollar(6))); } <ul><ul><li>5$ * 2 = 10$ </li></ul></ul><ul><li>Podíamos implementar equals devolviendo true </li></ul>
    19. 19. LAB-2 (testMultiplication) @Test public void testMultiplication() { Dollar five = new Dollar(5); assertEquals ( new Dollar(10), five.times(2)); assertEquals ( new Dollar(15), five.times(3)); } <ul><ul><li>5$ * 2 = 10$ </li></ul></ul><ul><li>Triangulación: podíamos pasar el test devolviendo new Dollar(10) </li></ul>
    20. 20. LAB-2 (testEuroMultiplication) @Test public void testEuroMultiplication() { Euro five = new Euro(5); assertEquals ( new Euro(10), five.times(2)); assertEquals ( new Euro(15), five.times(3)); } <ul><ul><li>5 € * 2 = 10 € </li></ul></ul><ul><li>Añadimos también asserts en testEquality por simetría (y porque podríamos hacer trampa) </li></ul>
    21. 21. LAB-2 (testEuroMultiplication) assertFalse ( new Euro(5).equals(new Dollar(5))); <ul><ul><li>5 € * 2 = 10 € </li></ul></ul><ul><li>Podemos refactorizar ahora... o no, pero no nos quedará más remedio cuando añadamos el siguiente assert: </li></ul>
    22. 22. LAB-2 (testSimpleAdditionSameCurrency) @Test public void testSimpleAdditionSameCurrency() { Money sumOfDollars = new Dollar(5).plus( new Dollar(5)); assertEquals ( new Dollar(10), sumOfDollars); } <ul><li>Triangulación: esto es un ejemplo, pero es una buena práctica añadir tests para evitar a los “tahures”. </li></ul><ul><li>Podemos implementar el método plus() en la clase abstracta, pero sería una mala práctica (habríamos desarrollado código sin un requisito que lo respalde, lo que se demuestra cuando añadimos un test y sigue en verde ) </li></ul><ul><ul><li>5$ + 5$ = 10$ </li></ul></ul>
    23. 23. LAB-2 (testBankExchangeRate) @Test public void testBankExchangeRate() { Bank bank = new Bank(); bank.addRate(Euro. class ,Dollar. class , new Double(2)); assertEquals ( new Double(2), bank.getRate(Euro. class ,Dollar. class )); bank.addRate(Euro. class ,Dollar. class , new Double(3)); assertEquals ( new Double(3), bank.getRate(Euro. class ,Dollar. class )); } <ul><li>Necesitamos un colaborador: podemos implementarlo o usar un doble. </li></ul><ul><ul><li>Si el cambio es 2:1 , 5$ + 10€ = 10$ </li></ul></ul>
    24. 24. LAB-2 (testBankExchangeRate) @Test public void testBankExchangeEurosToDollars() { Bank bank = new Bank(); bank.addRate(Euro. class ,Dollar. class , new Double(2)); Money result = bank.exchange( new Euro(10), Dollar. class ); assertEquals ( new Dollar(5), result); } <ul><li>Implementar Bank.exchange implica implementar Money.createInstance </li></ul><ul><li>Y EL TEST DE Money.createInstance </li></ul><ul><ul><li>Si el cambio es 2:1 , 5$ + 10€ = 10$ </li></ul></ul>
    25. 25. LAB-2 (testSimpleAdditionDifferentCurrency) @Test public void testSimpleAdditionDifferentCurrency() { Bank bank = new Bank(); bank.addRate(Euro. class ,Dollar. class , new Double(2)); Money result = bank.exchange( new Euro(10), Dollar. class ). plus( new Dollar(5)); assertEquals ( new Dollar(10), result); bank.addRate(Dollar. class ,Euro. class , new Double(0.5)); result = bank.exchange( new Dollar(5), Euro. class ). plus( new Euro(3)); assertEquals ( new Euro(13), result); } <ul><li>Hay que llevar plus(Dollar) y plus(Euro) a la clase Money y luego podremos hacer refactor [Lo dejo como ejercicio] </li></ul><ul><ul><li>Si el cambio es 2:1, 5$ + 10€ = 10$ </li></ul></ul>
    26. 26. Conceptos (I) FIXTURE COLABORADORES
    27. 27. Conceptos (II) DOBLES DE PRUEBAS PROBAR EL ESTADO vs PROBAR LAS INTERACCIONES http://fry/dokeos/courses/TOIIPC003 http://flexo/svnRepo/TOI/TOI-DoblesPrueba
    28. 28. Temas relacionados <ul><li>¿Cómo diseñar pensando en las pruebas? </li></ul><ul><li>Patrones de pruebas </li></ul><ul><li>¿Cómo hacer TDD con código ya existente? </li></ul>
    29. 29. TDD en diferentes entornos <ul><li>Web </li></ul><ul><ul><li>TOI “Mocks en JSF” </li></ul></ul><ul><ul><li>TOI “Selenium” </li></ul></ul><ul><li>Persistencia </li></ul><ul><ul><li>TOI “Pruebas de persistencia” </li></ul></ul><ul><li>Negocio </li></ul><ul><ul><li>TOI “Pruebas FIT” </li></ul></ul><ul><li>Aunque los TOIs no se centren en TDD: no olvidemos por qué “los tests primero” </li></ul>
    30. 30. Bibliografía recomendada
    31. 31. Enlaces http://www.theserverside.com/tt/articles/article.tss?l=JMockTestDrivenDev http://www.jmock.org/oopsla2004.pdf http://www.theserverside.com/tt/articles/article.tss?l=DesigntoUnitTest http://www.ibm.com/developerworks/webservices/library/co-single.html http://www.testearly.com/ http://www.mockobjects.com/ http://www.mockobjects.com/labels/listening%20to%20the%20tests.html
    32. 32. GRACIAS

    ×