Antes de desarrollar: Katas, TDD y Solid

Mirando antiguas entradas he visto una que menciona la kata Fizzbuzz, y esto me ha llevado a escribir esta entrada.  Si ya tienes experiencia en el mundo del desarrollo quizás no te interese esta entrada, pero si eres novato lee  y pon en práctica lo que te explicaré.

Actualmente estoy realizando unas prácticas en una empresa de desarrollo Web y de apps Android e iOS. Mi tutor en estas prácticas, llamémosle  Diablo Pelirrojo, lo primero que me dijo fue que me mirase los principios de SOLID y TDD para realizar una Kata. Fueron 4, hechas de varias formas.

¿Qué es el principio SOLID?

SOLID, en pocas palabras, es  un acrónimo que representa cinco principios básicos de la programación orientada a objetos y el diseño.

Los 5 principios:

  1. Principio de Única Responsabilidad: un objeto solo debería tener una única responsabilidad.
  2. Principio Abierto/Cerrado:  las entidades de software deben estar abiertas para su extensión, pero cerradas para su modificación.
  3. Principio de sustitución de Liskov: los objetos de un programa deberían ser reemplazables por instancias de sus subtipos sin alterar el correcto funcionamiento del programa.
  4. Principio de Segregación de la Interface: muchas interfaces cliente específicas son mejores que una interfaz de propósito general.
  5. Principio de Inversión de Dependencia: la noción de que uno debería depender de abstracciones y no depender de concreciones.

Resumiendo a grandes rasgos:

  • No crees variables aux que uses para todo. Nada de variables comodín que las uses a tu antojo. cada variable tiene su propósito. Lo mismo para los métodos.
  • No uses números mágicos. No pongas un 9 en medio del código, luego no sabrás que significa, mejor crea una variable que tenga un nombre descriptivo y le das el valor que usarás después.
  • Crea clases para cada tipo de objetos y una interfaz para cada clase si es necesario.
  • Un método, un propósito. No lo uses para más cosas. Si necesitas otro método, lo creas.

¿Qué es el TDD?

TDD (Sesarrollo Guiado por Pruebas, Test Driven Development) de software. En la Wikipedia está muy bien explicado y no voy a hacer un copia y pega. Leedlo ahí porque no es denso; solo es una "página".

Ciclo de TDD:

  1. Elegir un requisito: se elige de una lista el requerimiento que se cree que nos dará mayor conocimiento del problema y que a la vez sea fácilmente implementable.
  2. Escribir una prueba: se comienza escribiendo una prueba para el requisito. Para ello el programador debe entender claramente las especificaciones y los requisitos de la funcionalidad que está por implementar. Este paso fuerza al programador a tomar la perspectiva de un cliente considerando el código a través de sus interfaces.
  3. Verificar que la prueba falla: si la prueba no falla es porque el requerimiento ya estaba implementado o porque la prueba es errónea.
  4. Escribir la implementación: escribir el código más sencillo que haga que la prueba funcione. Se usa la metáfora "déjelo simple" ("Keep It Simple, Stupid" (KISS)).
  5. Ejecutar las pruebas automatizadas: verificar si todo el conjunto de pruebas funciona correctamente.
  6. Eliminación de duplicación: el paso final es la refactorización, que se utilizará principalmente para eliminar código duplicado. Se hacen de a una vez un pequeño cambio y luego se corren las pruebas hasta que funcionen.
  7. Actualización de la lista de requisitos: se actualiza la lista de requisitos tachando el requisito implementado. Asimismo se agregan requisitos que se hayan visto como necesarios durante este ciclo y se agregan requerimientos de diseño (P. ej que una funcionalidad esté desacoplada de otra).

¿Qué es una Kata y para qué hacerlas?

Las Katas son prácticas de código que nos ayudan a mejorar. Estas prácticas usan los TDD (test unitarios) y los principios SOLID y se utilizan para mejorar nuestra programación, mejorar nuestros tiempos y aprender métodos nuevos. Si no te enfrentas a algo nuevo siempre sabrás lo mismo.

Para realizar las Katas usad Git para tenerlas siempre a mano y poder compartirlas.

Las Katas se pueden hacer con cualquier lenguaje de programación, al menos con Java, JavaScript, PHP, Python se que sí.  Para ello nos tenemos que descargar un framework para los test.

Ejemplos de framework:

Algunas Katas que te propongo

No os pongo los enlaces porque son fáciles de encontrar y algunas veces cambian un poco el enunciado o les añaden extras.

Katas:

  • Fizzbuzz
  • Números romanos
  • Bowling
  • Gilded Rose
  • Bingo

* Odio la Kata de Bowling, me la hicieron hacer de 4 formas diferentes. Maldito Diablo Pelirrojo.

Webs interesantes:

Sería interesante que si alguno va a empezar una Kata la pusiera en un git público y la compartiese con el resto para poder de algún modo participar todos. Ya sea para ayudarnos o para ver soluciones distintas igual de válidas.