Manteniemiento Del Software

81
MANTENIMIENTO DEL SOFTWARE

Transcript of Manteniemiento Del Software

Page 1: Manteniemiento Del Software

MANTENIMIENTO DEL SOFTWARE

Page 2: Manteniemiento Del Software

MANTENIMIENTO DEL SOFTWARE

Page 3: Manteniemiento Del Software

Introducción

Page 4: Manteniemiento Del Software

Introducción

Page 5: Manteniemiento Del Software
Page 6: Manteniemiento Del Software
Page 7: Manteniemiento Del Software

1. IEEE 1219: “modificación de un producto software después de haber sido entregado [a los usuarios o clientes] con el fin de corregir los defectos, mejorar el rendimiento u otros atributos, o adaptarlo a un cambio de entorno”.

2. Estándar ISO 12207: “el proceso de mantenimiento contiene las actividades y tareas realizadas por el mantenedor. Este proceso se activa cuando el producto software sufre modificaciones en el código y la documentación asociada, debido a un problema o a la necesidad de mejora o adaptación. El objetivo es modificar el producto software existente preservando su integridad. Este proceso incluye la migración y retirada del producto software. El proceso termina con la retirada del producto software”. Asumiremos que el mantenedor es la organización que proporciona el servicio de mantenimiento.

MANTENIMIENTO DEL SW ¿QUÉ ES?

Page 8: Manteniemiento Del Software

Con el comienzo del mantenimiento termina el ciclo de desarrollo, y éste se prolonga durante el resto del ciclo de vida (hasta la retirada del producto).

Definición de

requisitos

Diseño

Codificación y

pruebas unitarias

Integración y

pruebas

Mantenimiento

UBICACIÓN DENTRO DEL CICLO DE VIDA

Page 9: Manteniemiento Del Software

Tipos de mantenimiento1. Correctivo: cambios precisos para corregir

errores del software.2. Adaptativo: modificaciones para adaptar el

software a los entornos en los que el sistema opera.

3. Perfectivo: mejorar o añadir nuevas funcionalidades debido a un cambio en los requisitos.

4. Preventivo o evolutivo: mejora la calidad del software sin modificar los requisitos fundamentales. Se aplica Ingeniería Inversa y Reingeniería

Page 10: Manteniemiento Del Software
Page 11: Manteniemiento Del Software

Tipos de Mantenimiento y Proceso

Page 12: Manteniemiento Del Software

Actividades de Mantenimiento

Page 13: Manteniemiento Del Software

Tareas de mantenimientoEstablecer una organización de mantenimientoPrescribir procedimientos de evaluación y de informaciónDefinir una secuencia estandarizada de sucesos para cada peticiónEstablecer un sistema de registro de información de las actividadesDefinir criterios de revisión y de evaluación de las tareas de

mantenimiento

Page 14: Manteniemiento Del Software

Mantenimiento de código ajeno Estudiar el programa antes de entrar en modo emergencia Estudiar el flujo de control general Evaluar la documentación existente Hacer uso de 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)

Page 15: Manteniemiento Del Software

Dificultades de mantenimiento Gran parte del software actual es antiguo y está

limitado por restricciones de tamaño y espacio de almacenamiento

Problemas por migraciones a nuevas plataformas.

Programas menos estructurados por múltiples cambios, de mejora o adaptación.

Los sistemas de origen poseen una escasa calidad debido a:

◦ Estructuras de datos con un diseño pobre.◦ Mala codificación.◦ Lógica defectuosa.◦ Documentación escasa o errónea.

Page 16: Manteniemiento Del Software

Efectos secundarios del mantenimiento Errores u otros comportamientos indeseables aparecidos

como resultado de una modificación Se pueden limitar mediante una profunda

documentación de diseño, una revisión de la configuración completa del software antes de lanzar la nueva versión y una cuidadosa prueba de regresión

Categorías de efectos secundarios (Freedman y Weinberg, 1990)

Efectos secundarios sobre el códigoEfectos secundarios sobre los datosEfectos secundarios sobre la documentación

Page 17: Manteniemiento Del Software

Relación del concepto de mantenimiento y métricas de calidad

Page 18: Manteniemiento Del Software

Métricas de Facilidad de Mantenimiento

re

Page 19: Manteniemiento Del Software

Facilidad de Mantenimiento Factores que afectan a la facilidad de mantenimiento

Factores asociados con el método de desarrollo aplicado. Factores relacionados con el entorno de desarrollo.

(Kopetz, H.) Evaluación de la facilidad de mantenimiento

Se puede evaluar indirectamente considerando los atributos de la actividad de mantenimiento que se pueden medir.

Gilb (1979) proporciona un conjunto de métricas relacionadas con el esfuerzo empleado durante el mantenimiento:Tiempo de reconocimiento del problema, de retraso

administrativo, de recolección de Herramientas de mantenimiento, de análisis del problema, de especificación de los cambios, tiempo activo de corrección o modificación, de prueba local, de prueba global, de revisión del mantenimiento y tiempo total de recuperación.

Page 20: Manteniemiento Del Software

Calidad y Facilidad de mantenimiento

Page 21: Manteniemiento Del Software

Métrica: facilidad de cambio

Page 22: Manteniemiento Del Software

Métrica: Esfuerzo de mantenimientoSe distribuye entre... Actividades productivas. Análisis, evaluación, modificación

del

diseño y codificación. Actividades menos productivas. Interpretación y

compresión.

M=p+K·exp(c-f) Modelo del esfuerzo de mantenimiento

Esfuerzo total (M)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)

Page 23: Manteniemiento Del Software

Esfuerzo en los tipos de mantenimiento

Page 24: Manteniemiento Del Software

Parte más costosa del ciclo de vida (60%-90% del coste total).

El coste de reparar un defecto aumenta según avanza el ciclo de vida.

Estudiar las peticiones

18%Estudiar la

documentación 6%

Estudiar el código 23%

Modificar el código 19%

Actualizar la documentac

ión 6%

Diseñar y realizar pruebas

28%

Coste del mantenimiento

(% tiempo)

COSTE DE LAS ACTIVIDADES DE MANTENIMIENTO

Page 25: Manteniemiento Del Software

Factores que afectan al esfuerzo del mantenimiento

Page 26: Manteniemiento Del Software

Mantenimiento preventivo: Reingeniería

Proceso de recuperación de la información de 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

Se usa el análsis 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.

¿Para qué la uso?

“El objetivo de las ventajas existentes de la reingeniería es el ser más eficiente que desarrollar totalmente el sistema” (Carnegie, 1995).

Page 27: Manteniemiento Del Software

Reingeniería Relaciones entre los términos asociados con la reingeniería:

Page 28: Manteniemiento Del Software

Ciclo Reingeniería

Page 29: Manteniemiento Del Software

El proceso de Reingeniería

Page 30: Manteniemiento Del Software

Tecnología de la reingeniería

Mejora del Software

Reestructuración, redocumentación, anotaciones, actualización de documentos.Ingeniería para la reutilización, remodularización.Reingeniería de procesos de negocio.Reingeniería de datos.Análisis de facilidad de mantenimiento, análisis económico.

Compresión del SoftwareVisualización.Análisis, mediciones.Ingeniería inversa, recuperación del diseño.

Captura, conservación y extensión del conocimiento sobre el software

Descomposición.Ingeniería inversa y recuperación del diseño.Recuperación de objetos.Compensación de programas.

Page 31: Manteniemiento Del Software

Mantenimiento preventivo: Reingeniería ¿Por qué es interesante?:

Reduce los riesgos de la evolución de la organización. Ayuda a recuperar las inversiones realizadas en SW. Cataliza la automatización del mantenimiento del SW.

¿Lo utilizamos?

Durante el mantenimiento puede llegar un momento en el que la complejidad del proceso nos haga cuestionarnos la viabilidad de hacer reingeniería, entonces se nos plantea la siguiente pregunta…

¿Reingeniería o desarrollo?

Las aplicaciones que merecen el esfuerzo de la reingeniería son aquellas en la que se producen algunas de las siguientes situaciones:

Fallos frecuentes, que son difíciles de localizar Son poco eficientes, pero realizan la función esperada Dificultades en la integración con otros sistemas Calidad pobre del software final

Page 32: Manteniemiento Del Software

Mantenimiento Preventivo: Reingeniería Resistencia a introducir cambios Pocas personas capacitadas para realizar modificaciones Dificultades para realizar pruebas El mantenimiento consume muchos recursos Es necesario incluir nuevos requisitos, pero los básicos se mantienen.

Siempre habrá observar una serie de factores antes hacer reingeniería:

Los costes de la reingeniería o del nuevo desarrollo, de las operaciones tras la reingeniería o del nuevo desarrollo.

La duración que el trabajo de reingeniería o del nuevo desarrollo conlleve. El período de vida del sistema que se va a implementar.

Alternativas: Dejar el software como está Comprar la aplicación Desarrollar de nuevo Aplicar reingeniería

Solución: realizar un análisis de costes y quedarse con lo que sea más beneficioso.

Page 33: Manteniemiento Del Software

Mantenimiento Preventivo: Ingeniería InversaObjetivos:

Detectar efectos laterales no deseadosFacilitar la reutilización del código

detectando los componentes candidatos a reutilizar en futuros mantenimientos.

Page 34: Manteniemiento Del Software

Ingeniería Inversa Algunas áreas en la ingeniería inversa son:

Recuperación de diseño: Añade conocimientos sobre el dominio de aplicación del sistema, información externa, y procesos deductivos para identificar abstracciones significativas a un mayor nivel.

Rediseño: Consiste en consolidar y modificar los modelos obtenidos, añadiendo nuevas funciones requeridas por los usuarios.

La remodularización: consiste en cambiar la estructura modular de un sistema siguiendo los principios del diseño estructurado.

Análisis de la facilidad de 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: Tecnologías que estudian propiedades de los programas.

Page 35: Manteniemiento Del Software

El proceso de Ingeniería Inversa

Page 36: Manteniemiento Del Software
Page 37: Manteniemiento Del Software

Formas de Reingeniería

Page 38: Manteniemiento Del Software

Tipos de reingeniería

Page 39: Manteniemiento Del Software

Tipos de reingeniería

Page 40: Manteniemiento Del Software

Técnicas y Herramientas de I. Inversa – I. Directa

Page 41: Manteniemiento Del Software

Ingeniería Directa, Inversa, Reingeniería y Redocumentación

Page 42: Manteniemiento Del Software

Proceso de Ingeniería Inversa

Page 43: Manteniemiento Del Software

Técnicas y Herramientas de I. Inversa – I. Directa

Herramientas CASE para el mantenimiento de software

Page 44: Manteniemiento Del Software

Técnicas y Herramientas de I. Inversa – I. Directa

Page 45: Manteniemiento Del Software

Técnicas y Herramientas de I. Inversa – I. Directa

Page 46: Manteniemiento Del Software

Ingeniería Inversa de Ficheros y BDs

Page 47: Manteniemiento Del Software

Ingeniería Inversa de Ficheros – Extracción de la Estructura

Page 48: Manteniemiento Del Software

Ingeniería Inversa y Reingeniería de Interfaces de Usuario

Page 49: Manteniemiento Del Software

Reconstrucción de Programas

Herramientas CASE para el mantenimiento de software

Page 50: Manteniemiento Del Software

Técnicas y Herramientas de I. Inversa – I. Directa

Page 51: Manteniemiento Del Software

Análisis Estático y Dinámico. Clustering

Page 52: Manteniemiento Del Software

Análisis Estático y Dinámico. Clustering

Page 53: Manteniemiento Del Software

Análisis Estático y Dinámico. Clustering

Page 54: Manteniemiento Del Software

Tareas de Análisis Estático

Page 55: Manteniemiento Del Software

Análisis Estático y Dinámico. Clustering

Page 56: Manteniemiento Del Software

Análisis Estático y Dinámico. Clustering

Page 57: Manteniemiento Del Software

Análisis Estático y Dinámico. Clustering

Page 58: Manteniemiento Del Software

Análisis Estático y Dinámico. Clustering

Page 59: Manteniemiento Del Software
Page 60: Manteniemiento Del Software

Análisis Estático y Dinámico. Clustering

Page 61: Manteniemiento Del Software

Análisis Estático y Dinámico. Clustering

Page 62: Manteniemiento Del Software

Herramientas de Mantenimiento Test Complete: carga HTTP, stress, pruebas de

escalabilidad,pruebas de unidad http://www.automatedqa.com

Quick Test: tests funcionales, de regresión, de aceptaciónhttp://www.mercury.com

CACTUS: tests de unidad para código Java en el servidor(EJB, servlets, etc.) http://jakarta.apache.org/cactus/

Generadores de referencias cruzadas: para localizar fácilmente en qué partes de la aplicación se encuentra un determinado objeto o elemento con el fin de analizar el impacto de un cambio o identificar los módulos afectados por un determinado error.(Rational Requisite Pro).

Page 63: Manteniemiento Del Software

Herramientas (continuación)Evaluadores del impacto de las modificaciones.

Herramientas de gestión de configuración: aún sin ser específicas del mantenimiento, también facilitan dicha tarea. Ejemplo. Control de Versiones(CVS, Subversion).

Herramientas de ingeniería inversa: Recuperadores de diseñoRedocumentadoresAnalizadores de códigoDescompiladores(DCC Decompiler,REC,DJ

Java Decompiler)

Page 64: Manteniemiento Del Software

Más herramientas para mantenimiento..Herramientas para el seguimiento de errores:

diseñadas para asistir a las personas involucradas en el desarrollo y uso de sistemas informáticos en el seguimiento de los defectos de software.(Bugzilla)

Herramientas para el perfeccionamiento del código.Reformateadores de código fuente: a partir del

código fuente generan una salida con formato y presentación mejorados.

Reestructuradores de código fuente: para estructurar programas poco o mal estructurados.

Page 65: Manteniemiento Del Software

Más Herramientas ……

Java en NetBeans 5.5. (Ingeniería Inversa y Reingeniería)En este caso las principales actividades para llevar a

cabo Ingeniería Inversa son:• Reconstrucción de modelos UML• Creación de diagramas UML• Creación de diagramas de dependencias• Generación de diagramas de secuencia y

colaboración para las operaciones• Navegación al código original• Generación de código

Page 66: Manteniemiento Del Software

Francisco Ruiz, Macario Polo

Grupo Alarcos

Dep. de Informática

ESCUELA SUPERIOR DE INFORMÁTICA

UNIVERSIDAD DE CASTILLA-LA MANCHA

http://alarcos.inf-cr.uclm.es/doc/mso/

Caso Práctico: Metodología MANTEMA II

Page 67: Manteniemiento Del Software

Actividades de Mantenimiento (Modelo MANTEMA y herramienta MANTOOL)Las siguientes tareas, concuerdan con las tareas que

realiza la herramienta de mantenimiento MANTOOL

Tarea I1.1 Planificar calendario y responsables

• Tarea I1.2 Adquirir conocimiento de la aplicación

• Tarea I1.3 Desarrollar planes• Tarea I1.4 Definir procedimientos de

petición de modificación• Tarea I1.5 Implementar proceso de G.C.S.• Tarea I1.6 Preparar entornos de prueba

Page 68: Manteniemiento Del Software

Cuadro resumen

Page 69: Manteniemiento Del Software

MANTOOL (Herramienta CASE)

Page 70: Manteniemiento Del Software

Pantalla de estado de una petición

Page 71: Manteniemiento Del Software

Soporte de la documentación

Page 72: Manteniemiento Del Software

Cartera de peticiones

Page 73: Manteniemiento Del Software

Medición de cambios

Page 74: Manteniemiento Del Software

El medidor midiendo

Page 75: Manteniemiento Del Software

Informe de Tendencia de una rutina

Page 76: Manteniemiento Del Software

Información para una aplicación

Page 77: Manteniemiento Del Software

Estado actual de una aplicación

Page 78: Manteniemiento Del Software

Análisis de Cartera

Page 79: Manteniemiento Del Software

Información que pueda obtenerse

Page 80: Manteniemiento Del Software

Información que puede obtenerse (cont.)

Page 81: Manteniemiento Del Software

ConclusionesEl mantenimiento constituye la última fase del

ciclo de vida del softwareUna vez finalizado el desarrollo, el producto

entra en la fase de operación y mantenimientoEl mantenimiento debe asegurar que el

producto sigue satisfaciendo las expectativas del cliente

Para facilitar el mantenimiento del producto es necesario un desarrollo de calidad

Los problemas de mantenimiento, tienen su origen en las deficiencias de desarrollo.