PDF de programación - Fundamentos de Ingeniería del Software Capítulo 10. Mantenimiento del software

Imágen de pdf Fundamentos de Ingeniería del Software Capítulo 10. Mantenimiento del software

Fundamentos de Ingeniería del Software Capítulo 10. Mantenimiento del softwaregráfica de visualizaciones

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
  • Links de descarga
http://lwp-l.com/pdf3744

Comentarios de: Fundamentos de Ingeniería del Software Capítulo 10. Mantenimiento del software (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad