Desarrollo: qué es la refactorización de código

Básicamente, la refactorización consiste en reescribir un código existente de forma que ofrezca el mismo resultado, con un código distinto, aunque este no represente mejora alguna en rendimiento. ¿Por qué iba a interesarle esto a nadie?


Aunque, a simple vista, la refactorización no presenta una mejora aparente en la gestión de recursos, lo cierto es que se trata de una práctica indispensable en metodologías de programación tan eficaces como la eXtreme Programming.


El objetivo de la refactorización en programación es agilizar el trabajo. Un código claro y bien escrito es más fácil de comprender y, por tanto, de corregir, ampliar o mejorar.

Además de estar presente en muchas otras metodologías, la refactorización es una práctica de XP (eXtreme Programming) esencial por sus principios de eficiencia. Esto es así porque la refactorización de software agiliza en gran medida el trabajo en equipo. Actualmente, cuando el desarrollo de software se realiza con equipos de programadores, la refactorización garantiza la calidad del software.

Puesto que los desarrolladores son varios, la claridad y legibilidad del código son esenciales para el trabajo en equipo. Además, como los derechos de autor pertenecen al grupo, no a un desarrollador individual, esta práctica potencia la calidad del código desarrollado conjuntamente.

Anécdotas del término refactorización

Según la wikipedia, la primera vez de la que hay constancia en que se usa el término refactorización es en un artículo de William F. Opdyke y Ralph E. Johnson. Fué publicado en septiembre de 1990 bajo el título de Refactoring: An Aid in Designing Application Frameworks and Evolving Object-Oriented Systems, Proceedings of the Symposium on Object Oriented Programming Emphasizing Practical Applications. De todas formas, es muy probable que tanto el término como su significado ya se utilizaran con anterioridad.

En cualquier caso, su significado ha trascendido el mundo de la programación y ahora se aplica a la optimización en la comprensión, por ejemplo, de hilos de discusión. En estos, la refactorización realiza un desbroce de la historia de la discusión resultando en un resumen comprensible de los conceptos tratados. Así, los usuarios pueden comprender el hilo argumental de la discusión, sin centrarse en la historia de cómo se ha formado el mismo.

Cómo refactorizar código

Como se ha dicho, la refactorización del código de programación es una práctica orientada a mejorar la eficiencia de los equipos por encima de la del código. Eso se puede realizar de varias formas, siempre orientadas a facilitar la lectura y comprensión.

Para ello existen distintas técnicas de refactorización. La naturaleza de cada arquitectura y lenguaje hace que sea mejor optar por unas u otras. Así pues, no es lo mismo la refactorización con PHP que refactorizar en JavaScript.

No existe un solo método para refactorizar, pero sí pueden combinarse varios de ellos para optimizar la legibilidad del código fuente. Uno de los cambios más habituales consiste en renombrar las variables. De este modo, los nombres asignados a variables "sobre la marcha", pueden cambiarse para que por sí mismas describan mejor su papel dentro del programa. Otros métodos pasan por sustituir bucles por funciones, reducir u optimizar las condiciones, extraer métodos o mover partes del código, eliminar código redundante y un largo etcétera.

La refactorización se ha mostrado tan eficaz que los mejores entornos de programación presentan herramientas que ayudan a esta práctica. Así pues, existen plugins y herramientas que permiten refactorizar en Eclipse o en Atom, por poner solo un par de ejemplos.

Ejemplos de refactorización

Imaginemos, por ejemplo, que estamos desarrollando un programa, sea una app para móviles, una aplicación web o incluso un programa de escritorio, que realiza constantes peticiones a una base de datos. Este caso es extremadamente habitual.

A menudo, sobre la marcha se crea una sentencia SQL que precisa llamar a la base de datos, identificarse, realizar la consulta y obtener el resultado. Un ejemplo de refactorización consistiría, pongamos por caso, en crear una función que realiza todas las gestiones previas a la consulta y devuelve el resultado.

Imaginemos el caso en un código escrito en PHP. Bastaría con crear una función que recogiera las variables relacionadas con la conexión a la base de datos, tuviera como input tan sólo la sentencia SQL y devolviera el resultado. De esta forma, una sola llamada a la función con la sentencia SQL devolvería el resultado sin tener que estar duplicando constantemente el código que conecta con la base de datos. El resultado es el mismo, pero el código se reduce considerablemente y resulta mucho más legible.

Cuándo refactorizar

Aunque sea indirectamente, la refactorización es crucial en la calidad de software. El problema que presenta es que al no añadir funcionalidad en los resultados del programa, resulta fácil caer en la impresión de que se trata de una pérdida de tiempo. Sin embargo, esa impresión no puede estar más alejada de la realidad. Si se suman las horas en las que los diferentes componentes de un equipo dedican a entender un código, la reducción de este tiempo, que se invertirá en producir código eficaz, resulta mucho más rentable de lo que puede parecer.

La refactorización de código debe ser una constante en los proyectos de desarrollo ágil. Refactorizar un código desemboca en un menor tiempo de respuesta cuando hay que afrontar problemas o mejoras.

Por eso, el momento de refactorizar es cuando detectamos código repetido, retrasos en entregas, llamadas y consultas constantes entre distintos miembros de un equipo para recibir explicaciones, y todo proceso que frene el flow de desarrollo.

Refactorizar funciones suele ser una de las formas más habituales y eficientes de refactorizar, en tanto en cuanto dotan a un proyecto de herramientas que agilizan la repetición de tareas propias del software, sin tener que escribir múltiples veces tareas equivalentes para obtener el mismo resultado.

Aunque este ha sido un artículo superficial sobre la refactorización de código, dedicaré una serie de artículos más detallados y técnicos sobre esta materia en mi otra página, focalizada en tecnología y desarrollo. Dejaré enlaces en redes sociales y modificaré este mismo artículo para incluir los links que lleven a una explicación más detallada de algunos puntos y conceptos relacionados con la refactorización y el desarrollo eficiente de software.

Espero que, al menos, esta somera explicación te haya servido, si no lo sabías, para entender qué es la refactorización y por qué es tan importante en los paradigmas de desarrollo actuales. Entender la importancia de los procesos en la arquitectura de software ayuda a afrontarlos con más ganas. Así se obtienen mejores resultados.