Este documento presenta las técnicas de refactorización y pruebas unitarias como formas de mantener el "soft" o flexibilidad en el software a lo largo del tiempo. La refactorización mejora el diseño del código sin cambiar su comportamiento, eliminando malos olores como comentarios obsoletos, métodos largos, código duplicado, números mágicos, y clases de datos. Las pruebas unitarias son cruciales para refactorizar código legacy al aislar módulos e inyectar dependencias.