MANTENIMIENTO
DE SOFTWARE
LIC. MARÍA ELENA CHÁVEZ BARCÉS
AGENDA
Introducción
Mantenimiento de software
Tipos de mantenimiento
Costos de mantenimiento
Proceso de mantenimiento
Métricas del proceso
Dificultades en el mantenimiento
Sistemas heredados (legacy)
Reingeniería
Roles y responsabilidades
Artefactos
INTRODUCCIÓN
Las grandes organizaciones tienen grandes inversiones en
software y lo consideran activos críticos del negocio, debe
cambiarse y actualizarse para mantener el valor de estos
activos.
La evolución de software consiste en un conjunto de
actividades necesarias para:
- Mantener operativo un sistema software,
- Mantener satisfecho a los usuarios,
- Maximizar la inversión y reducir costos,
- Alargar la vida del software,
- Adaptarlo a nuevos cambios o requisitos.
Los cambios en el software son inevitables
- Surgen nuevas exigencias;
- Cambios en el entorno empresarial;
- Los errores deben ser reparados;
- Se agregan nuevos equipos al sistema;
- Tiene que mejorarse el rendimiento o la confiabilidad
del software.
Un problema fundamental para las organizaciones es la
aplicación y gestión de cambios, en sus sistemas de software
existentes.
MANTENIMIENTO DE SOFTWARE
“La modificación de un producto software después
de su liberación para corregir fallas, mejorar su
desempeño u otros atributos de calidad o adaptar
el producto ante un cambio en su entorno de
operación [que lo hace incompatible con el
entorno de operación originalmente definido al
definir la configuración]”
IEEE Standard 610.12:1990, Glossary of Software Engineering
IEEE Standard 1219-1998. Software Maintenance
“El mantenimiento de software es la modificación al
código y/o documentación asociada debido a un
problema o necesidad de mejora. El objetivo
consiste en modificar el producto software vigente
mientras se preserva su integridad”.
Perspectiva de ISO/IEC 12207
EVOLUCIÓN DE SOFTWARE
(Resultado de las operaciones de mantenimiento).
El concepto de evolución de software implica un
cambio continuo desde un estado menor, más
simple o peor a uno superior o mejor.
Objetivos:
- Mantener operativo al sistema
- Mantener contentos a los usuarios
- Maximizar la inversión y reducir costos
- Alargar la vida del software
- Adaptarlo a nuevos cambios o requisitos
La evolución del software es una
garantía frente a su
obsolescencia
LEYES DE LEHMAN
TIPOS DE MANTENIMIENTO
Mantenimiento correctivo
Mantenimiento adaptativo
Mantenimiento perfectivo
Mantenimiento preventivo
MANTENIMIENTO CORRECTIVO
Se define como aquel proceso orientado a la reparación de
defectos existentes en un sistema software que se encuentra
en producción, ya sea porque :
- Falla o aborta el programa.
- El programa produce resultados no acorde con las
especificaciones.
- Los diseños y requisitos no están acordes con el software
que lo soporta.
- La documentación del usuario lleva hacia actividades que
provocan resultados incorrectos o fallas en el sistema.
La reparación de errores en el mantenimiento correctivo tiene
dos problemas:
1) Reparar un defecto tiene una probabilidad de introducir
otro defecto.
2) Incrementar las pruebas.
Tipos de mantenimiento correctivo básicos:
1) Reparaciones de emergencia: ejecutadas en corto tiempo y
generalmente sobre un único programa.
2) Reparaciones planificadas: arreglan defectos que no
requieren una atención inmediata y re-examinan todas las
reparaciones de emergencia.
MANTENIMIENTO ADAPTATIVO
El mantenimiento adaptativo garantiza cambiar el software
para adaptarlo a aquellos cambios que se producen en su
entorno de operación:
- Cambio de configuración
- Sistema operativo
- Interfaz de comunicación, etc.
Modificar el software para que interaccione con el entorno
cambiante.
Beneficios del mantenimiento adaptativo:
- Mejorar la productividad automatizando actividades.
- Incrementar la satisfacción del usuario.
- Incrementar las ganancias mediante la mejora de
respuestas a las oportunidades de negocio.
Otros factores:
- Necesidades internas.
- Competición.
- Requisitos externos.
MANTENIMIENTO PERFECTIVO
Acciones llevadas a cabo para mejorar la calidad interna de los
sistemas y su documentación en cualquiera de sus
características:
- Reestructuración del código,
- Definición más clara del sistema,
- Satisfacer nuevos requisitos,
- Optimización del rendimiento y
- Aumentar la eficiencia.
El objetivo principal es mejorar la calidad del software para
hacerlo más fácilmente mantenible y reducir el costo e impacto
de los cambios.
Actividades del mantenimiento perfectivo:
- Reingeniería
- Reescritura
- Actualización de la documentación.
El proceso de mantenimiento perfectivo consta de dos etapas:
1) Identificación de candidatos (antes de planificar la versión)
2) Corrección de los problemas de calidad identificados para
maximizar los beneficios.
MANTENIMIENTO PREVENTIVO
Cambiar el software para facilitar el futuro mantenimiento.
Permite detectar y corregir fallas latentes en el producto
software antes de que estas se manifiesten como fallas efectivas.
Sus técnicas son:
- Análisis de complejidad: complejidad de los módulos
- Análisis de funcionalidad: ayuda a estimar su valor
- Ingeniería inversa/recuperación de diseño: Debido a que el
código no está acorde con la documentación
- Reingeniería por partes: para sistemas de vida corta y cambios
- Traslación / reestructuración : Migración de plataforma.
COSTOS DE MANTENIMIENTO
Por lo general, mayores que los costos de desarrollo (dependiendo de la
aplicación). Afectados por factores tanto técnicos como no técnicos.
El envejecimiento del software puede tener altos costos de soporte
(ejemplo, lenguajes de programación antiguos, compiladores, etc.).
DISTRIBUCIÓN DEL ESFUERZO DEL
MANTENIMIENTO
Sommerville
FACTORES QUE INFLUYEN EN EL COSTO DEL
MANTENIMIENTO
Con el tiempo la estructura de los programas se degrada y se
hace más difícil de entender y cambiar.
Los desarrolladores del sistema pueden no tener la
responsabilidad contractual del mantenimiento, por lo que no
hay incentivo para diseñar los cambios en el futuro.
El costo de mantenimiento se reduce, si el mismo personal
participa en el mantenimiento.
El personal de mantenimiento a menudo no tienen experiencia y
tienen un conocimiento limitado de dominio.
PREDICCIÓN DEL CAMBIO
Predecir el número de cambios requiere la comprensión de
las relaciones entre el sistema y su entorno.
Las predicciones del mantenimiento se puede hacer mediante
la evaluación de la complejidad de los componentes del sistema.
La complejidad depende de:
- La complejidad de las estructuras de control;
- La complejidad de las estructuras de datos;
- Objeto, método (procedimiento) y el módulo
CICLOS DE MANTENIMIENTO
Construcción de una nueva versión como una simple
extensión.
Si los cambios no afectan la arquitectura y no hay
mayores riesgos que mitigar.
El mantenimiento constituye la última fase del ciclo de vida del
software.
Una vez finalizado el desarrollo, el producto entra en la fase
de operación y mantenimiento.
El mantenimiento debe asegurar que el producto sigue
satisfaciendo las expectativas del cliente.
Para facilitar el mantenimiento del producto es necesario un
desarrollo de calidad.
PROCESO DE MANTENIMIENTO
Desarrollar mecanismos de evaluación, control e
implementación de modificaciones.
Establecer una organización de mantenimiento.
Prescribir procedimientos de evaluación y de
información.
Definir una secuencia estandarizada de sucesos
para cada solicitud.
Establecer un sistema de registro de
información de las actividades.
Definir criterios de revisión y de evaluación de las
tareas de mantenimiento.
ACTIVIDADES DEL PROCESO DE MANTENIMIENTO
Ian Sommerville
SOLICITUDES DE CAMBIO
El mantenimiento de un producto software se
inicia desde el momento que, una vez
colocado el producto en producción /
operación, se comienzan a generar las
solicitudes de cambio sobre algún aspecto del
producto software.
Las solicitudes realizadas determinan la
naturaleza del mantenimiento requerido sobre
el producto software.
SOLICITUDES DE CAMBIO URGENTE
Cambios urgentes pueden llevarse a la práctica sin pasar por todas
las etapas del proceso de ingeniería de software
- Si tiene que ser reparada una falla grave del sistema;
- Si tienen efectos inesperados los cambios en el entorno del
sistema (por ejemplo, una actualización del sistema operativo);
- Si hay cambios de negocio que requieren una reacción muy
rápida (por ejemplo, el lanzamiento de un producto de la
competencia).
ANÁLISIS DE IMPACTO
Determina el ámbito de los cambios requeridos
como base para su implementación.
Las actividades principales del análisis de impacto
son:
- Evaluar las solicitudes de cambio sobre los
sistemas existentes, otros sistemas, hardware,
estructuras de datos, etc.
- Desarrollar una estimación preliminar de
recursos.
- Documentar el ámbito del cambio y actualizar la
solicitud realizada.
PLANIFICACIÓN DE VERSIONES
Implica determinar el contenido y tiempo de las versiones del
sistema.
Sus actividades incluyen:
- Ordenar y seleccionar las solicitudes de cambio para la
próxima versión.
- Organizar el trabajo y procesar los cambios.
- Preparar un documento sobre el plan de la versión del
sistema.
- Actualizar las solicitudes de cambio aprobadas.
IMPLEMENTACIÓN DE CAMBIOS
Para asegurar la conformidad de los cambios
aprobados con los requisitos originales.
Las actividades principales de las pruebas son
las siguientes:
- Implementar y revisar los cambios en el
código.
- Restaurar el código fuente bajo control
del sistema de gestión de la
configuración.
- Actualizar las solicitudes de cambio de
los módulos modificados.
MANTENIMIENTO DEL CÓDIGO
Estudiar el programa, el flujo de control general.
Evaluar la documentación existente.
Utilizar los listados de referencias cruzadas.
Hacer cambios con el mayor cuidado.
No eliminar código hasta estar totalmente
seguro.
Insertar variables propias para evitar problemas.
Mantener un registro de las actividades de
mantenimiento.
Evitar la necesidad de tener que tirar el programa
y volverlo a escribir.
(Yourdon, 1975)
PRUEBAS
Para asegurar la conformidad de los cambios
aprobados con los requisitos originales.
Las actividades principales de las pruebas son
las siguientes:
- Pruebas manuales
- Pruebas automatizadas
- Pruebas de integración
- Pruebas del sistema
- Pruebas de aceptación
VERSIÓN DEL SISTEMA
El objetivo de la versión del sistema es entregar
el sistema y su documentación actualizada a los
usuarios para su instalación y configuración.
- Establecer una planificación de las versiones
- Determinar el contenido de cada versión
MÉTRICAS DEL PROCESO
Para evaluar la mantenibilidad pueden ser
utilizados algunas métricas del proceso:
- Número de solicitudes de mantenimiento
correctivo;
- Tiempo promedio requerido para el
análisis de impacto;
- Tiempo medio para implementar una
solicitud de cambio;
- Número de solicitudes de cambios pendientes....
Si alguno o todos estos van en aumento, esto puede
indicar una disminución de la capacidad de
mantenimiento…
MODELO DEL ESFUERZO DE MANTENIMIENTO
Esfuerzo total (M)
M = p + K·exp(c - f)
Esfuerzo productivo (p)
Constante empírica (K)
Medida de la complejidad atribuida a la falta de un buen
diseño y documentación (c)
Medida del grado de familiaridad con el software (f)
Se distribuye entre...
Actividades productivas. Análisis, evaluación, modificación del diseño y
codificación.
Actividades menos productivas. Interpretación y compresión.
DIFICULTADES EN EL MANTENIMIENTO
Dificultad para seguir la evolución del software a través de varias
versiones al no existir documentación sobre los cambios.
Dificultad para comprender un programa ajeno.
Dificultad para contactar con los desarrolladores.
No existe una documentación apropiada
No se prevé el cambio cuando se diseña.
Diseño pobre/rígido.
Cambios tecnológicos.
El mantenimiento no se considera un trabajo atractivo.
...todos tienen su origen en las deficiencias del desarrollo
SISTEMAS HEREDADOS (LEGACY)
Las organizaciones que se basan en sistemas heredados deben
elegir una estrategia para la evolución de estos sistemas:
- Dividir completamente el sistema y modificar los procesos
de negocio para que ya no sean necesarios;
- Continuar el mantenimiento del sistema;
- Transformar el sistema (reingeniería) para mejorar su
capacidad de mantenimiento;
- Colocar el sistema como un sistema nuevo.
La estrategia elegida debería depender de la calidad del
sistema y su valor de negocio.
CATEGORÍAS EN SISTEMAS HEREDADOS
Baja calidad, bajo valor comercial. Estos sistemas deben ser
desechados.
Baja calidad, alto valor comercial. Estos hacen una
importante contribución con las empresas, pero son caros de
mantener. En caso de hacer re-ingeniería o reemplazarlo.
Alta calidad y bajo valor comercial. Reemplazar con COTS,
o mantener completamente.
Alta calidad, alto valor comercial. Continuar con el
mantenimiento.
REINGENIERÍA
“Reingeniería es la transformación sistemática de un sistema
existente a una nueva forma para realizar mejoras de la
calidad en operación, capacidad del sistema, funcionalidad,
rendimiento o capacidad de evolución a bajo costo, con un
plan de desarrollo corto y con bajo riesgo para el cliente”.
Definición dada por el Reengineering Center
del Software Engineering Institute de la
Universidad Carnegie Mellon
REINGENIERÍA
Proceso de recuperación de la información del diseño de un
software existente para alterarlo o reconstruirlo en un esfuerzo
de mejorar la calidad general.
El software resultante implementa la función del sistema
existente.
El desarrollador añade nuevas funciones y/o mejora el
rendimiento general.
Se aplica en el mantenimiento preventivo. Los programas que
sean susceptibles de cambiar en un futuro cercano serán
preparados para ese cambio.
VENTAJAS DE LA REINGENIERÍA
Reducción de riesgos
- Hay un alto riesgo en el desarrollo de un nuevo software.
Puede haber problemas de desarrollo, de personal y de
especificación.
Reducción de costos
- El costo de re-ingeniería es mucho menor que el costo de
desarrollar un nuevo software.
INGENIERÍA DIRECTA Y REINGENIERÍA
INGENIERÍA INVERSA
La ingeniería inversa es el proceso de análisis de software para
identificar los componentes software y sus interrelaciones y
para crear representaciones del software en otra forma o en
niveles más altos de abstracción.
La ingeniería inversa es pasiva; no cambia el software, ni da
como resultado un nuevo software.
Los esfuerzos de ingeniería inversa producen gráficos de
llamadas y gráficos de flujo de control desde el código fuente.
Un tipo de ingeniería inversa es la redocumentación. Otro tipo
es la recuperación de diseño.
La refactorización es una transformación de programa que
reorganiza un programa sin cambiar su comportamiento, y es
una forma de ingeniería inversa que busca mejorar la
estructura del programa.
Finalmente, la ingeniería inversa de datos ha ganado
importancia en los últimos años, donde los esquemas lógicos
se recuperan de bases de datos físicas.
Elementos de ingeniería inversa
Nivel de abstracción, completitud, interactividad y direccionalidad
ROLES Y RESPONSABILIDADES
Administrador del mantenimiento
- Evaluación del impacto
- Planeamiento
- Análisis de costo-beneficio
Desarrollador
- Implementar los cambios al software
- Ejecutar pruebas unitarias
Revisor
- Implementar elementos de pruebas
- Revisión de código fuente
ARTEFACTOS
Solicitud de cambios
Plan de mantenimiento de software
Análisis de impacto
Análisis costo - beneficio
Lista de riesgos
Registro de resultados de las pruebas
Informe de revisiones