Mantenimiento de Software: Ingeniería Reversa - Reingeniería
Definición
Relacionado al mantenimiento de software
Abstracci{on del sistema
Despues de reingenieria
Antes re ingenieria
Conocer que esta pasando en el software
Ingernier{ia reversa, proceso de ingenier{a contrario.
¿Qué hacer si se pierde un archivo, y no existe un control de versiones?
Patrones de Diseño
Mejora la arquitectura de software
Resuelven problemas de diseño
Técnicas para resolver problemas comunes en el desarrollo de software
Dificultades
Vacíos
Coherencia/Desintegración
Concreto/Abstracto
Problema/Solución
Refactoring
Reduce code - smells
Comportamiento externo no cambia
Modifica el software para mejorar su lectura, mantenimiento y extensibilidad.
Importancia
Mejora las cualidades del software
Reduce costos de mantenimiento
Identificar anomalías
Facilitar el resuso de software
Migración a otras plataformas
Recuperar información perdida
Alcance
Entender el sistema a gran escala
Identificar componentes que necesitan ser reestructurados
Recuperar detalles de diseño en cualquier nivel de abstraccion
Redocumentación del software
Niveles de abstracción
Implementación
Función
Aplicación
Ayuda en el logro de objetivos
Evolución
Mantenimiento
Ingeniería Reversa de Software
Modelos dinámicos
Diagramas de estados
Para escenarios: diagramas de secuencia
Conocer la actualidad del software
Problemas de memoria
Manejo de memoria
Llamadas de metodos
Polimorfismo
Usar abstracciones estaticas(diagramas de secuencia)
Encontrar patrones
Modelos estáticos
Para visualización : diagramas de clases
Para codigo
Complejidad
Estructura
Sintaxis
Abstracción
Estructura de codigos
CodeCrawler
Descomponer el sistema
Uso de binaries (Decompilación, Deasamblaje)
Determinar la existencia de virus
Traducir el codigo a otro lenguaje
Migrar aplicación a otro HW
Recuperar codigo perdido
Compuesto por dos fases(Chifosky y Cross)
Abstraer información
Recolectar información
Diferencias
Subtopic
Ingenieria Reversa
Herramientas
Orientadas a las tareas
Analisis
Data reverse
Enfocada en las relaciones de la data, entre programas y la base de datos
Ayuda a modificar el software
Promover la ingeniería
Entender el sistema
Conocer el comportamiento del sistema construyendo modelos estaticos y dinámicos
Reingenieria
Reproducir la documentación
Exploración del diseño
Re diseño