Publicado el 29 de Mayo del 2017
1.538 visualizaciones desde el 29 de Mayo del 2017
357,3 KB
27 paginas
Creado hace 14a (05/06/2009)
Fundamentos de
Ingeniería del Software
Capítulo 10. Mantenimiento
Capítulo 10. Mantenimiento
Capítulo 10. Mantenimiento
Capítulo 10. Mantenimiento
del software
del software
del software
del software
Mantenimiento del software.
Estructura
1.
2.
3.
4.
5.
6.
6.
7.
Introducción
Tipos de mantenimiento
Costes del mantenimiento
Dificultades del mantenimiento
El proceso de mantenimiento en el ciclo de vida del sw.
Métodos de mantenimiento del software
Métodos de mantenimiento del software
Reingeniería
Redocumentación
Ingeniería inversa
Ingeniería inversa de procesos (comprensión de programas)
Identificación y recopilación de los componentes funcionales
Asignar valor semántico a los componentes funcionales
Reconstrucción de programas
Ingeniería inversa de ficheros y BD
Ingeniería inversa y reingeniería de interfaces de usuario
Mantenibilidad o facilidad de mantenimiento del sw.
Mantenimiento del software.
Bibliografía
(Piattini et al.98) M. Piattini, J. Villalba, F. Ruiz, I.
Fernández, M. Polo, T. Bastanchury, M.A. Martínez.
“Mantenimiento del software” Ed. Ra-Ma. 1998.
(Piattini et al. 04) M. Piattini, José A. Calvo-Manzano, J.
Cervera, L. Fernández. “Análisis y diseño detallado de
Cervera, L. Fernández. “Análisis y diseño detallado de
Aplicaciones Informáticas de Gestión”. Ed. Ra-Ma. 1996.
Capítulo 15.
(Piattini et al. 96) M. Piattini, José A. Calvo-Manzano, J.
Cervera, L. Fernández. “Análisis y diseño detallado de
Aplicaciones Informáticas de Gestión”. Ed. Ra-Ma. 1996.
Capítulo 16.
1. Introducción
“El mantenimiento del sw. es la modificación de un
producto sw. después de su entrega al cliente o usuario
para corregir defectos, para mejorar el rendimiento u
otras propiedades deseables, o para adaptarlo a un
cambio de entorno” (IEEE 1219)
cambio de entorno” (IEEE 1219)
Es la parte más costosa del ciclo de vida del sw.:
60-90% del coste total (y coste creciente)
⇒El coste relativo de reparar un defecto aumenta en las
últimas etapas del ciclo de vida (de 1 a 100)
En algunas empresas coste del 95% ⇒
Barrera del
mantenimiento
(no se pueden desarrollar nuevos productos sw.)
2. Tipos de mantenimiento
Correctivo
Adaptativo
Perfectivo
Mantenimiento de ampliación
Mantenimiento de eficiencia
Preventivo
Mantenimiento para la reutilización
Coste de mantenimiento
Preventivo
5%
Correctivo
17%
Perfectivo
60%
Adaptativo
18%
(Piattini et al. 98)
Tipos de mantenimiento (II)
El mantenimiento perfectivo aumenta cuando un producto software
tiene éxito comercial y es usado por muchos usuarios: se reciben
más peticiones solicitando mejoras o nuevas funcionalidades.
El mantenimiento preventivo consiste en la modificación del
software para mejorar sus propiedades sin alterar sus
especificaciones funcionales (p.ej. aumentando su calidad o su
especificaciones funcionales (p.ej. aumentando su calidad o su
mantenibilidad):
mantenibilidad):
incluir sentencias que validen los datos de entrada
reestructurar los programas para mejorar su legibilidad
incluir nuevos comentarios
…
El preventivo es el tipo de mantenimiento que más usa las técnicas
de reingeniería e ingeniería inversa.
Mantenimiento para la reutilización: mantenimiento preventivo que
trata de mejorar la propiedad de reutilización (reusabilidad) del
software.
3. Costes del mantenimiento
Oportunidades de desarrollo que se pierden.
Insatisfacción del cliente cuando no se puede
atender en un tiempo aceptable una petición de
reparación que parece razonable.
reparación que parece razonable.
Los errores ocultos que se introducen al cambiar
el sw. durante el mantenimiento reducen la
calidad global del producto.
Perjuicio en otros proyectos de desarrollo
cuando la plantilla tiene que dejarlos, total o
parcialmente, para atender peticiones de
mantenimiento.
Coste de las actividades de
mantenimiento
Categoría
Actividad
% Tiempo
Comprensión del sw. y Estudiar las peticiones
de los cambios a
realizar
realizar
Modificación del sw.
Estudiar la documentación
Estudiar el código
Estudiar el código
Modificar el código
Actualizar la documentación
Realización de pruebas Diseñar y realizar pruebas
18%
6%
23%
23%
19%
6%
28%
(Piattini et al. 98)
⇒ nótese cómo la comprensión del software y de los
cambios supone casi un 50% del coste total de
mantenimiento
4. Dificultades del
mantenimiento
Una de las principales, las aplicaciones heredadas (legacy code),
que siguen funcionando, pero en muchas ocasiones adolecen de:
diseño pobre de las estructuras de datos
restricciones de tamaño y espacio de almacenamiento
herramientas desfasadas, sin métodos
documentación escasa
documentación escasa
una o varias migraciones a nuevas plataformas
múltiples modificaciones para adaptarlos o mejorarlos
mala codificación
lógica defectuosa
desarrolladores no localizables
Desechar el sw. y reescribirlo no siempre es factible:
gran carga financiera de su desarrollo
necesidad de amortización
⇒ sw. que sigue funcionando con baja calidad
Dificultades del
mantenimiento (II)
Ausencia de métodos
⇒ se realiza de forma ad hoc.
Ausencia de documentación.
No captura adecuada de requisitos
No captura adecuada de requisitos
⇒ mayores esfuerzos de mantenimiento futuros.
Cambio tras cambio, los programas tienden a
ser menos estructurados.
No existen registros de pruebas
⇒ imposibilidad de pruebas de regresión.
Problemas de gestión
⇒ considerado “trabajo poco creativo”, es asignado a las
personas con menos experiencia
5. El proceso de mantenimiento
en el ciclo de vida del sw.
Proceso ppal. de mantenimiento en el std. IEEE
12207.
Actividades:
Implementación del proceso.
Implementación del proceso.
Análisis de problemas y modificaciones.
Implementación de las modificaciones.
Revisión y aceptación del mantenimiento.
Migración.
Retirada del sw.
6. Métodos de
mantenimiento del software
A menudo se utilizan conjuntamente:
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.
otra forma o en un nivel de abstracción más elevado.
Reingeniería:examen y modificación del sistema para
reconstruirlo en una nueva forma.
Reestructuración del software:consiste en la
modificación del software para hacerlo más fácil de
entender y cambiar o menos susceptible de incluir
errores en cambios posteriores.
Transformación de programas:técnica formal de
transformación de programas
Ingeniería directa, inversa,
reingeniería y redocumentación
Ingeniería directa (1)
Ingeniería directa (2)
Reing.(6)
Reing.(8)
Definición
Diseño
Implementación
Ing. inversa
(4)
Ing. inversa
(3)
Redocumentación (5)
Redocumentación (7)
Redocumentación (8)
(Piattini et al. 98)
Reingeniería
Objetivo: métodos para reconstruir el sw.:
reprogramarlo
redocumentarlo
rediseñarlo
rediseñarlo
rehacer alguna/s característica/s del producto
Reingeniería: “la modificación de un producto
sw., 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”
Redocumentación
(Pressman 02) p.546 (Pressman 06) p.910
a) Si el sistema funciona y la redocumentación
consume muchos recursos, tal vez mejor no
redocumentar.
b) Si es preciso actualizar la documentación, pero
b) Si es preciso actualizar la documentación, pero
recursos limitados, puede ser útil “documentar
cuando se modifica”. Con el tiempo, se formará
una colección de información interesante.
c) Si el sistema es fundamental para la
organización, redocumentar por completo. Se
puede reducir la documentación al mínimo.
Ingeniería inversa
Ingeniería inversa: “el proceso de construir
especificaciones abstractas del código fuente de un
sistema heredado, de manera que estas especificaciones
puedan ser utilizadas para construir una nueva
implementación del sistema hacia delante”
implementación del sistema hacia delante”
Ingeniería inversa. Beneficios (Piattini et al.96):
Reducir la complejidad del sistema
Generar vistas alternativas
Recuperar la información perdida (cambios que no se
documentaron en su momento)
Detectar efectos laterales
Facilitar la reutilización
⇒ Ingeniería inversa: El pto. de partida no es
necesariamente el código fuente (Piattini et al.96)
Ingeniería inversa de procesos
(comprensión de programas)
char *f (char *c) {
unsigned long i, lon;
char *x = (char *) malloc (100);
lon = strlen(c);
if (c[0]==‘\’’ ) {
for (i=0; i<lon-1; i++) x[i]=c[i+1]; x[i]=‘\0’;
} else
if (c[0]==‘\”’) {
if (c[0]==‘\”’) {
for (i=0; i<lon-1; i++) x[i]=c[i+1]; x[i]=‘\0’;
} else for (i=0; i<lon; i++)
x[i]=c[i];
if ((x[strlen(x)-1]==‘\’’) ||
(x[strlen(x)-1]==‘\”’))
x[strlen(x)-1]==‘\0’;
return x;
}
(Piattini et al.98)
Ingeniería inversa de procesos
(comprensión de programas) (II)
#define COMILLA_SIMPLE ‘\’’
#define COMILLA_DOBLE ‘\”’
/* Autor: Juan Gómez Montijo.
Entradas: una cadena.
Devuelve: la misma cadena sin comillas ni al principio ni al final, si es que las
tenía. */
char * QuitaComillas(char *cadena){
char * QuitaComillas(char *cadena){
unsigned long i, l;
char *resultado=(char *) malloc(100);
/* Quitamos la comilla final, si la hay */
if ((cadena[strlen(cadena)-1]==COMILLA_SIMPLE ||
cadena[strlen(cadena)-1]==COMILLA_DOBLE))
cadena[strlen(cadena)-1]=‘\0’;
/* Pasamos la cadena a una auxiliar, quitando la comilla inicial si la hay */
if ((cadena[0]==COMILLA_SIMPLE || cadena[0]==COMILLA_DOBLE)){
for (i=0; i<strlen(cadena)-1; i++) {
resultado[i]=cadena[i+1];
}
} else
for (i=0; i<strlen(cadena); i++) {
resultado[i]=cadena[i];
resultado[i]=‘\0’;
return resultado;
(Piattini et al.98)
Ingen
Comentarios de: Fundamentos de Ingeniería del Software Capítulo 10. Mantenimiento del software (0)
No hay comentarios