Master Oficial
en Sistemas Telemáticos e Informáticos
TEMA I
Evolución y Mantenimiento Software
1
2
OBJETIVOS
URJC – Master en Sistemas Telemáticos e Informáticos
9 Describir los problemas del Mantenimiento y Evolución del Software
9 Concepto y Leyes de Evolución del Software 9 Tipos de Mantenimiento Software
9 Reingeniería y Mantenimiento 9 Caso teórico-práctico
Tema 1: Evolución y Mantenimiento Software
Dificultad para mantener los programas
Dificultad para que el software evolucione
Cambios frecuentes en los requisitos
Diseño pobre / rígido
Problemas de obsolescencia
Cambios tecnológicos
Problemas del Mantenimiento y Evolución del Software
4
El concepto de Evolución de Softwareimplica un cambio continuo desde un estado menor, más simple o peor a uno superior o mejor
Mantener operativo al sistema
Mantener contentos a los usuarios
Maximizar la inversión y reducir costes
Alargar la vida del software
Adaptarlo a nuevos cambios o requisitos
URJC – Master en Sistemas Telemáticos e Informáticos
5 Leyes de Lehman
1ª Ley: Un programa grande que es utilizado se somete a un cambio persistente o se convierte en menos útil progresivamente.
El proceso de cambio continua hasta que se juzga como más rentable reemplazar el sistema por una nueva versión.
2ª Ley: Como un programa grande cambia de forma continua, su complejidad la cual refleja una estructura deteriorándose, se incrementa a menos se realice un trabajo para mantenerla o reducirla.
URJC – Master en Sistemas Telemáticos e Informáticos
1.1 Concepto y leyes de la Evolución de Software
Tema 1: Evolución y Mantenimiento SoftwareLeyes de Lehman
3ª Ley: Las medidas de un proyecto global y atributos del sistema se auto regulan cíclicamente con tendencias e invariantes estadísticamente determinables.
4ª Ley: El ratio de actividad global en un gran proyecto de programación es invariante.
5ª Ley: En una evolución fiable y planificada, un gran programa sometido a un cambio debe estar disponible para una ejecución regular del usuario en el máximo intervalo determinado por su crecimiento neto. Es decir, el sistema desarrolla un promedio característico de crecimiento seguro, que de ser excedido, causa problemas
1.1 Concepto y leyes de la Evolución de Software
Tema 1: Evolución y Mantenimiento Software7 Ley de Pareto
La evolución o mantenimiento del software consume un 80 % del presupuesto, mientras que el desarrollo es el 20%
restante.
El 20 % de el 80 % de
Módulos
Errores Mejoras Herramientas
Consumen Contribuyen Consumen
Recursos Errores Tiempo de ejecución
Consumen Consumen Experiencia
Costes de reparación Costes de mantenimiento adaptativo Uso de herramientas
URJC – Master en Sistemas Telemáticos e Informáticos
1.1 Concepto y leyes de la Evolución de Software
Tema 1: Evolución y Mantenimiento Software8 Construcción
Mantenimiento
Evolución
URJC – Master en Sistemas Telemáticos e Informáticos Esfuerzo del mantenimiento en el ciclo de vida
1.1 Concepto y leyes de la Evolución de Software
Tema 1: Evolución y Mantenimiento Software
Windows 3.1
Diferencia entre mantenimiento y evolución
Windows 2000
Windows NT Windows 2000
Server Windows NT
Server Windows Me
Windows XP
Windows Vista
EVOLUCIÓN (resultado de operaciones de mantenimiento)
MANTENIMIENTO
(tareas, proceso, técnicas, herramientas)1.1 Concepto y leyes de la Evolución de Software
Tema 1: Evolución y Mantenimiento Software
10 Gestión de
Cambios Análisis de
Impacto Plan de versión del sistema
Adaptativo
Correctivo
Perfectivo Código Tests Versión del Sistema
Preventivo
URJC – Master en Sistemas Telemáticos e Informáticos
11 Los procesos de gestión y administración de cambiosson clave para la evolución y creación del sistema. De esta manera es posible controlar las distintas versiones y cambios de un sistema durante su ciclo de vida.
Las actividades principales en la gestión de cambiosson:
Introducir las peticiones de cambios
Registrar dichas peticiones y proporcionar informes sobre el estatus de las peticiones
Proporcionar un registro de auditorias de los cambios
Proporcionar entrada a la administración del proyecto
URJC – Master en Sistemas Telemáticos e Informáticos
1.2 Tipos de Mantenimiento y Proceso
Tema 1: Evolución y Mantenimiento SoftwareEl análisis de impactodetermina el ámbito de los cambios requeridos como base para su implementación.
Las actividades principales del análisis de impactoson:
Evaluar las peticiones de cambios 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 petición realizada.
1.2 Tipos de Mantenimiento y Proceso
Tema 1: Evolución y Mantenimiento Software13 Planear la versión del sistemaimplica determinar el contenido y tiempo de las versiones del sistema.
Sus actividades incluyen:
Ordenar y seleccionar las peticiones de cambios para la próxima versión
Procesar los cambios y organizar el trabajo
Preparar un documento sobre el plan de la versión del sistema
Actualizar las peticiones de cambios aprobadas
URJC – Master en Sistemas Telemáticos e Informáticos
1.2 Tipos de Mantenimiento y Proceso
Tema 1: Evolución y Mantenimiento Software14 Los cambios en el diseñoconsisten en revisar el diseño lógico (nivel de sistema) y físico (nivel de programa) para los cambios aprobados.
Sus principales actividades son:
Analizar los cambios aprobados y revisar la estructura del programa
Revisar o desarrollar los diseños lógicos y físicos
Diseñar los cambios de hardware si fueran necesarios
Actualizar los documentos del sistema y del programa
Restaurar los documentos bajo control del sistema de gestión de cambios
Actualizar las peticiones de cambios para reflejarlos en los documentos
URJC – Master en Sistemas Telemáticos e Informáticos
1.2 Tipos de Mantenimiento y Proceso
Tema 1: Evolución y Mantenimiento SoftwareLa codificación consiste en cambiar el software con el fin de reflejar los cambios aprobados y representados en el diseño.
Esta tarea implica:
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 peticiones de cambios de los módulos modificados
1.2 Tipos de Mantenimiento y Proceso
Tema 1: Evolución y Mantenimiento Software16 Las pruebas o testsasegurar 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
URJC – Master en Sistemas Telemáticos e Informáticos
17 El objetivo de la versión del sistemaes 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
URJC – Master en Sistemas Telemáticos e Informáticos
1.2 Tipos de Mantenimiento y Proceso
Tema 1: Evolución y Mantenimiento SoftwareUn proceso demantenimientocomienza cuando existe una petición de cambio a propuesta de un usuario.
Existen 4 tipos de mantenimiento principales, que son:
1. Mantenimiento CORRECTIVO 2. Mantenimiento PERFECTIVO 3. Mantenimiento ADAPTATIVO 4. Mantenimiento PREVENTIVO 1.2 Tipos de Mantenimiento y Proceso
Tema 1: Evolución y Mantenimiento Software
19 Mantenimiento CORRECTIVO: Se define como aquel proceso orientado a la reparación de defectos existentes en un sistema software.
Suele ser necesario en alguna de las siguientes ocasiones:
Cuando el programa falla o aborta.
Un programa produce un resultado que no es acorde con los requisitos.
Los diseños y requisitos no están acordes con el software que los soporta.
La documentación de usuario lleva a conclusiones erróneas al propio usuario hacia actividades que provoquen resultados incorrectos o fallos en el sistema.
URJC – Master en Sistemas Telemáticos e Informáticos
1.2 Tipos de Mantenimiento y Proceso
Tema 1: Evolución y Mantenimiento Software20 La reparación de errores en el mantenimiento correctivotiene dos problemas:
1. Reparar un defecto tiene una probabilidad de introducir otro defecto.
2. Incrementa las operaciones de testeo.
Existen dos tipos básicos de mantenimiento correctivo:
1. Reparaciones de emergencia: ejecutadas en cortos periodos de 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.
URJC – Master en Sistemas Telemáticos e Informáticos
1.2 Tipos de Mantenimiento y Proceso
Tema 1: Evolución y Mantenimiento SoftwareMantenimiento ADAPTATIVO: se define como el proceso para mejorar la funcionalidad del software, hardware y su documentación. Sus pasos son:
1.2 Tipos de Mantenimiento y Proceso
Tema 1: Evolución y Mantenimiento SoftwareBeneficios 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.
22 Mantenimiento PERFECTIVO: es un método tratar de pulir o refinar
la calidad del software y su documentación.
El objetivo principal del mantenimiento perfectivoes mejorar la calidad del software para hacerlo más fácilmente mantenible y reducir el coste e impacto de los cambios de los procesos de mantenimiento.
URJC – Master en Sistemas Telemáticos e Informáticos
23 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.
URJC – Master en Sistemas Telemáticos e Informáticos
1.2 Tipos de Mantenimiento y Proceso
La selección de candidatos al mantenimiento perfectivoutiliza como técnica el Análisis de Pareto, para trata de identificar el 20% de los programas que consumen el 80% del presupuesto y recursos de personal.
Tema 1: Evolución y Mantenimiento Software
Análisis de complejidad: Medir la complejidad de los módulos (Halstead, Complejidad ciclomática)
Análisis de funcionalidad: Medir la funcionalidad de un sistema ayuda a estimar su valor
Ingeniería inversa/recuperación de diseño: Debido a que el código no es acorde con la documentación
Reingeniería por partes (Piecewise reengineering): Para sistemas de vida corta y cambios evolucionarios necesarios
Traslación / reestructuración / modularización: Migración de
1.2 Tipos de Mantenimiento y Proceso
Mantenimiento PREVENTIVO: es el que se ejecuta para prevenir fallos Antes de que éstos ocurran. Por ejemplo, un chequeo de tipos antes de compilar y ejecutar una aplicación. Sus técnicas son:
Tema 1: Evolución y Mantenimiento Software
25
Ejemplo de evolución de un sistema Linux Tema 1: Evolución del Software y Mantenimiento
URJC – Master en Sistemas Telemáticos e Informáticos
Release Codename Date Num. of packages Distinct versions Dependencies RP RD RP-RD 1.3 Bo 1997-06-02 2088 1402 5111 N/A N/A N/A 2.0 Hamm 1998-07-24 2757 1946 7379 1.32 1.44 0.12 2.1 Slin 1999-03-09 3601 2691 10841 1.31 1.47 0.16 2.2 Potato 2000-08-14 5583 4311 19284 1.55 1.78 0.23 3.0 Woody 2002-07-19 10771 8693 44164 1.93 2.29 0.36 3.1 Sarge 2005-06-05 19300 15305 96981 1.79 2.20 0.40
Numero de paquetes y sus dependencias in versiones estables de Debian.
RP: Ratio entre el numero de paquetes de las ultimas dos versiones RD: Ratio entre el numero de dependencias de las ultimas dos versiones
26
La Reingeniería consiste en la automatización del proceso de mantenimiento software.
La Reingeniería es también el proceso de examinar sistemas de software existentes y/o modificarlos con ayuda de herramientas de forma automática o semi-automática.
Analizar sistemas existentes para entender su diseño y desarrollar estrategias para extraer y reutilizar componentes. Implica la rehabilitación y modernización de los componentes.
URJC – Master en Sistemas Telemáticos e Informáticos
1.3 Concepto y tipos de Reingeniería
Tema 1: Evolución y Mantenimiento Software Proporcionar asistencia automatizada a las tareas de mantenimiento y evolución del software.
Reducir errores y costes.
Mejorar los procesos de conversión y migración.
Extender el ciclo de vida de las aplicaciones.
Facilitar el entendimiento de los programas.
1.3 Concepto y tipos de Reingeniería
Ventajas de los procesos de Reingeniería Tema 1: Evolución y Mantenimiento Software28
Formas de Reingeniería Software.
Análisis: proceso de examinar sistemas existentes para entender mejor el sistema y sus componentes.
Reestructuración: cambios en la forma del software
(ej: código, re-documentación, re-formateo) pero no su funcionalidad
Ingeniería Inversa: analizar software y reconstruir las relaciones entre sus partes.
Migración: conversión de software o actualización de tecnología (datos, lenguajes, plataforma)
URJC – Master en Sistemas Telemáticos e Informáticos
29
La Ingeniería Inversa trata de analizar sistemas de software para reconstruir las descripción de alto nivel a partir de las de bajo nivel.
Básicamente consiste en analizar el código para extraer relaciones y el diseño de todo o parte del sistema.
La ingeniería inversa trata de re-documentar el sistema y descubrir información de diseño con el fin de poder entenderlo mejor.
URJC – Master en Sistemas Telemáticos e Informáticos
1.4 Técnicas y Herramientas de I. Inversa I. Directa
Tema 1: Evolución y Mantenimiento SoftwareModelo Antiguo
Código Fuente Ingeniería Inversa
(reverse engineering)
Nivel Físico Nivel Lógico (DISEÑO)
Nuevo Modelo Rediseño
Código Modificado Ingeniería hacia
Adelante
(forward engineering)
1.4 Técnicas y Herramientas de I. Inversa I. Directa
Tema 1: Evolución y Mantenimiento SoftwareURJC – Master en Sistemas Telemáticos e Informáticos 31
En otras situaciones conviene analizar el código fuente NO para obtener un diseño del sistema, sino para conocer que componentes de un sistema son similares y cuales no.
La identificación de componentes y partes reutilizables de los mismos es un aspecto clave.
Los procesos de análisis estático, análisis dinámico y clustering se utilizan para alcanzar estos objetivos.
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
URJC – Master en Sistemas Telemáticos e Informáticos 32
Análisis estático
Análisis dinámico Aplicación en ejecución (logs) Código
fuente
Clustering Diseño Recuperado Componentes y relaciones
Relaciones dinámicas
Clases UC Secuencia
Componentes similares Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
Constituye una tarea de Ing. Inversa que analiza ficheros de código fuente y trata de determinar su estructura, elementos y relaciones sin ejecutar el código.
Trata de abstraer la lógica de negocio de los datos.
Obtención de relaciones estructurales y partes
funcionales de la aplicación (funciones, rutinas, métodos).
Identificación de partes comunes de código.
Análisis Estático
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
URJC – Master en Sistemas Telemáticos e Informáticos 34
Tareas de Análisis Estático
ANALISIS ESTATICO Código
Fuente
PARSER
EXTRACTOR Recupera información relevante del código fuente
ABSTRACTOR Diagramas
UML
Analizan y reconocen la información relevante.
Puede convertirse a un formato intermedio
Abstrae información y documentos de la información recuperada Formato
intermedio
URJC – Master en Sistemas Telemáticos e Informáticos 35
Análisis Dinámico
Constituye una tarea de Ing. Inversa que analiza la ejecución de un sistema para obtener información de flujo del sistema.
Complementa al análisis estático y a veces lo usa como fuente.
Puede aplicar técnicas de clustering.
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
Técnicas de Análisis Dinámico
Para cada fichero fuente en ejecución identificar la siguiente información:
Representar el código de la página por un grafo de flujo del control del fichero (PCFG).
Identificar caminos linealmente independientes (LIP)
Identificar LIPs para cada fichero
Identificar las trazas de los caminos ejecutados o de combinación de caminos
Agrupar ficheros equivalentes en caminos del mismo LIP
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
URJC – Master en Sistemas Telemáticos e Informáticos 37
Técnicas de Análisis Dinámico i 1 2
3 4
5
6 7
f
PCFG 3 LIPs
(a) i, 1,2,4,6,7,f (b) i, 1,2,4,5,4,6,7 (c) I,1,2,3,7,f
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
Ejemplo: Seguir los logs o visitas de un Web
URJC – Master en Sistemas Telemáticos e Informáticos 38
Herramientas de Análisis Estático y Dinámico
WEB
ReWeb, F. Ricca y P. Tonella
Analizador de flujo estático con capacidades dinámicas a partir de logs.
WARE (Web Application Reverse Engineering), G. di Lucca et al.
Es básicamente un analizador estático. Obtiene entre otros documentación en forma de diagramas UML (Casos de uso, secuencia y clases).
WANDA (Web ApplicatioN Dynamic Analyzer), G. di Lucca et al.
Complementa a WARE con un análisis dinámico para obtener mayor información.
Vaquista, J. Vanderdonckt
Recupera la arquitectura de aplicaciones Web.
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
Clustering
Trata de agrupar partes comunes de código.
Se basa en técnicas de abstracción, generalización y especialización.
Ayuda a reducir el número de ficheros fuente y compactar la funcionalidad del sistema.
Puede facilitar la construcción de componentes reutilizables.
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
URJC – Master en Sistemas Telemáticos e Informáticos 40
Clone Analysis
Trata de agrupar identificar porciones de código duplicadas o similares denominadas “clones” o conglomerados.
Se puede usar para detectar componentes potencialmente reutilizables mediante la identificación de sus partes comunes.
Se suele utilizar una medida de distancia para detectar componentes de código similares (Euclídea, Levenshtein, Frecuencias).
URJC – Master en Sistemas Telemáticos e Informáticos 41
Distancia de Levenshtein
Requiere un alfabeto de símbolos distintos.
Ejemplo para código Web
<td width = “18%”>
<img src =“/master/logo.jpg” width=“92” height=“30”></td>
Secuencia identificada (td, width, img, src, width, height, /td) Tabla del alfabeto
/div /td align div height img src td width
a b c d e f g h i
Secuencia: v = h i f g i e b
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
Distancia de Levenshtein
Comparación de secuencias
Ejemplo 1: u = h i d c f g i e a b Ejemplo 2: v = h i f g i e b Distancia D(u,v) = 3
Problemas:
Detección de similaridad engañosa (Ej: secuencias iguales de atributos HTML pero referidas a distintos tags=> secuencias HTML iguales pero con distintas distancias) => similaridad léxica pero no estructural
No detectar similaridades significativas (tags compuestos en los que producen el mismo resultado que tags simples.
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
URJC – Master en Sistemas Telemáticos e Informáticos 43
Herramientas de Ingeniería Inversa y Directa IBM RATIONAL ROSE
I. Inversa: C, C++, Java, CORBA, XML_DTD, Ada
I. Directa: Idénticos lenguajes
Obtención de diagramas UML desde código
Generación de esqueletos de código anotados
Visualizador
Modelado físico de la arquitectura (diagramas de componentes)
Modelado de datos (Oracle)
Integración con Requisite Pro
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
URJC – Master en Sistemas Telemáticos e Informáticos 44
Herramientas de Ingeniería Inversa y Directa TELELOGIC TAU
I. Inversa: C, C++, Java, CORBA, XML_DTD, Ada
I. Directa:
Obtención de diagramas UML 2.0 desde código
Comparación gráfica y fusión de modelos UML
Soporte de símbolos gráficos específicos de dominio Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
Herramientas de Ingeniería Inversa y Directa OTRAS
ARMIN
ReWeb, WARE, WANDA (Dominio Web)
VAQUISTA
TERESA
Altova Umodel (Java, C# ÆUML)
Imagix 4D (C/C++ Æ UML)
Compiladores inversos
Visualizadores (VCG, Dotty, Rigi): No específica de Ing. Inv.
Tema 1: Evolución y Mantenimiento Software
1.4 Técnicas y Herramientas de I. Inversa I. Directa
URJC – Master en Sistemas Telemáticos e Informáticos 46