kata tenis. enunciados y soluciones alternativas. python sevilla 30/11/2012
Post on 05-Dec-2014
750 Views
Preview:
DESCRIPTION
TRANSCRIPT
Kata con Python
Python-Sevilla
@IWT2_Javier
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
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
4
Kata: Tennis
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
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.
7
PowerPoint-Driven Development
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
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
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
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?
12
Random Tenis
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
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
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.
18
Otras soluciones
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
Otras soluciones
TDD in Python in 5 minutes
Otras soluciones
https://github.com/andrewnix/Kata-Tennis-Python/
Solveet. Kata TDD
Player
Método game
Sin pruebas
Otras soluciones
Método game
Otras Soluciones
https://github.com/andrewnix/Kata-Tennis-Python/
Solveet. Kata TDD
Decorador MétodoSin pruebas
Otras Soluciones
https://github.com/andrewnix/Kata-Tennis-Python/
Solveet. Kata TDD
Decorador MétodoSin pruebas
Otras Soluciones
Solveet. Kata TDD
Game
Player
Pruebas a ojo
Otras Soluciones
Game
Player
Pruebas a ojo
Otras Soluciones
Solveet. Kata TDD
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
29
Extras
30
• Repositorio GitHub:https://github.com/javierj/kata-dojous
Extras
http://www.slideshare.net/Javier_J
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
http://www.linkedin.com/groups/PythonSevilla-4685758
Python-Sevilla
Python_Sevilla / #PySVQ
https://groups.google.com/forum/?fromgroups=#!forum/python-sevilla.
top related