INTRODUCCIÓN - DSpace de la Universidad Catolica de Cuenca

Transcripción

INTRODUCCIÓN - DSpace de la Universidad Catolica de Cuenca
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
INTRODUCCIÓN
Todo sistema de información se construye para solucionar problemas
presentes. Un cambio en las condiciones del entorno organizacional
puede producir un cambio en los objetivos de la organización y, en
consecuencia, las reglas de la organización también se
Muchos
sistemas
modifican.
en funcionamiento, deben someterse a un
mantenimiento apremiante y constante. Para eso es necesario contar con
las herramientas necesarias para realizar un adecuado control de cambios
y mantenimiento del sistema.
En la actualidad muchas empresas (especialmente las pequeñas y
medianas empresas) que desarrollan software para otras empresas o
para ellas mismas no tienen conciencia de lo importante que es el
mantenimiento y tratan de “ahorrar” costos al no invertir en tareas de
documentación de sus sistemas, presentando así una inadecuada y
desactualizada documentación, y en algunos casos una documentación
nula, que desemboca con el tiempo en una degradación de la aplicación
y, por ende, en un servicio deficiente para el cliente y/o usuario. Existen
también muchos sistemas de software que son complejos o antiguos y
que su información no es fácilmente disponible, y sin el suficiente
entendimiento del sistema este mantenimiento no puede ser realizado
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
1
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Múltiples estudios señalan que el mantenimiento es la parte más costosa
del ciclo de vida del software. Estadísticamente está comprobado que el
coste de mantenimiento de un producto software a lo largo de toda su
vida útil supone más del doble que los costes de su desarrollo.
El propósito del presente trabajo es proponer una metodología de
ingeniería inversa como una solución para entender el sistema existente,
a través de la recuperación del diseño y la especificación de sus
requisitos, contribuyendo así con el entendimiento de la funcionalidad del
sistema que se va hacer mantenimiento.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
2
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
CAPÍTULO 1
1.1 MARCO REFERENCIAL
Herramientas CASE para la Ingeniería Inversa ya existen algunas
herramientas de este tipo. Su evolución marcará notables mejoras en la
obtención de los diseños a partir del código ya existente (ingeniería
inversa) y la regeneración del mismo, una vez optimizado el diseño
(ingeniería directa).
Ejemplos de algunos:
Rational Rose
Es una de las más poderosas herramientas de modelado visual para el
análisis y diseño de sistemas basados en objetos. Se utiliza para modelar
un sistema antes de proceder a construirlo. Cubre todo el ciclo de vida de
un proyecto:
• Concepción y formalización del modelo,
• Construcción de los componentes,
• Transición a los usuarios y
• Certificación de las distintas fases
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
3
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Telelogic Tau
La familia de productos de Telelogic Tau® automatiza las prácticas
recomendadas de diseño y desarrollo para:
Visualización de la concepción de los proyectos y de los requisitos
Ingeniería de sistemas
Arquitectura de sistemas de defensa
Desarrollo de software para sistemas embebidos y otros sistemas
avanzados
Pruebas con las eficaces funciones de modelado gráfico de Tau, los
usuarios pueden:
Especificar todos los aspectos del diseño de un sistema
Simular y verificar su comportamiento
Garantizar que el diseño es acorde con las necesidades del cliente,
incluso en las fases tempranas del proyecto
Generar código del modelo validado
Definir, generar y ejecutar pruebas en los modelos
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
4
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Enterprise Architect
Enterprise Architect combina el poder de la última especificación UML 2.1
con alto rendimiento, interfaz intuitiva, para traer modelado avanzado al
escritorio, y para el equipo completo de desarrollo e implementación.
Es una herramienta comprensible de diseño y análisis UML, cubriendo el
desarrollo de software desde el paso de los requerimientos a través de las
etapas del análisis, modelos de diseño, pruebas y mantenimiento. EA es
una herramienta multi-usuario, basada en Windows, diseñada para ayudar
a construir software robusto y fácil de mantener. Ofrece salida de
documentación flexible y de alta calidad. El manual de usuario está
disponible en línea.
Vaquista
Esta herramienta es capaz de convertir una interfaz web en HTML a XIML
y después usar un proceso secundario para producir una tercera
representación.
Altova UModel 2007 es el punto de entrada para el desarrollo de software
exitoso. Utilice UModel 2007 para crear e interpretar diseños software
mediante la potencia del estándar UML 2.1. Dibuje su diseño de
aplicación y genere código Java o C# a partir de sus planos, o haga
ingeniería inversa de programas existentes a diagramas UML claros y
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
5
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
precisos para abarcar rápidamente su arquitectura software. Incluso podrá
corregir su código generado o sus modelos y completar la ronda
produciendo automáticamente nuevos diagramas o regenerando el
código. De cualquier manera, UModel le permite mantener su proyecto
sincronizado y al día. Los 13 posibles tipos de diagramas UML 2 están
soportados por UModel junto con un novedoso tipo de diagrama para
modelar Schema XML en UML
Imagix 4D
Imagix 4D es una herramienta para la Ingeniería Inversa estática. Esta
herramienta funciona en distintas plata-formas (Unix, Linux, Windows,
entre otras tantas) y posibilita el análisis de sistemas escritos en C y C++.
En Imagix 4D existen ventanas que muestran lo siguiente: i) relaciones
entre archivos, clases, funciones, variables, macros y tipos; ii) lugares
donde los símbolos se encuentran ubicados dentro de la estructura y
también posibilita ver el contenido de los archivos; iii) formas de navegar
entre los distintos archivos del sistema de estudio; iv) resultados de
búsquedas; v) navegación entre las distintas clases del sistema; vi)
diagramas de flujos. Las funciones provistas con Imagix 4D ayudan a
diferentes tareas relacionadas con la comprensión de programas, por
ejemplo: i) permite una rápida navegación a través del flujo de control;
herencias y relaciones entre las clases;
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
6
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
ii) facilita el estudio del programa por medio de componentes reusables y
el proceso de construcción;
iii) analiza el software de las siguientes maneras: focalizando en
actividades de verificación; ubicando cuellos de botellas;
iv)
permite
generar
documentación
actualizada
y
de
código
indocumentado
1.2 MARCO TEÓRICO
El Objetivo primordial de la Ingeniería Inversa es proporcionar una base
para el mantenimiento y futuros desarrollos. Este objetivo general se
puede traducir en los siguientes objetivos parciales:
•
Facilitar la reutilización.
•
Proporcionar documentación que no existe, o actualizar la
existente.
•
Migrar a otra plataforma hardware o software, cuando sea
necesario.
•
Llevar el sistema bajo el control de un entorno CASE.
A la vista de estos objetivos, los sistemas candidatos a aplicarles la
Ingeniería Inversa reúnen algunas de las siguientes características:
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
7
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
•
Las especificaciones de diseño y la documentación, no existen o
están incompletas.
•
El código no es estructurado.
•
El sistema necesita un excesivo mantenimiento correctivo.
•
Algunos
módulos
se
han
hecho
excesivamente
complejos
debido a los sucesivos cambios realizados en ellos.
•
Se necesita una migración hacia una nueva plataforma de
hardware o
de software.
Aplicar la Ingeniería Inversa supone un enorme esfuerzo y, por tanto, se
hace necesario evaluar exhaustivamente y siendo muy realistas, los
casos en los que es rentable su aplicación. A estos efectos, algunos
aspectos que se deben considerar son los siguientes:
•
Los programas que no se usan con mucha frecuencia no es
probable que vayan a cambiar.
•
Las herramientas de ingeniería inversa, generalmente herramientas
CASE relativamente sofisticadas, sólo pueden utilizarse para una
clase limitada de aplicaciones.
•
El coste en esfuerzo y en dinero puede ser prohibitivo.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
8
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
No obstante, la Ingeniería Inversa produce una
serie de beneficios,
que también deben ser considerados. Los más importantes son los
siguientes:
•
Mejora la calidad del software, ya que los sistemas candidatos a
aplicarles Ingeniería Inversa son, en general, sistemas de baja
calidad.
•
Aporta una mayor ventaja competitiva, dado que al facilitar el
mantenimiento, permite un mayor poder de reacción ante los
cambios solicitados por los usuarios.
1.3 MARCO CONCEPTUAL
Ingeniería Inversa
El término “Ingeniería Inversa” tiene sus orígenes en el mundo del
hardware. Una empresa desensambla un producto de la competencia
para intentar comprender los secretos del diseño y de la fabricación. Pues
bien, la Ingeniería Inversa del software es bastante similar; si bien, en la
mayoría de los casos el producto objeto de la misma no es de una
empresa de la competencia sino, más bien, se trata de un trabajo propio,
generalmente realizado muchos años atrás, y del que no existen
especificaciones o éstas son muy incompletas.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
9
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
La Ingeniería Inversa se ocupa de estudiar un sistema de información en
el orden inverso establecido en el ciclo de vida habitual; esto es,
partiendo del código fuente, se trata de identificar los componentes del
sistema y las relaciones existentes entre ellos. Hasta su llegada, el ciclo
de vida del software era, en teoría, en una sola dirección; ahora, se puede
hablar de dos direcciones: forward o hacia adelante, que es la tradicional,
y reverse o hacia atrás, que es la de la Ingeniería Inversa.
1.4 Herramientas para la ingeniería inversa
La Ingeniería Inversa requiere algunas herramientas especializadas que
no son normalmente familiares para muchos usuarios (e incluso para
muchos
desarrolladores de software.
Desensambladores
Descompiladores
Depuradores
Ingeniería Inversa/Editores Hexadecimales
Otras Herramientas
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
10
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
1.4.1 Ingeniería Inversa/Desensambladores
Esencialmente, un desensamblador es exactamente lo contrario de un
ensamblador. Tal como un ensamblador convierte código escrito en
ensamblador en código máquina binario, un desensamblador invierte el
proceso e intenta recrear el código en ensamblador partiendo del código
máquina binario.
Dado que la mayoría de los lenguajes ensambladores tienen una
correspondencia uno a uno con instrucciones máquina subyacentes, el
proceso
de
desensamblado
es
relativamente
sencillo,
y
un
desensamblador básico puede a menudo ser implementado simplemente
leyendo bytes, y efectuando una búsqueda en una tabla. Por supuesto,
desensamblar tiene sus propios problemas y escollos, que serán cubiertos
mas adelante en este capítulo.
Muchos desensambladores tienen la opción de producir instrucciones en
lenguaje
ensamblador
usando
la
sintaxis
de
Intel,
AT&T,
o
(ocasionalmente) HLA.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
11
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Desensambladores para Windows
Por conveniencia, separaremos los desensambladores Windows en 2
categorías:
Herramientas
Comerciales
(que
cuestan
dinero),
y
Herramientas Gratuitas (que son gratis y/o libres).
Herramientas Comerciales
IDA Pro
es un desensamblador profesional caro extremadamente potente. La
parte mala es su elevado precio.
PE Explorer
es un desensamblador que "se centra en facilidad de uso, claridad y
navegación". No es tan completo como IDA Pro, pero tiene un precio mas
bajo.
W32DASM
W32DASM es un excelente desensamblador 16/32 bit para Windows.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
12
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Herramientas Gratuitas
IDA Pro Freeware 4.1
Se comporta casi como IDA Pro, pero solo desensambla código para
procesadores Intel x86, y solo funciona en Windows.
IDA Pro Freeware 4.3
Mejor interfaz gráfico que la versión previa.
BORG Disassembler BORG
Es un excelente desensamblador con interfaz gráfico para Win32.
HT Editor
Un desensamblador analizador para instrucciones x86. La última versión
corre como un programa de interfaz gráfico de consola en Windows, pero
hay versiones compiladas para Linux también.
DiStorm64
DiStorm es una librería de desensamblador de stream altamente
optimizada para 80x86 y AMD64.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
13
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Desensambladores para Linux
Bastard DisassemblerBastard
Es un potente y programable desensamblador para Linux y FreeBSD.
Ciasdis
Permite construir conocimiento sobre un cuerpo de código de manera
interactiva e incremental. Es único en que todo el código desensamblado
puede ser re-ensamblado exactamente al mismo código. Soporta 8080,
6809, 8086, 80386, Pentium I y DEC Alpha. Facilidades de scripting
ayudan en al análisis de cabeceras de fichero Elf y MSDOS y hacen esta
herramienta extensible. ciadsis para Pentium I está disponible como
imagen binaria, las otras están en código fuente, cargables sobre lina
Forth, disponible del mismo sitio.
Objdump
Viene de manera estándar, y es típicamente usada para inspección
genérica de ficheros binarios.
Gdb
Viene de manera estándar, como depurador, pero es usado muy a
menudo para desensamblar. Si tienes un bloque arbitrario de datos en
hexadecimal
que
quieres
desensamblar,
simplemente
introdúcelo
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
14
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
(interactivamente) o compilalo en un programa como una cadena de texto
así: char foo[] = {0x90, 0xcd, 0x80, 0x90, 0xcc, 0xf1, 0x90}.
Lida linux interactive disassembler
Un desensamblador interactivo con algunas funciones especiales como
un criptoanalizador. Muestra referencias a cadenas, hace análisis de flujo
de código, y no depende de objdump. Usa la librería de desensamblage
Bastard para descodificar instrucciones individuales.
ldasm
LDasm (Linux Disassembler) es un interfaz gráfico basado en Perl/Tk para
objdump/binutils que intenta imitar el aspecto de W32Dasm. Busca
referencias cruzadas por ejemplo cadenas, convierte el código de GAS a
un estilo parecido a MASM, traza programas y mucho más. Viene con
PTrace, un logger para flujo de procesos.
Desensambladores para no-x86
Ciasdis
Esta herramienta basada en Forth permite construir conocimiento sobre
un cuerpo de código de manera interactiva e incremental. Es único en que
todo el código desensamblado puede ser re-ensamblado al mismo código
exactamente. Soporta procesadores 8080, 6809, 8086, 80386, Pentium I
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
15
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
y DEC Alpha. Facilidades de scripting ayudan en al análisis de cabeceras
de fichero Elf y MSDOS y hacen esta herramienta extensible. Los
desensambladores y ensambladores para no-Pentium solo están
disponibles commo código fuente, cargables sobre lina Forth..
Mac OS X
Gdb
Viene de manera estándar, como depurador, pero es usado muy a
menudo para desensamblar. Si tienes un bloque de datos hexadecimales
para desensamblar, introdúcelo (interactivamente) encima de otra cosa o
compílalo en un programa como cadena de esta manera: char foo[] =
{0x90, 0xcd, 0x80, 0x90, 0xcc, 0xf1, 0x90};
Machonist
Machonist es realmente más que un potente desensamblador. Contiene
funciones para ejecutar el programa bajo GDB, grabar y cargar parches,
añadir comentarios a un desensamblaje, parchear, hacer el de-mangling
de los nombres de funciones C++, y mucho más. Es una aplicación con
interfaz gráfica, así que los usuarios nuevos encontrarán más fácil
acostumbrarse.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
16
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Otool
Otool es un analizador binario muy potente que contiene funciones para
desensamblar el código de ejecutables.
Ndisasm
Desensamblador simple para x86, que simplemente desensambla un
fichero
binario
sin
conocimiento
del
formato
objeto.
Útil
para
desensamblar binarios de otras plataformas. Viene estándar con las Apple
Developer Tools.
Problemas del Desensamblador
Separación de código y datos
Puesto que tanto instrucciones como datos están almacenados como
datos
binarios
en
un
fichero
ejecutable,
una
pregunta
surge
espontáneamente: ¿Cómo puede un desensamblador separar código de
datos? ¿Es un byte en particular una variable, o parte de una instrucción?
El problema no sería tan difícil si los datos se limitaran a la sección .data
del ejecutable (explicado en un capítulo posterior) y si el código ejecutable
estuviese limitado también a la sección .code del ejecutable, pero a
menudo este no es el caso. Los datos pueden estar insertados
directamente en la sección de código (por ejemplo, las tablas de
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
17
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
direcciones de salto), y código ejecutable puede estar almacenado en la
sección de datos ( aunque sistemas nuevos evitarán esto por razones de
seguridad).
Muchos desensambladores interactivos ofrecerán al usuario la opción de
mostrar segmentos de código como código o datos, pero los
desensambladores
no
interactivos
harán
esta
separación
automáticamente. Los desensambladores suelen proveer en la misma
línea la instrucción y sus correspondientes datos en hexadecimal, para
reducir la necesidad de hacer decisiones sobre la naturaleza del código.
Algunos desensambladores (por ejemplo, ciasdis) te permiten especificar
reglas sobre si desensamblar como datos o código e inventar nombres
para la etiquetas, basándose en el contenido del objeto bajo escrutinio.
Scriptaer tu propio "crawler" de esta manera es más eficiente; para
programas grandes el desensamblaje interactivo puede ser difícil hasta el
punto de no ser practicable.
El problema general de separar datos de código en ejecutables arbitrarios
es equivalente al Halting Problem. Como consecuencia, no es posible
escribir un desensamblador que separe correctamente datos de código
para todos los programas de input. La ingeniería Inversa está llena de
tales limitaciones teóricas, aunque por el teorema de Rice ( Rice's
theorem ) todas las preguntas interesantes sobre propiedades de los
programas son indecidibles (así que los compiladores y muchas otras
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
18
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
herramientas que tratan con programas en cualquier manera también se
encuentran con tales límites). En la práctica una combinación de análisis
automático e interactivo con perseverancia puede manejar todos los
programas excepto aquellos específicamente diseñados para frustrar la
ingeniería inversa, como el uso de encripción o el desencriptado de
código justo antes de usarse, y mover código de un lado a otro en
memoria.
1.4.2 Ingeniería Inversa/Descompiladores
De manera semejante al desensamblado, la descompilación lleva el
proceso un paso más allá e intenta reproducir el código a un lenguaje de
alto nivel. Frecuentemente, este lenguaje es C, porque C es simple y lo
suficientemente primitivo para facilitar el proceso de descompilación. La
descompilación
tiene
sus
problemas,
porque
muchos
datos
y
construcciones para legibilidad se pierden durante el proceso original de
descompilación, y no pueden ser reproducidos. Puesto que esta disciplina
es todavía joven, y los resultados son razonablemente buenos pero no
excelentes.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
19
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Descompiladores Comunes
DCC Decompiler
Dcc es una excelente perspectiva teórica a la descompilación, pero el
descompilador sólo soporta programas MSDOS.
Boomerang Decompiler Project
El descompilador Boomerang es un intento de construir un potente
descompilador para varias máquinas y lenguajes. Hasta ahora, sólo
descompila en C con un éxito moderado.
Reverse Engineering Compiler (REC)
REC es un potente "descompilador" que descompila código ensamblador
a una representación del código semejante a C. El código está a medio
camino entre ensamblador y C, pero es mucho más legible que el
ensamblador puro.
1.4.3 Ingeniería Inversa/Depuradores
Los depuradores son, con la posible excepción de un descompilador
potente, el mejor amigo de un ingeniero inverso. Un depurador permite al
usuario ejecutar el programa paso a paso, y examinar varios valores y
acciones.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
20
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Los depuradores avanzados a menudo contienen por lo menos un
desensamblador rudimentario, características de reensamblado o edición
hexadecimal. Los depuradores generalmente permiten al usuario colocar
puntos de ruptura en instrucciones, llamadas a función e incluso lugares
de la memoria.
Un punto de ruptura (breakpoint) es una instrucción al depurador que
permite parar la ejecución del programa cando cierta condición se cumpla.
Por ejemplo, cuando un programa accede a cierta variable, o llama a ci
erta función de la API, el depurador puede parar la ejecución del
programa.
Depuradores Windows
OllyDbg
OllyDbg es un potente depurador Windows con un motor de ensamblado y
desensamblado
integrado.
Tiene
numerosas
otras
características
incluyendo un precio de 0$. Muy útil para parcheado, desensamblado y
depuración.
WinDBGWinDBG es una pieza de software gratuita de Microsoft
que puede ser usada para depuración local en modo usuario, o incluso
depuración remota en modo kernel. WinDBG no es lo mismo que el mejor
conocido.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
21
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
CAPÍTULO 2
Estudio de la Herramienta Enterprise Architect
2.1 ¿Qué es Enterprise Architect?
Enterprise Architect de Sparx Systems es una herramienta CASE
(Computer Aided Software Engineering) para el diseño y construcción de
sistemas de software, para el modelado de procesos de negocios, y para
objetivos de modelado más generalizados. EA está basada en la
especificación the UML 2.1, que define un lenguaje visual que usa para
modelar un dominio o sistema en particular (existente o propuesto).
Tenga en Cuenta: UML es un estándar de modelado abierto, definido y
mantenido por el Grupo de Administración de Objeto. Para obtener más
detalles sobre UML, incluyendo los documentos de especificación de UML
actual, visite http://www.omg.org y siga los vínculos.
EA es una herramienta progresiva que soporta todos los aspectos del
ciclo de desarrollo, proporcionando una trazabilidad completa desde la
fase inicial del diseño a través del despliegue y mantenimiento. También
provee soporte para pruebas, mantenimiento y control de cambio.
Con más de 100,000 licencias vendidas, Enterprise Architect ha probado
ser muy popular a través de un rango amplio de industrias y es usado por
miles de compañías en todo el mundo. Desde organizaciones conocidas y
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
22
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
multinacionales hasta compañías y consultoras independientes y
pequeñas, Enterprise Architect se ha convertido en la herramienta de
modelado UML de elección para los desarrolladores, consultores y
analistas en más de 60 países.
2.2 Características de Enterprise Architect
Enterprise Architect esta disponible en las tres ediciones: Corporativo,
Profesional y Escritorio, cada uno de los cuales ofrece un rango diferente
de características. Para obtener una comparación de las ediciones de EA,
vea el tema Diferencia entre las ediciones Corporativa, Profesional, y
Escritorio.
•
UML 2.1 comprensivo -modelado basado
•
Administración de requisitos incorporada
•
Depuración y perfilación integrada para las aplicaciones Java y
.Net.
•
Soporte de administración del proyecto extensivo, incluyendo los
recursos, métricas y pruebas.
•
Soporte de pruebas: soporte para casos de prueba, JUnit y NUnit
•
Opciones de documentación flexible: HTML estándar y reportes
RTF.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
23
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
•
Soporte para muchos lenguajes de ingeniería de código fuera de la
caja
•
Entorno de modelado extensible con la capacidad de hospedar
perfiles y tecnologías definidas por el usuario.
•
Uso.
•
Velocidad: EA es un ejecutor espectacularmente rápido.
•
Escalabilidad: EA puede manejar modelos y usuarios individuales,
y
modelos
extremadamente
grandes
y
muchos
usuarios
concurrentes con igual facilidad.
•
Precio: EA está evaluado para equipar el equipo completo,
haciendo del desarrollo de colaboración y del equipo una
posibilidad real.
2.3 ¿Qué puedo hacer con Enterprise Architect?
Enterprise Architect es un medio fuerte por el cual se puede especificar,
documentar y compilar sus proyectos de software. Usando las notaciones
y semánticas del UML, puede diseñar y modelar sistemas de software
complejos desde su comienzo.
EA le permite:
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
24
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
•
Modelar sistemas de hardware y software complejos en notación
UML.
•
Generar y realizar ingeniería de código inversa (Solo en Ediciones
Profesional y Corporativa) en:
•
Actionscript,
•
C
•
C++
•
C#
•
Delphi
•
Java
•
PHP
•
Python
•
Visual Basic
•
VB.NET.
•
Modelar base de datos y generar scripts DDL e invertir el esquema
de base de datos desde las conexiones ODBC.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
25
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
•
Producir documentación detallada y de calidad en formatos RTF y
HTML.
•
Administrar cambio, mantenimiento y scripts de prueba.
•
Modelar dependencias entre los elementos.
•
Configurar clasificadores de objeto.
•
Modelar dinámicos del sistema y estados.
•
Modelar jerarquías de clase.
•
Modelar
los
detalles
de
despliegue,
componentes
e
implementación.
•
Recolectar incidencias del proyecto, tareas y el glosario del
sistema.
•
Asignar recursos a los elementos del modelo y comparar el
esfuerzo que llevo con el esfuerzo requerido.
•
Modelos de producción en formato compatible XMI 1.0, XMI 1.1,
XMI 1.2 y XMI 2.1 para exportar a otras herramientas que soporten
XMI.
•
Importar modelos en formato XMI 1.0, XMI 1.1, XMI 1.2 y XMI 2.1
desde otras herramientas.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
26
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
•
Administrar el control de versiones a través de XMI usando MS
TFS, CVS y configuraciones de la subversión.
•
Usar
Perfiles
UML
para
crear
extensiones
de
modelado
personalizado.
•
Guardar y Descargar diagramas completos como patrones UML.
•
Analizar las relaciones entre los elementos en un formato tabular
usando la Matriz de Relación.
•
Escribir y trabajar con elementos UML y automatizar tareas
comunes usando una interfaz de Automatización detallada.
•
Conectar a las bases de datos SQL Server, MySQL, Oracle9i,
PostgreSQL, Adaptive Server Anywhere, y Progress OpenEdge
databases (Edición Corporativa).
•
Migrar cambios a través de un entorno distribuido con una
Replicación JET.
•
Usar paquetes controlados basados en importar y exportar XMI.
•
Realizar Transformaciones de Estilo MDA (ediciones profesional y
corporativa.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
27
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Ingeniería de Código
Ingeniería de Código es un proceso que incluye generación automática de
código, ingeniería inversa de código fuente y sincronización entre el
código y el modelo.
La Ingeniería de Código está disponible solamente en las versiones
Profesional y Corporativa de Enterprise Architect.
Generación de Código
Generación de código en también conocida como Ingeniería de Código
Directa. Enterprise Architect le permite generar código fuente de los
elementos de los modelos UML, creando un código fuente equivalente de
la clase o interface para futura elaboración y compilación. En particular
puede generar código fuente en C, C++, C#, Delphi, Java, PHP, Python,
ActionScript, Visual Basic and VB.NET. El código fuente generado incluye
definiciones de clases, variables y funciones para cada atributo y método
en la clase UML. Puede usar el Visor de código fuente para cualquier
código fuente que usted esté abriendo.
El Code Template Framework (CTF) le permite adaptar la manera en que
Enterprise Architect genera código fuente y también le permite generar en
lenguajes
que
Enterprise
Architect
no
soporta
específicamente
ayudándole a definir las plantillas de generación de código para ese
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
28
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
lenguaje (esto es discutido en "Enterprise Architect Software Developers'
Kit" (SDK).
Puede enlazar las facilidades de Enterprise Architect para otros entornos
de desarrollo. El Enlace MDG para Eclipse y MDG para Visual Studio.NET
son productos "standalone" que proveen una funcionalidad de generación
de código mejorada entre Enterprise Architect y los entornos de
desarrollo.
Enterprise Architect le permite modelar rápidamente, ingeniería directa e
ingeniería inversa Tecnologías XML, llamadas XML Schema (XSD) y Web
Service Definition Language (WSDL).
Ingeniería Inversa
Ingeniería Inversa es la importación de código fuente existente en
elementos del modelo, mapeando las estructuras de código fuente en sus
representaciones UML. Esto le permite examinar código antigüo y la
funcionalidad de las librerías de código para reusar, o para actualizar el
modelo UML con el código. Puede realizar ingeniería inversa en los
mismos lenguajes mientras realiza generación de código con Enterprise
Architect.
Enterprise Architect también permite realizar ingeniería inversa en algunos
tipos de archivos binarios: Java .jar y .NET PE.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
29
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Sincronización
Sincronización es cuando los cambios en el modelo son exportados a la
fuente y los cambios la fuente son importados en el modelo. Esto le
permite mantener su modelo y su código actualizados mientras el
proyecto avanza.
Ingeniería Completa
Ingeniería completa ocurre como una combinación de generación de
código inversa y directa y debe incluir sincronización entre el código
fuente en todos los proyectos de ingeniería de código. Para obtener el
mayor provecho de esta ingeniería en Enterprise Architect, usted debe
estar familiarizado con las convenciones de modelado usadas cuando
genera e ingeniería inversa de los lenguajes que usted usa.
2.4 Enterprise Architect V5.0
Combina el poder de la última especificación UML 2.1 con alto
rendimiento, interfaz intuitiva, para traer modelado avanzado al escritorio,
y para el equipo completo de desarrollo e implementación. Con un gran
conjunto de características y un valor sin igual para el dinero, EA puede
equipar
a
su
equipo
entero,
incluyendo
analistas,
evaluadores,
administradores de proyectos, personal del control de calidad, equipo de
desarrollo y más, por una fracción del costo de algunos productos
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
30
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
competitivos. Verifique el rango completo de las herramientas y
características case en detalle.
Enterprise Architect es una herramienta comprensible de diseño y análisis
UML, cubriendo el desarrollo de software desde el paso de los
requerimientos a través de las etapas del análisis, modelos de diseño,
pruebas y mantenimiento. EA es una herramienta multi-usuario, basada
en Windows, diseñada para ayudar a construir software robusto y fácil de
mantener. Ofrece salida de documentación flexible y de alta calidad. El
manual de usuario está disponible en línea.
Velocidad, estabilidad y buen rendimiento
El Lenguaje Unificado de Modelado provee beneficios significativos para
ayudar a construir modelos de sistemas de software rigurosos y donde es
posible mantener la trazabilidad de manera consistente. Enterprise
Architect soporta este proceso en un ambiente fácil de usar, rápido y
flexible. Para una mirada rápida al modelado UML en Enterprise Architect
vea nuestro tutorial UML y documentos.
Trazabilidad de extremo a extremo
Enterprise Architect provee trazabilidad completa desde el análisis de
requerimientos hasta los artefactos de análisis y diseño, a través de la
implementación y el despliegue. Combinados con la ubicación de recursos
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
31
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
y tareas incorporados, los equipos de Administradores de Proyectos y
Calidad están equipados con la información que ellos necesitan para
ayudarles a entregar proyectos en tiempo.
Construido sobre las bases de UML 2.1
Las
bases
de
Enterprise
Architect
están
construidas
sobre
la
especificación de UML 2.0 - pero no se detiene ahí! Usa Perfiles UML
para extender el dominio de modelado, mientras que la Validación del
Modelo asegura integridad. Combina Procesos de Negocio, Información y
Flujos de trabajo en un modelo usando nuestras extensiones gratuitas
para BPMN y el perfil Eriksson-Penker.
Soporte para los 13 diagramas de UML 2 y más.
Diagramas Estructurales:
•
Clase
•
Objeto
•
Compuesto
•
Paquete
•
Componente
•
Despliegue
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
32
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Diagramas de Comportamiento:
•
Casos de Uso
•
Comunicación
•
Secuencia
•
Descripción de la Interacción
•
Actividad
•
Estado
•
Tiempo
Extendidos:
•
Análisis (actividad simple)
•
Personalizado (para requisitos, cambios, UI)
EA le ayuda a administrar la complejidad con herramientas para rastrear
las dependencias, soporte para modelos muy grandes, control de
versiones con proveedores CVS o SCC, Líneas Base por cada punto del
tiempo, la utilidad de comparar (diff) para seguir los cambios del modelo,
interfaz intuitiva y de alto rendimiento con vista de proyecto como un
"explorador".
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
33
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Provee una generación poderosa de documentos y herramientas de
reporte con un editor de plantilla completo WYSIWYG. Genera reportes
detallados y complejos de EA con la información que usted necesita en el
formato que su compañía o cliente demanda.
EA soporta generación e ingeniería inversa de código fuente para muchos
lenguajes populares, incluyendo C++, C#, Java, Delphi, VB.Net, Visual
Basic y PHP. También hay Add-ins gratis para CORBA y Python
disponibles. Con un editor de código fuente con "resaltador de sintaxis"
incorporado, EA le permite navegar y explorar su modelo de código fuente
en el mismo ambiente. Para aquellos que trabajan en Eclipse o Visual
Studio.Net, Sparx Systems también vende puentes livianos para estas
IDE's, permitiéndole modelar en EA y saltar directamente al código fuente
en su editor preferido. Las plantillas de generación de código le permiten
personalizar el código fuente generado a las especificaciones de su
compañía.
EA le ayuda a visualizar sus aplicaciones soportando ingeniería inversa
de un amplio rango de lenguajes de desarrollo de software y esquemas
de repositorios de base de datos. Ingrese frameworks completos desde
código fuente o archivos Java.jar - o aún ensambladores binarios .Net!
Importando frameworks y librerías de código, Ud. puede maximizar la reutilización y entendimiento de su inversión existente.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
34
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
EA soporta transformaciones de Arquitectura avanzada dirigida por
Modelos (MDA) usando plantillas de transformaciones de desarrollo y
fáciles de usar. Con transformaciones incorporadas para DDL, C#, Java,
EJB y XSD, Ud. puede rápidamente desarrollar soluciones complejas
desde los simples "modelos independientes de plataforma" (MIP) que son
el objetivo en "modelos específicos de plataforma" (MEP). Un MIP se
puede usar para generar y sincronizar múltiples MIP's - proveyendo un
aumento de productividad significativo.
Características Principales
Diseño y construcción de UML. Casos de Uso, Modelos Lógico, Dinámico
y Físico. Extensiones personalizadas para modelado de procesos y más.
Documentación de alta calidad compatible con MS Word. Intuitivo y simple
de usar. Bajo costo de Licencias. Modelado de Datos, Ingeniería directa
de Base de Datos a DDL e ingeniería inversa de Base de Datos desde
ODBC.
Multi-usuario
Corporativa). Ingeniería
(solamente
de
Código
para
ediciones
Directa
e
Profesional
Inversa
y
(ediciones
Corporativa y Profesional solamente) - Soporte para ActionScript 2.0,
Java, C#, C++, VB.Net, Delphi, Visual Basic, Python y PHP. Facilidad de
Importación/Exportación XMI. Corrector Ortográfico.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
35
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
2.5 Requisitos de Sistema para Enterprise Architect
Versión de Windows
-
Procesador Intel® Pentium® (o mejor)
-
Microsoft® Windows 98 SE, Windows NT® 4.0 con Service Pack 5,
Windows 2000, Windows XP o Windows 2003
-
128 MB de RAM (256MB o más)
-
Espacio en disco disponible de 70 MB
-
800*600 (1024x768 o más)
Versión de Linux
-
Procesador Intel® Pentium II® (o un equivalente)
-
Sistema Operativo Linux (kernel 2.4 o posterior)
-
64 MB de RAM (128 MB o más)
-
Espacio en disco disponible de 70 MB
-
800*600 (1024*768 o más)
Soporte de Base de Datos para la edición Corporativa
-
SQL Server
-
MySQL
-
Oracle 9i and 10g
-
PostgreSQL
-
MSDE
-
Adaptive Server
-
MS Access
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
36
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
CAPÍTULO 3
3.1 Caso Aplicativo
Debido a la inexistencia de una metodología definida para la ingeniería
inversa
de software y en base a investigaciones realizadas sobre este
tema, se propone una metodología
que
ayude
al
proceso
de
ingeniería inversa en la recuperación de la documentación.
Mencionando además que la metodología está enfocada a la parte
conceptual, la cual será la que seguirá al proceso especificado en la
siguiente figura.
Figura del código fuente hacia el modelo conceptual
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
37
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
El código fuente es sometido a un análisis sintáctico a través del cual se
obtiene un modelo de código fuente intermedio, el cual es comparado con un
conjunto de modelos (usando para esto patrones de diseño) y dando como
resultado un modelo conceptual.
La metodología propuesta esta compuesta de las siguientes etapas:
1.
Estudio del sistema existente
Una técnica que ayudara al entendimiento del sistema será: la
entrevista.
2.
Recuperación arquitectónica
Para llevar a cabo esta etapa se utilizará el enfoque basado en 5 vistas,
cada vista servirá para recuperar cierta información de diseño. Entre
las tareas de esta fase tenemos:
2.1.
Identificación de las tareas funcionales del sistema.
•
Diagrama de casos de uso
2.2.
Recuperación de la vista de diseño
•
Utilización de una herramienta CASE
2.3.
Representación de la interacción entre los objetos
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
38
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
•
Diagrama de Secuencia y Colaboración
2.4.
Identificación de componentes de software
•
Diagrama de componentes
2.5
Identificación de componentes para el despliegue
•
Diagrama de despliegue
3.
Documentación de tareas y funciones del sistema.
Como caso de estudio, la metodología se aplica a un sistema de
reservación de hoteles y mantenimiento de agencias de viaje
(TravelPlus).
3.1. Estudio del sistema existente
Lo que se pretende en esta etapa, es lograr un entendimiento general de la
funcionalidad del sistema, antes de que éste sea sometido al proceso de
ingeniería inversa.
El equipo encargado del proceso de ingeniería inversa deberá contactarse con
analistas funcionales, arquitectos de sistema, ingenieros de software y/o con
los
usuarios,
tal
que
puedan
explicar
las
tareas
del
sistema
(funcionamiento, desarrollo, implementación, etc.).
Como técnica para poder comprender el funcionamiento del sistema hemos
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
39
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
seleccionado las entrevistas.
Tipos de entrevista:
•
Entrevistas
cerradas: se
buscan
respuestas
a
un
conjunto
de
preguntas predefinidas.
•
Entrevistas abiertas: no hay agenda predefinida, se realiza un dialogo de
manera abierta
Para el caso de estudio luego de entrevistar a los implicados se puede definir
lo que hace el sistema a grandes rasgos.
TravelSys es una empresa que ofrece el inventario de una serie de hoteles a
nivel del mundo a agencias de viajes, a través de su sistema TravelPlus. El
negocio esta en la comisión que TravelSys cobra a cada agencia por cada
reservación que estos realizan.
Los viajeros o incluso otras agencias de viajes pueden hacer reservaciones
directamente en línea, por teléfono, o enviando una solicitud por correo
electrónico.
El operador buscara el hotel conveniente haciendo una búsqueda con las
características que el viajero desee.
Se ingresara los datos de los ocupantes de las habitaciones y finalmente se
generará un código de reservación.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
40
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
El Administrador del sistema tendrá la capacidad de poder crear nuevas
agencias que quieran trabajar con TravelSys y cancelarlos, también podrá
crear usuarios y hacer mantenimiento.
Las interfaces pueden ayudar mucho al entendimiento de las tareas, a
continuación se muestran alguna de ellas:
Pantalla de Ingreso al Sistema Travel
Pantalla de Listado de Agencias y Usuarios
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
41
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Pantalla de Modificación de datos de una Agencia
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
42
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Pantalla de Búsqueda de Hoteles
Pantalla de Hoteles encontrados
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
43
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Pantalla de Detalle de Hotel
I
n
g
r
e
s
o
d
Datos de la reservación
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
44
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Pantalla de constancia de reservación
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
45
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
3.2
Recuperación Arquitectónica
El uso de la ingeniería inversa para reconstruir los aspectos arquitectónicos del
software
puede
referenciarse
como
redocumentación
estructural
o
recuperación arquitectónica. Como resultado, se deriva la visión global del
sistema de interés y se pueden recapturar algunos aspectos de su diseño
arquitectónico.
Se presenta un enfoque de arquitectura de sistemas basado en vistas.
Estas vistas muestran los diferentes aspectos del sistema que son
modelados.
Descripción del modelo desde 5 vistas
Cada una de estas vistas servirá para realizar una tarea específica, para la
descripción del contenido de cada una de estas vistas usaremos los
diagramas. El estándar que hemos adoptado es el UML (Lenguaje de
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
46
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Modelamiento Unificado) ya que proporciona un amplio conjunto de
diagramas que normalmente se usan en pequeños subconjuntos para poder
representar las cinco vistas principales de la arquitectura de un sistema.
El cuadro adjunto relacionamos las tareas, la vista y los diagramas que
Utilizaremos en cada uno de ellos.
Tarea
1.Identificación de requerimientos
Vista
Diagrama
Casos de uso
Casos de uso
Diseño
Clases
Procesos
Secuencia
Funcionales
2. Recuperación del diagrama de
Clases
3. Representación de la interacción
colaboración
entre los objetos
4. Identificación de componentes de
Implementación
Componentes
Software
5. Identificación de componentes para Despliegue
el despliegue
Despliegue
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
47
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Identificación de requerimientos funcionales
Luego de conocer en mayor detalle el sistema, los diagramas de caso de
uso nos ayudaran a realizar esta tarea. En la ingeniería directa, el análisis
se enfoca en la funcionalidad y luego el diseño agrega los detalles
específicos de la implementación y los aspectos relacionados con los
requerimientos no funcionales. En la ingeniería inversa, todos los detalles
de diseño e implementaron ya están definidos, de esta manera el límite
entre el análisis y el diseño es bastante difuso.
En la ingeniería inversa, los casos de uso permiten descubrir y describir, en
un alto nivel, que hace el sistema desde el punto de vista del usuario. En
esta actividad, no interesa como hará algo el sistema.
3.3 Aplicación de ingeniería inversa en casos de uso:
a. Identificar cada actor que interactúa con el sistema.
b. Para cada actor, considerar la manera en la cual el interactúa con el
sistema, cambia el estado del sistema o su medio ambiente, o responde a
algún evento.
c.
Trazar el flujo de eventos en el sistema ejecutable relativo a cada
actor. Iniciar con flujos primarios y después considerar rutas alternativas.
d. Agrupar flujos declarando su correspondiente caso de uso.
e.
Proporcionar estos actores y casos de uso en un diagrama de casos
de uso, y establecer sus relaciones.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
48
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Entre los requisitos funcionales pertenecientes al sistema TravelPlus se
identificaron:
Actores
Los actores del sistema fueron identificados como:
*
Administrador: Es la persona que utiliza la parte administrativa y de
mantenimiento de tablas como Agencia y Usuarios
•
Usuario: Es la persona que utiliza el sistema de reservaciones.
•
Cliente:
*
Casos de Uso
Persona
Basados en los
que
solicita
una
reservación
actores y la funcionalidad
de
habitaciones
del sistema fueron
identificados los siguientes paquetes que agrupan casos de uso
relacionados:
• Gestión de Agencias de Viaje: Agrupa funcionalidades relacionada a la
agencias de viaje como son: Ingresar, modificar y eliminar.
• Gestión
de
usuarios:
Agrupa
funcionalidades
relacionada
a
la
administración de usuarios del sistema como son: Ingresar, modificar y
eliminar.
• Reservación de Hoteles: Agrupa funcionalidades relacionados al proceso
de reservación las cuales empiezan en la solicitud de reservación por
parte del cliente, el registro del mismo, hacer, consultar o cancelar una
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
49
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
reservación.
Los casos de uso identificados:
• Ingresar Agencia: este
caso de uso
es iniciado por
el
administrador,
consiste en crear una nueva agencia de viaje al sistema.
• Modificar
Agencia:
este
caso
de
uso
es
iniciado
por el
administrador, consiste en modificar datos de una agencia de viaje para
lo cual primero debe hacer una búsqueda de la agencia.
• Eliminar Agencia: este caso de uso es
iniciado
por
el
administrador,
consiste en cambiar el estado de una agencia de viaje siempre en cuando
esta no cumpla con el pago para lo cual primero debe hacer una búsqueda de
la agencia.
• Búsqueda Agencia: P ro po rcion a la capacidad de buscar una agencia.
• Ingresar Usuario: este
caso de uso es iniciado
consiste en crear un nuevo
• Modificar
Usuario:
este
usuario
caso
por
el
administrador,
que interactuara con el sistema.
de
uso
es
iniciado
por el
administrador, consiste en modificar los datos de un usuario del sistema
para lo cual primero debe hacer una búsqueda del usuario.
• Eliminar Usuario: este
caso
de
uso
es iniciado
por
el
administrador, consiste en eliminar un usuario del sistema para lo cual primero
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
50
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
debe hacer una búsqueda del usuario.
• Búsqueda Usuario: proporciona la capacidad de buscar un usuario.
• Registrar Cliente: este caso es iniciado por el usuario, consiste en registrar a
un nuevo cliente al sistema, previo a esto debe registrar la tarjeta de
crédito del cliente.
• Registrar Tarjeta: Proporciona la capacidad de registrar la tarjeta de crédito
del cliente.
• Solicitar Reservación: este caso es iniciado por el cliente, consiste en solicitar
una reservación de habitaciones, entre los datos de la reservación tenemos:
fecha, numero de cuartos, numero de niños por cuarto, etc.
Hacer Reservación: este caso es iniciado por el usuario, consiste en registrar
la reservación en el sistema de acuerdo a la solicitud del cliente.
• Consultar Información: este caso de uso es iniciado por el usuario,
consiste en consultar información relacionada a la reservación.
• Cancelar Reservación: este caso de uso es iniciado por el usuario,
consiste en cancelar la reservación a petición del cliente.
Todos estos casos de uso han sido implementados en el sistema. Estas
funcionalidades identificadas han sido modeladas usando la herramienta case
Rational Rose .
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
51
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
3.4 Recuperación del diagrama de clases
La vista de diseño soporta principalmente los requisitos funcionales del
sistema, o sea, los servicios que el sistema debe proporcionar. Es en esta
vista donde se obtiene una visión global del funcionamiento del sistema. Se
establecen los primeros requisitos funcionales en base a lo que se espera
conseguir. En esta etapa se identifican, dentro del código, las clases que
realizan o soportan las acciones descritas en los casos de uso. Para la
recuperación de los diagramas de clases haremos uso de una herramienta
case.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
52
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Diagrama de Clases de la capa de negocios
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
53
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Diagrama de Clases de la capa de negocios
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
54
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
3.5 Identificación de componentes de software
La Vista de implementación describe la organización estática de los
módulos de software (código fuente, componentes, ejecutables) en el
ambiente de desarrollo en términos de paquetes, de capas y de la
administración de la configuración. Esta vista puntualiza una correspondencia
entre los elementos de la vista de diseño y las entidades físicas que
encapsulan su implementación.
Así mismo, también se indican las características físicas de los componentes,
tales
como:
memoria
requerida,
nombre
con
el
que
se registra el
componente en el sistema, versión y modelo del componente, tiempo de
servicio de cada operación, necesarios para realizar la evaluación de la
arquitectura.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
55
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Los aspectos capturados para el sistema TravelPlus:
TravelPlusUI.dll
TravelPlus Bl. dll
Travel Plus Be
TravelPlus DAL.dll
Identificación de componentes para el despliegue
La vista de despliegue de un sistema contiene los nodos que forman
la topología hardware sobre la que se ejecuta el sistema. Se
preocupa principalmente de la distribución, entrega e instalación de
las partes que constituyen el sistema.
Los aspectos estáticos de esta vista se representan mediante
los
diagramas de despliegue y los aspectos dinámicos con diagramas
de interacción, estados y actividades.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
56
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
En esta vista se representan las características técnicas de cada uno de
los nodos (hosts, en la terminología TCP/IP) del sistema sobre el
que se ejecutara la aplicación, y la asignación de cada componente
físico a un nodo.
Describe la puesta en marcha, la instalación y el rendimiento del sistema.
3.6 Ingeniería Inversa basada en diseño de patrones
Una visión general de un ambiente de ingeniería inversa basado en la
descripción de diseño de patrones definidos por Gamma.
El propósito es introducir la ingeniería inversa basada en patrones como
una técnica de valor para comprender el software y así refutar la
sostenida creencia que el diseño de patrones únicamente es importante
durante la ingeniería directa.
El propósito del ambiente SPOOL (características deseables que
se separan en el diseño de orientado a objeto) de ingeniería inversa es
ayudar a entender el software de las organizaciones a través de
patrones.
Esto consiste de técnicas y herramientas para la captura del código
fuente, un repositorio de diseño y la funcionalidad de recuperación de
patrones de diseño y representación de diseños.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
57
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Visión general del ambiente SPOOL
1. Captura del código fuente
El propósito de la captura del código fuente es extraer un modelo
inicial desde el código fuente existente. Usando GEN++, el analizador
del código fuente
C++,
el
ambiente
generara
representaciones
basadas en código ASCII de elementos importantes de código fuente
(UML/CDIF
Modelador
fuente
intermedio),
el
propósito
de
la
representación intermedia es hacer el ambiente independiente de algún
lenguaje de programación especifico.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
58
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
2. Repositorio de diseño
El
propósito
del
repositorio
de
diseño
es
proveer
un
almacenamiento centralizado, manipulación y consultas de los modelos
del
código
fuente,
los
componentes
del
diseño
abstracto
son
recuperados y los componentes del diseño recuperados dentro de los
modelos del código fuente.
El esquema del repositorio de diseño está basado en el extendido UML
metamodelo 1.1; Poet 5.1 sirve como un repositorio final para administrar
base datos orientado a objetos. El esquema es representado como clases
jerárquicas Java 1.1
3. Recuperación de diseño basado en patrones
El propósito de la recuperación del diseño basado en patrones es ayudar
a estructurar partes del diagrama de clases para armar diagramas
de patrones. Son tres las técnicas:
 Recuperación
estructuración
de
diseño
Automática,
completamente
automatizada
software acorde con la descripción
de
los
relaciona
de
diseño
patrones,
la
de
los
cuales son almacenados en repositorios como componentes de
diseño abstracto.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
59
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas

Recuperación de diseño Manual, relaciona la estructuración
de diseño de software agrupando manualmente elementos de
diseño, como clases, métodos, atributos o relaciones para reflejar
un patrón.

Recuperación de diseño
estrategias,
la
Semiautomática
automática
y
la
combina
manual.
Esto
ambas
puede
ser
implementado como una recuperación de procesos multifases.
La primera fase consiste de detección automática de bajos
niveles de idiomas o núcleo general de patrones de diseño, las
fases siguientes relacionan las
instancias
identificadas
con
detalles de implementación mas especifico.
4. Representación de diseño
El propósito de la recuperación de diseño es proveer la
visualización interactiva y el refinamiento de los modelos de código
fuente, abstracción de componentes de diseño y los componentes
implementados.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
60
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
61
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
CONCLUSIONES
1.
La ingeniería inversa es un proceso de exanimación y no
involucra cambiar el sistema, es considerada como un subproceso
de la reingeniería, al cual si implica la modificación del sistema.
2.
La ingeniería inversa puede extraer información de diseño del
código fuente
pero el
nivel de abstracción, la completitud de la
documentación, el grado con el cual trabajan al mismo tiempo las
herramientas y el analista humano, y la direccionabilidad del proceso
son sumamente variables.
3. La necesidad de la ingeniería inversa emerge de problemas
operacionales reales en el actual sistema como por ejemplo errores
debido a la mala calidad de software, al alto costo del mantenimiento
debido a la carencia de documentación y a nuevos requerimientos de
los usuarios.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
62
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
RECOMENDACIONES
1. El equipo de trabajo que se encargue de realizar el proceso
de ingeniería inversa debería estar integrado por miembros que
conozcan la lógica del negocio y que tengan conocimiento del
diseño de patrones.
2.
La
ingeniería
inversa solo
se
debe
aplicar a
empresas
grandes, cambiantes.
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
63
Universidad Católica de Cuenca
Tnlg. Alvaro Nievecela
Facultad de Ingeniería de Sistemas
REFERENCIAS BIBLIOGRÁFICAS
www.monografias.com
www.rational.com
es.wikipedia.org
http://alarcos.inf-cr.uclm.es/per/fruiz/cur/mso/trans/s1.pdf
www.taringa.net
www.google.com
Ingeniería Inversa aplicada a sistemas desarrollados con P.O.O. para obtener la Documentación
64

Documentos relacionados