Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012

Preview:

DESCRIPTION

Kata Tenis para practicar TDD en la reunión Python Sevilla del 30/11/2012

Citation preview

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.