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
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.
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..
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.
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.
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.
Top Related