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