E67: Refactorizar un producto SaaS de código legado

Conferencista(s)

La refactorización es una de las soluciones activas para frenar el miedo a cambios de modificación o ampliación del código. ¿Es buena práctica refactorizar a partes? ¿Reescribirlo todo es un error? Los programadores con un mínimo de respeto por la estructuración huyen de esta clase de embrollos pero a otros la arquitectura les trae sin cuidado y tal vez se sienten cómodos programando por inercia pero poner parches día tras día no es la solución. Saber cuándo y cómo refactorizar en ingeniería de software puede ayudarte a escribir código más legible y mantenible en el tiempo. En este episodio hablamos sobre cómo enfrentarse a una refactorización, por qué programar con orientación a objetos tiene muchos factores buenos, la necesidad de implantar una cultura de testing, refactorización y pruebas unitarias para eliminar el miedo a modificación y ampliación del código o por qué la legibilidad y estructuración debería importarte y no solo que el código haga su función. También hablamos sobre cómo estar seguros que los cambios no afecten al funcionamiento normal del código (retrospectiva) y tipos de testing que nos van a dar la seguridad a muy alto nivel que un producto funciona.

Enlaces recomendados:

- Introducción a la refactorización en PHP: https://medium.com/styde-net/introducción-a-la-refactorización-en-php-a965ead8b0d9

- Refactorización y mejora de código: https://medium.com/@XFelipeM/refactorización-de-código-like-a-champion-1-a9c9c95d704f

- El libro Pro PHP Refactoring es del 2010 pero aporta mucha información de cómo llevar a cabo una refactorización: https://www.amazon.com/Pro-PHP-Refactoring-Francesco-Trucchia/dp/1430227273

- Cypress: https://www.cypress.io/

- El libro de referencia obligada sobre refactorización (legada o no) es Refactoring de Martin Fowler. Consiste en un compendio de principios básicos, bad smells, y posibles refactorizaciones con ejemplos en Java: https://martinfowler.com/books/refactoring.html

- Tests funcionales en Symfony: https://diego.com.es/functional-tests-en-symfony

- SQLite: base de datos muy ligera, que nos permite tener relaciones entre tablas. Lo principal es que cuando arranquemos la prueba se cree la base de datos, se importe el contenido y cuando acabe la prueba, la base de datos vuelva a su estado inicial o deje de existir para que cada vez que lo reproduzcamos partamos del mismo punto: https://www.sqlite.org/index.html

- Qué buen hilo. Muchas cosas qué investigar desde aquí: https://twitter.com/yeion7/status/1191773660417269761?s=21