¿Que es un code smell?

Cuando un programador  lleva un tiempo programando o gana suficiente experiencia se vuelve capaz de detectar posibles problemas con solo examinar las lineas de código del sistema. Existen ciertas estructuras o rutinas  problemáticas que pueden llegar a ser indicadores superficiales de un posible mal funcionamiento del sistema. A este conjunto de lineas de código se les conoce como Code Smells.

¿Como detecto un code smell?.

No existe una formula o receta para detectarlo, depende de tu experiencia. El mejor método para detectar este código apestoso es: escribir un montón de lineas de código apestosas o de mala calidad. Equivocarte muchas veces te da la experiencia suficiente para volverte un experto en code smells. Aparte, esto cae en la linea de la interpretación. Donde un programador experimentado puede ver un problema, otro puede ver solo una “diferencia de estilos”. Los smells son un síntoma, no la enfermedad que tratamos de erradicar.

¿Que hago si encuentro código apestoso?.

Un método o clase excesivamente grande (varios miles o decenas de miles de lineas), por ejemplo,  es un indicador claro de un código apestoso. Si llegas a encontrar esto en los fuentes de tu empresa, felicidades encontraste un smell. Por favor, no corras directo a modificarlo. Lo ideal, seria refactorizar el código en métodos y clases mas pequeños, desgraciadamente no se puede modificar directamente sin antes atacar la verdadera enfermedad: falta de cocimiento sobre el sistema, falta de pruebas y falta de documentación. Para refactorizar debes reunir un mínimo de casos de prueba que te permita saber como debe y no debe funcionar el componente, una vez reunidos estos insumos se procede a escribir pruebas que garanticen que el componente funcionara igual después de su refactorización, una vez que se asegure que no se agregaran bugs al querer reparar el sistema, entonces  ya se podrá hacer la debida reparación.

El smell es la punta del iceberg que esconde un problema de mayor tamaño, hay que hacer un análisis para entender el problema y solucionarlo del mejor modo. La experiencia dando mantenimiento a los legados te va a facilitar este trabajo.

¿Debo de corregir todos los code smell que encuentre?

La respuesta es NO. Toda reparación tiene costes y consecuencias, va a haber código problemático que no se pueda reparar aunque se quiera. Por ejemplo: código de terceros o componentes de baja calidad. Cada caso es distinto, en un mundo perfecto ningún programador debería dejar con vida algún code smell, pero existen actividades que pueden ser mas importantes. El equipo de desarrollo puede decidir no tomar los code smell como actividades urgentes e importantes y dejarlo para otro momento, es valido. Si has encontrado código apestoso y tu equipo ha decidido no atender este pendiente, entonces puedes levantar un ticket, una actividad o lo que sea en tu flujo de trabajo que le permita al equipo retomar esta actividad mas adelante, documenta lo mejor que puedas y explica en que consiste el smell. Da visibilidad al problema, comunicalo a tus compañeros  y lideres de equipo.

Las consecuencias de modificar.

El código apestoso suele venir altamente acoplado o en múltiples copias distribuidas por los repositorios de la empresa. Modificar y refactorizar un componente puede llevar a modificar mas partes del sistema o tener comportamientos no esperados. Va a suceder, esto no debe de detenerte, continua refactorizando. El coste de no hacer nada para mejorar la calidad del código siempre es mas alto que el hacer algo.

Autor imagen: patchattack

 

Gustavo Sánchez