Anda di halaman 1dari 83

MANTENIMIENTO DEL

SOFTWARE
Ingeniería del Software II

Departamento de Informática y Sistemas 2010


MANTENIMIENTO DEL SOFTWARE

CONTENIDO


Mantenimiento

Introducción

1.1 Ubicación dentro del ciclo de vida

1.2 Tipos de mantenimiento

1.3 Actividades de Mantenimiento

1.4 Tareas de Mantenimiento

2. Métricas yCalidad

2.1 Facilidad de Mantenimiento

2.2 Esfuerzo de Mantenimiento

3. Dificultades de Mantenimiento

4. Costo

5. Métodos de Mantenimiento

Reingeniería

Ingeniería Inversa

7. Herramientas de Mantenimiento

8. Caso práctico: Metodología MANTENA II
Introducción
Introducción
MANTENIMIENTO DEL SW ¿QUÉ ES?

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.
UBICACIÓN DENTRO DEL CICLO DE VIDA
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
Tipos de mantenimiento
1. 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
Tipos de Mantenimiento y Proceso
Actividades de Mantenimiento
Tareas de mantenimiento
 Establecer una organización de mantenimiento
 Prescribir procedimientos de evaluación y de información
 Definir una secuencia estandarizada de sucesos para cada petición
 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
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)
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.
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ódigo


 Efectos secundarios sobre los datos
 Efectos secundarios sobre la documentación
Relación del concepto de mantenimiento y métricas
de calidad
Métricas de Facilidad de Mantenimiento

re
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.
Calidad y Facilidad de mantenimiento
Métrica: facilidad de cambio
Métrica: Esfuerzo de mantenimiento
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.

 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)
Esfuerzo en los tipos de mantenimiento
COSTE DE LAS ACTIVIDADES DE MANTENIMIENTO
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. Diseñar y
realizar Estudiar las
pruebas peticiones
28% 18%
Estudiar la
Coste del mantenimiento documentac
(% tiempo) ión 6%
Actualizar la
documentac
ión 6%

Modificar el
código 19% Estudiar el
código 23%
Factores que afectan al esfuerzo del
mantenimiento
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).
Reingeniería
 Relaciones entre los términos asociados con la reingeniería:
Ciclo Reingeniería
El proceso de Reingeniería
Tecnología de la reingeniería
Reestructuración, redocumentación, anotaciones,
actualización de documentos.
Ingeniería para la reutilización, remodularización.
Mejora del Software Reingeniería de procesos de negocio.
Reingeniería de datos.
Análisis de facilidad de mantenimiento, análisis
económico.
Visualización.
Compresión del Software Análisis, mediciones.
Ingeniería inversa, recuperación del diseño.
Captura, conservación y Descomposición.
extensión del Ingeniería inversa y recuperación del diseño.
conocimiento sobre el Recuperación de objetos.
software Compensación de programas.
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
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.
Mantenimiento Preventivo: Ingeniería Inversa
Objetivos:

Detectar efectos laterales no deseados


Facilitar la reutilización del código detectando
los componentes candidatos a reutilizar en
futuros mantenimientos.
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 .


El proceso de Ingeniería Inversa
Formas de Reingeniería
Tipos de reingeniería
Tipos de reingeniería
Técnicas y Herramientas de I.
Inversa – I. Directa
Ingeniería Directa, Inversa,
Reingeniería y Redocumentación
Proceso de Ingeniería Inversa
Técnicas y Herramientas de I.
Inversa – I. Directa

Herramientas CASE para el mantenimiento de


software
Técnicas y Herramientas de I.
Inversa – I. Directa
Técnicas y Herramientas de I.
Inversa – I. Directa
Ingeniería Inversa de Ficheros y BDs
Ingeniería Inversa de Ficheros –
Extracción de la Estructura
Ingeniería Inversa y Reingeniería de
Interfaces de Usuario
Reconstrucción de Programas

Herramientas CASE para el mantenimiento de


software
Técnicas y Herramientas de I. Inversa – I. Directa
Análisis Estático y Dinámico.
Clustering
Análisis Estático y Dinámico.
Clustering
Análisis Estático y Dinámico.
Clustering
Tareas de Análisis Estático
Análisis Estático y Dinámico.
Clustering
Análisis Estático y Dinámico.
Clustering
Análisis Estático y Dinámico.
Clustering
Análisis Estático y Dinámico.
Clustering
Análisis Estático y Dinámico.
Clustering
Análisis Estático y Dinámico.
Clustering
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ón


http://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).
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ño
Redocumentadores
Analizadores de código
Descompiladores(DCC Decompiler,REC,DJ
Java Decompiler)
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.
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
Caso Práctico: Metodología MANTEMA II

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/
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
Cuadro resumen
MANTOOL (Herramienta CASE)
Pantalla de estado de una petición
Soporte de la documentación
Cartera de peticiones
Medición de cambios
El medidor midiendo
Informe de Tendencia de una rutina
Información para una aplicación
Estado actual de una aplicación
Análisis de Cartera
Información que pueda obtenerse
Información que puede obtenerse (cont.)
Conclusiones
 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
 Los problemas de mantenimiento, tienen su origen en
las deficiencias de desarrollo.
Bibliografía Básica

Pressman, R.S. Ingeniería del software. Un enfoque


práctico. Cap. 9 McGraw-Hill, 1993

Sommerville, I. Ingeniería de Software, cap. 29.


Séptima edición. Addison Wesley 2005
Bibliografía -Sitios Web
 Roedy Green. Java Gotchas.17 de diciembre 1999. Lista de características de
Java que tienden a conducir a errores de programación.
 
 Sitio www de apoyo a la quinta edición del texto de R. Pressman.

 Sitio www de apoyo a la cuarta edición del texto de R. Pressman.


 
 Software Engineering Institute (Carnegie-Mellon University).
 CSE Center for Software Engineering.
 Portal para patrones.
 http://trevinca.ei.uvigo.es/~cfajardo/Nueva_carpeta/presentaciones/cocomo2k.
pdf
. Ana María Moreno S. COCOMO II Estimación de proyectos de Software.
Pag. 136 - 137

Anda mungkin juga menyukai