De hecho, he pasado por una refactorización bastante significativa tres veces en mi carrera. El código tiene una tendencia a la descomposición, por lo que si su base de código es lo suficientemente larga, un refactor grande es casi inevitable. Todos mis ejemplos estaban en bases de códigos privados, lo que podría explicar por qué los ejemplos públicos son difíciles de encontrar.
La primera vez fue una aplicación que, lo creas o no, tenía una arquitectura fundamental que hacía que solo funcionara con impresoras matriciales. Cuando mi empresa ya no pudo encontrar un proveedor para suministrar las cintas, me asignaron que funcionara con una impresora láser.
La segunda vez fue una migración de varios cientos de scripts de prueba automatizados de C a Java, en parte porque necesitábamos una mejor capacidad multiplataforma, y en parte porque era difícil contratar nuevos desarrolladores de C.
La tercera vez todavía estoy en el medio, que está modularizando una gran aplicación monolítica para permitir pruebas unitarias al reducir el acoplamiento y para propósitos de plataforma cruzada.
Comparo el esfuerzo de escalar una montaña. Tienes este gran objetivo por delante, pero no lo abordas a nivel macro. Se toma una mano a la vez, siempre con una posición de retroceso cercana, nunca desconectando el seguro anterior hasta que el siguiente esté en su lugar. Empiezas solo haciendo pequeñas mejoras incrementales, y después de un tiempo te das la vuelta y de repente hay esta hermosa vista.
Digamos que tiene 60,000 archivos de código altamente acoplado, por ejemplo. Desea comenzar a ponerlo bajo prueba unitaria, pero las dependencias lo hacen imposible. Como lo arreglas? Desacoplas un archivo. Agrega pruebas automatizadas. Regresas a terreno estable antes de continuar. Repite 59,999 veces.
Si eso suena simple, es porque es simple. No es fácil, pero es simple. Es difícil notar algún progreso al principio. Llevamos dos años en lo que parecía un refactor imposible, y es probable que tengamos años por delante hasta que hayamos terminado, pero al mirar hacia atrás, de repente nos damos cuenta de cuánto mejor ha mejorado el código y hemos podido continuar ofreciendo nuevas funciones. a nuestros clientes mientras tanto.
Las otras dos veces funcionaron de la misma manera. Usted encuentra el paso seguro más pequeño que puede tomar, y lo toma, siempre manteniendo la aplicación en funcionamiento. Solo te preocupas por el panorama general para asegurarte de que vas en la dirección correcta. Todas sus acciones son pequeñas, constantes e incrementales.