32
Kata con Python Python-Sevilla @IWT2_Javi er

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

  • Upload
    javierj

  • View
    751

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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

Kata con Python

Python-Sevilla

@IWT2_Javier

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

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

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

4

Kata: Tennis

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

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

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

7

PowerPoint-Driven Development

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

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

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

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

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

12

Random Tenis

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

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

Random Tenis

RandomPlay aún no está hehco

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

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

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

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

18

Otras soluciones

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

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

Otras soluciones

TDD in Python in 5 minutes

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

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

Otras soluciones

Método game

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

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

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

Otras Soluciones

Solveet. Kata TDD

Game

Player

Pruebas a ojo

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

Otras Soluciones

Game

Player

Pruebas a ojo

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

Otras Soluciones

Solveet. Kata TDD

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

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

29

Extras

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

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

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

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

Python-Sevilla

Python_Sevilla / #PySVQ

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