miércoles, 25 de abril de 2018

Refactorizacion de Codigo

La refactorización de código en términos sucintos es la limpieza de código desechando lineas de comando que ya no son útiles.... ¿y  ya?, ¿no hay más? Bueno si fuera así de sencillo no lo escribo como post en este blog sin embargo en esencia esto mismo.




En principio es esto mismo,  Al refactorizar, reordenamos código, cambiando su comportamiento interno sin cambiar su respuestas al exterior o su comportamiento externo. Y este tema se conecta muy bien con las pruebas unitarias (Unit Test) y el desarrollo guiado por pruebas (TDD), pues es la piedra angular de estas dos metodologías. Los desarrolladores realizamos refactorización en nuestro código de manera casi intuitiva sin darnos cuenta y sin saber que es una forma de hacer mantenimiento al código y hacerlo más leíble, a posible colaboradores. Esto le da un toque de mantenibilidad al código puesto que será por definición un código reusable para futuros proyectos, puede que ser modificado con mayor facilidad, le da capacidad sencillez en su ejecución y lectura.

Cuando buscamos que el código funcione mas óptimamente, realizamos sentencias que generen un gasto de memoria o que se adecuen más al framework que usamos. También si cambiamos esas sentencias if con múltiples else if  por el uso del swich para evaluar múltiples casos.

En síntesis la refactorización posee estas cuatro meta que explica a groso modo el fin de esta práctica:
  1. Mejorar la facilidad de comprensión del código
  2. Eliminar código muerto
  3. Facilitar el mantenimiento en el futuro
  4. Cambiar su estructura y diseño sin modificar su resultado

Aspectos basicos:

Refactorizar es limpiar el codigo.
     Pero no es solo eso, se ve mejor cuando hacemos por ejemplo un cambio de nombre de variable por algo más verboso o comprensible, cuando quitamos código duplicado, cuando quitamos documentación errónea;  En ese momento está usando la refactorizacion

La Refactorización no es Reescribir código:
Son ambas son parecidas y se tocan un poco pero no suenan ni hacen lo mismo. Cuando reescribimos código, replanteamos la idea original cambiando incluso los objetivos finales, Eso no es refactorización, pues la meta de la refactorización es no cambiar el comportamiento externo. Si una función da tomates enlatados, seguirá dando tomates enlatados.

Es un proceso continuo sin ser una tarea específica:
Es un proceso que debe ser hábito del desarrollador. No importa si cuando hiciste la función o clase usaste hasta magia arcana para que funcione. Tus principios como como buen programador deberían dictarte que releas eso para hacerle mejoras y basado en los dos aspectos anteriores, reautorices . Como equipo no puedes tomar la decisión de tomar todo un sprin o iteración dedicada a refactorizar código porque sería perder el tiempo, mejor hazlo antes de hacer merge request.

La refactorización no añade ni elimina funcionalidades:
Esto es curioso, la mayoría de los desarrolladores jurarían que lo hace pero la teoría dice que no. Es el caso de que la refactorización no añade codigo pero si codigo inútil. No añade ni remueve funcionalidad que aumente la productividad el proyecto  pero si  aquellas que no están en uso o no tienen meta dentro

Origen Matemático


Recuerdan que cuando estudiaron en materias como física o matemáticas, realizábamos un proceso en el cual tomábamos un polinomio y lo sintetizábamos a una expresión más atómica como por ejemplo:

(X-1) * (X+1)  que al factorizar quedaba  ----->    (X^2 - 1)


Pues la refactorización hace en el código exactamente lo mismo. Cuando escribimos nuestro programa solemos utilizar sentencias muy largas y poco eficientes para dar el resultado esperado. Sin embargo en la refactorización hacemos más "elegante " y eficiente dicho código, acortando el procedimiento e incluso cambiando su diseño interno. 


Paso a Post Depuración:

Al realizar refactorización verificamos que el procedimiento y proceso interno del programa sea mejor y más leíble. Pero esto se conecta perfectamente con las pruebas unitarias en las cuales la refactorización forma parte cuando queremos reorganizar nuestro código, debido a que una prueba no resulto exitosa o en caso de que sepamos que se realizaran pruebas al código. En ambos caso el comportamiento interno cambiara pero no siempre el externo. También ocurre que en ocasiones al colaborar en los proyectos y/o programas  de otras personas encontremos inconsistencias en ellos. la refactorización entonces sería el hecho de cambiarlo para hacerlo más ordenado,

No obstante puede ser tomada como limpieza de código pues muchas veces al releer una clase, por ejemplo, podemos encontrar líneas de código muerto o comentado que ya no tendrán ninguna validez. Para los casos en los cuales las sentencias del codigo cambie es el caso de python 2 al 3 o C#.net 2.0 al 3.5 o PHP con las conexiones a mysql, algunas sentencias cambian en el lenguaje como tal, sin embargo sigue coexistiendo ambas en versiones superiores con la recomendación de ser modificadas en el futuro. Es cuando nosotros cambiamos esas sentencias o funciones del lenguajes por las mas actuales al lenguaje para que este tenga aun vigencia en el tiempo.







No hay comentarios:

Publicar un comentario

NestJs Error on SecretKey for JWToken

  Imagine this you are coding happy, configuring your module has   auth.module.ts   using on your register the classic call to get env value...