ingeniería inversa
TRANSCRIPT
-
Universidad Mariano Glvez de Guatemala
Ingeniera en Sistemas
Ingeniera de Software
Ing. Osberto Pineda
Ingeniera Inversa
Nombre Carnet
Gilberth Edward 0900-05-4807
Mauricio Linares 090-07-1359
Erny Cuque 0394-06-19370
Julio Barrios 090-07-9
Gary Rodas 090-06-154
-
Contenido Ingeniera Inversa .......................................................................................................................... 3
Que es la ingeniera inversa? ...................................................................................................... 3
Ingeniera Inversa, un proceso de reingeniera ........................................................................... 3
Es aplicable a sistemas con las siguientes caractersticas: ........................................................... 4
Nivel de abstraccin ................................................................................................................... 4
Completitud ............................................................................................................................... 5
Interactividad ............................................................................................................................. 5
Direccionalidad .......................................................................................................................... 5
El proceso de ingeniera inversa ..................................................................................................... 6
Ingeniera inversa para comprender el procesamiento ............................................................... 7
Reestructuracin ........................................................................................................................ 8
Re documentacin ..................................................................................................................... 9
Metodologa .............................................................................................................................. 9
Definicin y delimitacin .......................................................................................................... 10
Casos de Uso ............................................................................................................................ 11
Mapeo de requerimientos a paquetes ...................................................................................... 11
-
Ingeniera Inversa
Que es la ingeniera inversa?
La ingeniera inversa es un procedimiento mediante el cual se toma un objeto
por separado para ver cmo funciona con la finalidad de duplicarlo o mejorarlo.
Aunque esta prctica era empleada por las antiguas industrias, en la actualidad
su uso se ha extendido al software y hardware, en cuyo caso, la ingeniera inversa aplicada al software implica la reversin de un programa que est
codificado en lenguaje maquina (lenguaje de bajo nivel) a el cdigo fuente de
alto nivel en el que fue escrito originalmente.
La ingeniera inversa en el software tiene como objetivo recuperar el cdigo fuente de un programa que necesita ser corregido, mejorado o estudiado para
ser nuevamente escrito y que no cuenta con su cdigo fuente original.
Hay que dejar en claro que la ingeniera inversa de software que tiene como
objetivo el duplicado o el estudio con propsito comercial, como el empleo de
aplicar ingeniera inversa a un producto para estudiarlo y hacer en base a este un producto de competencia, puede ser considerado como una violacin a las
leyes de copyright e incluso en muchos casos, el uso de un programa bajo
licencia prohbe esta prctica. En el caso de la ingeniera inversa de hardware, se recurre al desmontaje de un dispositivo con la intencin de comprobar cmo
es que funciona, pero al igual que sucede en la ingeniera inversa de software,
aqu tambin est prohibido hacer esto con la intencin de fabricar un producto
similar.
Otro tipo de ingeniera inversa consiste en la reproduccin de imgenes en 3D
de piezas ya fabricadas cuando no se cuenta con un plano y con la finalidad de
reacondicionar la pieza.
Ingeniera Inversa, un proceso de reingeniera
La ingeniera inversa tiene la misin de desentraar los misterios y secretos de
los sistemas en uso. Consiste principalmente en recuperar el diseo de una
aplicacin a partir del cdigo.
Esto se realiza principalmente mediante herramientas que extraen informacin
de los datos, procedimientos y arquitectura del sistema existente.
-
Es aplicable a sistemas con las siguientes caractersticas:
Documentacin inexistente o totalmente obsoleta.
Programacin en bloque de cdigo s muy grandes y/o sin estructurar.
Inexistencia de documentacin interna en los programas, o bien sta es
incomprensible o est desfasada.
La aplicacin cubre gran parte de los requisitos y del rendimiento
esperado.
La aplicacin est sujeta a cambios frecuentes, que pueden afectar a parte
del diseo.
Se prev que la aplicacin pueda tener an larga vida.
La ingeniera inversa puede extraer informacin de diseo del cdigo fuente,
pero el nivel de abstraccin, la completitud de la documentacin, el grado con
el cual trabajan al mismo tiempo las herramientas y el analista humano, y la
direccionalidad del proceso son sumamente variables.
Nivel de abstraccin
El nivel de abstraccin de un proceso de ingeniera inversa y las herramientas
que se utilizan para realizarlo aluden a la sofisticacin de la informacin de
diseo que se puede extraer del cdigo fuente. El nivel de abstraccin ideal
deber ser lo ms alto posible, es decir, el proceso de ingeniera inversa debe
ser capaz de derivar:
Sus representaciones de diseo de procedimiento (con un bajo nivel de
abstraccin).
La informacin de las estructuras de datos y de programas (un nivel de
abstraccin ligeramente ms elevado).
Modelos de flujo de datos y de control (un nivel de abstraccin
relativamente alto)
Modelos de entidades y de relaciones (un elevado nivel de abstraccin)
A medida que crece el nivel de abstraccin se proporciona al ingeniero de
software informacin que le permitir comprender ms fcilmente estos
programas.
-
Completitud
La completitud de un proceso de ingeniera inversa alude al nivel de detalle que
se proporciona en un determinado nivel de abstraccin. En la mayora de los
casos, la completitud decrece a medida que aumenta el nivel de abstraccin. Por
ejemplo, dado un listado del cdigo fuente, es relativamente sencillo desarrollar
una representacin de diseo de procedimientos completa. Tambin se pueden
derivar representaciones sencillas del flujo de datos, pero es mucho ms difcil
desarrollar un conjunto completo de diagramas de flujo de datos o un diagrama
de transicin de datos.
La completitud mejora en proporcin directa a la cantidad de anlisis efectuado
por la persona que est efectuando la ingeniera inversa.
Interactividad
La interactividad alude al grado con el cual el ser humano se integra con las
herramientas automatizadas para crear un proceso de ingeniera inversa
efectivo. En la mayora de los casos, a medida que crece el nivel de abstraccin,
la interactividad deber incrementarse, o si no la completitud se ver reducida.
Direccionalidad
Si la direccionalidad del proceso de ingeniera inversa es mono direccional, toda
la informacin extrada del cdigo fuente se proporcionar a la ingeniera del
software que podr entonces utilizar la durante la actividad de mantenimiento.
Si la direccionalidad es bidireccional, entonces la informacin se suministrar a
una herramienta de reingeniera que intentar reestructurar o regenerar el viejo
programa.
-
El proceso de ingeniera inversa
El proceso de ingeniera se representa en la figura 4.1. Antes de que puedan
comenzar las actividades de ingeniera inversa, el cdigo fuente no estructurado
(sucio) se reestructura para que solamente contenga construcciones de
programacin estructurada. Esto hace que el cdigo fuente sea ms fcil de leer,
y es lo que proporciona la base para todas las actividades subsiguiente de
ingeniera inversa.
-
El ncleo de la ingeniera inversa es una actividad denominada extraccin de
abstracciones. El ingeniero tiene que evaluar el viejo programa y a partir del
cdigo fuente (que no suele estar documentado) tiene que extraer una
especificacin significativa del procesamiento que se realizar, la interfaz de
usuario que se aplica y las estructuras de datos de programa o de base de datos
que se utiliza.
Ingeniera inversa para comprender el procesamiento
La primera actividad real de la ingeniera inversa comienza con un intento de
comprender y extraer despus abstracciones de procedimientos representadas
por el cdigo fuente. Para comprender las abstracciones de procedimientos, se
analiza el cdigo en distintos niveles de abstraccin: sistema, programa,
componente, configuracin y sentencia. La funcionalidad general de todo el
sistema de aplicaciones deber ser algo perfectamente comprendido antes de
que tenga lugar un trabajo de ingeniera inversa ms detallado.
Esto es lo que establece un contexto para un anlisis posterior, y se proporciona
ideas generales acerca de los problemas de interoperabilidad entre aplicaciones
dentro del sistema. Cada uno de los programas de que consta el sistema de
aplicaciones representar una abstraccin funcional con un elevado nivel de
detalle. Tambin se crear un diagrama de bloques como representacin de la
iteracin entre estas abstracciones funcionales. Cada uno de los componentes
efecta una sub-funcin, y representa una abstraccin definida de
procedimientos. En cada componente se crea una narrativa de procesamiento.
En algunas situaciones ya existe n especificaciones de sistema, programa y
componente
Cuando ocurre tal cosa, se revisan las especificaciones para evaluar si se ajustan
al cdigo existente.
Todo se complica cuando se considera el cdigo que reside en el interior del
componente. El ingeniero busca las secciones de cdigo que representan las
configuraciones genricas de procedimientos. En casi todos los componentes,
existe una seccin de cdigo que prepara los datos para su procesamiento
(dentro del componente), una seccin diferente de cdigo que efecta el
procesamiento y otra seccin de cdigo que prepara los resultados del
procesamiento para exportarlos de ese componente. En el interior de cada una
de estas secciones, se encuentran configuraciones ms pequeas. Por ejemplo,
suele producirse una verificacin de los datos y una comprobacin de los lmites
dentro de la seccin de cdigo que prepara los datos para su procesamiento.
-
Para los sistemas grandes, la ingeniera inversa suele efectuarse mediante el uso
de un enfoque semi-automatizado. Las herramientas CASE se utilizan para
analizar la semntica del cdigo existente. La salida de este proceso se pasa
entonces a unas herramientas de reestructuracin y de ingeniera directa que
completarn el proceso de reingeniera.
Reestructuracin
La reestructuracin del software modifica el cdigo fuente y/o los datos en un
intento de adecuarlo a futuros cambios. En general, la reestructuracin no
modifica la arquitectura global del programa. Tiene adentrarse en los detalles de
diseo de mdulos individuales y en estructuras de datos locales definidas dentro
de los mdulos. Si el esfuerzo de la reestructuracin se extiende ms all de los
lmites de los mdulos y abarca la arquitectura del software, la reestructuracin
pasa a ser ingeniera directa (forward engineering).
Arnold [Arnold, 1989] define un cierto nmero de beneficios que se pueden
lograr cuando se reestructura el software:
Programas de mayor calidad con mejor documentacin y menos
complejidad, y ajustados a las prctica s y estndares de la ingeniera del
software moderna.
Reduce la frustracin entre ingenieros del software que deban trabajar
con el programa, mejorando por tanto la productividad y haciendo ms
sencillo el aprendizaje.
Reduce el esfuerzo requerido para llevar a cabo las actividades
demantenimiento.
Hace que el software sea ms sencillo de comprobar y de depurar.
La reestructuracin se produce cuando la arquitectura bsica de la aplicacin es
slida, aun cuando sus interioridades tcnicas necesiten un retoque. Comienza
cuando existen partes considerables del software que son tiles todava, y
solamente existe un subconjunto de todos los mdulos y datos que requieren
una extensa modificacin.
-
Re documentacin
La re documentacin es tambin una forma de ingeniera inversa. Es el proceso
mediante el que se roduce documentacin retroactivamente desde un sistema existente. Si la redocumentacin toma la forma de modificacin de comentarios
en el cdigo fuente, puede ser considerada una forma suave de reestructuracin.
Sin embargo, puede ser considerada como una sub-rea de la ingeniera inversa
porque la documentacin reconstruida es usada para ayudar al conocimiento del programa.
Se piensa en ella como una transformacin desde el cdigo fuente a pseudocdigo y/o prosa, esta ltima considerada como ms alto nivel de
abstraccin que la primera. Aunque la aparicin de multitud de herramientas
facilita las labores de la ingeniera inversa, es la labor humana (humanware) la decisiva a la hora de completar el estudio del sistema.
Metodologa Debido a que no hay un documento que especifique como es exactamente un
proceso de ingeniera inversa, cada ingeniero de software que desea realizar un
proceso de este tipo propone su propia metodologa. El instituto de ingeniera de software propone un marco de trabajo para llevar a cabo un proceso de
ingeniera. Tomando en cuenta este documento y con la ayuda de un experto en
la materia se propuso la metodologa para realizar un proceso de ingeniera inversa. Principalmente lo que incluye la metodologa propuesta es:
1. Definicin y delimitacin del componente de software
2. Recoleccin de funcionalidades existente a. Documentacin de Casos de Uso
3. Generacin automtica de diagramas de clase y de paquete mediante una
herramienta semi-autimatizada CASE a. Diagramas de clase
b. Diagramas de paquete
4. Anlisis de cdigo y relacin entre paquetes 5. Mapeo de requerimientos a paquetes y de ser posible a clases
-
Definicin y delimitacin
Esta es la primera etapa del proceso de ingeniera inversa y es la que comprende la seleccin y evaluacin del o de los componentes a los que se les aplicar el
proceso de ingeniera inversa. Geoserver fue escogido primeramente por ser una
implementacin pblica que cumple con los requisitos que se necesitan para
nuestra solucin. Algunos de estos requisitos es que est hecho en Java, es OpenSource, cumple con la especificacin que rige las implementaciones WFS,
maneja peticiones por HTTP GET y HTTP POST.
-
Casos de Uso Para el proceso de recoleccin de funcionalidades existentes se desarrollaron los
casos de uso de las tres operaciones que soporta el WFS. La figura 4.3 muestra
el diagrama de caso de uso que incluye a estas tres operaciones y despus estn los casos de uso de cada operacin:
Mapeo de requerimientos a paquetes
Esta parte del proceso es una aportacin importante a la documentacin de un software o componente pues facilita mucho identificar que ocurre cuando
deseamos modificar una parte del cdigo. Consiste en una tabla donde se ponen
los requerimientos del sistema, los casos de uso involucrados, y las clases o paquetes afectados y establece la relacin entre todos estos elementos de la
tabla. Una vez que se tenga la tabla (la cual puede llegar al nivel de detalle que
-
se necesite) si en un futuro se quiere modificar parte del cdigo la tabla indique
que casos de uso se vern afectados y por consiguiente que requerimientos
tambin estarn involucrados. Esto es de gran ayuda en sistemas grandes porque no tenemos que esperar a las pruebas de regresin para descubrir que
fue lo que se alter.