Sie sind auf Seite 1von 10

Trabajo de Ingeniera Inversa

Curso: Algoritmo y Estructura de Datos 1 Alumnos: Manuel Puntillo, Miguel Paz, Narciso Mori, Simn Mori, Jos Saravia, David Bravo.

Ingeniera Inversa - Reverse Engineering


El anlisis de un sistema para identificar sus componentes actuales y las dependencias que existen entre ellos, para extraer y crear abstracciones de dicho sistema e informacin de su diseo *Chifofsky, 1990+. El proceso de analizar el cdigo, documentacin y comportamiento de un sistema para identifica sus componentes actuales y sus dependencias para extraer y crear una abstraccin del sistema e informacin de diseo. El sistema en estudio no es alterado, sino que se produce conocimiento adicional acerca del sistema [SEI, 2004].

Ingeniera inversa, un proceso de reingeniera


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. Se aplica a sistemas con las siguientes caractersticas: Documentacin inexistente o totalmente obsoleta. Programacin en bloque de cdigos muy grandes y/o sin estructurar. Inexistencia de documentacin interna en los programas, o bien esta 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 aun 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 de direccionalidad del proceso son sumamente variables [Cass, 1988].

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). Pgina 1 de 10

Trabajo de Ingeniera Inversa


Curso: Algoritmo y Estructura de Datos 1 Alumnos: Manuel Puntillo, Miguel Paz, Narciso Mori, Simn Mori, Jos Saravia, David Bravo.
A medida que crece el nivel de abstraccin se proporciona al ingeniero de software informacin que le permitir comprender ms fcilmente estos programas [Pressman, 2003).

Completitud
Es 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 de 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 [Pressman, 2003].

Interactividad
La interactividad alude el 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 [Pressman, 2003].

Direccionalidad
Si la direccionalidad del proceso de ingeniera inversa es monodireccional, toda la informacin extrada del cdigo fuente se proporcionara a la ingeniera del software que podr entonces utilizarla durante la actividad de mantenimiento. Si la direccionalidad es bidireccional, entonces la informacin se suministrara a una herramienta de reingeniera que intentara reestructurar o regenerar el viejo programa [Pressman, 2003].

El Proceso de ingeniera inversa


El proceso de ingeniera se representa en la figura 1.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.

Pgina 2 de 10

Trabajo de Ingeniera Inversa


Curso: Algoritmo y Estructura de Datos 1 Alumnos: Manuel Puntillo, Miguel Paz, Narciso Mori, Simn Mori, Jos Saravia, David Bravo.

Figura 1.1 El proceso 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 [Pressman, 2003]. Para el caso especfico de esta tesis, se analiz y se llevo a cabo la abstraccin para comprender el procesamiento, por lo tanto, solo trataremos esa parte del proceso de ingeniera inversa del software.

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 Pgina 3 de 10

Trabajo de Ingeniera Inversa


Curso: Algoritmo y Estructura de Datos 1 Alumnos: Manuel Puntillo, Miguel Paz, Narciso Mori, Simn Mori, Jos Saravia, David Bravo.
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 existen especificaciones de sistema, programa y componente. Cuando ocurre tal cosa, se revisan las especificaciones para evaluar si se ajustan al cdigo existente2. 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 semiautomatizado. 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 [Pressman, 2003].

Reestructuracin
La transformacin desde una forma de representacin a otra en el mismo nivel de abstraccin, preservando las caractersticas externas del sistema (funcionalidad y semntica). *Chifofsky, 1990+ 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 a centrarse 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) [Pressman, 2003]. 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 prcticas 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 de mantenimiento. Hace que el software sea ms sencillo de comprobar y de depurar.

Pgina 4 de 10

Trabajo de Ingeniera Inversa


Curso: Algoritmo y Estructura de Datos 1 Alumnos: Manuel Puntillo, Miguel Paz, Narciso Mori, Simn Mori, Jos Saravia, David Bravo.
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 modificacin3 [Pressman, 2003].

Redocumentacin
La redocumentacin es tambin una forma de ingeniera inversa. Es el proceso mediante el que se produce 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 [Tilley, 1995].

Caso particular: WFS Geoserver


El proyecto Geoserver v. 1.1.1 [Geoserver, 2004] consiste en la implementacin de un WFS basado en la especificacin de OpenGIS [WFS, 2002]. Es gratuito y est disponible bajo la licencia GPL 2.0 en la direccin: http://sourceforge.net/project/showfiles.php?group_id=25086 Esta implementacin se mostro bastante robusta cuando se prob, y haciendo uso de la licencia GPL se decidi que encajaba como solucin al problema propuesto. Al estudiarlo ms a fondo, descubrimos que careca de informacin del sistema, incluso el cdigo tena una documentacin muy escasa, casi nula. Dadas estas circunstancias se decidi realizar un proceso de ingeniera inversa con la cual, mediante abstracciones a partir del cdigo fuente, se pudiera obtener informacin importante acerca de la implementacin, como diseo de implementacin, diagramas, paquetes y dems informacin que sea necesaria para el desarrollador en caso de querer modificar en un futuro la aplicacin. Se entabl comunicacin con una de las personas encargadas del proyecto Geoserver y se le coment la idea de tener una implementacin propia de la que desarrollaron ellos. El se mostr interesado, pues al ser an un proyecto, cualquier tipo de retroalimentacin que se les proporcionar sera de gran ayuda. Una de los principales intereses fue la idea de implementar el sistema sobre una arquitectura no probada, como la que tenemos en la UDLA-P. Con esto se logra, no slo tener una solucin robusta a los problemas planteados con esta tesis, sino que adems participamos en el desarrollo del proyecto Geoserver. En la actualidad no hay un documento que exija o que evale cuales son los pasos para una ingeniera inversa satisfactoria. As que a continuacin se propone una metodologa que sirva como pautas para orientar en el proceso de ingeniera inversa a quien as lo desee.

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 Pgina 5 de 10

Trabajo de Ingeniera Inversa


Curso: Algoritmo y Estructura de Datos 1 Alumnos: Manuel Puntillo, Miguel Paz, Narciso Mori, Simn Mori, Jos Saravia, David Bravo.
instituto de ingeniera de software propone un marco de trabajo para llevar a cabo un proceso de ingeniera inversa [SEI, 2004]. Tomando en cuenta este documento y con la ayuda de un experto en la materia se propuso la metodologa de la figura 1.2 [fuente propia] 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

Figura 1.2 Metodologa propuesta para el proceso de ingeniera inversa

1. 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.

2. 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 1.3 muestra el diagrama de caso de uso que incluye a estas tres operaciones y despus estn los casos de uso de cada operacin. Pgina 6 de 10

Trabajo de Ingeniera Inversa


Curso: Algoritmo y Estructura de Datos 1 Alumnos: Manuel Puntillo, Miguel Paz, Narciso Mori, Simn Mori, Jos Saravia, David Bravo.

Figura 1.3 Diagrama de caso de uso de las tres operaciones soportadas por el WFS

3. Generacin automtica de diagramas de clase


Esta parte del proceso de ingeniera inversa comprende la generacin de los diagramas de clase y/o de paquetes usando una herramienta CASE semiautomatizada, como por ejemplo JBuilder 9.0, Enterprise Architect o Rational Rose. En nuestro proceso de ingeniera inversa utilizamos JBuilder para generar los diagramas de clase. Debido al gran nmero de diagramas generados, slo se muestra uno representativo en este documento, sin embargo todos estn disponibles en lnea en este mismo proyecto Gisweb. La figura 1.4 es un ejemplo de diagrama de clase generado por una herramienta CASE semi-automatizada, en este caso JBuilder. Este describe la clase WFService del paquete org.vfny.geoserver.servlets y muestra sus relaciones de dependencia y extensiones. Ms detalladamente muestra que hereda de la clase AbstractService y que depende de las clases ExceptionHandler y WfsExceptionHandler. Esta clase es muy importante, el paqueteorg.geoserver.servlets.wfs que contiene los servlets principales de este servicio, hereda de esta clase.

Pgina 7 de 10

Trabajo de Ingeniera Inversa


Curso: Algoritmo y Estructura de Datos 1 Alumnos: Manuel Puntillo, Miguel Paz, Narciso Mori, Simn Mori, Jos Saravia, David Bravo.
Figura 1.4 Ejemplo de Diagrama de Clase

4. Anlisis del sistema


Esta parte del proceso de ingeniera inversa consiste en el estudio por parte del analista para descubrir con ayuda de la informacin obtenida hasta el momento el funcionamiento del sistema, pero a un nivel ms detallado. Este es tal vez la parte de la metodologa ms pesada porque entra la pericia del analista para descubrir cmo funciona el sistema a partir de la poca o nula informacin que posee. Para ayudarnos y seguir contribuyendo a la documentacin de esta implementacin en el proceso de anlisis se desarrollaron los siguientes diagramas de secuencia. El primer diagrama de secuencia mostrado en la figura 1.5 pertenece al caso de uso de la operacin GetCapabilities y es la comunicacin de mensajes a alto nivel para responder la peticin hecha por la aplicacin cliente. El diagrama de la figura 1.6 pertenece al caso de uso de la operacin DescribeFeatureType y al igual que la figura anterior, es el proceso de comunicacin de mensajes entre clases para responder una peticin hecha por la aplicacin cliente. Finalmente el diagrama mostrado en la figura 1.7 pertenece al caso de uso de la operacin GetFeature y describe el mismo proceso que las dos anteriores.

Figura

1.5 Diagrama de secuencia: GetCapabilities

Figura 1.6 Diagrama de secuencia: DescribeFeatureType

Pgina 8 de 10

Trabajo de Ingeniera Inversa


Curso: Algoritmo y Estructura de Datos 1 Alumnos: Manuel Puntillo, Miguel Paz, Narciso Mori, Simn Mori, Jos Saravia, David Bravo.

Figura 1.7 Diagrama de secuencia: GetFeature

5. 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. La tabla 1.1 muestra el mapeo de requerimientos a paquetes y clases de Gisweb pero de alto nivel, por lo tanto es de los requerimientos funcionales bsicos y algunos especiales (estos requerimientos se encuentran en la seccin 4.3.1.2 de este documento de tesis). En el siguiente captulo se implementa este cdigo en una Webapp para poder tenerlo en lnea con toda la informacin pertinente.

Tabla Mapeo de requerimientos y clases Pgina 9 de 10

Trabajo de Ingeniera Inversa


Curso: Algoritmo y Estructura de Datos 1 Alumnos: Manuel Puntillo, Miguel Paz, Narciso Mori, Simn Mori, Jos Saravia, David Bravo.
La ingeniera inversa aqu presentada fue muy general debido a la complejidad del proyecto en cuestin, pero se puede hacer tan detallada como se desee. Se puede repetir este ciclo a niveles cada vez ms profundos hasta llegar al anlisis de lneas de cdigo. La importancia de la ingeniera inversa es que con el resultado de este proceso, es fcil entender el funcionamiento de un sistema, y saber qu hacer y en dnde cuando ocurra un problema o simplemente cuando sea tiempo de darle mantenimiento al sistema. La figura 1.8 muestra que parte de este proyecto de tesis representa restante para completar nuestro sistema Gisweb. Se trata la implementacin del WFS como webapp al integrarse con una interfaz de usuario.

Figura 1.8 Diagrama Webapp Gisweb

Pgina 10 de 10

Das könnte Ihnen auch gefallen