domingo, 5 de abril de 2015

Code Smell

Buenas,

Hace unos días, en la empresa donde trabajo, dimos una charla acerca de patrones de diseño y code smells.
Para ello, una de las bibliografías que leí es el artículo de Fowler: CodeSmell.
Para estrenar mi blog entonces, decidí publicar la traducción de dicho artículo.
Además les dejo un link donde podrán encontrar una lista de code smells y como refactorizarlos.
A continuación, el artículo traducido.


CodeSmell






Un "code smell" es un indicador que usualmente corresponde a un problema más profundo en el sistema. El término fue primero introducido por Kent Beck ayudándome con mi libro Refactoring.

Esta rápida definición contiene algunos puntos sutiles. En primer lugar, un "smell" es por definición algo fácilmente detectable u olfateable. Un método largo es un buen ejemplo de esto, sólo basta mirar el código y mi nariz se tuerce si veo más de una docena de líneas.

En segundo lugar, los "smells" no siempre indican un problema. Algunos métodos largos están bien. Uno se tiene que fijar en mayor profundidad para ver si existe un problema, los "smells" no son inherentemente malos, pero son frecuentemente un indicador de un problema.

Los mejores "smells" son aquellos que son fácilmente detectables y mayormente lo conducen a problemas realmente interesantes. Clases que solo contienen datos (clases sin comportamiento) son un buen ejemplo de esto. Las observas y te preguntas qué comportamiento debería ir en esta clase. Luego empiezas a refactorizar para mover el código allí. Frecuentemente, preguntas sencillas y refactorizaciones iniciales pueden ser un paso vital para transformar objetos anémicos en algo que realmente represente a una clase.

Es fácil para gente inexperta detectar "smells", incluso si no saben lo suficiente como para evaluar si existe un problema real o cómo corregirlo. He escuchado de parte de líderes de desarrollo que toman el "smell de la semana" y le piden a su gente detectarlo y sacarlo a la luz con los miembros más senior del equipo. Hacer esto de a un "smell" por vez es una buena manera de, gradualmente, enseñarle al equipo a ser mejores desarrolladores.