Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012
description
Transcript of Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012
![Page 1: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/1.jpg)
Kata con Python
Python-Sevilla
@IWT2_Javier
![Page 2: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/2.jpg)
2
• Resolver la kata Tenis con TDD y Python
• Exponer errores y ver la manera de detectarlos.
• Comparar distintas soluciones desarrolladas con TDD.
Objetivos
Objetivos
![Page 3: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/3.jpg)
3
1. Repaso de TDD2. 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 tennis9. Conclusiones.10. Otras soluciones.11. Extra
Índice
Índice
![Page 4: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/4.jpg)
4
Kata: Tennis
![Page 5: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/5.jpg)
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
![Page 6: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/6.jpg)
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 puntuación de cualquier de los jugadores en cualquier momento del partido.
Aplica TDD de manera estricta.
![Page 7: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/7.jpg)
7
PowerPoint-Driven Development
![Page 8: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/8.jpg)
8
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
La primera prueba
![Page 9: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/9.jpg)
9
¿…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.
La Segunda Prueba
![Page 10: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/10.jpg)
10
¿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.
Ha pasado el tiempo
![Page 11: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/11.jpg)
11
¿Has terminado?
• ¿Y si intentas simular una partida de tenis con números aleatorios?.
• Refactoriza y que quede bonito
Esto se acaba
¿No has terminado?
![Page 12: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/12.jpg)
12
Random Tenis
![Page 13: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/13.jpg)
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
![Page 14: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/14.jpg)
Random Tenis
RandomPlay aún no está hehco
![Page 15: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/15.jpg)
Random Tenis
Todo funciona a la primera
Por qué limitarnos a un único partido? Por qué no jugamos 10.000? Vamos a hacerlo
Esto no es código de producción ,sino de pruebas
![Page 16: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/16.jpg)
Random Tenis
Este test no debería de fallar si todo lo hicimos bien (y el test está bien escrito)
![Page 17: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/17.jpg)
Random Tenis
Ooops, demasiado lento. No vale para prueba unitaria.
Pues parece que funciona.
![Page 18: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/18.jpg)
18
Otras soluciones
![Page 19: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/19.jpg)
Otras soluciones
http://css.dzone.com/articles/tdd-python-5-minutes
TDD in Python in 5 minutes
Set
Score
TestSetWinning: 6 pruebas
TestScoreNames: 1 prueba
![Page 20: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/20.jpg)
Otras soluciones
TDD in Python in 5 minutes
![Page 21: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/21.jpg)
Otras soluciones
https://github.com/andrewnix/Kata-Tennis-Python/
Solveet. Kata TDD
Player
Método game
Sin pruebas
![Page 22: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/22.jpg)
Otras soluciones
Método game
![Page 23: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/23.jpg)
Otras Soluciones
https://github.com/andrewnix/Kata-Tennis-Python/
Solveet. Kata TDD
Decorador MétodoSin pruebas
![Page 24: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/24.jpg)
Otras Soluciones
https://github.com/andrewnix/Kata-Tennis-Python/
Solveet. Kata TDD
Decorador MétodoSin pruebas
![Page 25: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/25.jpg)
Otras Soluciones
Solveet. Kata TDD
Game
Player
Pruebas a ojo
![Page 26: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/26.jpg)
Otras Soluciones
Game
Player
Pruebas a ojo
![Page 27: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/27.jpg)
Otras Soluciones
Solveet. Kata TDD
![Page 28: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/28.jpg)
28
• 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?
Actividades
Autoevalua TDD
![Page 29: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/29.jpg)
29
Extras
![Page 30: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/30.jpg)
30
• Repositorio GitHub:https://github.com/javierj/kata-dojous
Extras
http://www.slideshare.net/Javier_J
![Page 31: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/31.jpg)
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
![Page 32: Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012](https://reader033.fdocuments.net/reader033/viewer/2022051109/54826598b47959d30c8b4762/html5/thumbnails/32.jpg)
http://www.linkedin.com/groups/PythonSevilla-4685758
Python-Sevilla
Python_Sevilla / #PySVQ
https://groups.google.com/forum/?fromgroups=#!forum/python-sevilla.