2. El reto del mantenimiento
• Las tareas de mantenimiento comienzan
casi cuando se entrega el software
– En pocos días o semanas después de liberar el
software a los usuarios finales, podemos
tener un listado de errores y/o peticiones de
ajuste (incluso nuevos mejoras)
• Con el tiempo, la organización puede darse
cuenta de que emplea más tiempo y
dinero en ajustar el software existente que
en hacerlo de nuevo
Fuente: Ingeniería del Software. Un enfoque Práctico. R.S. Pressman
3. ¿Por qué ocurre?
Movilidad del personal
Fuente: Ingeniería del Software. Un enfoque Práctico. R.S. Pressman
5. Tipos de mantenimiento
• Mantenimiento correctivo: aquel que corrige los defectos
observados en los equipamientos o instalaciones. Es la
forma más básica de mantenimiento y consiste en
localizar averías o defectos y corregirlos o repararlos.
– Ejemplo: Las actualizaciones que el SO hace para
disminuir las vulnerabilidades
6. Tipos de mantenimiento
• Mantenimiento adaptativo: modificación del
producto software que se realiza tras su distribución
con el fin de adaptarlo a los cambios
– Ligado a los cambios en el SO, al tipo de arquitectura donde
se ejecuta, o al entorno de desarrollo.
• Cambios de para migrar de un SO a otro
• Cambio en la versión de la máquina virtual de Java
• Cambio en la versión del SO
• Cambio en el entorno de desarrollo de aplicaciones web: versión de
PHP, etc.
• Mantenimiento evolutivo: Actualizaciones de las
aplicaciones con el fin de mejorar la utilidad de las
mismas
7. Tipos de mantenimiento
• Mantenimiento preventivo: revisión
constante del software con el fin de
detectar posibles problemas que
puedan surgir en el futuro.
8. Tipos de mantenimiento
• Mantenimiento perfectivo: perfeccionamiento y
mejora de la calidad del software
10. Reingeniería
• Se produce dos niveles distintos de
abstracción.
– En el nivel de negocios, la reingeniería se
concentra en el proceso de negocios con la
intención de efectuar cambios que mejoren la
competitividad en algún aspecto de los
negocios.
– En el nivel del software, la reingeniería
examina los sistemas y aplicaciones de
información con la intención de
reestructurarlos o reconstruirlos de tal modo
que muestren una mayor calidad.
Fuente: Ingeniería del Software. Un enfoque Práctico. R.S. Pressman
12. Reingeniería del Software
• Análisis de inventarios: Ordenar las
aplicaciones activas por tamaño, antigüedad,
utilidad, importancia – determinar el criterio –
para elegir aquellas más susceptibles de ser
objeto de procesos de reingeniería.
Fuente: Ingeniería del Software. Un enfoque Práctico. R.S. Pressman
13. Reingeniería del Software
Reestructuración de documentos: La
documentación pobre es una
característica de muchos sistemas
heredados
• Vivir con lo que tenemos y no generar
más (porque consume tiempo)
• Documentar sólo las aplicaciones objeto
de cambios
• Documentar el sistema por completo
14. Reingeniería del Software
• Ingeniería inversa. Es un proceso de
recuperación de diseño.
• Reestructuración del código. Analizar
el código existente, se buscan fallos, se
reestructura (e incluso se reescribe en
un lenguaje de programación más
moderno), se revisa, se prueba y se
documenta.
Fuente: Ingeniería del Software. Un enfoque Práctico. R.S. Pressman
15. Reingeniería del Software
• Reestructuración de los datos
– Comienza como una actividad de ingeniería
inversa
– Se revisa la calidad de las estructuras de
datos existentes
– Los cambios en los datos van a implicar
cambios en el código, casi
irremediablemente
Fuente: Ingeniería del Software. Un enfoque Práctico. R.S. Pressman
17. • Proceso de construir especificaciones de un
mayor nivel de abstracción partiendo del
código fuente de un sistema software o
cualquier otro producto
• El objetivo de la ingeniería inversa es obtener
información o un diseño a partir de un
producto, con el fin de determinar de qué
está hecho, qué lo hace funcionar y cómo
fue fabricado
• Se aplica en distintos niveles de
abstracción
Ingeniería inversa
18. • En algunos casos, la primera actividad de
la ingeniería inversa es obtener los
diagramas de clase UML
• Se sigue con la construcción del modelo de
datos
• Hay herramientas que pueden ayudar a
generar de forma automática, los
diagramas y modelos necesarios para
aplicar ingeniería inversa a partir del código
fuente
Ingeniería inversa
21. • Modificación el software para hacerlo más fácil
de entender y cambiar o menos susceptible de
incluir errores en cambios posteriores
• Lecagy code (código heredado). Problemas:
– Desarrollado con tecnologías y técnicas anticuadas
– Casi no hay documentación
– Quizá los autores ya no trabajan en la empresa
– El sistema no tiene por qué estar bien diseñado ni
programado, ni haber seguido un proceso de
ingeniería
Reestructuración del código
Fuente: Ingeniería del Software. Un enfoque Práctico. R.S. Pressman
22. • Get/Set
– Hay un atributo público en una clase
– Solución: hacer el atributo privado y
proporcionar métodos de acceso al mismo
(get/set)
• Renombar métodos:
– double calcRngMaxPer() {.... }
– double calcularRangoMaximoPermitido() {.... }
• Detectar código replicado
Reestructuración del código
23. - Uso de constantes:
class CalculoSimple {
public static double CalcularCincunferencia (double
diametro)
{ return 3.14 * diametro; }
}
class CalculoSimple {
public final double PI = 3.14;
public static double CalcularCincunferencia (
double diametro)
{ return PI * diametro; }
}
Reestructuración del código
24. • A veces la reestructuración se debe dar a nivel
de diagrama
Reestructuración del código
28. • Para arquitecturas cliente/servidor
– La funcionalidad de la aplicación migra a cada
computadora cliente
– Se implementan nuevas interfaces gráficas en
los clientes
– La funcionalidad de la base de datos se pasa
al servidor
– La funcionalidad especializada puede
quedarse en el servidor
– Se establecen nuevos requisitos de seguridad,
comunicación y control entre los sitios clientes
y el servidor
Ingeniería hacia adelante
Fuente: Ingeniería del Software. Un enfoque Práctico. R.S. Pressman
29. • Para arquitecturas orientadas a objetos
– En algunos casos es mejor dejar las
aplicaciones creadas con métodos
convencionales como están.
– Se usa ingeniería inversa para obtener los
modelos de diseño de datos, de funciones
y comportamientos.
Ingeniería hacia adelante
Fuente: Ingeniería del Software. Un enfoque Práctico. R.S. Pressman