Download Introducción. Uso de la ingeniería inversa en el desarrollo de

Document related concepts
no text concepts found
Transcript
Introducción.
Uso de la ingeniería inversa en el desarrollo de software.
La ingeniería inversa es el proceso de analizar un sistema para crear una representación del mismo, pero a un
nivel más elevado de abstracción. La ingeniería inversa es un proceso que recorre hacia atrás el ciclo de
desarrollo de software. Es posible iniciar el proceso de abstracción a partir del código fuente y llegar hasta la
fase de análisis, lo cual representa un flujo inverso.
En la práctica, existen dos tipos de ingeniería inversa
1. Basado en el código fuente:
El código fuente está disponible; sin embargo, aspectos de más alto nivel no son conocidos, existe una
documentación pobre o existe documentación, pero no corresponde, por ejemplo, en términos de
actualización.
2. Basado en el programa ejecutable:
No existe código fuente disponible, así que los esfuerzos se concentran en descubrir el correspondiente
código fuente.
El principal enfoque que se le ha dado a la reingeniería es hacia las actividades de mantenimiento. En el
contexto de mantenimiento, los objetivos de la reingeniería son: predecir, corregir, perfeccionar y adaptar. Otros
usos que se la han dado a la reingeniería son: logro de los atributos de calidad, logro de objetivos de los
requerimientos, optimización de la arquitectura, diseño de patrones, y optimización del desempeño bajo
múltiples criterios. La reingeniería ha sido utilizada en los diferentes paradigmas de desarrollo, tales como:
orientado a objetos, orientado a objetivos, orientado a agentes, y orientado a aspectos.
ESTRATEGIAS PARA IMPLEMENTAR LA INGENIERÍA INVERSA Y LA REINGNIERÍA
El objetivo de hacer ingeniería inversa es generar una documentación del sistema que permita tratamientos
futuros, tales como un incremento de funcionalidad, lo cual representa extender el tiempo de vida del mismo.
Debido a que el objetivo es aumentar la funcionalidad, entonces lo más conveniente es construir un modelo de
casos de uso a partir del código fuente. En un sistema no documentado, los casos de uso pueden ser
identificados en el código fuente, o a través de la interfaz gráfica de usuario.
El modelo construido aparentemente se queda en una sola vista de la arquitectura. La estrategia que se propone
está basada en la identificación de casos de uso y la construcción de un grafo de relaciones que conecta los
casos de uso con el código fuente. De esta forma se tendrá una combinación de la vista conceptual y la vista de
implementación, teniendo la posibilidad de ir de la vista de casos de uso hacia atrás a los requerimientos, lo
mismo hacia delante a las vistas lógica y de proceso; esto con el fin de completar todas las vistas de la
arquitectura.
El procedimiento recomendado para hacer la ingeniería inversa a través de la GUI y en forma manual es:
1. Identificación de casos de uso en la GUI.
2. Identificación de las relaciones entre casos de uso.
3. Construir un grafo con los casos de uso y sus relaciones.
4. Localización de los archivos de código fuente correspondientes a los casos de uso y las entidades de
código fuente derivadas. Agregar estos artefactos al grafo.
5. Identificación de las relaciones entre las entidades de código fuente. Conectar los artefactos de código
fuente entre ellos y conectarlos con el nivel anterior del grafo.
6. Generación de la versión final del grafo de relaciones.
M en C Alejandro Cifuentes A.
Página 1
Si no se dispone de código ejecutable, la ingeniería inversa se realiza a partir del código fuente, para lo cual se
utiliza un procedimiento parecido al anterior.
El proceso de reingeniería
El objetivo de hacer reingeniería es entender un sistema de software existente, a nivel de especificaciones,
diseño e implementación; esto con el fin de hacer una re-implementación para aumentar y/o mejorar la
funcionalidad del sistema, el desempeño o la misma implementación.
El proceso de reingeniería está orientado a sistemas que cuentan con cierto nivel de documentación. La
documentación del sistema está integrada por el siguiente conjunto de artefactos: documento de requerimientos,
descripción de casos de uso, prototipos de la interfaz de usuario por caso de uso, diagramas de casos de uso,
diagramas de secuencia, diagramas de colaboración, clases, diagramas de clases, archivos de código fuente,
archivos de código ejecutable y grafo de relaciones entre artefactos.
El procedimiento recomendado para realizar la reingeniería es el siguiente:
1. Evaluar la cantidad de funcionalidad expresada en los casos de uso.
2. Identificar la funcionalidad nueva.
3. Definir los nuevos casos de uso.
4. Hacer ingeniería hacia delante a partir de los casos de uso, completando el grafo de relaciones.
5. Generación de la versión final del grafo de relaciones.
Bajo este enfoque, incluso se pueden realizar incrementos o ajustes al código fuente, o se puede generar código
fuente nuevo tratando de optimizar la funcionalidad. La arquitectura completa del sistema se expresa mediante
el grafo de relaciones que conecta los casos de uso con el código fuente, pasando por los demás artefactos del
modelado, teniendo también la posibilidad de llegar hacia atrás a los requerimientos. Cabe mencionar que el
grafo se va completando a partir del paso 3.
Desarrollo.
Parte I.
1.
Descarga de Netbeans de Java. En el sitio de
Netbeans: http://www.netbeans.org se puede descargar
el JDK6 y Netbeans7.
2.
Descarga del plug-in de UML Modeling para
Netbeans de Java.
Java posee un módulo para el desarrollo de Ingeniería
Inversa con UML Modeling, el cual está incluido en
Netbeans como Reverse Engineering Java
Applications y se encuentra disponible en:
http://www.netbeans.org/kb/55/uml-re.html
(<http://www.netbeans.org/kb/55/uml-re.html>)
La descarga del plug-in se hace desde la URL:
http://dlc.sun.com.edgesuite.net/netbeans/6.9/rc/start.h
M en C Alejandro Cifuentes A.
Página 2
tml?filename=zip/moduleclusters/netbeans-6.9rc2201006010103-ml-uml.zip
3. Al ingresar al sitio directamente se presenta la
siguiente ventana de descarga:
Una vez descargado el archivo, puede encontrarse en el escritorio por ejemplo, se extrae y se instala con una de
las dos opciones siguientes:

Opción 1: Digitar clic derecho del mouse en el
icono del instalador. Se muestra el siguiente menú con
la ubicación directa de instalación.
Este es el icono del instalador:
.
El menú de instalación:
.

Opción 2: Digitar doble clic del mouse en el
icono. Se muestran las opciones de instalación y se
selecciona la carpeta de Netbeans 7.0 Beta.
Con cualquiera de las dos opciones anteriores se
instala automáticamente, como se indica enseguida:
Parte II.
Se abre el IDE de Netbeans de Java para iniciar el diseño de un sistema.
M en C Alejandro Cifuentes A.
Página 3
1.
En el menú principal
seleccionar File > new
Project....
2.
En Choose Project >
Categories se selecciona UML
y en Projects se selecciona Java
Platform Model.
3.
Se le asigna un nombre.
Por ejemplo, UMLDemo.
4.
Del menú principal File
> new File, se selecciona
UMLDemo para crear un nuevo
diagrama. Se selecciona Use
Case Diagram.
M en C Alejandro Cifuentes A.
Página 4
5.
La apariencia general del
IDE debe mostrarse en forma
similar a la siguiente imagen.
6.
En el lado izquierdo en
Projects se muestra el icono de
UMLDemo.
7.
Y se puede desplegar su
contenido seleccionando su
símbolo +.
Parte III.
En el lado derecho de la ventana aparece la paleta de componentes
pegar en el área central de trabajo.
, cuyos símbolos se pueden arrastrar y
Cada componente tiene asociado un conjunto de elementos o símbolos que se muestran al digitar un clic en él.
M en C Alejandro Cifuentes A.
Página 5
Introducción al diseño.
Para introducirse al diseño, utilizando los símbolos anteriores, diseñar el siguiente diagrama:
1. Crear un nuevo archivo:
2. Seleccionar la categoría UML y tipo de archivo
Diagram. Clic en Next:
3. Seleccionar el diagrama de clase Class
Diagram. Clic en Finish:
4. Observar que en la parte izquierda de la
pantalla aparece la estructura del proyecto:
M en C Alejandro Cifuentes A.
Página 6
5. Si se selecciona el elemento Class de la paleta
y se le arrastra al centro, la apariencia general
del área de trabajo debe ser similar a la figura
de abajo:
6. El componente Class posee tres partes: El
título, los atributos y las operaciones.
7. Digitar doble clic sobre Unnamed para
cambiar el nombre de la clase. La zona se
marca en azul:
8. Se ingresa el nombre, por ejemplo
DicomImage:
9. Con clic derecho sobre el símbolo de la clase
se muestra el siguiente menú y se selecciona
Create Attribute, para crear un atributo en la
zona de atributos:
10. La zona se marca en azul.
M en C Alejandro Cifuentes A.
Página 7
11. Y con doble clic en el nombre del atributo se
edita el nombre del atributo, por ejemplo
private int width=0:
12. Se muestra la actualización en el componente:
13. Ahora, se ingresan las restantes modificaciones
para obtener la apariencia siguiente del
componente:
Enseguida se debe crear una carpeta en la cual se almacena todo lo relacionado a la creación del código.
14. Crear un nuevo proyecto en el
cual se va a generar el código,
seleccionando en categorías
Java y en proyectos Java Class
Library. Clic en Next.
15. Ingresar el nombre del proyecto,
por ejemplo EjercicioCodigo.
Clic en Finish:
M en C Alejandro Cifuentes A.
Página 8
16. Observar que se actualiza la
carpeta de proyectos:
17. Con clic derecho seleccionar
UMLDemo:
18. En el menú mostrado
seleccionar Generate Code…:
19. En el menú desplegable Target
Project seleccionar
EjercicioCodigo:
En el área central de trabajo se muestra el código y en la ventana inferior Output su descripción. Cada línea de
código posee un número de línea y al inicio de ellas se indica un símbolo + o -, digitar en ellos para mostrar su
contenido o contraer el código:
M en C Alejandro Cifuentes A.
Página 9
Parte IV.
Ingeniería Inversa.
1. En el menú principal seleccionar
File > New Project.... Seleccionar
en categorías UML y en proyectos
Reverse Engineered JavaPlatform Model:
M en C Alejandro Cifuentes A.
Página 10
2. Ingresar el nombre del proyecto, por
ejemplo UMLIngenieriaInversa.
En el campo Java Project
seleccionar el código java, en este
caso EjercicioCodigo. Digitar en
Finish:
3. En la pestaña de proyectos se
muestra la carpeta
UMLIngenieriaInversa:
4. Digitar clic derecho en la carpeta
DicomImage para mostrar el
siguiente menú:
5. Seleccionando la opción Create
Diagram From Selected
Elements se muestra la siguiente
ventana. Seleccionar la opción
Class Diagram e ingresar el
nombre del diagrama, por ejempo
IngenieriaInversa. Clic en Finish:
6. En la figura inferior se muestra el
M en C Alejandro Cifuentes A.
Página 11
diagrama de la clase:
NOTA: Generar un reporte con un proyecto individual similar al de este ejercicio. Incluir una breve
introducción al tema, desarrollo, imágenes, conclusiones y bibliografía.
M en C Alejandro Cifuentes A.
Página 12