Ejercicio de TDD – Números perfectos

La semana pasada tuvimos un mini-taller donde había que resolver el problema de los números perfectos con un enfoque TDD.

y por enfoque TDD, acordamos:

loop {

Crear prueba de cómo queremos que el código se comporte

Crear código de infraestructura para que la prueba compile pero falle

Crear código para que la prueba pase

Refactorizar

}

Por si alguien se anima a hacer el ejercicio, éstas son las historias que hubo que ir resolviendo… Vete haciendo una por una, así tendrás que ir refactorizando y el ejercicio será más útil.

h1 – Dado un número, saber si es un número perfecto o no. Es perfecto, si la suma de sus divisores ( excluido el mismo ) es igual a él mismo. Por ejemplo:

6 tiene como divisores: 1 2 3 (y 6). Si los sumamos 1 + 2 + 3 == 6. 6 Es perfecto

h2 – Dada una serie de números, identificar los perfectos { 1, 6, 78, 344 } –> { 6 }

h3 – Dado un número, además de si es perfecto, queremos saber si es abundante ( suma de divisores > num ), deficiente ( suma de divisores < num ) o primo ( divisible entre sí mismo y la unidad )

h4 – Dada una serie de números, identificar los perfectos, abundantes, deficientes y primos.

Podemos enfocar la solución de diferentes formas, agrupar los tests de diferentes maneras, nombrarlos de diferente forma, invocar a uno u otro autor a la hora de refactorizar… pero creo que no hay una verdad única. Yo os planteo una posible solución, sobre todo para que las personas que nunca han hecho nada de TDD, vean la idea.

 

Happy hacking!

~ds

 

PD –> Gracias a Hadi Hariri  ( @hhariri, blog ) por la sugerencia. En principio íbamos a hacer un ejercicio diferente, pero tras su experiencia en la devcon London, me sugirió que este podía ser interesante 🙂

PD2 –> Si bien los métodos en .NET son PascalCase, para los tests pongo guiones bajos porque es más cómodo de leer en la ventana de resultados

PD2 –> :O has usado youtube!!!  si, tb lo subiré a channel9 para que esté accesible desde los dos sitios. Y no.. no me estoy consumiendo entre llamas por haberlo hecho 🙂