Ingenieria Inversa

6
INGENIERÍA INVERSA. La ingeniería inversa para software es el proceso de analizar un programa con la intención de crear una representación del mismo en un nivel superior de abstracción que el código fuente. La ingeniería inversa es un proceso de recuperación de diseño. Las herramientas de ingeniería inversa extraen información de diseño de datos, arquitectónico y procedimental de un programa existente. Que es El nivel de abstracción de un proceso de ingeniería inversa y las herramientas usadas para efectuarla tienen que ver con la sofisticación de la información de diseño que puede extraerse del código fuente. De manera ideal, el nivel de abstracción debe ser tan alto como sea posible, es decir, el proceso de ingeniería inversa debe ser capaz de inferir representaciones de diseño procedimental, información de estructura de programa y datos, modelos de objeto, modelos de datos y/o flujo de control y modelos de relación de entidad. Abstracci ón

description

Descripcion de la Ingenieria Inversa

Transcript of Ingenieria Inversa

Page 1: Ingenieria Inversa

INGENIERÍA INVERSA.

La ingeniería inversa para software es

el proceso de analizar un programa con

la intención de crear una representación

del mismo en un nivel superior de

abstracción que el código fuente.

La ingeniería inversa es un proceso de

recuperación de diseño. Las

herramientas de ingeniería inversa

extraen información de diseño de datos,

arquitectónico y procedimental de un

programa existente.

Que es El nivel de abstracción de un proceso de

ingeniería inversa y las herramientas usadas

para efectuarla tienen que ver con la

sofisticación de la información de diseño

que puede extraerse del código fuente.

De manera ideal, el nivel de abstracción debe ser

tan alto como sea posible, es decir, el proceso de

ingeniería inversa debe ser capaz de inferir

representaciones de diseño procedimental,

información de estructura de programa y datos,

modelos de objeto, modelos de datos y/o flujo de

control y modelos de relación de entidad.

Abstracción

Page 2: Ingenieria Inversa

Antes de poder comenzar las actividades de ingeniería inversa, el código fuente no

estructurado (“sucio”) se reestructura de modo que sólo contenga los constructos de

programación estructurados. Esto hace que el código fuente sea más fácil de leer y que

proporcione la base para todas las actividades de ingeniería inversa posteriores.

Ejemplo:

Una compañía desensambla un producto de hardware de otra empresa con la intención

de entender los “secretos” de diseño y fabricación de su competidor. Dichos secretos

podrían entenderse fácilmente si se obtuvieran las especificaciones de diseño y

fabricación. Pero esos documentos son propiedad de la empresa competidora y no están

disponibles para la compañía que hace la ingeniería inversa. En esencia, la ingeniería

inversa exitosa deriva en una o más especificaciones de diseño y fabricación para un

producto al examinar especímenes reales del mismo.

Page 3: Ingenieria Inversa

Ventajas de la Ingeniería Inversa

Reducir la complejidad del sistema: al intentar comprender el software se facilita su mantenimiento y la

complejidad existente disminuye.

Generar diferentes alternativas: del punto de partida del proceso, principalmente código fuente, se

generan representaciones gráficas lo que facilita su comprensión.

Recuperar y/o actualizar la información perdida (cambios que no se documentaron en su momento): en

la evolución del sistema se realizan cambios que no se suele actualizar en las representaciones de

nivel de abstracción más alto, para lo cual se utiliza la recuperación de diseño.

Detectar efectos laterales: los cambios que se puedan realizar en un sistema puede conducirnos a que

surjan efectos no deseados, esta serie de anomalías puede ser detectados por la ingeniería inversa.

Facilitar la reutilización: por medio de la ingeniería inversa se pueden detectar componentes de posible

reutilización de sistemas existentes, pudiendo aumentar la productividad, reducir los costes y los

riesgos de mantenimiento..

Page 4: Ingenieria Inversa

Restructuración del código

La reestructuración de código se realiza para producir un diseño que produzca la misma función pero con

mayor calidad que el programa original.

Algunos sistemas heredados tienen una arquitectura de programa relativamente sólida, pero los módulos

individuales fueron codificados en una forma que los hace difíciles de entender, poner a prueba y

mantener. En tales casos, el código dentro de los módulos sospechosos puede reestructurarse.

La reestructuración de software modifica el código fuente y/o los datos con la intención de hacerlos

sensibles a cambios futuros. En general, la reestructuración no modifica la arquitectura global del

programa. Tiende a enfocarse sobre detalles de diseño de módulos individuales y sobre estructuras de

datos locales definidas dentro de módulos.

Para realizar esta actividad se analiza el código fuente con una herramienta de reestructuración. Las

violaciones a los constructos de programación estructurada se anotan y luego el código se reestructura

(esto puede hacerse automáticamente) o incluso se reescribe en un lenguaje de programación más

moderno. El código reestructurado resultante se revisa y pone a prueba para garantizar que no se

introdujeron anomalías. La documentación de código interna se actualiza.

Page 5: Ingenieria Inversa

Reestructuración de datos

Un programa con arquitectura de

datos débil será difícil de adaptar y

mejorar. De hecho, para muchas

aplicaciones, la arquitectura de

información tiene más que ver con

la viabilidad a largo plazo de un

programa que con el código fuente

en sí.

A diferencia de la reestructuración

de código, que ocurre en un nivel

de abstracción relativamente bajo,

la reestructuración de datos es

una actividad de reingeniería a

gran escala. En la mayoría de los

casos, la reestructuración de los

datos comienza con una actividad

de ingeniería inversa. Se

identifican los objetos y atributos

de datos, y se revisa la calidad de

las estructuras de datos

existentes.

Cuando la estructura de datos es

débil (por ejemplo, si se

implementan archivos planos,

cuando un enfoque relacional

simplificaría enormemente el

procesamiento), los datos se

someten a reingeniería.

Page 6: Ingenieria Inversa

INGENIERÍA HACIA ADELANTE

Ingeniería hacia adelante para arquitecturas orientadas

a objetos

Aplica los principios, conceptos y métodos de la reingeniería de

software para volver a crear una aplicación existente. (Nueva Versión).

Ingeniería hacia adelante para arquitecturas orientadas a Cliente - Servidor

En esta arquitectura los recursos de computo centralizados (incluido el software) se distribuyen entre muchas plataformas clientes.

La funcionalidad de la aplicación migra a cada computadora cliente.

Se implementan nuevas interfaces GUI en los sitios clientes.

Las funciones de la base de datos se ubican en el servidor.

La funcionalidad especializada puede permanecer en el sitio servidor.

Deben establecerse en nuevos requisitos de comunicaciones, seguridad, archivado y control en los sitios cliente y servidor.

Primero, el software existente se somete a ingeniería inversa para que puedan crearse modelos adecuados de datos, funciones y comportamientos. Si el sistema sometido a reingeniería extiende la funcionalidad o comportamiento de la aplicación original, se crean casos de uso. Los modelos de datos creados durante la ingeniería inversa se usan entonces en conjunción con el modelado CRC para establecer la base para la definición de clases. Se definen entonces las jerarquías de clase, modelos objeto-relacional, modelos objeto- comportamiento y subsistemas, y se comienza el diseño orientado a objetos.