Segunda Code Kata del Aula de Software Libre

ACTUALIZACIÓN (26/3/15): Por falta de asistentes se suspende la actividad.

Volvemos a programar un nuevo Code Kata para el próximo jueves 26 de marzo de 16 a 18 horas, en el aula B1 del Ramón y Cajal. En esta ocasión el problema se realizará siguiendo la metodología TDD. El problema es el siguiente:

Problema: Calculadora

  1. Crear una calculadora (Calculator) que tenga un sólo método «int Add(string numbers)»
    • El método puede recibir en la cadena numbers 0, 1 o 2 números separados por coma y devolverá su suma. Si la cadena está vacía se devuelve cero. Ejemplos válidos: «», «1» y «1,2».
    • Empezar con el caso más simple de una cadena vacía, luego 1 número y luego 2.
    • No te líes, busca la solución más simple posible. Lo importante es pensar en las pruebas.
    • Recuerda refactorizar el código después de pasar cada test (tabular bien, poner nombres descriptivos, quitar código redundante, etc.)
  2. Permitir al método sumar una indeterminada cantidad de números.
  3. Permitir sumar números separados por lineas (\n), además de por comas:
    • Ejemplo válido: «1\n2,3» debe dar 6
    • Ejemplo no válido: «1,\n». Los ejemplos no válidos no se prueban, solo se indica como aclaración.
  4. Permitir otros delimitadores
    • Para cambiar el delimitador, la primera línea de la cadena será similar a esta: «//[delimitador]\n[números…]». Ejemplo: «//;\n1;2» debería dar 3.
    • El cambio de delimitador es opcional, el resto de casos debería seguir funcionando.
  5. Si se pasa un número negativo se debe lanzar una excepción: «No se permiten números negativos: [números]». Se debe indicar el número. Si se pasan varios números negativos, se deben mostrar todos en la excepción.
    Los siguientes tres casos son avanzados. Si has tardado 30 minutos o menos en solucionar los anteriores, puedes continuar.
  6. Números mayores de 1000 se ignoran: «1001,2» debe dar 3.
  7. Se permiten delimitadores de cualquier longitud. Ejemplo: «//[***]\n1***2***3» debe dar 6.
  8. Se permiten múltiples delimitadores. Ejemplo: “//[***]\n1***2***3” debe dar 6. Se permiten múltiples delimitadores de cualquier longitud.

Se puede usar cualquier lenguaje. Tenéis varios frameworks para desarrollos con pruebas:

  • C++: https://code.google.com/p/googletest/
  • PHP: https://phpunit.de/
  • Python: http://pyunit.sourceforge.net/
  • Java: http://junit.org/
  • Ruby: http://test-unit.github.io/

También te podría gustar...