Armando Halbinger

Tuesday, June 01, 2004

La Refactorización de código como una forma de Reuso de Software

Esta última temporada me tocó programar un componente para el proyecto donde estoy asignado y mi primer enfoque al escribir código fue: "funcionalidad y usabilidad para el usuario", es decir, que haga todo lo que el usuario requiere y además que sea intuitivo de usar y agradable para la vista. En teoría buen enfoque, pero... aunque tuvimos varias sesiones para definir la arquitectura por la complejidad alrededor de la pieza, la implementación seguía un modelo n-tier y además estaba optimizado para cumplir con el performance requerido, no era "trivial" darle mantenimiento y/o extenderlo.

En este punto debes tomar una decisión:
1. Dejar así el código porque funciona correctamente, resuelve el problema del usuario, implementa una buena arquitectura por si la solución escala, etc., pero al desarrollador que le toque darle mantenimiento se va a "divertir" y acordarse de tí seguido; ó
2. Entrar a la etapa de "refactorización", que es una práctica de eXtreme Programming dónde puedes "depurar" tu código.

Desde hace algún tiempo yo adopté la 2a opción y uno de los motivos es el reuso de software.

Debido al tiempo y costo, no se acostumbra en la etapa de Diseño (modelo tradicional de desarrollo) o Planeación (para los que usan MSF) llegar a un nivel de detalle tan profundo al modelar un sistema como para definir todo el reuso posible dentro del mismo y el resultado es que se reescribe el mismo código varias veces dentro de la aplicación y en algunas ocasiones de diferente manera (lease "cada quien lo escribe como se lo imagina"). Los problemas de estas prácticas son evidentes y el resultado más crítico se traduce en "otro sistema más" cuyo costo apenas empieza por el mantenimiento de miles y miles líneas de código repetidas, sin estándares y con diferente performance.

Una forma de resolver este problema es mediante la Refactorización porque nos ayuda de la siguiente manera:
1. Permite revisar si cumplimos con los estándares
2. Permite eliminar funcionalidad obsoleta
3. Permite borrar las "líneas comentadas" de cuando estábamos haciendo pruebas unitarias
4. Permite analizar si el diseño de las clases/métodos/propiedades es el más lógico para otros desarrolladores del equipo (Usabilidad de las Clases) y modificarlo
5. Permite concentrarse en el código final para decidir si queremos darle atributos para que sea extensible o mantenerlo encapsulado
6. Permite recodificar segmentos de código que hagan uso de piezas ya existentes dentro del proyecto


Y lo más importante, es que crea en el desarrollador una cultura de reuso y buenas prácticas porque la experiencia que gana al revisar su propio código en un nivel de abstracción superior se convierte en que su siguiente sistema tendrá las prácticas aprendidas en el anterior y así sucesivamente.

Inténtalo, es sorprendente el beneficio que obtienes!!!

1 Comments:

  • Ciertamente la técnica refactorización es muy útil para evitar la degradación del diseño en software.
    De hecho es la técnica que eXtreme Programming tiene para diseñar, si es lo que quieres decir con 'depurar'.

    Ver:
    http://martinfowler.com/articles/designDead.html
    http://martinfowler.com/articles/newMethodology.html

    By Anonymous Anonymous, at June 3, 2004 at 6:14 AM  

Post a Comment

<< Home