INGENIERÍA INVERSA.

Que es La ingeniería inversa para software es Abstracción El nivel de abstracción de un proceso de
el proceso de analizar un programa con ingeniería inversa y las herramientas usadas
la intención de crear una representación para efectuarla tienen que ver con la
del mismo en un nivel superior de sofisticación de la información de diseño
abstracción que el código fuente. que puede extraerse del código fuente.

De manera ideal, el nivel de abstracción debe ser
La ingeniería inversa es un proceso de
tan alto como sea posible, es decir, el proceso de
recuperación de diseño. Las
ingeniería inversa debe ser capaz de inferir
herramientas de ingeniería inversa
representaciones de diseño procedimental,
extraen información de diseño de datos,
información de estructura de programa y datos,
arquitectónico y procedimental de un modelos de objeto, modelos de datos y/o flujo de
programa existente. control y modelos de relación de entidad.

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. . En esencia. Dichos secretos podrían entenderse fácilmente si se obtuvieran las especificaciones de diseño y fabricación.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. 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. 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. Pero esos documentos son propiedad de la empresa competidora y no están disponibles para la compañía que hace la ingeniería inversa.

 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. . esta serie de anomalías puede ser detectados por la ingeniería inversa.  Detectar efectos laterales: los cambios que se puedan realizar en un sistema puede conducirnos a que surjan efectos no deseados. pudiendo aumentar la productividad. se generan representaciones gráficas lo que facilita su comprensión.. para lo cual se utiliza la recuperación de diseño. reducir los costes y los riesgos de mantenimiento. 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. principalmente código fuente.  Generar diferentes alternativas: del punto de partida del proceso.  Facilitar la reutilización: por medio de la ingeniería inversa se pueden detectar componentes de posible reutilización de sistemas existentes.

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. Tiende a enfocarse sobre detalles de diseño de módulos individuales y sobre estructuras de datos locales definidas dentro de módulos. En tales casos. Para realizar esta actividad se analiza el código fuente con una herramienta de reestructuración. la reestructuración no modifica la arquitectura global del programa. . poner a prueba y mantener. 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. La reestructuración de software modifica el código fuente y/o los datos con la intención de hacerlos sensibles a cambios futuros. pero los módulos individuales fueron codificados en una forma que los hace difíciles de entender. el código dentro de los módulos sospechosos puede reestructurarse. La documentación de código interna se actualiza. El código reestructurado resultante se revisa y pone a prueba para garantizar que no se introdujeron anomalías. Algunos sistemas heredados tienen una arquitectura de programa relativamente sólida. En general.

implementan archivos planos. Reestructuración de datos A diferencia de la reestructuración Cuando la estructura de datos es Un programa con arquitectura de de código. mejorar. Se identifican los objetos y atributos de datos. para muchas la reestructuración de datos es cuando un enfoque relacional aplicaciones. De hecho. programa que con el código fuente datos comienza con una actividad en sí. que ocurre en un nivel débil (por ejemplo. la reestructuración de los someten a reingeniería. . En la mayoría de los procesamiento). y se revisa la calidad de las estructuras de datos existentes. los datos se la viabilidad a largo plazo de un casos. la arquitectura de una actividad de reingeniería a simplificaría enormemente el información tiene más que ver con gran escala. de ingeniería inversa. si se datos débil será difícil de adaptar y de abstracción relativamente bajo.

archivado y control en los sitios cliente y servidor. el software existente se somete a ingeniería inversa (incluido el software) se distribuyen entre muchas para que puedan crearse modelos adecuados de datos.comportamiento y subsistemas. (Nueva Versión). datos creados durante la ingeniería inversa se usan entonces  Se implementan nuevas interfaces GUI en los sitios en conjunción con el modelado CRC para establecer la base clientes. conceptos y métodos de la reingeniería de software para volver a crear una aplicación existente. objeto.  Deben establecerse en nuevos requisitos de comunicaciones. para la definición de clases. modelos objeto-relacional. plataformas clientes. y se comienza el  La funcionalidad especializada puede permanecer en el diseño orientado a objetos.Servidor a objetos En esta arquitectura los recursos de computo centralizados Primero. Se definen entonces las  Las funciones de la base de datos se ubican en el jerarquías de clase. . sitio servidor. seguridad. Si el sistema sometido a reingeniería extiende la funcionalidad o comportamiento de la  La funcionalidad de la aplicación migra a cada aplicación original. Los modelos de computadora cliente. INGENIERÍA HACIA ADELANTE Aplica los principios. modelos servidor. Ingeniería hacia adelante para arquitecturas orientadas a Ingeniería hacia adelante para arquitecturas orientadas Cliente . funciones y comportamientos. se crean casos de uso.