SlideShare una empresa de Scribd logo
1 de 32
Kata con Python

                 Python-Sevilla


@IWT2_Javier
Objetivos


             • Resolver la kata Tenis
               con TDD y Python
             • Exponer errores y ver la
               manera de detectarlos.
             • Comparar distintas
               soluciones
               desarrolladas con TDD.



Objetivos
                                          2
Índice

         1. Repaso de TDD
         2. Kata Tennis.
         3. PowerPoint-Driven
             Development.
         4. Primer diseño (y pruebas).
         5. Continuamos.
         6. Refactorizar la clase Player.
         7. El Partido de Tenis.
         8. Random tennis
         9. Conclusiones.
Índice   10. Otras soluciones.
         11. Extra                    3
Kata: Tennis




               4
Cata - Tenis

                         Reglas
                         • un jugador comienza con puntación 0.
                         • Los puntos se ganan en esta secuencia: 0 -> 15 -> 30 -
                            > 40.
                         • Si un jugador consigue 40 y puntúa de nuevo, el
                            jugador gana el juego si el otro no tiene 40 puntos.
                         • Si los dos jugadores tienen al mismo tiempo 40
                            puntos, se llama "iguales" (deuce en inglés)
                         • Puntuar durante iguales, da al jugador "ventaja". Si el
                            otro jugador puntúa en ese momento, la puntuación
                            vuelve a iguales.
                         • Si un jugador tiene "ventaja" y puntúa de nuevo, el
                            jugador gana el juego.


http://www.solveet.com/exercises/Kata-Tennis/13                               5
Cata - Tenis
                         Metas:
                         • Los jugadores deben poder
                           ganar puntos.
                         • El juego debe terminar con
                           un ganador.
                         • Debes de manejar la
                           casuística de "iguales"
                         • Después de terminar el
                           juego, debe determinarse
                           quién es el ganador.
                         • Debe ser posible obtener la
Aplica TDD de manera       puntuación de cualquier de
       estricta.           los jugadores en cualquier
                           momento del partido.
                                                     6
PowerPoint-Driven
   Development




                    7
La primera prueba

   No intentes hacerlo todo de
             golpe.

   • Elige algo pequeño y
     simple.
   • Escribe una prueba que lo
     muestre.
   • Codifica la prueba.
   • Por ejemplo: pasar de 0 a
     15 o el match aún no ha
     terminado

                                 8
La Segunda Prueba

         ¿…y ahora?
   • ¿Cuál es la prueba que te
     hace avanzar más?
   • Por ejemplo puedes
     continuar con las
     puntuaciones hasta la
     casuística de los 40.
   • Recuerda refactorizar.

                                 9
Ha pasado el tiempo

          ¿atascado?
    • No te preocupes si tienes
      que volver a empezar.
    • No es una pérdida de
      tiempo. Ya verás como la
      siguiente vez te sale una
      solución MUCHO MEJOR.



                                  10
Esto se acaba

  ¿Has terminado?
• ¿Y si intentas simular una
  partida de tenis con
  números aleatorios?.

 ¿No has terminado?
• Refactoriza y que quede
  bonito
                               11
Random Tenis




               12
Random Tennis

• ¿Y si se calcula aleatoriamente el jugador que gana?
• ¿Y si ejecuto muchos partidos seguimos y
  compruebo que todo funciona correctamente?
• Esto ya no son pruebas unitarias.
• Si podemos hacerlo sin cambiar una coma de nuestro
  código es una buena indicación (si no, intentamos
  documentar los problemas con pruebas y corregimos
  nuestro código)
                                     Vamos a hacerlo
Random Tenis




RandomPlay aún no
    está hehco
Random Tenis

                                                            Esto no es código de
                                                            producción ,sino de
                                                            pruebas




                Todo funciona a la primera




Por qué limitarnos a un único partido? Por qué no jugamos
10.000? Vamos a hacerlo
Random Tenis




Este test no debería de fallar si todo lo hicimos
        bien (y el test está bien escrito)
Random Tenis




                            Ooops, demasiado lento. No vale
                                para prueba unitaria.




Pues parece que funciona.
Otras soluciones




                   18
Otras soluciones

           TDD in Python in 5 minutes




Set

Score




                          TestSetWinning: 6 pruebas

                          TestScoreNames: 1 prueba

 http://css.dzone.com/articles/tdd-python-5-minutes
Otras soluciones

TDD in Python in 5 minutes
Otras soluciones

              Solveet. Kata TDD



Sin pruebas

Player

Método game




  https://github.com/andrewnix/Kata-Tennis-Python/
Otras soluciones




Método game
Otras Soluciones

           Solveet. Kata TDD

           Sin pruebas           Decorador         Método




https://github.com/andrewnix/Kata-Tennis-Python/
Otras Soluciones

           Solveet. Kata TDD

           Sin pruebas           Decorador         Método




https://github.com/andrewnix/Kata-Tennis-Python/
Otras Soluciones

           Solveet. Kata TDD



Pruebas a ojo


Game


Player
Otras Soluciones




Pruebas a ojo


Game


Player
Otras Soluciones

Solveet. Kata TDD
Actividades


                   • Consulta las solucioens
                     si pruebas
                   • ¿Crees que habrían
                     salido estas soluciones
                     haciendo TDD?
                   • ¿Serías capa de escribir
                     prueba spara ese código
                     tal cuál está escrito, sin
                     modificarlo?

Autoevalua TDD
                                             28
Extras




         29
Extras


• Repositorio GitHub:
  https://github.com/javierj/kata-dojous




   http://www.slideshare.net/Javier_J




                                        30
Extra


 Ejemplo de mocks en Python

http://iwt2-
javierj.tumblr.com/post/36695988608/mocks-en-python-
previa-python-tdd

Ejemplo de Behave en Python

http://iwt2-javierj.tumblr.com/post/36762766836/atdd-
bdd-con-python-y-behave-previa-python-tdd
                                                    31
Python-Sevilla



     Python_Sevilla / #PySVQ




http://www.linkedin.com/groups/PythonSevilla-4685758




    https://groups.google.com/forum/?fromgroups=#!forum/python-sevilla.

Más contenido relacionado

Similar a Kata con Python

TDD y Python
TDD y PythonTDD y Python
TDD y PythonJavier_J
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development TechniquesEduardo Turiño
 
Coding Dojos Agile Week - martes 03/07 .NET básico
Coding Dojos Agile Week - martes 03/07 .NET básicoCoding Dojos Agile Week - martes 03/07 .NET básico
Coding Dojos Agile Week - martes 03/07 .NET básicoJuan José Fuchs Cerdeña
 
Taller PyConEs 2016: Introducción a TDD
Taller PyConEs 2016: Introducción a TDDTaller PyConEs 2016: Introducción a TDD
Taller PyConEs 2016: Introducción a TDDAlea Soluciones, S.L.
 
Alianza PRO - Certificación de Testing con Abstracta Academy charla sobre te...
Alianza PRO - Certificación de Testing con Abstracta Academy  charla sobre te...Alianza PRO - Certificación de Testing con Abstracta Academy  charla sobre te...
Alianza PRO - Certificación de Testing con Abstracta Academy charla sobre te...Federico Toledo
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilagilenavarra
 
"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturino"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturinowebcat
 
2 instrucciones de juegos
2 instrucciones de juegos2 instrucciones de juegos
2 instrucciones de juegosUruguay Educa
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDDAlfredo Chavez
 
GCV 05 Control de calidad: Específico para videojuegos - Gestión de la Calida...
GCV 05 Control de calidad: Específico para videojuegos - Gestión de la Calida...GCV 05 Control de calidad: Específico para videojuegos - Gestión de la Calida...
GCV 05 Control de calidad: Específico para videojuegos - Gestión de la Calida...Federico Peinado
 
Introducción a Programa-me - Concurso español de programacion
Introducción a Programa-me - Concurso español de programacionIntroducción a Programa-me - Concurso español de programacion
Introducción a Programa-me - Concurso español de programacionJosé Ráez Rodríguez
 
Videojuegos en Javascript con TDD y Jasmine
Videojuegos en Javascript con TDD y JasmineVideojuegos en Javascript con TDD y Jasmine
Videojuegos en Javascript con TDD y JasmineJavier_J
 
AgilePerú - Coding Dojo Week
AgilePerú - Coding Dojo WeekAgilePerú - Coding Dojo Week
AgilePerú - Coding Dojo WeekArmando Picón Z.
 
Introducción a Programa-me - Concurso español de programacion (actualizado)
Introducción a Programa-me - Concurso español de programacion (actualizado) Introducción a Programa-me - Concurso español de programacion (actualizado)
Introducción a Programa-me - Concurso español de programacion (actualizado) José Ráez Rodríguez
 
GamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
GamwUS. Desarrollo Diriguido por Pruebas y VideojuegosGamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
GamwUS. Desarrollo Diriguido por Pruebas y VideojuegosJavier_J
 

Similar a Kata con Python (20)

TDD y Python
TDD y PythonTDD y Python
TDD y Python
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques
 
Coding Dojos Agile Week - martes 03/07 .NET básico
Coding Dojos Agile Week - martes 03/07 .NET básicoCoding Dojos Agile Week - martes 03/07 .NET básico
Coding Dojos Agile Week - martes 03/07 .NET básico
 
Pcffl3
Pcffl3Pcffl3
Pcffl3
 
Taller PyConEs 2016: Introducción a TDD
Taller PyConEs 2016: Introducción a TDDTaller PyConEs 2016: Introducción a TDD
Taller PyConEs 2016: Introducción a TDD
 
Alianza PRO - Certificación de Testing con Abstracta Academy charla sobre te...
Alianza PRO - Certificación de Testing con Abstracta Academy  charla sobre te...Alianza PRO - Certificación de Testing con Abstracta Academy  charla sobre te...
Alianza PRO - Certificación de Testing con Abstracta Academy charla sobre te...
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvil
 
"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturino"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturino
 
Pcffl5
Pcffl5Pcffl5
Pcffl5
 
Pcffl6
Pcffl6Pcffl6
Pcffl6
 
2 instrucciones de juegos
2 instrucciones de juegos2 instrucciones de juegos
2 instrucciones de juegos
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDD
 
GCV 05 Control de calidad: Específico para videojuegos - Gestión de la Calida...
GCV 05 Control de calidad: Específico para videojuegos - Gestión de la Calida...GCV 05 Control de calidad: Específico para videojuegos - Gestión de la Calida...
GCV 05 Control de calidad: Específico para videojuegos - Gestión de la Calida...
 
Refactoring Golf
Refactoring GolfRefactoring Golf
Refactoring Golf
 
Introducción a Programa-me - Concurso español de programacion
Introducción a Programa-me - Concurso español de programacionIntroducción a Programa-me - Concurso español de programacion
Introducción a Programa-me - Concurso español de programacion
 
Videojuegos en Javascript con TDD y Jasmine
Videojuegos en Javascript con TDD y JasmineVideojuegos en Javascript con TDD y Jasmine
Videojuegos en Javascript con TDD y Jasmine
 
Baby steps to tdd v3
Baby steps to tdd v3Baby steps to tdd v3
Baby steps to tdd v3
 
AgilePerú - Coding Dojo Week
AgilePerú - Coding Dojo WeekAgilePerú - Coding Dojo Week
AgilePerú - Coding Dojo Week
 
Introducción a Programa-me - Concurso español de programacion (actualizado)
Introducción a Programa-me - Concurso español de programacion (actualizado) Introducción a Programa-me - Concurso español de programacion (actualizado)
Introducción a Programa-me - Concurso español de programacion (actualizado)
 
GamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
GamwUS. Desarrollo Diriguido por Pruebas y VideojuegosGamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
GamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
 

Más de Javier_J

Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebasCodemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebasJavier_J
 
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...Javier_J
 
Introducción a Pruebas en Android
Introducción a Pruebas en AndroidIntroducción a Pruebas en Android
Introducción a Pruebas en AndroidJavier_J
 
GameUs - Herramientas de Desarrollo de Videojuegos
GameUs - Herramientas de Desarrollo de VideojuegosGameUs - Herramientas de Desarrollo de Videojuegos
GameUs - Herramientas de Desarrollo de VideojuegosJavier_J
 
Herramientas para el Desarrollo de Videojuegos
Herramientas para el Desarrollo de VideojuegosHerramientas para el Desarrollo de Videojuegos
Herramientas para el Desarrollo de VideojuegosJavier_J
 
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012Javier_J
 
AdV - Programación para no Programadores
AdV - Programación para no ProgramadoresAdV - Programación para no Programadores
AdV - Programación para no ProgramadoresJavier_J
 
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: SokobanIWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: SokobanJavier_J
 
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: SokobanIWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: SokobanJavier_J
 
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012Javier_J
 
Introducción a IWT2 Dojo US. 5 noviembre 2.012
Introducción a IWT2 Dojo US. 5 noviembre 2.012Introducción a IWT2 Dojo US. 5 noviembre 2.012
Introducción a IWT2 Dojo US. 5 noviembre 2.012Javier_J
 

Más de Javier_J (11)

Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebasCodemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
 
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
 
Introducción a Pruebas en Android
Introducción a Pruebas en AndroidIntroducción a Pruebas en Android
Introducción a Pruebas en Android
 
GameUs - Herramientas de Desarrollo de Videojuegos
GameUs - Herramientas de Desarrollo de VideojuegosGameUs - Herramientas de Desarrollo de Videojuegos
GameUs - Herramientas de Desarrollo de Videojuegos
 
Herramientas para el Desarrollo de Videojuegos
Herramientas para el Desarrollo de VideojuegosHerramientas para el Desarrollo de Videojuegos
Herramientas para el Desarrollo de Videojuegos
 
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
 
AdV - Programación para no Programadores
AdV - Programación para no ProgramadoresAdV - Programación para no Programadores
AdV - Programación para no Programadores
 
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: SokobanIWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
 
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: SokobanIWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
 
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
 
Introducción a IWT2 Dojo US. 5 noviembre 2.012
Introducción a IWT2 Dojo US. 5 noviembre 2.012Introducción a IWT2 Dojo US. 5 noviembre 2.012
Introducción a IWT2 Dojo US. 5 noviembre 2.012
 

Kata con Python

  • 1. Kata con Python Python-Sevilla @IWT2_Javier
  • 2. Objetivos • Resolver la kata Tenis con TDD y Python • Exponer errores y ver la manera de detectarlos. • Comparar distintas soluciones desarrolladas con TDD. Objetivos 2
  • 3. Índice 1. Repaso de TDD 2. Kata Tennis. 3. PowerPoint-Driven Development. 4. Primer diseño (y pruebas). 5. Continuamos. 6. Refactorizar la clase Player. 7. El Partido de Tenis. 8. Random tennis 9. Conclusiones. Índice 10. Otras soluciones. 11. Extra 3
  • 5. Cata - Tenis Reglas • un jugador comienza con puntación 0. • Los puntos se ganan en esta secuencia: 0 -> 15 -> 30 - > 40. • Si un jugador consigue 40 y puntúa de nuevo, el jugador gana el juego si el otro no tiene 40 puntos. • Si los dos jugadores tienen al mismo tiempo 40 puntos, se llama "iguales" (deuce en inglés) • Puntuar durante iguales, da al jugador "ventaja". Si el otro jugador puntúa en ese momento, la puntuación vuelve a iguales. • Si un jugador tiene "ventaja" y puntúa de nuevo, el jugador gana el juego. http://www.solveet.com/exercises/Kata-Tennis/13 5
  • 6. Cata - Tenis Metas: • Los jugadores deben poder ganar puntos. • El juego debe terminar con un ganador. • Debes de manejar la casuística de "iguales" • Después de terminar el juego, debe determinarse quién es el ganador. • Debe ser posible obtener la Aplica TDD de manera puntuación de cualquier de estricta. los jugadores en cualquier momento del partido. 6
  • 7. PowerPoint-Driven Development 7
  • 8. La primera prueba No intentes hacerlo todo de golpe. • Elige algo pequeño y simple. • Escribe una prueba que lo muestre. • Codifica la prueba. • Por ejemplo: pasar de 0 a 15 o el match aún no ha terminado 8
  • 9. La Segunda Prueba ¿…y ahora? • ¿Cuál es la prueba que te hace avanzar más? • Por ejemplo puedes continuar con las puntuaciones hasta la casuística de los 40. • Recuerda refactorizar. 9
  • 10. Ha pasado el tiempo ¿atascado? • No te preocupes si tienes que volver a empezar. • No es una pérdida de tiempo. Ya verás como la siguiente vez te sale una solución MUCHO MEJOR. 10
  • 11. Esto se acaba ¿Has terminado? • ¿Y si intentas simular una partida de tenis con números aleatorios?. ¿No has terminado? • Refactoriza y que quede bonito 11
  • 13. Random Tennis • ¿Y si se calcula aleatoriamente el jugador que gana? • ¿Y si ejecuto muchos partidos seguimos y compruebo que todo funciona correctamente? • Esto ya no son pruebas unitarias. • Si podemos hacerlo sin cambiar una coma de nuestro código es una buena indicación (si no, intentamos documentar los problemas con pruebas y corregimos nuestro código) Vamos a hacerlo
  • 15. Random Tenis Esto no es código de producción ,sino de pruebas Todo funciona a la primera Por qué limitarnos a un único partido? Por qué no jugamos 10.000? Vamos a hacerlo
  • 16. Random Tenis Este test no debería de fallar si todo lo hicimos bien (y el test está bien escrito)
  • 17. Random Tenis Ooops, demasiado lento. No vale para prueba unitaria. Pues parece que funciona.
  • 19. Otras soluciones TDD in Python in 5 minutes Set Score TestSetWinning: 6 pruebas TestScoreNames: 1 prueba http://css.dzone.com/articles/tdd-python-5-minutes
  • 20. Otras soluciones TDD in Python in 5 minutes
  • 21. Otras soluciones Solveet. Kata TDD Sin pruebas Player Método game https://github.com/andrewnix/Kata-Tennis-Python/
  • 23. Otras Soluciones Solveet. Kata TDD Sin pruebas Decorador Método https://github.com/andrewnix/Kata-Tennis-Python/
  • 24. Otras Soluciones Solveet. Kata TDD Sin pruebas Decorador Método https://github.com/andrewnix/Kata-Tennis-Python/
  • 25. Otras Soluciones Solveet. Kata TDD Pruebas a ojo Game Player
  • 26. Otras Soluciones Pruebas a ojo Game Player
  • 28. Actividades • Consulta las solucioens si pruebas • ¿Crees que habrían salido estas soluciones haciendo TDD? • ¿Serías capa de escribir prueba spara ese código tal cuál está escrito, sin modificarlo? Autoevalua TDD 28
  • 29. Extras 29
  • 30. Extras • Repositorio GitHub: https://github.com/javierj/kata-dojous http://www.slideshare.net/Javier_J 30
  • 31. Extra Ejemplo de mocks en Python http://iwt2- javierj.tumblr.com/post/36695988608/mocks-en-python- previa-python-tdd Ejemplo de Behave en Python http://iwt2-javierj.tumblr.com/post/36762766836/atdd- bdd-con-python-y-behave-previa-python-tdd 31
  • 32. Python-Sevilla Python_Sevilla / #PySVQ http://www.linkedin.com/groups/PythonSevilla-4685758 https://groups.google.com/forum/?fromgroups=#!forum/python-sevilla.