domingo, 9 de febrero de 2014

Soporte/Mantenimiento de Sofware, Clasificación y Factores de costo.



Introducción.
Después de que los sistemas hayan sido desarrollados, inevitablemente han de sufrir cambios si tienen que seguir siendo útiles. Una vez que el software comienza a utilizarse, surgen nuevos requerimientos y los requerimientos existentes cambian Los cambios en los procesos de negocio a menudo generan nuevos requerimientos en el software existente. Algunas partes del software tienen a modificarse para corregir errores encontrados en su funcionamiento, adaptarlo a una nueva plataforma  y mejorar su rendimiento. Por lo tanto, el desarrollo de software no se detiene al entregarlo, sin que continua durante el tiempo de vida del sistema. (Sommerville, 2005)

Desarrollo.

Definición de conceptos.

Es en este punto del desarrollo de software donde aparecen los conceptos de soporte y mantenimiento. Hay múltiples y muy distintas definiciones de estos conceptos, que pueden llegar a ser utilizados como sinónimos, aunque no en todos los casos esto sea correcto.  Algunas de las definiciones más aceptadas son las siguientes:
·         Soporte de Software:
o   “El soporte de software es el conjunto de servicios que tienen la finalidad de  ayudar a resolver los problemas que puedan presentárseles a los usuarios, mientras hacen uso de servicios, programas o dispositivos. (Sommerville, 2005)
o   “Dícese de todo aquel servicio especializado y directo que provee de ayuda técnica para asegurar un buen uso por parte del usuario  de los productos de software que se consumen.” (Weitzenfield, 2004)
o   “Es la ayuda prestada a los usuarios de sistemas de información, plataformas, programas y demás productos de software con el fin último de brindar infamación que facilite el uso del software, así como de despejar dudas y de auxiliar  a los usaros para actuar durante casos de un malfuncionamiento por parte del sistema.” (Pressman, 2005)
·         Mantenimiento de Software:
o   “Etapa del desarrollo de software posterior a la implantación en la cual el sistema original es modificado debido algún fallo o error, ya sea presentado o potencial, o cambios en las funcionalidades del sistema debido a cambios en los procesos en que está basado o cuestiones externas a los requerimientos originales.” (Fouruzan, 2007)
o   “La fase  mantenimiento se centra en el cambio que va  asociado a la corrección de errores, a las adaptaciones requeridas a medida que evoluciona el entorno del software, y a cambios debidos a las mejoras producidas por los requisitos cambiantes del cliente” (Pressman, 2005)
o   “Actividades realizadas a un software funcionando que tienen la finalidad de actualizar las funciones del software, dar atención a nuevos requerimientos y cambios en los ya existentes y poder corregir fallos que se presentaron en el software durante su utilización así como prevenir errores que pudieran acontecer” (Weitzenfield, 2004)
o   “Proceso general de cambiar un sistema después de haberlo entregado” (Sommerville, 2005)
Tras analizar estas definiciones, podemos darnos cuenta que la principal diferencia que tienen el mantenimiento y el soporte es a quien está dirigido, mientras que el soporte son los servicios y ayudas que le son prestados al usuario, el mantenimiento va aplicado al software con lo que se constituyen finalidades completamente distintas.
A continuación, se profundizara en cada uno de los conceptos que se han definido anteriormente.

Mantenimiento de software.

Tras haber definido lo que es el mantenimiento de software, podemos proceder a interpretar las características de cada uno de los distintos tipos que existen, ya que hay diversas formas y distintos propósitos por los que se le da mantenimiento al software.
Los cambios realizados al software pueden ser cambios sencillos para corregir errores de código, cambios mas extensos para corregir errores de diseño o mejoras significativas para corregir errores de especificación o acomodar nuevos requerimientos y para modificar los componentes del sistema existente y añadir nuevo en caso de una nueva funcionalidad. (Sommerville, 2005)
A partir de la finalidad del mantenimiento, podemos clasificar el mantenimiento en distintos tipos:
Ø  Mantenimiento Preventivo.
Es aquel mantenimiento que pretende anticipar potenciales errores o fallos, modificando el sistema para evitarlos en el futuro. (Weitzenfield, 2004)
Muchas veces los desarrolladores dependen de los usuarios para ofrecer mantenimiento preventivo, ya que es durante la ejecución de un programa o al usar un sistema donde pueden observase los potenciales errores, o simplemente indicios o detalles que no ocasionan un malfuncionamiento del software pero pueden llevar a eso o ser malinterpretados. Su costo suele variar, ya que puede tratarse de correcciones sencillas de código o desencadenar una modificación en el diseño del sistema.
Ejemplos: Validaciones incorrectas de formularios, información incorrecta.

Ø  Mantenimiento Correctivo.
Mantenimiento para reparar defectos del software. (Sommerville, 2005)
Son aquellas modificaciones que se dan con la finalidad de reparar o corregir un error que ya se presento durante la ejecución de un programa o uso de un sistema. Al igual que la clasificación anterior, tiene un costo muy variable ya que puede corregir errores sencillos de código ó operación o también errores de diseño, los cuales son muchos más costosos.
Ejemplos: Errores en bases de datos, mal manejo de procesos de negocio.
Ø  Mantenimiento Adaptativo.
Mantenimiento para adaptar el software a diferentes entornos operativos. (Sommerville, 2005) Este tipo de mantenimiento se requiere cuando cambia algún aspecto del entorno del sistema, como por ejemplo el hardware, la plataforma del sistema operativo u otro software del que dependa, suele tener un costo medio-alto, ya que se requieren contemplar diversos aspectos desde amientes gráficos hasta el diseño estructural del software.
Ejemplos: Implementación de multiplataforma, actualizaciones por hardware (monitores, discos duros, memorias, etc.).

Ø  Mantenimiento perfectivo.
Mantenimiento para añadir o modificar funcionalidades del sistema. (Sommerville, 2005)
Este mantenimiento es necesario cuando los requerimientos de un sistema cambian respondiendo a cambios del proceso de negocio. Pretende perfeccionar el software implementando nuevos requerimientos o implantando nuevos en el sistema, en esencia tiene el fin de mantener la funcionalidad del sistema pero mejorando su estructura su rendimiento, en general, ya que las modificaciones suelen ser mucho mayores que en otro tipo de mantenimiento, el costo suele ser elevado.
Ejemplos: Nuevos módulos, mejora de procesos, implementación de nuevas tecnologías.


¿Cuáles son los factores que elevan el costo del mantenimiento?

 Una razón importante por la que los costos de mantenimiento son altos es que es más caro añadir funcionalidades después de que el sistema este en funcionamiento que implementar la misma funcionalidad durante el desarrollo. Los factores clave que distinguen el desarrollo y mantenimiento y conducen a costos más elevados son: (Sommerville, 2005)
1.       Estabilidad del equipo de desarrollo.
Sabemos que es normal que un equipo de trabajo pueda disolverse tras la entrega de un proyecto. Es posible que los nuevos integrantes del equipo encargado del mantenimiento del sistema ano conozcan el mismo, ni las razones por las que debe dársele el mantenimiento.
 Es difícil, costoso y lleva tiempo capacitara quipos de trabajo para que sean competentes en el proceso de mantenimiento de un sistema, ya que primero se debe asegurar la total comprensión del mismo antes de producir cambios en el. (Weitzenfield, 2004)

2.       Responsabilidad contractual.
El contrato para mantener un sistema, normalmente está separado al contrato para desarrollar un sistema. Este factor, junto con la ausencias del estabilidad en el equipo, que podría no ser el mismo que mantiene que el que desarrolla implica dificultades, ya que si el equipo de desarrollo realiza ciertas acciones para ahorrar esfuerzo durante el proceso de desarrollo lo hará sin tomar en cuenta lo difícil que puede llegar a ser modificarlo, ni preocupándose porque se pudieran incrementar costos de mantenimiento. (Sommerville, 2005)

3.       Habilidad del personal.
Es sabido que muy a menudo se asignan a equipos menormente capacitados para el mantenimiento que para el desarrollo, ya que muchas veces los desarrolladores consideran al mantenimiento como un proceso donde se requieren de menos habilidades que durante las fases del desarrollo. (Pressman, 2005)

4.       Edad y estructura del programa.
Los programas y su estructura suelen degradarse con el tiempo y la salida al mercado de nuevas tecnologías. Las versiones antiguas suelen ser desarrolladas sin gestión de configuraciones, lo que vuelve difícil ubicar versiones para modificar el sistema.
 

¿Qué se debe considerar en el entorno para realizar cambios?

Para evaluar las relaciones entre un sistema y su entorno debería tomarse en cuenta:
Ø  Número y complejidad de interfaces.
Es más probable un cambio en un sistema con muchas interfaces, entre mayor el número, mayor la posibilidad de un cambio.
Ø  Número de requerimientos volátiles.
Los requerimientos volátiles son aquellos que se basan en procesos de empresas independientes o procedimientos internos y únicos, entre más de estos existan en un sistema, es más probable un cambio, ya que son muy susceptibles a modificarse con el tiempo.
Ø  Procesos de negocio.
Ya que los procesos de negocio van cambiando acorde con la sociedad, mientras mas procesos de negocio se contemplen, habrá más peticiones de cambio en el sistema. (Sommerville, 2005)

Conclusión.
A partir de los conceptos definidos y examinados, llegamos a la conclusión de que el mantenimiento y el desarrollo de un sistema, no deben ser considerados como etapas independientes una de la otra, ya que muchas veces, esto puede traer problemas durante la fase de mantenimiento, incluidos el equipo y las versiones, y elevando los costos que se tienen previstos.
Se observa que el proceso de mantenimiento tiene la finalidad de alargar la vida funcional del software y que más que un gasto se considera una inversión que protege el costo cubierto por el desarrollo inicial del software.
También diferenciamos claramente el distinto enfoque que tienen el mantenimiento y el soporte de software, sus finalidades y los casos en que se debe hacer uso de cada uno.

Bibliografía

Fouruzan, B. A. (2007). Desarrollo de software y UML. McGraw-Hill.
Pressman, R. (2005). Ingeniería de Software. Pearson.
Sommerville, I. (2005). Ingenieria de Software (Séptima ed.). Ciudad de México: Pearson.
Weitzenfield, A. (2004). Ingenieria de Software orientada a objetos con UML, Java e internet. Thomson.

No hay comentarios:

Publicar un comentario