Git Product home page Git Product logo

tennis-kata's Introduction

Kata de refactorización de tenis

Imagine que trabaja para una empresa de consultoría, y uno de sus colegas ha estado trabajando para la Sociedad de Tenis. El contrato es por 10 horas de trabajo facturable, y su colega ha pasado 8.5 horas trabajando en él. Lamentablemente, ahora ha caído enfermo. Él dice que ha completado el trabajo, y todas las pruebas pasan. Tu jefe te ha pedido que te hagas cargo de él. Quiere que pases una hora más o menos en el código para poder facturar al cliente las 10 horas completas. Ella le indica que arregle un poco el código y tal vez tome algunas notas para que pueda darle a su colega algunos comentarios sobre el diseño elegido. También debe prepararse para hablar con su jefe sobre el valor de este trabajo de refactorización, más allá de las horas adicionales facturables.

Hay tres versiones de esta kata refactorizadora, cada una con sus propios olores y desafíos de diseño. Le sugiero que comience con el primero, con la clase "TennisGame1". El conjunto de pruebas proporcionado es bastante completo y rápido de ejecutar. No debería necesitar cambiar las pruebas, solo ejecutarlas a menudo mientras refactoriza.

Si te gusta este Kata, puede que te interese mi libro, "The Coding Dojo Handbook"

Tenis kata

El tenis tiene un sistema de puntuación bastante peculiar, y para los recién llegados puede ser un poco difícil de seguir. La sociedad del tenis te ha contratado para construir un marcador para mostrar el puntaje actual durante los juegos de tenis.

Su tarea es escribir una clase "TennisGame" que contenga la lógica que genera el puntaje correcto como una cadena para mostrar en el marcador. Cuando un jugador anota un punto, se activa un método para llamar a su clase que le permite saber quién anotó el punto. Más tarde, recibirá una llamada "score()" desde el marcador preguntando qué debe mostrar. Este método debería devolver una cadena con la puntuación actual.

Puede leer más sobre los puntajes de tenis aquí, que se resume a continuación:

El primer jugador que gana un juego gana al menos cuatro puntos en total y al menos dos puntos más que el oponente.

El puntaje de cada juego se describe de una manera peculiar al tenis: los puntajes de cero a tres puntos se describen como "Love", "Fifteen", "Thirty", y "Forty" respectivamente.

Si cada jugador ha obtenido al menos tres puntos y los puntajes son iguales, el puntaje es "Deuce".

Si se han anotado al menos tres puntos por cada lado y un jugador tiene un punto más que su oponente, el puntaje del juego es "Advantage" para el jugador que lidera.

Solo necesitas informar el puntaje del juego actual. Los conjuntos y las coincidencias están fuera de alcance.

Preguntas para discutir después

  • ¿Cómo se sintió trabajar con pruebas tan rápidas y completas?

  • ¿Cometiste errores al refactorizar que fueron detectados por las pruebas?

  • Si utilizó una herramienta para registrar sus ejecuciones de prueba, revísela. ¿Podrías haber tomado pasos más pequeños? ¿Cometió menos errores de refactorización?

  • ¿Alguna vez cometió algún error de refactorización y luego retiró sus cambios? ¿Cómo se sintió tirar el código?

  • ¿Qué le dirías a tu colega si hubiera escrito este código?

  • ¿Qué le dirías a tu jefe sobre el valor de este trabajo de refactorización? ¿Hubo más razones para hacerlo más allá de la hora extra facturable?

tennis-kata's People

Contributors

hahs-92 avatar pcramirezp avatar pramirez206 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.