Introducción.
El Mantenimiento de software es una de las
actividades en la Ingeniería de Software y es el proceso de mejorar y optimizar
el software desplegado (revisión del programa), así como también remediar los
defectos.
El mantenimiento de software es también una de
las fases en el Ciclo de Vida de Desarrollo de Sistemas (SDLC ó System
Development Life Cycle), que se aplica al desarrollo de software. Se estima que hay más de 100 millones de líneas de código en
producción en el mundo. Como hasta el 80% de la misma no está estructurado,
parcheado y no está bien documentada. El mantenimiento puede aliviar estos
problemas. La fase de mantenimiento es la fase que viene después del despliegue
(implementación) del software en el campo.
La fase de mantenimiento de software involucra
cambios al software en orden de corregir defectos y dependencias encontradas
durante su uso tanto como la adición de nueva funcionalidad para mejorar la
usabilidad y aplicabilidad del software.
Hay cuatro tipos de mantenimiento: Correctivo,
Adaptativo, Perfectivo y Preventivo.
- El mantenimiento correctivo es la reparación de vicios o defectos encontrados. Un defecto puede resultar de errores de diseño, errores lógicos y los errores de codificación. Los errores de diseño ocurrir cuando, por ejemplo, los cambios realizados en el software son incorrectos, incompleto, mal comunicados o la solicitud de cambio es incomprendido. Los errores lógicos son el resultado de las pruebas no válidas y las conclusiones, la aplicación incorrecta de diseño especificaciones, el flujo de la lógica defectuosa o incompleta de los datos de prueba. Los errores de codificación son causados por aplicación incorrecta de la lógica de diseño detallado y el uso incorrecto del código fuente lógica. Los defectos también son causados por errores de procesamiento de datos y errores de rendimiento del sistema. Todos estos errores, a veces llamados "errores residuales" o "errores", evitar que el software conforme a sus especificaciones acordadas. La necesidad de mantenimiento correctivo es generalmente iniciado por los informes de error formuladas por los usuarios finales. Algunos ejemplos de mantenimiento correctivo incluyen la corrección de la falta de pruebas para todas las posibles condiciones o una incapacidad para procesar el último registro en un archivo.
- El mantenimiento adaptativo consiste en la adaptación del software a los cambios en el medio ambiente, tales como el hardware o el sistema operativo. El término entorno en este contexto se refiere a la totalidad de todas las condiciones e influencias que actúan desde fuera sobre el sistema, para ejemplo, reglas de negocio, las políticas gubernamentales, los patrones de trabajo, software y hardware plataformas de explotación. La necesidad de mantenimiento adaptativo puede sólo ser reconocido por la vigilancia del entorno. Un ejemplo de una política de gobierno que puede tener un efecto en un sistema de software es la propuesta de contar con una "moneda única europea», la ECU. La aceptación de este cambio requerirá que los bancos en los distintos Estados miembros, por ejemplo, hacer significativo cambios en sus sistemas de software para dar cabida a esta moneda. Otros ejemplos son una implementación de un sistema de gestión de base de datos para un sistema de aplicación existente y el ajuste de los dos programas para que utilice las mismas estructuras de registro. Un estudio de caso sobre la adaptación mantenimiento de "B4Ucall 'una aplicación de Internet es otro ejemplo. B4Ucall es una aplicación de Internet que ayuda a comparar los paquetes de telefonía móvil ofrecido por distintos proveedores de servicios. En un estudio sobre B4Ucall, se discute que la adición o eliminación de un proveedor de servicio completo de nuevo en la aplicación de Internet requiere mantenimiento adaptativo en el sistema.
- El mantenimiento perfectivo se ocupa principalmente de acomodar a usuarios nuevos o modificados requisitos. Mantenimiento perfectivo se refiere a mejoras funcionales para el sistema y actividades para incrementar el rendimiento del sistema o para mejorar su interfaz de usuario. Una pieza de éxito de software tiende a ser sometido a una sucesión de 7 cambios, resultando en un incremento en el número de requisitos. Esto se basa en la premisa de que a medida que el software se vuelve útil, los usuarios tienden a experimentar con nuevos casos más allá del alcance para el que fue desarrollado inicialmente. Ejemplos de mantenimiento perfectivo incluyen modificar el programa de nóminas para incorporar un asentamiento nuevo sindicato, la adición de un nuevo informe en el sistema de análisis de ventas, la mejora de una terminal de diálogo para que sea más fácil de usar, y la adición de una ayuda en línea comando.
- El mantenimiento preventivo se preocupa por actividades de mantenimiento destinadas a incrementar la del sistema mantenimiento, tales como la actualización de la documentación, la adición de comentarios, y la mejora de la estructura modular del. El efecto a largo plazo de las medidas correctoras, cambios adaptativos y perfectivo aumenta la complejidad del sistema. Como un gran programa es continuamente cambiado, su complejidad, lo que refleja deterioro de la estructura, los aumentos a menos que el trabajo se hace para mantener o educirlo. Este trabajo se conoce como cambio preventivo. El cambio se inicia generalmente desde dentro de la organización de mantenimiento con la intención de programas que hacen más fácil de entender y por lo tanto, facilitar los trabajos de mantenimiento futuro. Ejemplos de cambio preventivo incluyen la reestructuración y optimización de código y actualización documentación.
Entre estos cuatro tipos de mantenimiento,
sólo el mantenimiento correctivo es mantenimiento
"tradicional". Los otros tipos se pueden considerar "evolución"
del software. La evolución a largo plazo se ha utilizado desde la década de
1960 para caracterizar la dinámica de crecimiento de software. La evolución del
software es ampliamente utilizado en el mantenimiento del software comunidad.
Por ejemplo, el diario de mantenimiento de software añadido el término.
La importancia del mantenimiento del
software como software de sistemas envejecen, se vuelve cada vez más difícil
mantenerlos 'en funcionamiento' sin mantenimiento. Las siguientes historias muestran
la importancia del software mantenimiento de fase en el ciclo de vida de
desarrollo. Las tarifas por mascotas perdidas Toronto costará 700.000 dólares "...
la ciudad [de Toronto] perdió por casi 700.000 dólares en honorarios de
mascotas [en 2000] porque casi la mitad de perro de Toronto y los dueños de
gatos nunca se facturaron [debido a informatizado facturación fallo del
sistema]. El personal que sabía cómo manejar el sistema de facturación
computarizado fue despedido. [...] Sólo un empleado de la ciudad comprendido
nunca el sistema lo suficientemente bien como para depurarlo cuando surgían
problemas. Ese empleado sin dejar a nadie para que funcione de nuevo cuando el
sistema se metió en problemas y se desplomó. "(Bowker [2001]) 8 Reino
Unido y Y2K: $ 50 mil millones "La Prensa Asociada hoy [14 de abril 1997]
informa de que Robin Guenier, jefe de TaskForce del Reino Unido de 2000, estima
que los esfuerzos del Y2K reprogramación tendrá un costo de Gran Bretaña 50
billones de dólares, tres veces los cálculos aproximados de los consultores de
negocios y computación las empresas de servicios. Guenier sugirió que 300.000
personas podrían ser obligados a hacer frente a la problema. Coincidentemente,
ese número es más o menos equivalente a la cantidad de tiempo completo profesionales
de la informática en el Reino Unido. " La primera historia implica la
necesidad de mantenimiento correctivo. Se estima que hay Son más de 100
millones de líneas de código en la producción en el mundo, y hasta el 80% de que
no está estructurado, remendada y documentado mal (van Vliet [2000]). Es
necesario mantener estos sistemas de software operacional. Errores y defectos
de diseño de software debe ser corregida. Alternativamente, la segunda historia
es un ejemplo de un cambio adaptativo para el Y2K ambiente. Los sistemas
también deben adaptarse a los cambios del entorno y el usuario necesidades
requisito.
De hecho, una proporción
sustancial de los recursos asignados dentro de la Información Industria de la
tecnología se dirige hacia el mantenimiento de sistemas informáticos. Software Anual
costo de mantenimiento en los Estados Unidos se ha estimado en más de $ 70 mil
millones para diez mil millones de líneas de código existente (Sutherland
[1995]). A nivel de empresa, Nokia Inc.
Utilizado alrededor de $ 90 millones para
prevención de errores Y2K correcciones. Muchos estudios se han hecho para
investigar el costo de mantenimiento de software proporcional, en otras
palabras, la relación costo de nuevo desarrollo frente a mantenimiento. El
coste total de mantenimiento del sistema se estima que comprenden al menos 50%
de los costes totales del ciclo de vida. Los costes de mantenimiento
proporcionales variar de 49% para un producto farmacéutico empresa al 75% para
una empresa de automóviles en algunos estudios.
El mantenimiento correctivo representaron poco
más de 20% del total, en el promedio. Mantenimiento adaptativo representaron
poco menos de 25%. Perfectivo mantenimiento representaron más del 50%. En
particular, las mejoras para los usuarios representaron El 42% del esfuerzo
total de mantenimiento. Sólo el 5% se gastó en mantenimiento preventivo actividades.
Técnicas del Mantenimiento del Software
Dentro de la ingeniería del software se
proporcionan soluciones técnicas que permiten abordar el mantenimiento de
manera que su impacto en coste dentro del ciclo de vida sea menor. Las
soluciones técnicas pueden ser de tres tipos:
- Ingeniería inversa: Análisis de un sistema para identificar sus componentes y las relaciones entre ellos, así como para crear representaciones del sistema en otra forma o en un nivel de abstracción más elevado.
- Reingeniería: Modificación de un producto software, o de ciertos componentes, usando para el análisis del sistema existente técnicas de ingeniería inversa y, para la etapa de reconstrucción, herramientas de ingeniería directa, de tal manera que se oriente este cambio hacia mayores niveles de facilidad en cuanto a mantenimiento, reutilización, comprensión o evolución.
- Reestructuración del software: Cambio de representación de un producto software, pero dentro del mismo nivel de abstracción.
El objetivos de estas técnicas es proporcionar
métodos para reconstruir el software, ya sea reprogramándolo, redocumentándolo,
rediseñándolo, o rehaciendo alguna/s característica/s del producto. La
diferencia entre las soluciones descritas radica en cuál es el origen y cuál es
el destino de las mismas (producto inicial y/o producto final).
Gráficamente, estas tres soluciones técnicas
se enmarcan en el ciclo de vida de la siguiente manera:
Figura 1. Relaciones entre los términos
asociados con la Reingeniería.
La Ingeniería directa corresponde al
desarrollo del software tradicional. La Ingeniería Inversa es el proceso de
análisis de un sistema para identificar sus componentes e interrelaciones y
crear representaciones del sistema en otra forma o a un nivel más alto de
abstracción. La Reingeniería es el examen y la alteración de un sistema para
reconstruirlo de una nueva forma y la subsiguiente implementación de esta nueva
forma. La Reestructuración es la modificación del software para hacerlo más
fácil de entender y cambiar.
La reingeniería hace referencia a un ciclo,
esto es, se aplican técnicas de ingeniería inversa para conseguir
representaciones de mayor abstracción del producto y sobre ellas se aplican
técnicas de ingeniería directa para rediseñar o reimplementar el producto.
Cualquiera de estas técnicas se puede aplicar
a lo largo de todas las fases del ciclo de vida o bien entre algunas de sus
fases.
También existen otras tecnologías, como por
ejemplo:
- La remodularización: consiste en cambiar la estructura modular de un sistema de forma que se obtenga una nueva estructura siguiendo los principios del diseño estructurado.
- Análisis de la facilidad de mantenimiento: normalmente la mayor parte del mantenimiento se centra relativamente en unos pocos módulos del sistema.
- Visualización: el proceso más antiguo para la comprensión del software.
- Análisis y mediciones: son importantes tecnologías que estudian ciertas propiedades de los programas.
Cuestionario.
Para una mayor comprensión del tema, se recomienda contestar las siguientes preguntas.
1. ¿Qué es el
mantenimiento de Software?
2. ¿Para qué nos sirve
el mantenimiento de Software?
3. ¿Cuántos tipos de
mantenimiento de Software existen?
4. ¿En qué consiste el
mantenimiento correctivo?
5. ¿En qué consiste el mantenimiento adaptativo?
6. ¿En qué consiste el
mantenimiento perfectivo?
7. ¿En qué consiste el
mantenimiento preventivo?
8. ¿Cuál es la
importancia del mantenimiento de Software?