Professional Documents
Culture Documents
Captulo 4
Ingeniera Inversa
[4. Ingeniera Inversa]
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 identificar 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].
En este captulo se trata el proceso de ingeniera inversa, sus variantes, y la
realizacin de la misma sobre la implementacin particular de un WFS desarrollado
por una iniciativa privada para obtener una abstraccin que nos permita generar la
documentacin necesaria para hacer una implementacin propia de ese servicio.
Como se mencion en los alcances y limitaciones de esta tesis, el proceso de
ingeniera inversa es muy amplio y debido al tiempo para desarrollar esta tesis, toda
la informacin descrita en la seccin 4.2 es para comprender el proceso, ms no se
realizaron todas las etapas del mismo. La seccin 4.3 contiene el trabajo realizado de
ingeniera inversa sobre la implementacin particular del WFS que se estudi.
40
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 [Cass, 1988].
41
que
le
permitir
comprender
ms
fcilmente
estos
programas
[Pressman, 2003].
4.1.2 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 [Pressman, 2003].
4.1.3 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 [Pressman, 2003].
4.1.4 Direccionalidad
Si la direccionalidad del proceso de ingeniera inversa es monodireccional, toda la
informacin extrada del cdigo fuente se proporcionar a la ingeniera del software
que podr entonces utilizarla durante la actividad de mantenimiento. Si la
direccionalidad es bidireccional, entonces la informacin se suministrar a una
42
se
reestructura
para
que
solamente
contenga
construcciones
de
programacin estructurada1. 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.
43
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 existen especificaciones de sistema, programa y componente.
44
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 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 [Pressman, 2003].
4.1.6 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
Con frecuencia, las especificaciones escritas en fases centradas de la historia del programa no llegan a actualizarse
nunca. A medida que se hacen cambios, el cdigo deja de satisfacer esas especificaciones.
45
Programas
de
mayor
calidad
con
mejor
documentacin
menos
Reduce la frustracin entre ingenieros del software que deban trabajar con el
programa, mejorando por tanto la productividad y haciendo ms sencillo el
aprendizaje.
4.1.7 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
En algunas ocasiones, resulta difcil distinguir entre una reestructuracin extensa y un nuevo desarrollo. Ambos son
casos de reingeniera.
46
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].
47
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.
4.2.1 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
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 4.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
48
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.
49
diagrama de caso de uso que incluye a estas tres operaciones y despus estn los
casos de uso de cada operacin.
Figura 4.3 Diagrama de caso de uso de las tres operaciones soportadas por el WFS
50
Historia de revisiones
Fecha
Versin
Descripcin
Autor
12/04/04
Draft_a
Operacin GetCapabilities
Abraham A. Lpez
Ameneyro
14/04/04
Draft_b
Correcciones
Abraham A. Lpez
Ameneyro
15/04/04
1.0
Versin final
Abraham A. Lpez
Ameneyro
Propsito
El propsito de este caso de uso es explicar de manera textual y posteriormente
grfica, el uso de la operacin GetCapabilities.
1.1
Alcance
Este caso de uso es la descripcin de una de las tres operaciones que soporta el
servicio WFS, por lo tanto guarda una relacin con la descripcin de las restantes dos
operaciones (GetFeature y DescribeFeatureType).
1.2
51
1.3
Aplicacin cliente - Una aplicacin cliente ser cualquier aplicacin que pueda
conectarse al servidor WFS y hacer peticiones ya sea por HTTP GET o HTTP
POST. Por ejemplo: thin clients, FME, ArcView, incluso otro WFS.
Referencias
http://www.opengis.org/docs/02-058.pdf
http://www.opengis.org/docs/02-059.pdf
http://www.opengis.org/docs/02-087r3.pdf
2.
Operacin GetCapabilities
2.1
Descripcin Breve
Esta operacin se encarga de presentar al usuario un documento, el cual describe
todas las capacidades (operaciones y features) del servicio WFS.
3.
Flujo de eventos
3.1
Flujo bsico
3.1.1
<GetCapabilities>
El caso de uso inicia cuando una aplicacin cliente solicita (E1) el documento que
describe las capacidades del servicio. El servidor recibe la peticin,
genera el
documento de capacidades el cual debe estar definido y validado contra el esquema
A.5 del apndice del documento OpenGIS Web Feature Service Implementation
Specification [WFS, 2002], y lo enva a la aplicacin cliente para su visualizacin, con
esto termina este caso de uso.
3.2
Flujos alternativos
3.2.1
<GetCapabilities Exception>
(E1) La aplicacin cliente puede formar mal la peticin para el documento de
capacidades, a lo que el servidor debe responder con una excepcin de servicio.
4.
Categora
Core
5.
Requerimientos especiales
Se debe usar esquemas XML (SCHEMAS) que son documentos GML vlidos,
para la descripcin del servicio
52
Historia de revisiones
Fecha
Versin
Descripcin
Autor
12/04/04
Draft_a
Operacin DescribeFeatureType
Abraham A. Lpez
Ameneyro
15/04/04
Draft_b
Correcciones
Abraham A. Lpez
Ameneyro
16/04/04
1.0
Versin final
Abraham A. Lpez
Ameneyro
Propsito
El propsito de este caso de uso es explicar de manera textual y posteriormente
grfica, el uso de la operacin DescribeFeatureType.
1.1
Alcance
Este caso de uso es la descripcin de una de las tres operaciones que soporta el
servicio WFS, por lo tanto guarda una relacin con la descripcin de las restantes dos
operaciones (GetFeature y GetCapabilities).
1.2
53
1.3
Aplicacin cliente - Una aplicacin cliente ser cualquier aplicacin que pueda
conectarse al servidor WFS y hacer peticiones ya sea por HTTP GET o HTTP
POST. Por ejemplo: thin clients, FME, ArcView, incluso otro WFS.
Referencias
http://www.opengis.org/docs/02-058.pdf
http://www.opengis.org/docs/02-059.pdf
http://www.opengis.org/docs/02-087r3.pdf
2.
Operacin DescribeFeatureType
2.1
Descripcin breve
Esta operacin se encarga de presentar al usuario un documento en el cual describe
como el servicio WFS espera que se codifiquen los features en las consultas, y como
ser la salida generada por el servicio WFS.
3.
Flujo de eventos
3.1
Flujo bsico
3.1.1
<DescribeFeatureType>
El caso de uso inicia cuando una aplicacin cliente solicita (E1) el documento que
describe como se codificarn los features tanto en la entrada como en la salida. El
servidor recibe la peticin y genera el esquema que describe como se encuentra
estructurado el feature solicitado el cual es un GML vlido. Finalmente lo enva a la
aplicacin cliente y con esto termina este caso de uso.
3.2
Flujos alternativos
3.2.1
<DescribeFeatureType Exception>
(E1) La aplicacin cliente puede formar mal la peticin del documento de descripcin
de features, a lo que el servidor debe responder con una excepcin de servicio.
4.
Categora
Core
5.
Requerimientos especiales
Se deben usar esquemas XML (SCHEMAS) que son documentos GML vlidos,
para la descripcin de los features
54
Historia de revisiones
Fecha
Versin
Descripcin
Autor
12/04/04
Draft_a
Operacin GetFeature
Abraham A. Lpez
Ameneyro
15/04/04
Draft_b
Correcciones
Abraham A. Lpez
Ameneyro
15/04/04
1.0
Versin final
Abraham A. Lpez
Ameneyro
Propsito
El propsito de este caso de uso es explicar de manera textual y posteriormente
grfica, el uso de la operacin GetFeature.
1.1
Alcance
Este caso de uso es la descripcin de una de las tres operaciones que soporta el
servicio WFS, por lo tanto guarda una relacin con la descripcin de las restantes dos
operaciones (GetCapabilities y DescribeFeatureType).
1.2
Aplicacin cliente - Una aplicacin cliente ser cualquier aplicacin que pueda
conectarse al servidor WFS y hacer peticiones ya sea por HTTP GET o HTTP
POST. Por ejemplo: thin clients, FME, ArcView, incluso otro WFS.
55
1.3
Referencias
http://www.opengis.org/docs/02-058.pdf
http://www.opengis.org/docs/02-059.pdf
http://www.opengis.org/docs/02-087r3.pdf
2.
Operacin GetFeature
2.1
Descripcin breve
Esta operacin se encarga de hacer la consulta y recuperacin de los features
disponibles del servicio WFS.
3.
Flujo de eventos
3.1
Flujo bsico
3.1.1
<GetFeature>
El caso de uso inicia cuando una aplicacin cliente genera una consulta (E1) y la enva
al servidor. El servidor recibe la peticin, la interpreta y la resuelve, generando un
documento con el resultado de la consulta el cual es un GML vlido y debe tambin ser
vlido contra el esquema generado por la operacin DescribeFeatureType. Finalmente
se enva a la aplicacin cliente. Con esto termina este caso de uso
3.2
Flujos alternativos
3.2.1
<GetFeature Exception>
(E1) La aplicacin cliente puede formar mal la consulta, a lo que el servidor debe
responder con una excepcin de servicio.
4.
Categora
Core
5.
Requerimientos especiales
56
Esta
clase
es
muy
importante,
el
paquete
57
58
59
afectados
por
consiguiente
que
requerimientos
tambin
estarn
para
60
Requerimientos
Medio por el cual el WFS
proporciona al cliente la
opcin de preguntar como
se estructura y cuales son
las caractersticas de un
feature
Medio por el cual el WFS
proporciona al cliente la
opcin de preguntar por sus
propias capacidades,
fearures y operaciones
disponibles sobre cada
feature.
Caso de uso
Clases
org.vfny.geoserver.requests.wfs.DescribeHandler
org.vfny.geoserver.requests.readers.wfs.DescribeXmlReader
org.vfny.geoserver.requests.wfs.DescribeRequest
org.vfny.geoserver.servlets.AbstractService
org.vfny.geoserver.responses.wfs.DescribeResponse
org.vfny.geoserver.config.CatalogConfig
DescribeFeatureType org.geotools.gml.producer.FeatureTypeTransformer$FeatureTypeTranslator
GetCapabilities
org.vfny.geoserver.servlets.AbstractService
org.vfny.geoserver.requests.CapabilitiesHandler
org.vfny.geoserver.requests.readers.wfs.CapabilitiesXmlReader
GetFeature
GetCapabilities
DescribeFeatureType
GetFeature
org.geotools.filter.LogicSAXParser
org.geotools.gml.GMLFilterGeometry
org.vfny.geoserver.requests.readers.wfs.GetFeatureXmlReader
org.xml.sax.helpers.AttributesImpl org.geotools.filter.FilterFilter
org.vfny.geoserver.requests.wfs.FeatureHandler
org.vfny.geoserver.servlets.AbstractService
org.vfny.geoserver.responses.wfs.FeatureResponse
org.vfny.geoserver.config.CatalogConfig
org.vfny.geoserver.config.DataStoreConfig
org.geotools.factory.FactoryFinder
org.geotools.gml.producer.FeatureTransformer$FeatureTranslator
org.vfny.geoserver.servlets.wfs.Capabilities
org.vfny.geoserver.servlets.wfs.Describe
org.vfny.geoserver.servlets.wfs.Feature
GetFeature
GetCapabilities
DescribeFeatureType
GetFeature
GetCapabilities
DescribeFeatureType
GetFeature
package org.geotools.feature
org.vfny.geoserver.requests.readers.wfs.DescribeXmlReader
org.vfny.geoserver.requests.readers.wfs.CapabilitiesXmlReader
org.vfny.geoserver.requests.readers.wfs.GetFeatureXmlReader
org.vfny.geoserver.config.CatalogConfig
org.vfny.geoserver.config.DataStoreConfig
61
Package org.geotools
Package org.vfny.geoserver
WFS
Clases
WFSResponse.class
sw.jsp
Interfaz
de usuario
62