Este documento describe el proceso de ingeniería inversa realizado sobre la implementación de un Web Feature Service (WFS) desarrollado por Geoserver para comprender su diseño e implementación. Se analizó el código fuente del WFS de Geoserver para extraer abstracciones de su procesamiento, estructuras de datos y flujos de datos a diferentes niveles de abstracción. El objetivo final era generar documentación que permita desarrollar una implementación propia del servicio WFS sobre una arquitectura diferente.
Este documento presenta información sobre reingeniería de software. Explica conceptos clave como reingeniería, refactoring, malas prácticas de codificación, e incluye ejemplos de cómo aplicar técnicas de refactoring para mejorar el código. También menciona herramientas de refactoring y estándares de codificación como la notación húngara y camello.
Ingeniería inversa y reingeniería de softwareMoises Medina
Este documento resume los conceptos de ingeniería inversa, reingeniería de software, análisis y diseño orientados a objetos, y programación extrema. La ingeniería inversa analiza el código existente para generar representaciones de alto nivel como diagramas, la reingeniería mejora el software existente, el análisis y diseño orientados a objetos usa clases, herencia y otros principios, y la programación extrema se basa en valores como la simplicidad.
El documento trata sobre el tema de la reingeniería de software. La reingeniería implica rediseñar sistemas heredados para mejorar su estructura y comprensibilidad mediante actividades como redocumentar el sistema, reorganizar y reestructurar el código, traducir el sistema a un lenguaje más moderno y modificar la estructura y valores de los datos. El proceso de reingeniería busca crear versiones de programas existentes con mayor calidad y facilidad de mantenimiento.
Este documento presenta información sobre diferentes temas de ingeniería de software como Cleanroom, reingeniería, ingeniería web y desarrollo basado en componentes. También incluye los nombres de los integrantes del equipo 4 de ingeniería de software aplicada.
La reingeniería de software involucra actividades como el análisis de inventarios, la reestructuración de documentos, la ingeniería inversa, la reestructuración de programas y datos, y la ingeniería directa, con el objetivo de crear versiones mejoradas de programas existentes que tengan una mayor calidad y facilidad de mantenimiento.
Este documento describe el proceso de ingeniería inversa, el cual consiste en analizar un sistema existente para identificar sus componentes y dependencias con el fin de extraer información sobre su diseño. Explica que la ingeniería inversa puede producir diferentes niveles de abstracción sobre la estructura y comportamiento del sistema, y que requiere interacción con un ingeniero de software. También cubre técnicas específicas como la reestructuración de código, bases de datos e interfaces de usuario.
La reingeniería de software es una forma de modernización para mejorar sistemas de información heredados mediante aplicación de tecnologías modernas. Incluye análisis de inventario, reestructuración de documentos, ingeniería inversa, reestructuración de programas y datos, e ingeniería directa. Tiene ventajas como riesgo y costo reducidos sobre desarrollo de software nuevo, pero existen límites a qué tanto puede mejorarse un sistema a través de reingeniería.
Este documento describe la ingeniería inversa, que es el proceso de analizar un producto existente para comprender su funcionamiento y potencialmente crear uno similar. Explica que la ingeniería inversa ha existido desde hace mucho tiempo como una forma de avanzar tecnológicamente. También discute los diferentes tipos de ingeniería inversa, incluyendo la ingeniería inversa de hardware, software y código fuente/objeto. El objetivo del artículo es destacar la importancia de esta disciplina a pesar de que a menudo se considera un tabú.
Este documento presenta información sobre reingeniería de software. Explica conceptos clave como reingeniería, refactoring, malas prácticas de codificación, e incluye ejemplos de cómo aplicar técnicas de refactoring para mejorar el código. También menciona herramientas de refactoring y estándares de codificación como la notación húngara y camello.
Ingeniería inversa y reingeniería de softwareMoises Medina
Este documento resume los conceptos de ingeniería inversa, reingeniería de software, análisis y diseño orientados a objetos, y programación extrema. La ingeniería inversa analiza el código existente para generar representaciones de alto nivel como diagramas, la reingeniería mejora el software existente, el análisis y diseño orientados a objetos usa clases, herencia y otros principios, y la programación extrema se basa en valores como la simplicidad.
El documento trata sobre el tema de la reingeniería de software. La reingeniería implica rediseñar sistemas heredados para mejorar su estructura y comprensibilidad mediante actividades como redocumentar el sistema, reorganizar y reestructurar el código, traducir el sistema a un lenguaje más moderno y modificar la estructura y valores de los datos. El proceso de reingeniería busca crear versiones de programas existentes con mayor calidad y facilidad de mantenimiento.
Este documento presenta información sobre diferentes temas de ingeniería de software como Cleanroom, reingeniería, ingeniería web y desarrollo basado en componentes. También incluye los nombres de los integrantes del equipo 4 de ingeniería de software aplicada.
La reingeniería de software involucra actividades como el análisis de inventarios, la reestructuración de documentos, la ingeniería inversa, la reestructuración de programas y datos, y la ingeniería directa, con el objetivo de crear versiones mejoradas de programas existentes que tengan una mayor calidad y facilidad de mantenimiento.
Este documento describe el proceso de ingeniería inversa, el cual consiste en analizar un sistema existente para identificar sus componentes y dependencias con el fin de extraer información sobre su diseño. Explica que la ingeniería inversa puede producir diferentes niveles de abstracción sobre la estructura y comportamiento del sistema, y que requiere interacción con un ingeniero de software. También cubre técnicas específicas como la reestructuración de código, bases de datos e interfaces de usuario.
La reingeniería de software es una forma de modernización para mejorar sistemas de información heredados mediante aplicación de tecnologías modernas. Incluye análisis de inventario, reestructuración de documentos, ingeniería inversa, reestructuración de programas y datos, e ingeniería directa. Tiene ventajas como riesgo y costo reducidos sobre desarrollo de software nuevo, pero existen límites a qué tanto puede mejorarse un sistema a través de reingeniería.
Este documento describe la ingeniería inversa, que es el proceso de analizar un producto existente para comprender su funcionamiento y potencialmente crear uno similar. Explica que la ingeniería inversa ha existido desde hace mucho tiempo como una forma de avanzar tecnológicamente. También discute los diferentes tipos de ingeniería inversa, incluyendo la ingeniería inversa de hardware, software y código fuente/objeto. El objetivo del artículo es destacar la importancia de esta disciplina a pesar de que a menudo se considera un tabú.
El documento habla sobre el proceso de mantenimiento de software, el cual involucra correcciones de defectos, adición de nuevas funcionalidades y optimizaciones. Explica los tres tipos de mantenimiento - correctivo, adaptativo y perfectivo - y describe brevemente las actividades clave de la reingeniería de software como el análisis de inventarios, la ingeniería inversa y directa, y la reestructuración de programas y datos.
La ingeniería inversa es el proceso de descubrir los principios tecnológicos de un dispositivo u objeto a través de razonamiento abductivo sobre su estructura, función y operación. Existen diferentes tipos como la ingeniería inversa de datos, lógica o interfaces de usuario. Ofrece ventajas como reducir la complejidad, generar alternativas, recuperar información perdida y facilitar la reutilización. Se usa comúnmente en software, hardware, militar y para verificar seguridad. Las herramientas incluyen depuradores,
Este documento presenta una introducción a la ingeniería de software. Explica que la ingeniería de software comprende todos los aspectos de la producción de software y se diferencia de la ciencia de la computación en que se enfoca en los problemas prácticos de desarrollar software útil. También describe los conceptos clave de proceso de software, modelo de procesos de software, costos asociados con la ingeniería de software y métodos comúnmente utilizados. Finalmente, resume los atributos deseables de un buen software.
El documento habla sobre el mantenimiento del software. Explica que el mantenimiento incluye correcciones, mejoras y adaptaciones a cambios. Luego describe los tipos de mantenimiento, los costos asociados, las dificultades y el proceso de mantenimiento en el ciclo de vida del software. Finalmente, cubre métodos como la redocumentación, ingeniería inversa y métricas para medir la mantenibilidad del software.
El documento presenta preguntas y respuestas sobre conceptos básicos de ingeniería de software como la diferencia entre programa, software y aplicación, la definición de ingeniería, ingeniería de software y calidad de software. También describe las etapas del desarrollo de software como análisis de requisitos, especificación, arquitectura, programación, pruebas y mantenimiento. Finalmente, analiza casos históricos de fallas de software como el accidente del cohete Ariane 5 y cómo la baja calidad de software puede afectar negativamente la vida
Este documento introduce los fundamentos de la ingeniería de software. Explica que el software son programas desarrollados para resolver tareas en las computadoras y que el proceso de ingeniería de software incluye actividades como entender el problema, planear la solución, ejecutar el plan y examinar los resultados. Además, identifica diferentes tipos de aplicaciones de software y describe el proceso de desarrollo del software.
Técnicas y Herramientas para el Desarrollo de Sistemas de InformaciónBriRodriguez
Presentación sobre las Técnicas y Herramientas para el Desarrollo de Sistemas de Información, realizada por el Equipo Géminis del curso ADSI Sección 01, UDO Monagas.
Tecnicas y herramientas para el desarrollo de softwareYenifer Bravo
Este documento resume las técnicas y herramientas para el desarrollo de software. Explica brevemente las técnicas de recopilación de datos como entrevistas, encuestas y observación. También cubre técnicas como el análisis de costo-beneficio y la planificación y control de proyectos. Finalmente, describe las herramientas CASE para el desarrollo de software y su clasificación según las fases del ciclo de vida que abarcan.
Herramientas y Tecnicas de Desarrollo de Softwarecloker21
Este documento presenta un resumen del análisis y diseño de sistemas de información de la Universidad de Oriente. Describe las técnicas de recolección de datos, costo-beneficio y planificación de proyectos utilizadas en el desarrollo de software. También menciona las herramientas CASE que asisten en el ciclo de vida del desarrollo de software.
El documento describe diferentes conceptos relacionados con la ingeniería de software. Explica las diferencias entre programa, software y aplicación, define ingeniería de software e ingeniería, y describe las principales etapas y modelos de desarrollo de software, como el modelo cascada, en espiral, iterativo e incremental. También compara ingeniería de software con el simple desarrollo de software y menciona marcos como RUP y el Proceso Unificado.
Este documento presenta los fundamentos de la ingeniería de software. Explica que la ingeniería de software es una disciplina de la ingeniería cuyo objetivo es desarrollar sistemas de software confiables y eficientes. Describe los elementos del software, los tipos de productos, y las características deseables. También describe el ciclo de vida de un proyecto de software e incluye las acciones principales. Finalmente, presenta los paradigmas, modelos de proceso, técnicas de recopilación de información, y aspectos de diseño de
Este documento presenta una introducción a la ingeniería del software. Expone los conceptos básicos de ingeniería de sistemas e ingeniería del software, así como los mitos comunes sobre el desarrollo de software. También describe los modelos de ciclo de vida del software como cascada y en V, así como el uso de prototipos. Finalmente, aborda temas como la calidad del software, las revisiones, las pruebas y la gestión de configuraciones.
Herramientas para llevar a cabo un Sistema de Informaciónjgbd127
El documento clasifica y describe las herramientas de software utilizadas para analizar, diseñar y desarrollar un sistema de información. Se dividen las herramientas en categorías como herramientas de análisis, diseño y desarrollo. Las herramientas de análisis ayudan a documentar sistemas existentes y determinar requisitos. Las herramientas de diseño apoyan el proceso de diseño e incluyen herramientas de especificación y presentación. Las herramientas de desarrollo ayudan a implementar aplicaciones func
gestión de proyectos.
•Modelado: diagramas de flujo,
estructurados, objetos, bases de
datos, ...
•Análisis: requisitos, diseño.
Herramientas de modelado y análisis
•Generadores de código.
•Generadores de documentación.
Herramientas de generación
•Comprobación de consistencia.
•Pruebas.
Herramientas de validación
Este documento presenta los fundamentos de la ingeniería de software, incluyendo las definiciones de software, sus cualidades y factores de calidad. Explica los diferentes modelos de ciclo de vida de software, como el modelo en cascada y en V, así como los paradigmas de programación orientada a objetos. Finalmente, describe los métodos de desarrollo de software, incluyendo la definición del problema, análisis, diseño, implementación y pruebas.
El documento introduce el tema de la ingeniería de software. Brevemente describe el rápido desarrollo del hardware impulsado por la ley de Moore y cómo esto ha creado sistemas más complejos que requieren software más sofisticado. También explica cómo la "crisis del software" surgió en la década de 1960 y los esfuerzos iniciales para profesionalizar el desarrollo de software a través de la ingeniería de software. Finalmente, resume los principales organismos de normalización que han contribuido a establecer estándares y mejores pr
Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?,
Cuadro comparativo que considera cuatro aspectos básicos para comparar un arquitecto de software, un ingeniero de software, un ingeniero de sistemas y un ingeniero de computación.
La ingeniería inversa es el proceso de descubrir los principios tecnológicos de un dispositivo u objeto a través de razonamiento deductivo de su estructura, función y operación. Se usa para analizar productos competidores en búsqueda de infracciones de patentes, investigar tecnologías militares extranjeras, y desarrollar productos compatibles sin conocer detalles de desarrollo. También se emplea para verificar la seguridad de productos y repararlos.
El grupo utilizó herramientas como Spring Source Tool Suite e IDE Java Netbeans para importar un proyecto Java existente y generar un diagrama UML a partir de su código. El proceso involucró la creación de un proyecto, importación del código Java, y uso de la función de ingeniería inversa para automatizar la generación de un diagrama de clases UML que representa la estructura lógica del software.
El documento describe la ingeniería inversa y proporciona un ejemplo aplicado a un coche teledirigido. La ingeniería inversa consiste en desmontar un objeto en sus piezas para comprender cómo está construido y funciona. El documento explica los componentes clave de un coche teledirigido, incluidos los motores, el sistema eléctrico, el chasis y la carrocería.
El documento habla sobre el proceso de mantenimiento de software, el cual involucra correcciones de defectos, adición de nuevas funcionalidades y optimizaciones. Explica los tres tipos de mantenimiento - correctivo, adaptativo y perfectivo - y describe brevemente las actividades clave de la reingeniería de software como el análisis de inventarios, la ingeniería inversa y directa, y la reestructuración de programas y datos.
La ingeniería inversa es el proceso de descubrir los principios tecnológicos de un dispositivo u objeto a través de razonamiento abductivo sobre su estructura, función y operación. Existen diferentes tipos como la ingeniería inversa de datos, lógica o interfaces de usuario. Ofrece ventajas como reducir la complejidad, generar alternativas, recuperar información perdida y facilitar la reutilización. Se usa comúnmente en software, hardware, militar y para verificar seguridad. Las herramientas incluyen depuradores,
Este documento presenta una introducción a la ingeniería de software. Explica que la ingeniería de software comprende todos los aspectos de la producción de software y se diferencia de la ciencia de la computación en que se enfoca en los problemas prácticos de desarrollar software útil. También describe los conceptos clave de proceso de software, modelo de procesos de software, costos asociados con la ingeniería de software y métodos comúnmente utilizados. Finalmente, resume los atributos deseables de un buen software.
El documento habla sobre el mantenimiento del software. Explica que el mantenimiento incluye correcciones, mejoras y adaptaciones a cambios. Luego describe los tipos de mantenimiento, los costos asociados, las dificultades y el proceso de mantenimiento en el ciclo de vida del software. Finalmente, cubre métodos como la redocumentación, ingeniería inversa y métricas para medir la mantenibilidad del software.
El documento presenta preguntas y respuestas sobre conceptos básicos de ingeniería de software como la diferencia entre programa, software y aplicación, la definición de ingeniería, ingeniería de software y calidad de software. También describe las etapas del desarrollo de software como análisis de requisitos, especificación, arquitectura, programación, pruebas y mantenimiento. Finalmente, analiza casos históricos de fallas de software como el accidente del cohete Ariane 5 y cómo la baja calidad de software puede afectar negativamente la vida
Este documento introduce los fundamentos de la ingeniería de software. Explica que el software son programas desarrollados para resolver tareas en las computadoras y que el proceso de ingeniería de software incluye actividades como entender el problema, planear la solución, ejecutar el plan y examinar los resultados. Además, identifica diferentes tipos de aplicaciones de software y describe el proceso de desarrollo del software.
Técnicas y Herramientas para el Desarrollo de Sistemas de InformaciónBriRodriguez
Presentación sobre las Técnicas y Herramientas para el Desarrollo de Sistemas de Información, realizada por el Equipo Géminis del curso ADSI Sección 01, UDO Monagas.
Tecnicas y herramientas para el desarrollo de softwareYenifer Bravo
Este documento resume las técnicas y herramientas para el desarrollo de software. Explica brevemente las técnicas de recopilación de datos como entrevistas, encuestas y observación. También cubre técnicas como el análisis de costo-beneficio y la planificación y control de proyectos. Finalmente, describe las herramientas CASE para el desarrollo de software y su clasificación según las fases del ciclo de vida que abarcan.
Herramientas y Tecnicas de Desarrollo de Softwarecloker21
Este documento presenta un resumen del análisis y diseño de sistemas de información de la Universidad de Oriente. Describe las técnicas de recolección de datos, costo-beneficio y planificación de proyectos utilizadas en el desarrollo de software. También menciona las herramientas CASE que asisten en el ciclo de vida del desarrollo de software.
El documento describe diferentes conceptos relacionados con la ingeniería de software. Explica las diferencias entre programa, software y aplicación, define ingeniería de software e ingeniería, y describe las principales etapas y modelos de desarrollo de software, como el modelo cascada, en espiral, iterativo e incremental. También compara ingeniería de software con el simple desarrollo de software y menciona marcos como RUP y el Proceso Unificado.
Este documento presenta los fundamentos de la ingeniería de software. Explica que la ingeniería de software es una disciplina de la ingeniería cuyo objetivo es desarrollar sistemas de software confiables y eficientes. Describe los elementos del software, los tipos de productos, y las características deseables. También describe el ciclo de vida de un proyecto de software e incluye las acciones principales. Finalmente, presenta los paradigmas, modelos de proceso, técnicas de recopilación de información, y aspectos de diseño de
Este documento presenta una introducción a la ingeniería del software. Expone los conceptos básicos de ingeniería de sistemas e ingeniería del software, así como los mitos comunes sobre el desarrollo de software. También describe los modelos de ciclo de vida del software como cascada y en V, así como el uso de prototipos. Finalmente, aborda temas como la calidad del software, las revisiones, las pruebas y la gestión de configuraciones.
Herramientas para llevar a cabo un Sistema de Informaciónjgbd127
El documento clasifica y describe las herramientas de software utilizadas para analizar, diseñar y desarrollar un sistema de información. Se dividen las herramientas en categorías como herramientas de análisis, diseño y desarrollo. Las herramientas de análisis ayudan a documentar sistemas existentes y determinar requisitos. Las herramientas de diseño apoyan el proceso de diseño e incluyen herramientas de especificación y presentación. Las herramientas de desarrollo ayudan a implementar aplicaciones func
gestión de proyectos.
•Modelado: diagramas de flujo,
estructurados, objetos, bases de
datos, ...
•Análisis: requisitos, diseño.
Herramientas de modelado y análisis
•Generadores de código.
•Generadores de documentación.
Herramientas de generación
•Comprobación de consistencia.
•Pruebas.
Herramientas de validación
Este documento presenta los fundamentos de la ingeniería de software, incluyendo las definiciones de software, sus cualidades y factores de calidad. Explica los diferentes modelos de ciclo de vida de software, como el modelo en cascada y en V, así como los paradigmas de programación orientada a objetos. Finalmente, describe los métodos de desarrollo de software, incluyendo la definición del problema, análisis, diseño, implementación y pruebas.
El documento introduce el tema de la ingeniería de software. Brevemente describe el rápido desarrollo del hardware impulsado por la ley de Moore y cómo esto ha creado sistemas más complejos que requieren software más sofisticado. También explica cómo la "crisis del software" surgió en la década de 1960 y los esfuerzos iniciales para profesionalizar el desarrollo de software a través de la ingeniería de software. Finalmente, resume los principales organismos de normalización que han contribuido a establecer estándares y mejores pr
Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?, Que es IIngenieria del Software?,
Cuadro comparativo que considera cuatro aspectos básicos para comparar un arquitecto de software, un ingeniero de software, un ingeniero de sistemas y un ingeniero de computación.
La ingeniería inversa es el proceso de descubrir los principios tecnológicos de un dispositivo u objeto a través de razonamiento deductivo de su estructura, función y operación. Se usa para analizar productos competidores en búsqueda de infracciones de patentes, investigar tecnologías militares extranjeras, y desarrollar productos compatibles sin conocer detalles de desarrollo. También se emplea para verificar la seguridad de productos y repararlos.
El grupo utilizó herramientas como Spring Source Tool Suite e IDE Java Netbeans para importar un proyecto Java existente y generar un diagrama UML a partir de su código. El proceso involucró la creación de un proyecto, importación del código Java, y uso de la función de ingeniería inversa para automatizar la generación de un diagrama de clases UML que representa la estructura lógica del software.
El documento describe la ingeniería inversa y proporciona un ejemplo aplicado a un coche teledirigido. La ingeniería inversa consiste en desmontar un objeto en sus piezas para comprender cómo está construido y funciona. El documento explica los componentes clave de un coche teledirigido, incluidos los motores, el sistema eléctrico, el chasis y la carrocería.
Este documento describe el proceso de ingeniería inversa realizado sobre el mando de un coche. Se desmontó el mando con un destornillador para analizar sus piezas y componentes internos. Dentro se encontró el circuito electrónico conectado al mecanismo del gatillo y regulador de dirección. El circuito eléctrico conecta la pila, interruptor, reguladores y antena para realizar las conexiones entre los componentes y enviar señales que controlan el avance y giro del coche.
A empresa de tecnologia anunciou um novo smartphone com câmera aprimorada, tela maior e bateria de longa duração por um preço acessível. O dispositivo tem como objetivo atrair mais consumidores em mercados emergentes com suas especificações equilibradas e preço baixo. Analistas esperam que as melhorias e o preço baixo impulsionem as vendas do novo aparelho.
La ingeniería inversa es el proceso de descubrir los principios tecnológicos de un dispositivo u objeto a través de razonamiento abductivo sobre su estructura, función y operación. Existen diferentes tipos como la ingeniería inversa de datos, lógica o interfaces de usuario. Ofrece ventajas como reducir la complejidad, generar alternativas, recuperar información perdida y facilitar la reutilización. Se usa comúnmente en software, hardware, militar y para verificar seguridad. Las herramientas incluyen depuradores,
Este documento describe las características de las organizaciones y los entes contables. Explica que una organización es un grupo de personas con un objetivo común, donde existen centros de poder que dividen el trabajo. Un ente contable requiere de una organización y patrimonio (bienes) para cumplir sus objetivos. Finalmente, detalla que el patrimonio de un ente contable está compuesto por su activo, pasivo y patrimonio neto.
Este documento describe las técnicas de ingeniería inversa para el diseño de productos, incluyendo el escaneo 3D. Explica qué es la ingeniería inversa, sus usos y las diferencias con el diseño tradicional. También describe los tipos de escáneres 3D, cómo funcionan, sus beneficios y las fases del proceso de escaneo.
El documento describe los procesos de desarrollo de software, incluyendo actividades fundamentales como la especificación, diseño, implementación y validación de software. También describe varios modelos de procesos como el modelo en cascada, desarrollo evolutivo e ingeniería de software basada en componentes. Finalmente, discute temas como la iteración de procesos, ingeniería de requerimientos y metodologías como RUP.
Modelos de procesos de software(completo)David Rosero
Este documento describe varios modelos de procesos de software, incluyendo el modelo en cascada, desarrollo incremental, modelo en espiral y el Proceso Unificado Racional (RUP). Explica las fases y actividades clave de cada modelo, así como sus beneficios y desafíos relativos a la gestión de cambios y entrega de software.
Este documento introduce los conceptos básicos de la ingeniería de software. Explica que la ingeniería de software se ocupa del desarrollo y mantenimiento del software de manera sistemática y cuantificable. Luego describe algunos modelos de proceso comunes como el modelo en cascada lineal y el modelo en espiral evolutivo. Finalmente, aborda brevemente el tema de la calidad del software.
El documento habla sobre el mantenimiento de software y la reingeniería de software. Explica que el mantenimiento de software incluye correcciones, mejoras y adaptaciones a nuevos requisitos, pero que a menudo se realiza bajo presión y sin documentación adecuada. La reingeniería de software puede mejorar la comprensión y mantenibilidad del software mediante la reestructuración y el análisis inverso del código y procesos.
Este documento resume las preguntas frecuentes sobre ingeniería de software. 1) Explica qué es la ingeniería de software y sus objetivos como mejorar la calidad del software y facilitar el control del proceso de desarrollo. 2) Distingue la ingeniería de software de la ciencia de la computación y la ingeniería de sistemas. 3) Describe los modelos de procesos de software como el modelo cascada, incremental y evolutivo.
Este documento resume las preguntas frecuentes sobre ingeniería de software. 1) Explica qué es la ingeniería de software y sus objetivos como mejorar la calidad del software y facilitar el control del proceso de desarrollo. 2) Distingue la ingeniería de software de la ciencia de la computación y la ingeniería de sistemas. 3) Describe los modelos de procesos de software como el modelo cascada, incremental y evolutivo.
Este documento define software, sus diferentes tipos como software de sistema, de programación y de aplicación. Explica los modelos de proceso como el modelo cascada, iterativo incremental y espiral para el desarrollo de software. También describe las diferentes fases del ciclo de vida de software como análisis de requisitos, diseño, codificación, pruebas, instalación, mantenimiento y su carácter evolutivo.
Este documento describe dos modelos de proceso de software: el modelo de cascada y el modelo espiral. El modelo de cascada sugiere un enfoque secuencial para el desarrollo de software que incluye análisis de requisitos, diseño, codificación, pruebas y mantenimiento. El modelo espiral es un proceso evolutivo que involucra iteraciones de planificación, análisis de riesgos, ingeniería y evaluación para desarrollar versiones incrementales del software.
Este documento describe el proceso de ingeniería de software, análisis y diseño para el desarrollo de una aplicación de software para tratar el trastorno de lateralidad y ubicación espacial. Explica que estos procesos deben seguir una metodología formal para garantizar la calidad del software. Luego, detalla el modelo lineal secuencial que se utilizará, el cual incluye actividades como el análisis de requisitos, diseño, generación de código y pruebas. Finalmente, provee contexto sobre cómo se aplicarán estos pro
El documento habla sobre el proceso de mantenimiento de software, el cual involucra correcciones de defectos, adición de nuevas funcionalidades y optimizaciones. Explica los tres tipos de mantenimiento - correctivo, adaptativo y perfectivo - y describe brevemente las actividades clave de la reingeniería de software como el análisis de inventarios, la ingeniería inversa y directa, y la reestructuración de programas y datos.
La arquitectura de software define los componentes abstractos de un sistema, sus interfaces y comunicaciones. Existen varios tipos comunes como la descomposición modular, arquitecturas de dominio específico, multiprocesador, cliente-servidor, distribuida y tiempo real. Esta última debe responder a eventos del mundo real en tiempos estrictos guiada por hardware, software y requisitos de la aplicación.
Este documento presenta una lista de 8 integrantes que estudian modelos de procesos de software. Luego describe brevemente algunos métodos de desarrollo de software como el modelo secuencial lineal, el modelo secuencial por etapas, el desarrollo en cascada evolutivo, el modelo espiral, Scrum, Kanban y programación extrema. Explica las características y fases clave de cada uno de estos métodos.
Este documento presenta varios temas de tesis relacionados con la ingeniería de software y los sistemas de tiempo real, incluyendo el proceso de ingeniería de requisitos, la administración de proyectos de software, la extracción de componentes reutilizables, el diseño orientado a objetos usando UML, y la planificación de procesos de control en tiempo real con retroalimentación.
Este documento describe las etapas del ciclo de vida de un sistema de información, incluyendo la planificación, análisis, diseño, implementación, pruebas, instalación, uso y mantenimiento. También discute el modelo de ciclo de vida clásico y las herramientas utilizadas para el diseño de sistemas de información. El diseño es crucial para materializar los requisitos del cliente y garantizar la calidad del proyecto.
Este documento describe la historia de la ingeniería de software y su aplicación a la educación informática. Explica que la ingeniería de software surgió en 1968 para hacer frente a una crisis de software. Se define la ingeniería de software como la aplicación sistemática de principios de ingeniería para desarrollar software fiable y eficiente. También describe los componentes clave de la ingeniería de software como herramientas, métodos, procesos y enfoques de calidad. Finalmente, explica el ciclo de vida del software que incluye las fases de definición,
El documento describe el modelo de cascada para el desarrollo de software. El modelo de cascada consiste en una serie de etapas secuenciales: 1) ingeniería y análisis del sistema, 2) análisis de requisitos, 3) diseño, 4) codificación, 5) pruebas y 6) mantenimiento. Cada etapa toma como entrada la salida de la etapa anterior. El modelo garantiza una metodología ordenada y rigurosa para el desarrollo de software.
Este documento presenta una introducción al proceso de modelado de software. Explica que el proceso de software consiste en una serie de actividades relacionadas como la especificación, diseño, implementación, validación y evolución del software. También describe tres modelos de procesos de software: el modelo en cascada, el desarrollo incremental y la ingeniería de software orientada a la reutilización. Cada modelo organiza estas actividades fundamentales de manera diferente.
1) El capítulo describe los procesos de ingeniería de software, análisis y diseño que se utilizarán para desarrollar una aplicación de software para tratar el trastorno de lateralidad y ubicación espacial. 2) Explica brevemente la disciplina de ingeniería de software y los modelos de procesos como el modelo lineal secuencial que se seguirá. 3) Detalla las etapas de este modelo como el análisis de requisitos, diseño, generación de código y pruebas aplicadas al desarrollo de esta herramienta de
1. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 40
Capítulo 4
Ingeniería Inversa
[4. Ingeniería Inversa]
“El análisis de un sistema para identificar sus componentes actuales y las
dependencias que existen entre ellos, para extraer y crear abstracciones de dicho
sistema e información de su diseño” [Chifofsky, 1990].
“El proceso de analizar el código, documentación y comportamiento de un sistema
para identificar sus componentes actuales y sus dependencias para extraer y crear
una abstracción del sistema e información de diseño. El sistema en estudio no es
alterado, sino que se produce conocimiento adicional acerca del sistema” [SEI,
2004].
En este capítulo se trata el proceso de ingeniería inversa, sus variantes, y la
realización de la misma sobre la implementación particular de un WFS desarrollado
por una iniciativa privada para obtener una abstracción que nos permita generar la
documentación necesaria para hacer una implementación propia de ese servicio.
Como se mencionó en los alcances y limitaciones de esta tesis, el proceso de
ingeniería inversa es muy amplio y debido al tiempo para desarrollar esta tesis, toda
la información descrita en la sección 4.2 es para comprender el proceso, más no se
realizaron todas las etapas del mismo. La sección 4.3 contiene el trabajo realizado de
ingeniería inversa sobre la implementación particular del WFS que se estudió.
4.1 Ingeniería Inversa, un proceso de reingeniería
La ingeniería inversa tiene la misión de desentrañar los misterios y secretos de los
sistemas en uso. Consiste principalmente en recuperar el diseño de una aplicación a
partir del código.
2. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 41
Esto se realiza principalmente mediante herramientas que extraen información de los
datos, procedimientos y arquitectura del sistema existente.
Es aplicable a sistemas con las siguientes características:
• Documentación inexistente o totalmente obsoleta.
• Programación en bloque de códigos muy grandes y/o sin estructurar.
• Inexistencia de documentación interna en los programas, o bien ésta es
incomprensible o está desfasada.
• La aplicación cubre gran parte de los requisitos y del rendimiento esperado.
• La aplicación está sujeta a cambios frecuentes, que pueden afectar a parte
del diseño.
• Se prevé que la aplicación pueda tener aún larga vida.
La ingeniería inversa puede extraer información de diseño del código fuente, pero el
nivel de abstracción, la completitud de la documentación, 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].
4.1.1 Nivel de abstracción
El nivel de abstracción de un proceso de ingeniería inversa y las herramientas que se
utilizan para realizarlo aluden a la sofisticación de la información de diseño que se
puede extraer del código fuente. El nivel de abstracción ideal deberá ser lo más alto
posible, es decir, el proceso de ingeniería inversa debe ser capaz de derivar:
• Sus representaciones de diseño de procedimiento (con un bajo nivel de
abstracción).
• La información de las estructuras de datos y de programas (un nivel de
abstracción ligeramente más elevado).
• Modelos de flujo de datos y de control (un nivel de abstracción relativamente
alto)
• Modelos de entidades y de relaciones (un elevado nivel de abstracción).
3. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 42
A medida que crece el nivel de abstracción se proporciona al ingeniero de software
información que le permitirá comprender más fácilmente estos programas
[Pressman, 2003].
4.1.2 Completitud
La completitud de un proceso de ingeniería inversa alude al nivel de detalle que se
proporciona en un determinado nivel de abstracción. En la mayoría de los casos, la
completitud decrece a medida que aumenta el nivel de abstracción. Por ejemplo,
dado un listado del código fuente, es relativamente sencillo desarrollar una
representación de diseño de procedimientos completa. También se pueden derivar
representaciones sencillas del flujo de datos, pero es mucho más difícil desarrollar un
conjunto completo de diagramas de flujo de datos o un diagrama de transición de
datos.
La completitud mejora en proporción directa a la cantidad de análisis efectuado por
la persona que está efectuando la ingeniería 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 ingeniería inversa efectivo. En
la mayoría de los casos, a medida que crece el nivel de abstracción, la interactividad
deberá incrementarse, o si no la completitud se verá reducida [Pressman, 2003].
4.1.4 Direccionalidad
Si la direccionalidad del proceso de ingeniería inversa es monodireccional, toda la
información extraída del código fuente se proporcionará a la ingeniería del software
que podrá entonces utilizarla durante la actividad de mantenimiento. Si la
direccionalidad es bidireccional, entonces la información se suministrará a una
4. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 43
herramienta de reingeniería que intentará reestructurar o regenerar el viejo
programa [Pressman, 2003].
4.1.5 El proceso de ingeniería inversa
El proceso de ingeniería se representa en la figura 4.1. Antes de que puedan
comenzar las actividades de ingeniería inversa, el código fuente no estructurado
(“sucio”) se reestructura para que solamente contenga construcciones de
programación estructurada1
. Esto hace que el código fuente sea más fácil de leer, y
es lo que proporciona la base para todas las actividades subsiguiente de ingeniería
inversa.
Figura 4.1 – El proceso de ingeniería inversa
1
El código se puede reestructurar automáticamente empleando un “motor de reestructuración”, es decir, una
herramienta CASE que reestructura el código fuente.
5. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 44
El núcleo de la ingeniería inversa es una actividad denominada extracción de
abstracciones. El ingeniero tiene que evaluar el viejo programa y a partir del código
fuente (que no suele estar documentado) tiene que extraer una especificación
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 específico de esta tesis, se analizó y se llevo a cabo la abstracción para
comprender el procesamiento, por lo tanto, solo trataremos esa parte del proceso
de ingeniería inversa del software.
4.1.5.1 Ingeniería inversa para comprender el procesamiento
La primera actividad real de la ingeniería inversa comienza con un intento de
comprender y extraer después abstracciones de procedimientos representadas por el
código fuente. Para comprender las abstracciones de procedimientos, se analiza el
código en distintos niveles de abstracción: sistema, programa, componente,
configuración y sentencia.
La funcionalidad general de todo el sistema de aplicaciones deberá ser algo
perfectamente comprendido antes de que tenga lugar un trabajo de ingeniería
inversa más detallado. Esto es lo que establece un contexto para un análisis
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 abstracción funcional con
un elevado nivel de detalle. También se creará un diagrama de bloques como
representación de la iteración entre estas abstracciones funcionales. Cada uno de los
componentes efectúa una sub-función, y representa una abstracción definida de
procedimientos. En cada componente se crea una narrativa de procesamiento. En
algunas situaciones ya existen especificaciones de sistema, programa y componente.
6. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 45
Cuando ocurre tal cosa, se revisan las especificaciones para evaluar si se ajustan al
código existente2
.
Todo se complica cuando se considera el código que reside en el interior del
componente. El ingeniero busca las secciones de código que representan las
configuraciones genéricas de procedimientos. En casi todos los componentes, existe
una sección de código que prepara los datos para su procesamiento (dentro del
componente), una sección diferente de código que efectúa el procesamiento y otra
sección de código que prepara los resultados del procesamiento para exportarlos de
ese componente. En el interior de cada una de estas secciones, se encuentran
configuraciones más pequeñas.
Por ejemplo, suele producirse una verificación de los datos y una comprobación de
los límites dentro de la sección de código que prepara los datos para su
procesamiento.
Para los sistemas grandes, la ingeniería inversa suele efectuarse mediante el uso de
un enfoque semi-automatizado. Las herramientas CASE se utilizan para “analizar” la
semántica del código existente. La salida de este proceso se pasa entonces a unas
herramientas de reestructuración y de ingeniería directa que completarán el proceso
de reingeniería [Pressman, 2003].
4.1.6 Reestructuración
“La transformación desde una forma de representación a otra en el mismo nivel de
abstracción, preservando las características externas del sistema (funcionalidad y
semántica)”. [Chifofsky, 1990]
La reestructuración del software modifica el código fuente y/o los datos en un intento
de adecuarlo a futuros cambios. En general, la reestructuración no modifica la
arquitectura global del programa. Tiene a centrarse en los detalles de diseño de
módulos individuales y en estructuras de datos locales definidas dentro de los
2
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 código deja de satisfacer esas especificaciones.
7. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 46
módulos. Si el esfuerzo de la reestructuración se extiende más allá de los límites de
los módulos y abarca la arquitectura del software, la reestructuración pasa a ser
ingeniería directa (forward engineering) [Pressman, 2003].
Arnold [Arnold, 1989] define un cierto número de beneficios que se pueden lograr
cuando se reestructura el software:
• Programas de mayor calidad – con mejor documentación y menos
complejidad, y ajustados a las prácticas y estándares de la ingeniería del
software moderna.
• Reduce la frustración entre ingenieros del software que deban trabajar con el
programa, mejorando por tanto la productividad y haciendo más sencillo el
aprendizaje.
• Reduce el esfuerzo requerido para llevar a cabo las actividades de
mantenimiento.
• Hace que el software sea más sencillo de comprobar y de depurar.
La reestructuración se produce cuando la arquitectura básica de la aplicación es
sólida, aun cuando sus interioridades técnicas necesiten un retoque. Comienza
cuando existen partes considerables del software que son útiles todavía, y solamente
existe un subconjunto de todos los módulos y datos que requieren una extensa
modificación3
[Pressman, 2003].
4.1.7 Redocumentación
La redocumentación es también una forma de ingeniería inversa. Es el proceso
mediante el que se produce documentación retroactivamente desde un sistema
existente. Si la redocumentación toma la forma de modificación de comentarios en el
código fuente, puede ser considerada una forma suave de reestructuración. Sin
embargo, puede ser considerada como una sub-área de la ingeniería inversa porque
la documentación reconstruida es usada para ayudar al conocimiento del programa.
Se piensa en ella como una transformación desde el código fuente a pseudocódigo
3
En algunas ocasiones, resulta difícil distinguir entre una reestructuración extensa y un nuevo desarrollo. Ambos son
casos de reingeniería.
8. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 47
y/o prosa, esta última considerada como más alto nivel de abstracción que la
primera.
Aunque la aparición de multitud de herramientas facilita las labores de la ingeniería
inversa, es la labor humana (humanware) la decisiva a la hora de completar el
estudio del sistema [Tilley, 1995].
4.2 Caso particular: WFS Geoserver
El proyecto Geoserver v. 1.1.1 [Geoserver, 2004] consiste en la implementación de
un WFS basado en la especificación de OpenGIS [WFS, 2002]. Es gratuito y está
disponible bajo la licencia GPL 2.0 en la dirección:
http://sourceforge.net/project/showfiles.php?group_id=25086
Esta implementación se mostró bastante robusta cuando se probó, y haciendo uso de
la licencia GPL se decidió que encajaba como solución al problema propuesto. Al
estudiarlo más a fondo, descubrimos que carecía de información del sistema, incluso
el código tenía una documentación muy escasa, casi nula. Dadas estas circunstancias
se decidió realizar un proceso de ingeniería inversa con la cual, mediante
abstracciones a partir del código fuente, se pudiera obtener información importante
acerca de la implementación, como diseño de implementación, diagramas, paquetes
y demás información que sea necesaria para el desarrollador en caso de querer
modificar en un futuro la aplicación.
Se entabló comunicación con una de las personas encargadas del proyecto Geoserver
y se le comentó la idea de tener una implementación propia de la que desarrollaron
ellos. El se mostró interesado, pues al ser aún un proyecto, cualquier tipo de
retroalimentación que se les proporcionará sería 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 sólo tener una
solución robusta a los problemas planteados con esta tesis, sino que además
participamos en el desarrollo del proyecto Geoserver.
9. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 48
En la actualidad no hay un documento que exija o que evalúe cuales son los pasos
para una ingeniería inversa satisfactoria. Así que a continuación se propone una
metodología que sirva como pautas para orientar en el proceso de ingeniería inversa
a quien así lo desee.
4.2.1 Metodología
Debido a que no hay un documento que especifique como es exactamente un
proceso de ingeniería inversa, cada ingeniero de software que desea realizar un
proceso de este tipo propone su propia metodología. El instituto de ingeniería de
software propone un marco de trabajo para llevar a cabo un proceso de ingeniería
inversa [SEI, 2004]. Tomando en cuenta este documento y con la ayuda de un
experto en la materia se propuso la metodología de la figura 4.2 [fuente propia] para
realizar un proceso de ingeniería inversa. Principalmente lo que incluye la
metodología propuesta es:
1. Definición y delimitación del componente de software
2. Recolección de funcionalidades existente
a. Documentación de Casos de Uso
3. Generación automática de diagramas de clase y de paquete mediante una
herramienta semi-autimatizada CASE
a. Diagramas de clase
b. Diagramas de paquete
4. Análisis de código y relación entre paquetes
5. Mapeo de requerimientos a paquetes y de ser posible a clases
10. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 49
Figura 4.2 – Metodología propuesta para el proceso de ingeniería inversa
4.2.1.1 Definición y delimitación
Esta es la primera etapa del proceso de ingeniería inversa y es la que comprende la
selección y evaluación del o de los componentes a los que se les aplicará el proceso
de ingeniería inversa. Geoserver fue escogido primeramente por ser una
implementación pública que cumple con los requisitos que se necesitan para nuestra
solución. Algunos de estos requisitos es que está hecho en Java, es OpenSource,
cumple con la especificación que rige las implementaciones WFS, maneja peticiones
por HTTP GET y HTTP POST.
4.2.1.2 Casos de Uso
Para el proceso de recolección de funcionalidades existentes se desarrollaron los
casos de uso de las tres operaciones que soporta el WFS. La figura 4.3 muestra el
11. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 50
diagrama de caso de uso que incluye a estas tres operaciones y después están los
casos de uso de cada operación.
Figura 4.3 – Diagrama de caso de uso de las tres operaciones soportadas por el WFS
12. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 51
Reingeniería para la implementación de un WFS
Use-Case: Operación GetCapabilities
Versión 1.0
Historia de revisiones
Fecha Versión Descripción Autor
12/04/04 Draft_a Operación GetCapabilities Abraham A. López
Ameneyro
14/04/04 Draft_b Correcciones Abraham A. López
Ameneyro
15/04/04 1.0 Versión final Abraham A. López
Ameneyro
Use-Case: Operación GetCapabilities
1 Propósito
El propósito de este caso de uso es explicar de manera textual y posteriormente
gráfica, el uso de la operación GetCapabilities.
1.1 Alcance
Este caso de uso es la descripción de una de las tres operaciones que soporta el
servicio WFS, por lo tanto guarda una relación con la descripción de las restantes dos
operaciones (GetFeature y DescribeFeatureType).
1.2 Definiciones, Acrónimos y Abreviaciones
• WFS – Web Feature Service
• OGC – OpenGIS Consortium
• GML – Geography Markup Language
• XML – eXtensible Markup Language
• CQL – Common Query Language
• Feature – Abstracción de un evento del mundo real, y que se define como un
conjunto de propiedades, puede ser pensado como una tupla {nombre, tipo,
valor}
• Interface – Conjunto de operaciones que caracterizan el comportamiento de
una entidad
13. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 52
• Aplicación cliente - Una aplicación cliente será cualquier aplicación 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.
1.3 Referencias
• OpenGIS Web Feature Service Implementation Specification
http://www.opengis.org/docs/02-058.pdf
• OpenGIS Filter Encoding Implementation Specification
http://www.opengis.org/docs/02-059.pdf
• OpenGIS Catalogue Interface Implementation Specification
http://www.opengis.org/docs/02-087r3.pdf
2. Operación GetCapabilities
2.1 Descripción Breve
Esta operación 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 básico
3.1.1 <GetCapabilities>
El caso de uso inicia cuando una aplicación cliente solicita (E1) el documento que
describe las capacidades del servicio. El servidor recibe la petición, genera el
documento de capacidades el cual debe estar definido y validado contra el esquema
A.5 del apéndice del documento OpenGIS Web Feature Service Implementation
Specification [WFS, 2002], y lo envía a la aplicación cliente para su visualización, con
esto termina este caso de uso.
3.2 Flujos alternativos
3.2.1 <GetCapabilities Exception>
(E1) La aplicación cliente puede formar mal la petición para el documento de
capacidades, a lo que el servidor debe responder con una excepción de servicio.
4. Categoría
Core
5. Requerimientos especiales
• La interface debe estar definida en XML y se define con respecto al esquema
A.3 del documento OpenGIS Web Feature Service Implementation
Specification [WFS, 2002]
• Las bases de datos deben ser opacas a la aplicación cliente
• La solicitud debe definirse en XML y ser derivada de CQL
• Se debe usar esquemas XML (SCHEMAS) que son documentos GML válidos,
para la descripción del servicio
14. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 53
Reingeniería para la implementación de un WFS
Use-Case: Operación DescribeFeatureType
Versión 1.0
Historia de revisiones
Fecha Versión Descripción Autor
12/04/04 Draft_a Operación DescribeFeatureType Abraham A. López
Ameneyro
15/04/04 Draft_b Correcciones Abraham A. López
Ameneyro
16/04/04 1.0 Versión final Abraham A. López
Ameneyro
Use-Case: Operación DescribeFeatureType
1. Propósito
El propósito de este caso de uso es explicar de manera textual y posteriormente
gráfica, el uso de la operación DescribeFeatureType.
1.1 Alcance
Este caso de uso es la descripción de una de las tres operaciones que soporta el
servicio WFS, por lo tanto guarda una relación con la descripción de las restantes dos
operaciones (GetFeature y GetCapabilities).
1.2 Definiciones, Acrónimos y Abreviaciones
• WFS – Web Feature Service
• OGC – OpenGIS Consortium
• GML – Geography Markup Language
• XML – eXtensible Markup Language
• CQL – Common Query Language
• Feature – Abstracción de un evento del mundo real, y que se define como un
conjunto de propiedades, puede ser pensado como una tupla {nombre, tipo,
valor}
• Interface – Conjunto de operaciones que caracterizan el comportamiento de
una entidad
15. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 54
• Aplicación cliente - Una aplicación cliente será cualquier aplicación 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.
1.3 Referencias
• OpenGIS Web Feature Service Implementation Specification
http://www.opengis.org/docs/02-058.pdf
• OpenGIS Filter Encoding Implementation Specification
http://www.opengis.org/docs/02-059.pdf
• OpenGIS Catalogue Interface Implementation Specification
http://www.opengis.org/docs/02-087r3.pdf
2. Operación DescribeFeatureType
2.1 Descripción breve
Esta operación 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 básico
3.1.1 <DescribeFeatureType>
El caso de uso inicia cuando una aplicación cliente solicita (E1) el documento que
describe como se codificarán los features tanto en la entrada como en la salida. El
servidor recibe la petición y genera el esquema que describe como se encuentra
estructurado el feature solicitado el cual es un GML válido. Finalmente lo envía a la
aplicación cliente y con esto termina este caso de uso.
3.2 Flujos alternativos
3.2.1 <DescribeFeatureType Exception>
(E1) La aplicación cliente puede formar mal la petición del documento de descripción
de features, a lo que el servidor debe responder con una excepción de servicio.
4. Categoría
Core
5. Requerimientos especiales
• La interface debe estar definida en XML y se define con respecto al esquema
A.3 del documento OpenGIS Web Feature Service Implementation
Specification [WFS, 2002]
• La solicitud debe definirse en XML y ser derivada de CQL
• Se deben usar esquemas XML (SCHEMAS) que son documentos GML válidos,
para la descripción de los features
16. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 55
Reingeniería para la implementación de un WFS
Use-Case: Operación GetFeature
Versión 1.0
Historia de revisiones
Fecha Versión Descripción Autor
12/04/04 Draft_a Operación GetFeature Abraham A. López
Ameneyro
15/04/04 Draft_b Correcciones Abraham A. López
Ameneyro
15/04/04 1.0 Versión final Abraham A. López
Ameneyro
Use-Case: Operación GetFeature
1. Propósito
El propósito de este caso de uso es explicar de manera textual y posteriormente
gráfica, el uso de la operación GetFeature.
1.1 Alcance
Este caso de uso es la descripción de una de las tres operaciones que soporta el
servicio WFS, por lo tanto guarda una relación con la descripción de las restantes dos
operaciones (GetCapabilities y DescribeFeatureType).
1.2 Definiciones, Acrónimos y Abreviaciones
• WFS – Web Feature Service
• OGC – OpenGIS Consortium
• GML – Geography Markup Language
• CQL – Common Query Language
• XML – eXtensible Markup Language
• Feature – Abstracción de un evento del mundo real, y que se define como un
conjunto de propiedades, puede ser pensado como una tupla {nombre, tipo,
valor}
• Interface – Conjunto de operaciones que caracterizan el comportamiento de
una entidad
• Aplicación cliente - Una aplicación cliente será cualquier aplicación 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.
17. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 56
1.3 Referencias
• OpenGIS Web Feature Service Implementation Specification
http://www.opengis.org/docs/02-058.pdf
• OpenGIS Filter Encoding Implementation Specification
http://www.opengis.org/docs/02-059.pdf
• OpenGIS Catalogue Interface Implementation Specification
http://www.opengis.org/docs/02-087r3.pdf
2. Operación GetFeature
2.1 Descripción breve
Esta operación se encarga de hacer la consulta y recuperación de los features
disponibles del servicio WFS.
3. Flujo de eventos
3.1 Flujo básico
3.1.1 <GetFeature>
El caso de uso inicia cuando una aplicación cliente genera una consulta (E1) y la envía
al servidor. El servidor recibe la petición, la interpreta y la resuelve, generando un
documento con el resultado de la consulta el cual es un GML válido y debe también ser
válido contra el esquema generado por la operación DescribeFeatureType. Finalmente
se envía a la aplicación cliente. Con esto termina este caso de uso
3.2 Flujos alternativos
3.2.1 <GetFeature Exception>
(E1) La aplicación cliente puede formar mal la consulta, a lo que el servidor debe
responder con una excepción de servicio.
4. Categoría
Core
5. Requerimientos especiales
• La interface debe estar definida en XML y se define con respecto al esquema
A.3 del documento OpenGIS Web Feature Service Implementation
Specification [WFS, 2002]
• La consulta o filtro debe definirse en XML y ser derivada de CQL
• Se debe usar GML para expresar los features dentro de la interface
18. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 57
4.2.1.3 Generación automática de diagramas de clase
Esta parte del proceso de ingeniería inversa comprende la generación de los
diagramas de clase y/o de paquetes usando una herramienta CASE semi-
automatizada, como por ejemplo JBuilder 9.0, Enterprise Architect o Rational Rose.
En nuestro proceso de ingeniería inversa utilizamos JBuilder para generar los
diagramas de clase. Debido al gran número de diagramas generados, sólo se
muestra uno representativo en este documento, sin embargo todos están disponibles
en línea en este mismo proyecto Gisweb. La figura 4.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. Más detalladamente muestra que
hereda de la clase AbstractService y que depende de las clases ExceptionHandler y
WfsExceptionHandler. Esta clase es muy importante, el paquete
org.geoserver.servlets.wfs que contiene los servlets principales de este servicio,
hereda de esta clase.
Figura 4.4 – Ejemplo de diagrama de clase
19. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 58
4.2.1.4 Análisis del sistema
Esta parte del proceso de ingeniería inversa consiste en el estudio por parte del
analista para descubrir con ayuda de la información obtenida hasta el momento el
funcionamiento del sistema, pero a un nivel más detallado. Este es tal vez la parte
de la metodología más pesada porque entra la pericia del analista para descubrir
como funciona el sistema a partir de la poca o nula información que posee. Para
ayudarnos y seguir contribuyendo a la documentación de esta implementación en el
proceso de análisis se desarrollaron los siguientes diagramas de secuencia.
El primer diagrama de secuencia mostrado en la figura 4.5 pertenece al caso de uso
de la operación GetCapabilities y es la comunicación de mensajes a alto nivel para
responder la petición hecha por la aplicación cliente. El diagrama de la figura 4.6
pertenece al caso de uso de la operación DescribeFeatureType y al igual que la figura
anterior, es el proceso de comunicación de mensajes entre clases para responder
una petición hecha por la aplicación cliente. Finalmente el diagrama mostrado en la
figura 4.7 pertenece al caso de uso de la operación GetFeature y describe el mismo
proceso que las dos anteriores.
Figura 4.5 Diagrama de secuencia: GetCapabilities
20. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 59
Figura 4.6 Diagrama de secuencia: DescribeFeatureType
Figura 4.7 Diagrama de secuencia: GetFeature
21. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 60
4.2.1.5 Mapeo de requerimientos a paquetes
Esta parte del proceso es una aportación importante a la documentación de un
software o componente pues facilita mucho identificar que ocurre cuando deseamos
modificar una parte del código. 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 relación 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 código la tabla indique que casos de uso se
verán afectados y por consiguiente que requerimientos también estarán
involucrados. Esto es de gran ayuda en sistemas grandes porque no tenemos que
esperar a las pruebas de regresión para descubrir que fue lo que se alteró. La tabla
4.1 muestra el mapeo de requerimientos a paquetes y clases de Gisweb pero de alto
nivel, por lo tanto es de los requerimientos funcionales básicos y algunos especiales
(estos requerimientos se encuentran en la sección 4.3.1.2 de este documento de
tesis). En el siguiente capítulo se implementa este código en una Webapp para
poder tenerlo en línea con toda la información pertinente.
22. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 61
Requerimientos Caso de uso Clases
Medio por el cual el WFS
proporciona al cliente la
opción de preguntar como
se estructura y cuales son
las características de un
feature DescribeFeatureType
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
org.geotools.gml.producer.FeatureTypeTransformer$FeatureTypeTranslator
Medio por el cual el WFS
proporciona al cliente la
opción de preguntar por sus
propias capacidades,
fearures y operaciones
disponibles sobre cada
feature. GetCapabilities
org.vfny.geoserver.servlets.AbstractService
org.vfny.geoserver.requests.CapabilitiesHandler
org.vfny.geoserver.requests.readers.wfs.CapabilitiesXmlReader
Medio por el cual el WFS
proporciona al cliente la
opción de hacer consultas
espaciales y decriptvas
sobre uno o más features 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
Las interfaces deben estar
definidas en XML
GetCapabilities
DescribeFeatureType
GetFeature
org.vfny.geoserver.servlets.wfs.Capabilities
org.vfny.geoserver.servlets.wfs.Describe
org.vfny.geoserver.servlets.wfs.Feature
Usar GML para representar
features GetFeature package org.geotools.feature
La petición debe hacerse en
XML y ser derivada de CQL
GetCapabilities
DescribeFeatureType
GetFeature
org.vfny.geoserver.requests.readers.wfs.DescribeXmlReader
org.vfny.geoserver.requests.readers.wfs.CapabilitiesXmlReader
org.vfny.geoserver.requests.readers.wfs.GetFeatureXmlReader
Bases de datos
GetCapabilities
DescribeFeatureType
GetFeature
org.vfny.geoserver.config.CatalogConfig
org.vfny.geoserver.config.DataStoreConfig
Tabla 4.1 - Mapeo de requerimientos y clases
23. Gisweb - Reingeniería para la implementación de un Web Feature Service
Capítulo 4 – Ingeniería Inversa 62
En este capítulo vimos el proceso de ingeniería inversa a la implementación pública de
Geoserver de su WFS y como obtuvimos los diagramas de diseño del funcionamiento
global del sistema. La ingeniería inversa aquí presentada fue muy general debido a la
complejidad del proyecto en cuestión, pero se puede hacer tan detallada como se
desee. Se puede repetir este ciclo a niveles cada vez más profundos hasta llegar al
análisis de líneas de código. La importancia de la ingeniería inversa es que con el
resultado de este proceso, es fácil entender el funcionamiento de un sistema, y saber
qué hacer y en dónde cuando ocurra un problema o simplemente cuando sea tiempo
de darle mantenimiento al sistema. Se propuso una metodología en base a
comentarios de un experto en el área que sirva de guía en futuros procesos de
ingeniería inversa. La figura 4.8 muestra que parte de este proyecto de tesis
representa este capítulo y el trabajo restante para completar nuestro sistema Gisweb.
En el siguiente capítulo se trata la implementación del WFS como webapp al integrarse
con una interfaz de usuario.
Figura 4.8 – Diagrama webapp Gisweb
WFS
Clases
Interfaz
de usuario
WFSResponse.class
sw.jsp
Package org.geotools
Package org.vfny.geoserver