Análisis y diseño en el desarrollo de software

En octubre del 2013 estaba desarrollando una aplicación odontológica en el trabajo. Debida de crear una odontograma que pudiera representar todos los posibles tratamientos que ofrece un dentista, desde amalgamas, resinas, endodoncias, entre otros. Estebamos cortos de tiempo, por lo que el análisis y diseño del odontograma y sus tratamientos fue muy rápido y pobre. Fue cuando debíamos desarrollar la administración de todos los tratamientos, cuando los problemas empezaron. Tenía tres tipos de tratamientos, los que debían de dibujarse, los que no podían ser dibujados y eran para un diente en específico y los que eran para toda la boca y no podían ser dibujados.  A la mitad del desarrollo de los 3 administradores nos dimos cuenta que el código de la administración de los tratamientos era muy parecido. Queríamos hacer un refactoring al código que solucionaría todos nuestros problemas de diseño y dejaría el código mantenible, pero por el poco tiempo con el contábamos y con administradores a punto de terminarse, no nos arriesgamos ya que hubiéramos tenido que volver a probar todo.

El problema se agravó cuando fuimos a presentarle lo realizado al odontólogo. Este nos dijo que algunos de los tratamientos no eran implementados de la forma correcta, además muchos de los tratamientos tenían diferentes etapas o subprocesos.

Lo ideal acá hubiera sido hacer un alto, hacer un refactoring al diseño actual, tomando en cuenta los nuevos requerimientos; sin embargo nos pasó lo mismo que la primera vez y decidimos no arriesgarnos y desarrollamos los nuevos requerimientos sobre lo que ya teníamos. En conclusión, todo fue un gran caos. Una aplicación con un diseño difícil de entender, los métodos se nos confundían a cada rato, funcionalidad repetida hasta cinco veces y código poco mantenible y extendible. Además todas estas dificultades hicieron que nos pasáramos de la fecha de entrega.

 Al finalizar el proyecto, me tome un tiempo hacer retroalimentación, reflexionar sobre lo hecho, lo aprendido por supuesto los errores cometidos. Es por eso que logre sacar las siguientes conclusiones que me servirán de experiencia para futuros proyectos:

  • Aunque se cuente con poco tiempo de desarrollo, siempre se debe tomar el tiempo necesario para analizar los requerimientos. Se debe estar seguro de entender los requerimientos al 100%. En mi caso, yo los entendí como debía cuando fui a la segunda reunión con el cliente y ya tenía una gran parte de funcionalidad desarrollada. No se debe comenzar a desarrollar sin tener los requerimientos bien definidos y claros.
  • Un gran error que tuvimos fue no haber entendido como funcionaban los tratamientos de odontología y los conceptos que se usaban. Esto dificulto mucho el análisis de los requerimientos y que posteriormente afecto el diseño realizado. Siempre se debe entender al máximo el dominio del problema.
  • Es esencial tomarse el tiempo necesario para realizar un buen diseño de lo que se va a realizar. No es necesario hacer un diseño perfecto, pero al menos se debe velar por realizar uno aceptable, usando como parámetros la extensibilidad, mantenibilidad y entendibilidad.  Nunca se sabe cuándo nos pedirán nuevos requerimientos y o haya que cambiar algo, por lo que tener un buen diseño hará que esto sea más fácil.
  • Si haya se ha desarrollado gran parte de la funcionalidad y logramos identificar funcionalidad repetitiva o partes que de código que se pueden mejorar, lo idea es hacer un alto en el camino y hacer refactoring. No obstante, antes de hacer esto se deben de tomar en cuenta dos cosas: Proximidad de la fecha de entrega  y estar seguro que entender los requerimientos como se deben. Si la fecha de entrega está muy próxima  y la mayoría de las cosas funcionan bien, se debe posponer el refactoring hasta una fecha oportuna
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s