Mantenimiento de Software: Ingeniería Reversa - Reingeniería

Diferencias

Reingenieria

Re diseño

Exploración del diseño

Reproducir la documentación

Ingenieria Reversa

Conocer el comportamiento del sistema construyendo modelos estaticos y dinámicos

Entender el sistema

Promover la ingeniería

Ayuda a modificar el software

Data reverse

Enfocada en las relaciones de la data, entre programas y la base de datos

Herramientas

Analisis

Orientadas a las tareas

Subtopic

Ingeniería Reversa de Software

Compuesto por dos fases(Chifosky y Cross)

Recolectar información

Abstraer información

Uso de binaries (Decompilación, Deasamblaje)

Recuperar codigo perdido

Migrar aplicación a otro HW

Traducir el codigo a otro lenguaje

Determinar la existencia de virus

Modelos estáticos

Abstracción

Descomponer el sistema

Estructura de codigos

CodeCrawler

Analisis

Sintaxis

Estructura

Complejidad

Para codigo

Para visualización : diagramas de clases

Modelos dinámicos

Abstracción

Encontrar patrones

Usar abstracciones estaticas(diagramas de secuencia)

Analisis

Polimorfismo

Llamadas de metodos

Manejo de memoria

Problemas de memoria

Conocer la actualidad del software

Para escenarios: diagramas de secuencia

Diagramas de estados

Abstracción

Ayuda en el logro de objetivos

Mantenimiento

Evolución

Reingenieria

Niveles de abstracción

Aplicación

Función

Estructura

Implementación

Alcance

Redocumentación del software

Recuperar detalles de diseño en cualquier nivel de abstraccion

Identificar componentes que necesitan ser reestructurados

Entender el sistema a gran escala

Importancia

Recuperar información perdida

Migración a otras plataformas

Facilitar el resuso de software

Identificar anomalías

Reduce costos de mantenimiento

Mejora las cualidades del software

Refactoring

Modifica el software para mejorar su lectura, mantenimiento y extensibilidad.

Comportamiento externo no cambia

Reduce code - smells

Dificultades

Vacíos

Problema/Solución

Concreto/Abstracto

Coherencia/Desintegración

Patrones de Diseño

Técnicas para resolver problemas comunes en el desarrollo de software

Resuelven problemas de diseño

Mejora la arquitectura de software

Definición

¿Qué hacer si se pierde un archivo, y no existe un control de versiones?

Ingernier{ia reversa, proceso de ingenier{a contrario.

Conocer que esta pasando en el software

Abstracci{on del sistema

Antes re ingenieria

Despues de reingenieria

Relacionado al mantenimiento de software