Usuario:Luis.perez/sistemaspyaytozgz/testing kata

De WikiEducator
Saltar a: navegación, buscar

Kata StringCalculator

En este ejercicio realizaremos una Kata conocida como "StringCalculator" para practicar con python y TDD

¿Qué es una Kata?

Una "Kata" es un ejercicio diseñado para mejorar las habilidades de programación mediante práctica y repetición. Los ejercicios son aparentemente sencillos, pero mediante su resolución se pueden aprender buenas técnicas de programación. Se anima a que sean resueltos aplicando técnicas como TDD (Test Driven Development) y refactorización contínua.



Icon key points.gif

¿Como se realizará el ejercicio en la sesión?

  • Se resolverá mediante TDD
  • Se programará por parejas, una técnica de desarrollo ágil.
  • El objetivo no es resolver lo más rápido posible el ejercicio, sino lo mejor posible. De hecho en la sesión presencial probablemente no se lleguen a resolver todos los puntos de los que consta: Lo importante es aprender las técnicas que usaremos. De todos modos se anima a los asistentes a que la repitan por cuenta propia.
  • El ejercio se resolverá de forma iterativa en periodos cortos de tiempo.
  • Se intentará resolver el problema de la forma más simple posible. No es necesario un conocimiento profundo de las librerías estándar de python para abordarlo.
  • No leas todo el problema. Simplemente lee paso a paso.
  • Haz solo una tarea cada vez, la idea es aprender a trabajar incrementalmente
  • Solo es necesario testear las entradas correctas. No es necesario hacer tests para evitar datos de entrada incorrectos.



Enunciado de la kata

String Calculator:

  • 1) Crea una calculadora que acepta strings con un método Add(string numbers) que devuelve int
    • El metodo puede recibir 0, 1, o 2 números separados por comas, y devolverá su suma (para una cadena vacía devolverá 0) por ejemplo "" ó "1" ó "1,2"
    • Empezar con el test más simple de cadena vacía, y entonces continuar con 1 y después dos números
    • Recuerda resolver los problemas de la manera más simple, de tal modo que te obligue a pensar en tests en los que no habías reparado
    • Recuerda refactorizar cada vez que pasas un test
  • 2) Permitir que el método Add maneje una cantidad indeterminada de números
  • 3) Permitir que el método Add maneje nuevas líneas entre números (enn lugar de comas)
    • La siguiente cadena es correcta: "1\n2,3" (= 6)
    • La siguiente no es correcta: "1,\n" (no se necesita testear, solo por aclaración)
  • 4) Soportar diferentes delimitadores
    • Para cambiar un delimitador, el principio de la cadena contendrá una línea separada al estilo: “//[delimitador]\n[numeros…]”. Por ejemplo “//;\n1;2” devolverá 3, y su delimitador es ';'
    • La primera línea es opcional, todos los escenarios anteriores han de seguir soportandose.
  • 5) Invocar Add con un número negativo lanzará una excepción "Negativos no permitidos", mostrando además el negativo que se pasó. Si hay múltiples negativos, mostrar únicamente los negativos.
  • 6) Los números mayores que 1000 deberían ser ignorados, así que añadir 2 + 1001 = 2
  • 7) Los delimitadores deben de ser de cualqueir longitud con el siguiente formato “//[delimitador]\n” por ejemplo: “//[***]\n1***2***3” debería devolver 6
  • 8) Permitir múltiples delimitadores: “//[delim1][delim2]\n”. Por ejemplo “//[*][%]\n1*2%3” debería devolver 6.
  • 9) Asegúrate de que también se pueden manejar multiples delimitadores de longitud mayor que 1.


Nota: Una posible resolución se encuentra en el propio repositorio de github, en https://github.com/neodoo/curso_python_dga_11/blob/master/inmersion/kata/solution/StringCalculator.py, aunque el objetivo del ejercicio es el proceso, no la solución.