Subido por acosta_marquez_rodolfo

ResumenIS

Anuncio
Introducción
La demanda por parte de todos los sectores empresariales para adaptar la información de sus
sistemas a la Web ha creado una enorme necesidad de métodos, herramientas e infraestructuras
para evolucionar y explotar aplicaciones existentes de manera eficiente y rentable. La Ingeniería
Inversa ha sido anunciada como una de las tecnologías más prometedoras para combatir el
problema que deriva de los sistemas heredados.
Chikofsky y Cruz definieron la ingeniería inversa como "el análisis de un sistema de sujeción a
identificación de sus componentes actuales y sus dependencias, para extraer y crear abstracciones
del sistema y la información de su diseño."
En los últimos diez años, los investigadores han desarrollado un gran número de capacidades
para explorar, manipular, analizar, resumir, vincular, sintetizar, componentizar, y visualizar los
elementos del software. Estas capacidades incluyen la documentación en muchas formas y la
representación de código intermedio, los datos y la arquitectura.
Muchas herramientas de ingeniería inversa se centran en extraer la estructura de un sistema
legado con el objetivo de transferir esta información en las mentes de los ingenieros de software
tratando de rediseñar o reutilizar.
En entornos corporativos, invertir en herramientas de ingeniería aún tiene un largo camino que
recorrer antes de convertirse en una parte efectiva e integral del conjunto de herramientas estándar
que un ingeniero de software típico utiliza día a día.
Ingeniería Inversa de Código
En la investigación y la práctica actual, el enfoque de ambos, la ingeniería inversa a nivel de código
e ingeniería directa, son procesos orientados a producir código de calidad. La importancia del nivel
de código de sistemas legados radica en que las reglas de negocio importantes están realmente
implícitas en el código.
Durante la evolución del software, se aplican cambios en el código fuente, para agregar funciones,
corregir los defectos y mejorar calidad. En sistemas con escasa documentación, el código es la
única fuente confiable de información sobre el sistema. Como resultado, el proceso de ingeniería
inversa se ha centrado en la comprensión del mismo.
En los últimos diez años, la investigación de ingeniería inversa ha producido una serie de
capacidades para el análisis de código, incluyendo descomposición “subsistema”, la síntesis de
concepto, diseño, patrón del programa y sus cambios, el análisis de dependencias dinámicas y
estáticas, las métricas orientadas a objetos y exploración y visualización de software. En general,
estos análisis han tenido éxito en el tratamiento del software en el nivel sintáctico para atender las
necesidades específicas de información y para abarcar los vacíos de información relativamente
estrechos. Sin embargo, el código no contiene todos los datos que se necesitan. Por lo general, el
conocimiento de la arquitectura y el diseño, ventajas y desventajas, limitaciones de ingeniería y la
aplicación de dominio sólo existe en las mentes de los ingenieros de software creadores. Con el
tiempo, los recuerdos se desvanecen, la gente se va, los documentos se desechan, y aumenta la
complejidad. En consecuencia, surge una brecha entre la información útil y la información
requerida necesaria para permitir el cambio de software.
Programa de Entendimiento Continuo
Para evitar una crisis por la falta de datos, es importante hacer frente a las necesidades de
información con mayor eficacia en todo el ciclo de vida del software. Es necesario apoyarse en
elementos de trazabilidad hacia adelante y hacia atrás en sistemas de software. Por ejemplo, en la
dirección de avance, dado un módulo de diseño, es importante ser capaz de obtener los elementos
de código que lo implementan. En la dirección hacia atrás, de una determinada fuente o archivo de
objeto, tenemos que ser capaces de obtener la regla de negocio a la que contribuye. Además es
importante para determinar cuándo es más apropiado para enfocar el análisis en diferentes niveles
de abstracción. Para efectos de comprensión, la trazabilidad es especialmente importante.
Tenemos que ser capaces de tomar un patrón de cambio, tales como la actualización de una ley
de impuestos, y el mapa de esta ley de forma explícita en las estructuras de software.
Para llevar acabo un programa de entendimiento continuo es necesario resolver cuestiones como
las siguientes:






¿Cuáles son las necesidades de información a largo plazo de la programación del
sistema?
¿A qué patrones de cambio se someten a los sistemas de software?
¿Qué asignaciones deben ser registradas de forma explícita?
¿Qué tipo de repositorio de software podría presentar la información requerida?
¿Cuáles son los requisitos de herramientas de soporte para producir y manipular las
asignaciones?
¿Cómo puede este apoyo coexistir con las herramientas tradicionales, los usuarios y los
procesos?
Proceso de Ingeniería Inversa
Además del énfasis en el "programa de entendimiento continuo" es importante centrar los
esfuerzos en una mejor definición del proceso de ingeniería inversa. La ingeniería inversa
típicamente se ha llevado a cabo para hacer frente a la cuestiones técnicas de manera eficaz, el
proceso debe ser maduro y repetible, y la mayoría de sus elementos necesitan estar con el apoyo
de herramientas automatizadas. El aumento de la madurez del proceso permitiría una mejor
evaluación de los riesgos, los costos y los aspectos económicos de las actividades de reingeniería.
Con procesos poco conocidos, el éxito de un proyecto de reingeniería se basa únicamente en la
ingenuidad de la gente. Ingenio involucrado que desaparece cuando el proyecto termine.
Dirección de la Investigación
En resumen, la investigación futura en la ingeniería inversa, es importante para entender el
software en los diferentes niveles de abstracción y mantener asignaciones entre estos niveles. Se
necesitan catálogos de la información, como requisitos de las herramientas, y de procesos como
paso previo a permitir la comprensión continua del programa. Procesos útiles de ingeniería inversa
deben ser identificados y más apoyados, como un paso importante para hacer la disciplina de
reingeniería más racional. Las herramientas de ingeniería inversa y procesos deben evolucionar
con el entorno de desarrollo que hace hincapié en los componentes, la Web y sistemas
distribuidos.
Ingeniería Inversa de Datos
Mientras que el foco principal de la ingeniería inversa de código está en mejorar el entendimiento
humano acerca de cómo se procesa la información, la ingeniería inversa de datos forza a la
pregunta de qué información se almacena y cómo esta información se puede utilizar en un
contexto diferente.
En la actualidad, los investigadores reconocen que la calidad de un legado documentación de los
datos recuperados de un sistema puede hacer o deshacer objetivos estratégicos de las
tecnologías de la información. Por ejemplo el análisis de datos es fundamental en la identificación
de los objetos centrales de negocio, es necesaria para la migración de sistemas de software
orientado a objetos a otras plataformas. El mayor uso de los almacenes de datos y técnicas de
minería de datos para los sistemas de apoyo a la toma de decisiones estratégicas tienen también
motivado un interés en los datos de la tecnología de ingeniería inversa.
La incorporación de los datos de varios sistemas heredados en los almacenes de datos requiere de
un plan coherente de estructuras de datos heredados en un modelo común de objetos de negocio.
Retos similares también se producen con la integración basada en la web de ex sistemas de
información heredados e infraestructuras de red centralizada. Técnicas de ingeniería inversa de
datos también se pueden utilizar para evaluar la calidad general de los sistemas de software. Una
implementación de estructura de datos persistente con defectos de diseño significativos indica un
sistema de software mal implementada. Un análisis de las estructuras de datos puede ayudar a las
empresas a tomar decisiones sobre la conveniencia de comprar (y mantener) paquetes
comerciales de software. La ingeniería inversa de datos también puede ser utilizados para evaluar
la calidad del catálogo de esquema DBMS de proveedor de software, y por lo tanto puede
representar un criterio de evaluación para un producto de software potencial.
Proceso de Ingeniería Inversa de Datos y el papel de las Herramientas
En la mayoría de los casos, la información importante acerca del modelo de datos
no
se
encuentra
en
el
catálogo
de
esquema
físico
extraída
desde el DBMS. En general, análisis de los datos es una actividad exploratoria y humano –
intensiva
que
requiere
una
gran
cantidad
de
experiencia
y
habilidades.
Las herramientas actuales proporcionan sólo un apoyo mínimo en esta actividad
más allá de la visualización de la estructura de un catálogo de esquema extraído.
A pesar de que es poco probable que la tarea cognitiva de análisis de datos
pueda ser que nunca se logre totalmente automatizado, la ingeniería inversa asistida por
herramientas de ordenador, tienen el potencial de reducir drásticamente el esfuerzo dedicado en
esta fase. Podrían ser una ayuda importante en la búsqueda, recolección, y la combinación de
indicadores para la estructura y restricciones del esquema semántico y guiar la reingeniería de un
modelo de datos inicialmente incompleta a una completa y un resultado consistente. Sin embargo,
para lograr este tipo de apoyo, la corriente de herramientas de ingeniería de datos inversa
necesitan superar los siguientes dos problemas importantes:
• El conocimiento imperfecto. El análisis de datos se hace inherentemente
con supuestos inciertos y heurísticas sobre el modelo de datos legado. Combinando indicadores
semánticos detectados que a menudo lleva los resultados del análisis a incertidumbre y/o
contradicciones. Herramientas de ingeniería inversa de datos tienen que tolerar conocimiento
imperfecto para apoyar en este proceso interactivo y para guiar de forma incremental la
reingeniería a un constante modelo de datos.
• Personalización. Sistemas de información heredados son sobre la base de muchas diferentes
plataformas de hardware y software y lenguajes de programación. Sus modelos de datos se han
desarrollado utilizando diversas convenciones de diseño y patrones de optimización idiosincrásica;
las herramientas existentes no proporcionan la personalización necesaria para ser aplicable a esta
variedad de contextos de aplicación.
Abstracción Conceptual
La abstracción conceptual tiene como objetivo mapear el modelo de datos lógicos
derivado del análisis de los datos a un diseño conceptual equivalente. Este diseño se suele
representar por un modelo entidad relación y orientado a objetos proporciona el nivel necesario de
abstracción requerido por la mayoría de las actividades posteriores de reingeniería. En la
actualidad, existen varias herramientas de apoyo abstracción de datos, sin embargo, en la práctica,
la mayoría de ellas son uso de limitado porque no logran cumplir al menos uno de los
siguientes dos requisitos:

La
iteración.
El
proceso
de
ingeniería
inversa
de
datos
implica
una
secuencia
de
actividades
de
análisis
y
de
abstracción
con varios ciclos de iteración. Después de un primer análisis, la reingeniería produce un
diseño abstracto inicial que sirve de base para el debate con los expertos de dominio y
nuevas investigaciones.

El proceso de mapeo bidireccional. Las herramientas actuales de ingeniería Inversa de
datos siguen un resumen de los datos estrictamente bottom-up, es decir, se produce la
abstracción a través de una transformación de la lógica de los datos analizados. Este
enfoque es menos adecuado si existente un pre-diseño parcial para la estructura de datos.
El uso de tal información de manera eficiente a la ingeniería inversa en sistemas de
información heredados requerirán un proceso de abstracción bottom-up/top-down híbrido.
Dirección de Investigación
Sobre la base de este debate, la comunidad de ingeniería inversa necesita desarrollar
herramientas que proporcionan un apoyo más adecuado para razonamiento humano en un
retroceso gradual y evolutivo del proceso de ingeniería que se pueden personalizar para diferentes
contextos de aplicación
Herramientas de Ingeniería Inversa
Las técnicas de ingeniería inversa utilizadas para ayudar a la comprensión del programa pueden
ser agrupados en tres categorías: la navegación sin ayuda, apalancamiento de conocimiento y
experiencia empresarial, y asistido por ordenador.
Navegación sin ayuda es esencialmente "humanware": el ingeniero de software
navega manualmente a través del código fuente en forma impresa o busca en línea, tal vez
utilizando el sistema de archivos como la navegación ayuda. Este enfoque tiene limitaciones
inherentes basados en la cantidad de información que un ingeniero de software puede ser capaz
de realizar un seguimiento en su cabeza. Utilizar el conocimiento empresarial y la experiencia se
puede lograr por parte del tutor o realizando entrevistas informales con personal experto en el
tema. Este enfoque puede ser muy valioso si hay gente disponible que se ha asociado con el
sistema, ya que ha evolucionado con el tiempo. Ellos tienen información importante en sus
cabezas sobre las decisiones de diseño, los principales cambios en el tiempo, y subsistemas
problemáticos. Sin embargo, el aprovechamiento de los conocimientos y la experiencia empresarial
no siempre es posible. Los diseñadores originales pueden haber dejado la empresa. El sistema de
software puede haber sido adquirido de otra compañía. O el sistema puede haber tenido su
mantenimiento procedente de fuera. En estas situaciones, la ingeniería inversa se ha asistido por
ordenador. Un entorno de ingeniería inversa puede manejar las complejidades de la comprensión
del programa ayudando al ingeniero de software a extraer un alto nivel información de los
artefactos de bajo nivel, como el código fuente. Esto libera a los ingenieros de software de lo
tedioso, manual, y de tareas propensas a errores como la lectura de código, la búsqueda, y el
patrón coincidente con la inspección.
Efectividad de las Herramientas Actuales
Dado que las herramientas de ingeniería inversa parecen ser la clave para ayudar a la
comprensión del programa, ¿cuán eficaces son las ofertas de hoy en el cumplimiento de este
objetivo? En tanto a nivel académico y configuración empresarial, las herramientas de ingeniería
inversa tienen un largo camino por recorrer antes de convertirse en una parte efectiva e integral del
conjunto de herramientas de un típico ingeniero de software en el uso del día a día. Tal vez el
mayor desafío para una mayor eficacia de las herramientas de ingeniería inversa es una adopción
más amplia: las herramientas no pueden ser eficaces si no se utilizan, y la mayoría de los
ingenieros de software tienen poco conocimiento de las herramientas actuales y sus capacidades.
Si bien no existe un mercado relativamente saludable donde obtenga herramientas de pruebas de
unidades, servicios públicos de depuración de código, y entornos de desarrollo integrados, el
mercado de herramientas de la ingeniería inversa sigue siendo bastante limitado.
Además de conocimiento, la adopción representa una barrera crítica. La mayoría de las personas
carecen de las habilidades necesarias para hacer el uso correcto de las herramientas de ingeniería
inversa. La raíz del problema de la adopción es realmente doble: la falta de análisis de habilidades
de software por parte de los ingenieros de software de hoy en día , y la falta de integración entre
las herramientas avanzadas de ingeniería inversa y las utilidades más comunes de software, tales
como los mencionados anteriormente.
Descargar