Antes de enfocarnos en las diferencias, señalemos la similitud obvia: el prefijo común “re”. Juntas, especialmente con la inclusión de “refactorización”, estas palabras hablan sobre cambiar algunos software existentes.
Mantendré la palabra refactorizando para el final, porque esta tiene un significado bastante específico en el contexto de la agilidad. No estoy seguro de que tenga algún significado fuera de ese contexto.
Las otras tres palabras señalan diferentes escalas de software.
- ¿Qué te emociona sobre el futuro de la ingeniería de software?
- Como ingeniero de software con BS en CS, ¿cuáles son las ventajas de seguir una maestría en CS? ¿Qué oportunidades y trayectoria profesional abrirá el título que de otro modo sería difícil de obtener?
- ¿Cuáles son los criterios para seleccionar un medio de emisión de boletos de viaje para el software de reserva en línea?
- ¿En qué medida el desarrollo de software es un trabajo de baja categoría?
- Tengo 17 años y me enseño a codificar. Sé que tener un mentor me ayudará mucho durante el proceso. ¿Algún consejo?
Los programadores están usando la palabra Arquitectura para describir cómo (grandes) partes del software están trabajando juntas para lograr el objetivo deseado. Por lo tanto La reestructuración significa grandes cambios de código que pueden ser necesarios para solucionar problemas serios.
El diseño también apunta a la estructura del software pero a menor escala. A menudo se usa para API y, por supuesto, también se usa para componentes de interfaz de usuario. El rediseño puede usarse, por ejemplo, para describir cambios en la API o cambios en la capa de interacción del usuario.
La reescritura es bastante genérica, pero generalmente se usará para una escala aún más pequeña. Los programadores normalmente reescribirán una función, para reemplazarla con un código con suerte mejor.
Todo esto no dice nada sobre la forma en que haces las cosas. Se trata de cambiar, esperemos lo mejor, y generalmente porque se descubrió algún problema en el software existente, pero realmente sin ningún seguro de que estos cambios mejorarán algo.
La refactorización es mucho más específica. En el contexto de la agilidad, esto es algo que haces en el código que está cubierto por las pruebas unitarias. La refactorización no debe cambiar nada del comportamiento del programa (no romper ninguna prueba) sino mejorar el software desde el punto de vista del mantenimiento. Se realiza mediante la detección de patrones formales (anti) en los síntomas del código fuente de problemas más profundos, conocidos como olores de código, y luego aplicando cambios formales correspondientes. La idea subyacente es que al aplicar muchos cambios tan pequeños, surgirá un proceso más simple y eficiente. En realidad, funciona bastante bien y está mucho más bajo control que los otros cambios ciegos anteriores.
En otras palabras, desde mi punto de vista, la refactorización está bien, mientras que la reestructuración, el rediseño o la reescritura son banderas rojas. Con la excepción, tal vez, del rediseño aplicado a la interfaz de usuario (y aun así, sigo creyendo que tal vez también haya formas más controladas para eso y la aparición de una mejor interfaz de usuario a través de los comentarios de los usuarios parece más racional).