Graphical User Interfaces Reverse Engineering for Requirements
Transcripción
Graphical User Interfaces Reverse Engineering for Requirements
(2016). RACCIS 6(1), pp. 39-45. Revista Antioqueña de las Ciencias Computacionales y la Ingeniería de Software ISSN: 2248-7441 www.fundacioniai.org/raccis raccis(AT)fundacioniai.org Graphical User Interfaces Reverse Engineering for Requirements Elicitation - Literature Review Ingeniería Inversa de Interfaces Gráficas de Usuario para la captura de Requisitos de Software - Revisión de la Literatura Carol Jaimes, Fernando Rojas Universidad Industrial de Santander. Bucaramanga, Colombia. carol.jaimes(AT)correo.uis.edu.co; frojas(AT)uis.edu.co INFORMACIÓN DEL ARTÍCULO Artículo de Revisión Recibido: 02-03-2016 Correcciones: 06-18-2016 Aceptado: 20-06-2016 Keywords Requirements elicitation; graphical user interface; reverse engineering; Requirements Engineering; Software Engineering. Palabras clave Captura de requisitos; ingeniería inversa; interfaz gráfica de usuario; Ingeniería de Requisitos; Ingeniería del Software. ABSTRACT This paper exhibits a synthesis of the use of legacy systems GUI reverse engineering as a tool to software requirements elicitation. It presents a literature review describing the approaches related to the topic. This work primary goal is to determine the major investigations in this area, and if there are techniques focused exclusively on the observation of the legacy applications GUI to obtain software requirements in a standard format, without the use of source code, data structures, documentation or sophisticated algorithms for the application analysis. RESUMEN Este artículo muestra una síntesis sobre el uso de la ingeniería inversa en aplicaciones heredadas como herramienta para la obtención de requisitos de software; presenta un análisis de la literatura describiendo los enfoques más utilizados en este campo. El objetivo principal de este trabajo es determinar cuáles son las principales investigaciones que se han llevado a cabo en esta área, además, averiguar si existen técnicas que se enfoquen exclusivamente en la observación e interacción con la GUI de aplicaciones heredadas para la obtención de requisitos de software en un formato estándar, sin tener que recurrir al código fuente, estructuras de datos, documentación o algoritmos complejos para el análisis de aplicaciones. 1. Introducción Uno de los pilares de la Ingeniería del Software moderna es la reutilización, lo que quiere decir que cualquier sistema software tiene que usar los recursos existentes de la manera más efectiva que le sea posible [1]. Este principio fundamental ha movido el desarrollo de técnicas, tecnologías y metodologías que permiten usar elementos preconcebidos y pre-construidos en el desarrollo de múltiples sistemas software. Es por esto que actualmente la comprensión de los sistemas ya construidos, y su pleno entendimiento, son procesos de alta complejidad y de reconocida importancia para apoyar la reutilización y el mantenimiento del software, apoyados en técnicas como la ingeniería inversa y la reingeniería [1, 2]. Sin embargo, la reutilización de componentes de software ejecutables es un proceso costoso, porque se construyen de manera específica para una situación. Una forma alternativa de reutilización que disminuye estos costos, es la reutilización del concepto, que busca reutilizar una idea y que se representa de manera abstracta para crear componentes ejecutables de reutilización [2]. El interés de la investigación en esta área y la identificación de las alternativas para encontrar elementos software que se puedan reutilizar conceptualmente para nuevos © 2016 IAI. All rights reserved. proyectos, es la principal motivación de esta revisión de la literatura. El aspecto principal en el que se enfoca la investigación es la búsqueda de técnicas que apliquen la ingeniería inversa a interfaces gráficas de usuario, con el fin de capturar requisitos de software. Lo cual está relacionado fuertemente a la comprensión de las aplicaciones, recuperación y reutilización del concepto. Este documento abarca alrededor de veinte años de trabajos de investigación en este tema. Con el fin de determinar los principales enfoques relacionados, así como el cambio que ha tenido el uso de la ingeniería inversa de interfaces gráficas de usuario a través de este periodo de tiempo, se presenta una síntesis organizada cronológicamente de los estudios hallados y su relevancia y cercanía con la temática de interés para la investigación. A continuación, se presentan los resultados obtenidos en la revisión, organizados en etapas de tiempo que dejan entrever las tendencias y enfoques en cada uno. La primera sección comprende la década de 1990, la segunda en la del 2000 y la tercera cubre el intervalo de tiempo entre 2010 y 2015. 2. Metodología La metodología usada para estructurar la revisión se propuso específicamente para esta investigación. Se basa inicialmente en las tres primeras etapas de Methontology 39 [3], que determinan el alcance y dan estructura a la revisión, de manera similar a como se inicia y determina el alcance de una ontología. En este caso, las etapas permiten delimitar la revisión, realizar las preguntas de competencia y formular la lista de términos. Esta lista es de carácter iterativo y va acompañada de la continua búsqueda de la literatura (Ver Figura 1). Después de estas tres etapas se procede al registro escrito, las correcciones y la divulgación. Figura 1. Diagrama Metodológico Revisión de la Literatura 2.1 Revisión de la literatura La etapa preliminar al desarrollo de la metodología consiste de una búsqueda exhaustiva en la literatura sobre las técnicas existentes para la recolección de requisitos de software, mediante la ingeniería inversa de interfaces gráficas de usuario. En las primeras búsquedas en las bases de datos IEEE y ACM se involucraron todos los términos de la temática, pero no arrojaron resultados significativos. Esto sirvió inicialmente para corroborar la hipótesis de que es un área poco explorada y sustenta la idea de realizar un trabajo de investigación de esta índole. A continuación, se procedió a segmentar la búsqueda en las áreas principales que conforman la temática general, tal como se observa en la Figura 2. Figura 2. Segmentación de la temática Las búsquedas realizadas utilizando los términos de estas áreas permitieron recolectar artículos relacionados desde 1990 hasta la actualidad. Entonces se decide involucrar este amplio rango de tiempo en el análisis de la documentación, porque los temas de la subdivisión a la temática se extienden a lo largo de esos veinticinco años. Además, se detectó una aparición esporádica de las temáticas de interés en espacios de tiempo más distantes. 2.2 Etapas de Methontology Las etapas adaptadas de Methontology para estructurar esta investigación son las presentes en la concepción de la ontología: 1) determinar el dominio y alcance de la ontología, 2) realizar las preguntas de competencia, y 3) enumerar los términos importantes para la revisión. En la primera parte se deben resolver cuatro interrogantes que ayudan a determinar el alcance en este caso de la revisión sistemática de la literatura, los cuales se observan en la Tabla 1. La segunda etapa consiste en bosquejar una lista de preguntas que la revisión debe ayudar a responder y que se describen en la Tabla 2. Tabla 1. Interrogantes para determinar el alcance de la revisión ¿Cuál es el dominio que la cubrirá ontología? El dominio definido para esta ontología es la adquisición de requisitos de software haciendo ingeniería inversa a las interfaces gráficas de usuario de aplicaciones heredadas. ¿Para qué se usará la ontología? La presente ontología tiene diversos propósitos, pero el más importante es determinar el estado del arte del dominio establecido para demostrar la existencia de un nicho investigativo. Generando una base de conocimiento en este dominio que pueda ser asequible a otros investigadores interesados en el área. ¿Para qué tipos de preguntas deberá proveer respuestas la información en la ontología? ¿Qué métodos o técnicas existen? ¿Cuáles herramientas existen? ¿Cuáles son los estudios más sobresalientes? ¿Cuándo se desarrollaron? ¿En qué consisten? ¿Cómo usan la ingeniería inversa? ¿Qué obtienen como resultado? ¿Quién usará y mantendrá la ontología? Inicialmente es para determinar un nicho investigativo para un próximo trabajo de los autores, sin embargo, queda como un producto disponible para todos los investigadores interesados en el área. Tabla 2. Preguntas que la revisión debe ayudar a responder ¿Qué es ingeniería inversa? ¿Qué es adquisición de requerimientos? ¿A qué tipo de software se pueden aplicar las técnicas encontradas? ¿Alguna técnica utiliza un análisis que involucre únicamente la parte visible de la GUI y de la forma en que esta interactúa con el usuario? ¿Cuándo se mencionó por primera vez la posibilidad de utilizar la ingeniería inversa de GUI para capturar requisitos de software? ¿Cuáles técnicas se puede reconocer, que utilicen el análisis de aplicaciones heredadas para recuperar requisitos o consideraciones de diseño? La tercera etapa es enumerar los términos importantes en la ontología, y se enfoca en encontrar los términos sobre los cuales se quiere hablar en la revisión, lo mismo que sus propiedades. En la Tabla 3 se muestra un extracto de esta lista de términos, clasificado cronológicamente y por documento consultado. Nombre Documento Reverse Engineering and Design: A Taxonomy Chikofsky, Elliot Cross, James Año 1990 Términos en inglés Forward Engineering Reverse Engineering of user interfaces Merlo, E 1993 Reverse engineering Design Recovery Restructuring Reengineering Redocumentation Specification language Method Girard, J F Kontogiannisl, I Panangaden, P Mori, R De Structural Representation Behavioural Representation Lifespan Reengineering UI AUIDL* User Actions System Responses Mapping out the behaviour Process-Algebraic Class Hierarchy based on Motif List of Equations 40 2.3 Registro de la información Finalmente, y usando como guía el producto anterior, se procede al registro cronológico y descriptivo de los hallazgos más significativos relacionados con el uso de la ingeniería inversa, en aplicaciones heredadas como herramienta para la obtención de requisitos de software. 3. Resultados 3.1 Primera Etapa: años 90 En los primeros años de esta década, Chicofsky y Cross [4] dedicaron su publicación a establecer claramente los principios taxonómicos de la ingeniería inversa. Para esa época no se podía aplicar exitosamente debido a la confusión que existía acerca de la terminología usada en campos técnicos y comerciales. En su documento precisan cinco términos involucrados en la comprensión y entendimiento de la ingeniería inversa: ingeniería directa, re-documentación, reestructuración, reingeniería y recuperación del diseño. Definen a la ingeniería inversa el proceso de analizar un sistema con el fin de identificar sus componentes y las interrelaciones entre ellos, y de crear una representación del sistema en otra forma o en un nivel más alto de abstracción [4]. Debido a esto, su trabajo se convirtió en la base para la mayoría de estudios citados en el presente análisis. Además, como el punto de partida para los estudios referentes a la ingeniería inversa o a la comprensión y entendimiento de un sistema heredado. En años posteriores a esta publicación se encuentran interesantes enfoques relacionados con la ingeniería inversa de aplicaciones. Durante ese periodo se presenta una transición de aplicaciones con interfaces de usuario, orientadas a caracteres, hacia aplicaciones con interfaces gráficas de usuario. Los investigadores se centran en la búsqueda de alternativas que permitan modernizar los grandes sistemas heredados, para alargar el tiempo del sistema y mejorar la experiencia del usuario. Aunque se visualiza el potencial de analizar interfaces gráficas de usuario para generar especificaciones, es evidente que para entonces no se consideraba viable aplicar ingeniería inversa a una interfaz gráfica de usuario. Sin embargo, cabe resaltar que ya se considera seriamente el análisis de interfaces para que la transición fuera más fácil de abordar, así como para el mantenimiento de las aplicaciones en uso. Entre los primeros enfoques de la década de los noventa se presenta un método para aplicar ingeniería inversa a las interfaces de usuario, donde se obtiene una representación de la interfaz, estructural y comportamental, con el fin de aplicarle reingeniería y prolongar el tiempo de vida del sistema [5, 6]. La idea era describir los aspectos dinámicos de la interfaz mediante una representación del comportamiento de la misma (interacción entre sus componentes), a través de un proceso algebraico. Todo se automatizaba mediante la implementación del lenguaje AUIDL (Abstract User Description Language). Este enfoque concluye que, a partir del análisis de interfaces de usuario heredadas y orientadas a caracteres, es posible generar especificaciones para interfaces gráficas de usuario simples, y que trabajos futuros pueden lograr aplicar este método a interfaces gráficas de usuario. Posteriormente, creció el interés por reversar las antiguas interfaces de usuario, con el fin de migrar o realizar mantenimiento de aplicaciones de una manera más sencilla. En [7] se aborda la idea de construir un modelo de la funcionalidad de la interfaz, a partir del análisis estático y dinámico del código fuente, y de desarrollar una técnica que permita automatizar este proceso. Durante esta época también tienen protagonismo los enfoques centrados en el análisis de los datos para recuperar distintos elementos de diseño, tales como el modelo relacional [8]; también para transformar el modelo relacional en un esquema relacional binario [9] e incluso para obtener requisitos para construir herramientas CASE, que permitan realizar la ingeniería inversa de aplicaciones centradas en los datos [10]. Otros enfoques proponen recuperar especificaciones a través del uso de técnicas de aprendizaje automatizado sobre las bases de datos que hacen parte de grandes sistemas heredados [11]. Apoyando estas iniciativas se desarrollaron trabajos relacionados con la implementación de aplicaciones que automatizan el proceso de ingeniería inversa de bases de datos, basados en la premisa de que hacer ingeniería inversa de la parte procedimental es más simple cuando ya se tienen los datos [12]. Para finales de la década, se proponen técnicas para la recuperación de elementos de diseño desde el análisis de sistemas heredados. Optando por el rescate de información, junto con técnicas de minería del conocimiento, como opción para aplicar ingeniería inversa a sistemas heredados. La diferencia fundamental es la visión basada en repositorios, que le permite al programador entender el modelo que está recuperando y encontrar una descripción de cómo han sido creados estos modelos [13]. Otros enfoques basados en el conocimiento detallado de la aplicación heredada, buscan facilitar la tarea de mantenimiento de estos sistemas. Ese conocimiento se extrae del código fuente y se relaciona con el vocabulario corporativo, los programas y los elementos de datos relevantes [14]. Otra temática importante es la transformación de las antiguas aplicaciones procedimentales a sistemas diseñados y construidos bajo el paradigma de los objetos, lo que se manifiesta con la existencia de trabajos de ingeniería inversa preocupados por identificar modelos (objetos y relaciones entre objetos) y de reconocer los objetos ocultos en las aplicaciones heredadas de carácter procedimental [15, 66]. Sin embargo, para este tiempo ya se empiezan a buscar soluciones de ingeniería inversa para aplicaciones construidas bajo el paradigma de los objetos. También se encuentran enfoques dedicados a la recuperación de la documentación arquitectónica a partir del código fuente. Para lograrlo se aplica análisis estático y dinámico del código [17]. Gracias al avance en el análisis dinámico, el trabajo dirigido a la recuperación de requisitos de sistemas heredados se direcciona al análisis y el modelando del comportamiento. Así mismo se fundamenta en la captura del comportamiento, el modelado del comportamiento dinámico, el mapeo de la interfaz y el modelamiento de la tarea del dominio [18, 19]. En esta primera etapa, el poco desarrollo de las interfaces gráficas no permite encontrar enfoques que se centren 41 únicamente en el uso de la interfaz gráfica de usuario para realizar un análisis de aplicaciones heredadas, porque la orientación de las técnicas es hacia el análisis del código fuente y los datos. Estos enfoques no buscan encontrar requisitos de los sistemas analizados, sino que pretenden determinar modelos del comportamiento de la interfaz, especificaciones de la interfaz y modelos de datos para inferir cierto conocimiento del dominio de la aplicación. Además, el uso de estas técnicas siempre requiere el acceso al código fuente o a los datos de la aplicación. 3.2 Segunda Etapa: 2000 – 2009 En este segundo periodo se presentan cambios importantes en las aplicaciones: el uso de la ingeniería inversa se diversifica hacia el análisis de aplicaciones que han sido concebidas únicamente para la web y requieren de nuevos métodos de ingeniería inversa; el uso del análisis dinámico tiene un fuerte auge; las técnicas buscan automatizar al máximo las tareas requeridas por la ingeniería inversa; y debido a la popularización de las aplicaciones construidas con una interfaz gráfica de usuario, se encuentran más trabajos encaminados a extraer información a partir del comportamiento y propiedades de la interfaz. Los primeros enfoques se basan en el uso de herramientas software que realizan el trabajo de analizar el sistema heredado de manera automatizada, que realizan el mapeo de la interfaz basándose en el registro de las trazas de la interacción del usuario con el sistema [20] y evolucionan hacia un análisis más complejo, que busca entender el comportamiento de sistema heredado y sus procesos y usos [21]. De esta manera se tiene como propósito recuperar las aplicaciones que los usuarios hacen del sistema, no se intenta recuperar los requisitos considerados en la etapa de diseño del sistema heredado y se resalta la dificultad de entender el código de aplicaciones heredadas. Es por esto que el proceso se basa en descubrir y modelar las tareas que logran frecuentemente los usuarios que usan el sistema [22]. Aunque algunos enfoques tratan específicamente de encontrar requisitos, en general buscan obtener modelos que representen distintos aspectos de la aplicación, con el fin de utilizarlos para pruebas automáticas, conocer la intención del sistema, realizar mantenimiento, migrar a otras tecnologías o recuperar el diseño de la misma. Los modelos recuperados muestran a través de arreglos la estructura que forman las ventanas de la aplicación y la relación jerárquica que hay entre ellas; la refactorización del código heredado se utiliza para extraer modelos de las metas del software; y el registro de las características interactivas y gráficas de la aplicación permite identificar acciones claves desarrolladas por los usuarios [23-25]. Hacia la segunda mitad de la década, las direcciones que toman los enfoques se diversifican ampliamente y algunos trabajos reconsideran la importancia y fortaleza del análisis del código fuente para obtener modelos. Los métodos propuestos tratan de adaptarse a las nuevas tecnologías, migrando las viejas interfaces orientadas a caracteres con el fin de extender el uso de los sistemas heredados hacia la web [26]. Sin embargo, ya existen aplicaciones heredadas desarrolladas con tecnologías orientadas completamente hacia los ambientes web. Este tipo de aplicaciones requiere nuevas técnicas a la hora de ser usadas en procesos de ingeniería inversa. Algunas obtienen modelos de presentación de una página web, analizando el código HTML, y explotan el conocimiento del negocio embebido en las interfaces de aplicaciones web dedicadas al comercio electrónico [27, 28]. A su vez, se trabaja en la recuperación del comportamiento del lado del cliente de Rich Internet Applications RIAs, usando análisis dinámico para obtener una Finite State Machine FSM que represente el modelo de comportamiento de la GUI. La idea es aprovechar al máximo las interfaces de usuario enriquecidas de estos sistemas, que se construyen con base en la interacción de los usuarios con la aplicación [2931]. Hay que mencionar que los enfoques de ingeniería inversa no se orientan únicamente hacia el tipo de aplicación como tal (en este caso web), sino que también se preocupan por extraer mayor información, teniendo en cuenta la tecnología con la cual está construida la aplicación heredada. En este caso las técnicas, dependientes o independientes del código fuente, se centran en analizar aplicaciones construidas bajo determinados paradigmas y lenguajes de programación. Entre ellas se encuentra el análisis de código de aplicaciones web desarrolladas en ASP.NET, C y C++. El enfoque que usa ASP.NET busca extraer un modelo conceptual de la aplicación, realizando el análisis estático del código contenido de los archivos .aspx y .cs, que contienen la lógica del sistema. Con el análisis de C y C++ se extraen las ventanas del programa, su estructura, atributos, los valores de estos atributos, los eventos y los manejadores de eventos asociados [32-33]. Lenguajes como Java, y su paquete gráfico Java-Swing, se estudian desde una orientación independiente del código fuente, para recuperar características comportamentales y estructurales con el fin de portar fácilmente las aplicaciones de escritorio a web [34, 35]. A partir de tecnologías como la Programación Orientada por Objetos, pero alejados de la interfaz gráfica, con el UML y la descripción de documentos mediante los esquemas XML, también se obtienen ventajas a la hora de la ingeniería inversa. UML, por ejemplo, es un lenguaje que permite representar múltiples aspectos de un sistema en un nivel más alto de abstracción, soportando modelos estructurales (análisis estático) y comportamentales (análisis dinámico). Desde esta perspectiva se propone recuperar diagramas de clases y reconstruir diagramas de secuencia [36, 37]. En cuanto a XML, la descripción de la estructura y las restricciones de los contenidos entregan un estándar para la presentación de datos, a partir de los cuales se busca recuperar diagramas conceptuales [38]. En esta segunda etapa, la diversificación de la tecnología y el amplio desarrollo de aplicaciones web muestran que es posible aplicar análisis inverso de diversas formas. En los primeros enfoques encontrados el interés de conocer el uso del sistema heredado se hizo evidente, sin embargo, a medida que se avanza en este periodo la diversificación en sí termina por llevar el interés hacia la tecnología en la que están construidas las aplicaciones, y no hacia el principio de reutilización del concepto, el conocimiento del dominio o los requisitos. 42 3.3 Tercera Etapa: 2010 – 2015 El avance tecnológico de las dos últimas décadas también influenció el desarrollo de técnicas para el análisis de interfaces gráficas de usuario; los enfoques de ingeniería inversa se han diversificado ampliamente y se presentan novedosos estudios que abordan el problema de ingeniería inversa de interfaces gráficas de usuario desde sus elementos estructurales más simples: los pixeles [39, 40]. Enfoques más complejos proponen no sólo usar una simple imagen de la interfaz, sino que dan un paso adelante y se basan en el análisis de un video de la interfaz gráfica, usando la diferenciación de fotogramas de video para identificar las ocurrencias de los comportamientos o movimientos de los componentes de la interfaz [41]. Durante este periodo, para los enfoques de ingeniería inversa de GUIs el tipo de modelos obtenidos cambia debido a múltiples razones: la tecnología de la aplicación sobre la cual se aplica la ingeniería inversa, el tipo de modelo que se desea obtener y las técnicas que se usan para abordar el problema. Por esto se encuentra un amplio espectro de técnicas con diversos fines. Algunos de los modelos encontrados son de tipo estructural, tanto de la aplicación (diagramas de clase) como de la GUI (máquinas de estado finitas); también se encuentran modelos de estado o comportamiento de la GUI y modelos con información descriptiva de los datos manejados por los controles de la GUI [42-45]. Sin embargo, es notoria la importancia dada a los modelos para la realización de pruebas, en especial de GUI, que se consideran como un proceso complejo y en algunos casos poco eficiente. Por lo tanto, los investigadores se centran en el uso de la ingeniería inversa de la GUI con el fin de encontrar modelos que hagan viable automatizar la generación de casos de prueba. En distintas técnicas se resalta la presencia de enfoques, dinámicos y estáticos, de la ingeniería inversa, así como el uso de inteligencia artificial [46] y la identificación de patrones de interfaz de usuario [47]. Los avances en la ingeniería inversa de GUI también se extienden hacia las aplicaciones heredadas, que en años anteriores fueron revolucionarias, como las creadas usando ambientes RAD, lenguajes de cuarta generación y sistemas de información web, y hacia la automatización de modelos de pruebas de aplicaciones móviles [48, 49]. Más recientemente el interés de la ingeniería inversa de interfaces gráficas de usuario se centra en el objetivo de la migración de aplicaciones hacia y entre plataformas móviles, debido a que el acceso a los sistemas web se realiza en gran medida a través de este tipo de dispositivos. Los investigadores proponen enfoques basados tanto en análisis dinámico como en análisis estático del código fuente. En [50] se propone un enfoque orientado a examinar una representación de la interfaz en tiempo de ejecución, usando Aspect Oriented Programming AOP, que obtiene un modelo genérico e independiente del lenguaje. También se encuentran enfoques basados en el análisis estático del código fuente, sin embargo, no se limitan al código de la interfaz en estudio, sino que integran la información obtenida a un repositorio existente, que contiene toda la información de los diferentes artefactos reversados (código fuente, bases de datos, interfaces de usuario etc.), y después transforma el modelo de la interfaz, representado en el repositorio, en un modelo de interfaz para Android [51]. En esta última etapa se presentan avances en el análisis de la interfaz gráfica, que son independientes del código fuente y que se preocupan por recuperar información estructural de la aplicación. A su vez, crece el interés por recuperar modelos para generar pruebas automáticas, la necesidad de migrar aplicaciones hacia nuevas tecnologías móviles y sigue vigente el análisis estático y dinámico del código fuente. Cabe resaltar que las capacidades tecnológicas, aumentadas por el desarrollo de hardware, permiten mayor automatización, sin embargo, la presencia de recuperación conceptual se disuelve en la cantidad de información encontrada y que termina siendo útil únicamente para ser interpretada de forma automatizada. 4. Conclusiones Debido a la baja incidencia de enfoques que se centren en realizar ingeniería inversa de GUIs para recuperar requisitos de software, los autores deciden presentar una síntesis sobre cuáles son los resultados que se obtienen en la variedad de técnicas desarrolladas y las tendencias que generan más interés en la ingeniería inversa de GUIs. En general, y de acuerdo a lo encontrado en la revisión de la literatura, se nota que el interés de reversar GUIs se concentra en la obtención de modelos que permitan la realización de migración y pruebas. A su vez, las técnicas evolucionan junto con la tecnología y la naturaleza de las aplicaciones que se proponen reversar. Inicialmente, el código fuente de las interfaces era la fuente más común para la aplicación de estas técnicas, pero actualmente la tecnología permite separar completamente el concepto de ingeniería inversa del código fuente y de los datos. Los enfoques propuestos, sin embargo, no invierten mucho esfuerzo en abordar la recuperación de conceptos, y la excesiva automatización convierte la ingeniería inversa más en un proceso de algoritmos y máquinas que en uno de comprensión más clara de un software existente o de un dominio determinado por los desarrolladores. Porque la mayoría de los modelos obtenidos son de difícil comprensión y, para lograr dar un uso adecuado, se necesitan especialistas para interpretar la información generada por dichas herramientas. En cuanto al interés de aplicar ingeniería inversa a las interfaces gráficas de usuario para encontrar requisitos de software, se encuentra la iniciativa presentada en [52], que pretende insertar la ingeniería inversa de aplicaciones heredadas en el ciclo de vida del software, integrando los requisitos clásicos con requisitos obtenidos por ingeniería inversa. También presenta la posibilidad de obtener requisitos a partir de los modelos gráficos proporcionados por procesos de ingeniería inversa. Sin embargo, y de acuerdo al análisis hecho en la presente revisión, esta iniciativa no tuvo incidencia en trabajos posteriores, pero es un amplio campo investigativo disponible para nuevas ideas y enfoques del uso de la ingeniería inversa de GUIs. Por otro lado, una de las tareas esenciales en la Ingeniería de Requisitos es el conocimiento del dominio de la aplicación, por lo que para los proyectos de ingeniería directa existen técnicas, métodos y herramientas 43 ampliamente conocidas. Sin embargo, para el caso de los proyectos de reingeniería de aplicaciones, los métodos encontrados en esta investigación se centran en el conocimiento del dominio a partir de esquemas de bases de datos, dejando un vacío en cuanto a las características del software. Esto motivó la búsqueda de técnicas de ingeniería inversa para la obtención de requisitos a partir de interfaces de usuario, porque son elementos de trabajo más cercanos a los desarrolladores. Los hallazgos permiten vislumbrar una oportunidad para convertir una práctica de facto en el desarrollo de software, el análisis de aplicaciones heredadas, en una técnica que permita derivar conocimiento del dominio de la aplicación desde las interfaces de software heredado. De esta manera se, disminuye la curva de aprendizaje que se requiere del dominio de aplicación por parte de los desarrolladores, potenciando la eficiencia de la Ingeniería de Requisitos, antes de realizar las entrevistas con clientes y usuarios finales de la aplicación, además, se optimiza la práctica de reutilización en el proceso de elicitación de requisitos. Referencias [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] Sommerville, I. (2011). Ingeniería del Software. México: Pearson Education. Bourque, P. & Dupuis, R. (2004). Guide to the Software Engineering Body of Knowledge SWEBOK. Online [May 2015]. Corcho, O., Fernández, M. & Gómez, A. (2005). Building Legal Ontologies with Methontology and WebODE. Lecture Notes in Computer Science 3369, pp. 142-157. Chikofsky, E. & Cross, J. (1990). Reverse Engineering and Design: A Taxonomy. IEEE Software 7(1 ), pp. 13–17. Merlo, E. et al. (1993). Reverse engineering of user interfaces. Proceedings IEEE Working Conference on Reverse Engineering (pp. 171–179). Baltimore, USA. Merlo, E. (1995). Reengineering User Interfaces. IEEE Software 12(1), pp. 64–73. Moore, M. (1996). Rule - Based Detection for Reverse Engineering User Interfaces. Proceedings Third Working Conference on Reverse Engineering (pp. 42-48). Monterey, USA. Chiang, R., Barron, T. & Storey, V. (1994). Reverse engineering of relational databases: Extraction of an EER model from a relational database. Data & Knowledge Enginnering 12(2), pp. 107–142. Shoval, P. & Shreiber, N. (1993). Database reverse engineering: From the relational to the binary relationship model. Data & Knowledge Enginnering 10(3), pp. 293–315. Hainaut, J. et al. (1996). Database reverse engineering: From requirements to CARE tools. Automated Software Enginnering 3(1), pp. 9–45. Cohen, W. (1994). Recovering software specifications with inductive logic programming. Proceedings Twelfth National Conference on Artificial Intelligence (pp. 142-148). Seattle, USA. Hainaut, J. & Englebert, V. (1995). Requirements for information system reverse engineering support. Proceedings 2nd Working Conference on Reverse Engineering (pp. 136–145). Toronto, Canada. Dayani, H. & Jurisica, I. (1998). Reverse engineering by mining dynamic repositories. Proceedings 5th Working Conference on Reverse Engineering (pp. 174–182). Honolulu, USA. Lee, B., Lee, J. & Kim, W. (1997). A knowledge-based maintenance of legacy systems: METASOFT. Expert Systems with Applications Expert 12(4), pp. 483–496. [15] Babiker, E. et al. (1997). A model for reengineering legacy expert systems to object-oriented architecture. Expert Systems with Applications 12(3), pp. 363–371. [16] Cimitile, A. et al. (1999). Identifying objects in legacy systems using design metrics. Journal of Systems and Software 44(3), pp. 199–211. [17] Richner, T. & Ducasse, S. (1999). Recovering high-level views of object-oriented applications from static and dynamic information. Proceedings IEEE International Conference on Software Maintenance (pp. 13-22). Oxford, UK. [18] Liu, K. et al. (1999). Requirements Recovery from Legacy Systems by Analysing and Modelling Behaviour Environment Observation of Human - Machine Interactions. Proceedings IEEE International Conference on Software Maintenance (pp. 3-12). Oxford, UK. [19] Stroulia, E. et al. (1999). Reverse Engineering Legacy Interfaces : an Interaction-Driven Approach. Proceedings. Sixth Working Conference on Reverse Engineering (pp. 292-302). Atlanta, USA. [20] El-Ramly, M. et al. (2001). Modeling the system-user dialog using interaction traces. Proceedings Eighth Working Conference on Reverse Engineering (pp. 208–217). Stuttgart, Germany. [21] Stroulia, E. & Systä, T. (2002). Dynamic analysis for reverse engineering and program understanding. ACM SIGAPP Applied Computing Review 10(1), pp. 8–17. [22] El-ramly, M. et al. (2002). Recovering Software Requirements from System-user Interaction Traces. Proceedings 14th international conference on Software Engineering and Knowledge Engineering (pp. 447–454). Ischia Island, Italy. [23] Memon, A., Banerjee, I. & Nagarajan, A. (2003). GUI ripping: Reverse engineering of graphical user interfaces for testing. Proceedings 10th Working Conference on Reverse Engineering (pp. 260–269). Victoria, Canada. [24] Yu, Y., Wang, Y. & Mylopoulos, J. (2005). Reverse engineering goal models from legacy code. Proceedings 13th International Conference on Requirements Engineering (pp. 363–372). La Sorbonne, France. [25] Chan K, Michail a. (2003) Design recovery of interactive graphical applications. ICSE '03 Proceedings of the 25th International Conf. on Software Engineering, pp. 114–124. [26] Moore, M. & Moshkina, L. (2000). Migrating legacy user interfaces to the internet: Shifting dialogue initiative. Proceedings seventh Working Conference on Reverse Engineering (pp. 52–58). Brisbane, Australia. [27] Vanderdonckt, J., Bouillon, L. & Souchon, N (2001). Flexible reverse engineering of web pages with VAQUISTA. Proceedings eighth Working Conference on Reverse Engineering (pp. 241–248). Stuttgart, Germany. [28] Zhang, Q., Chen, R. & Zou, Y. (2006). Reengineering User Interfaces of E-Commerce Applications Using Business Processes. Proceedings 22nd International Conference on Software Maintenance (pp. 428–437). Philadelphia, USA. [29] Amalfitano, D., Fasolino, A. & Tramontana, P. (2008). Reverse Engineering Finite State Machines from Rich Internet Applications. Proceedings 15th Working Conference on Reverse Engineering (pp. 69–73). Antwerp, Belgium. [30] Amalfitano, D. (2009). Experimenting a reverse engineering technique for modelling the behaviour of rich internet applications. Proceedings 2009 International Conference on Software Maintenance (pp. 571–574). Edmonton, USA. [31] Amalfitano, D., Fasolino, A. & Tramontana, P. (2010). An iterative approach for the reverse engineering of rich internet application user interfaces. Proceedings Fifth International Conference on Internet and Web Applications and Services (pp. 401–410). Barcelona, Spain. 44 [32] Katsimpa, T. et al. (2006). Application modeling using reverse engineering techniques. Proceedings 2006 ACM symposium on Applied computing (pp. 1250-1255). Dijon, France. [33] Staiger, S. (2007). Reverse Engineering of Graphical User Interfaces Using Static Analyses. Proceedings 14th Working Conference on Reverse Engineering (pp. 189–198). Vancouver, Canada. [34] Samir, H. & Kamel, A. (2007). Automated reverse engineering of Java graphical user interfaces for web migration. Proceedings 5th International Conference on Information and Communications Technology (pp. 157– 162). El Cairo, Egypt. [35] Samir, H., Stroulia, E. & Kamel, A. (2007). Swing2Script: Migration of Java-Swing Applications to Ajax Web Applications. Proceedings 14th Working Conference on Reverse Engineering (pp. 179–188). Vancouver, Canada. [36] Jain, A. & Tayal, D. (2008). On reverse engineering an objectoriented code into UML class diagrams incorporating extensible mechanisms. ACM SIGSOFT Software Enginnering Notes 33(5), Article 9. [37] Merdes, M., Heidelberg, D. & Dorsch, D. (2006). Experiences with the Development of a Reverse Engineering Tool for UML Sequence Diagrams : A Case Study in Modern Java Development. Proceedings 4th international symposium on Principles and practice of programming in Java (pp. 125– 134). Mannheim, Germany. [38] Necasky, M. (2009). Reverse Engineering of XML Schemas to Conceptual Diagrams. Proceedings Sixth Asia-Pacific Conference on Conceptual Modeling (pp. 117-128). Wellington, New Zealand. [39] Dixon, M. & Fogarty, J. (2010). Prefab: implementing advanced behaviors using pixel-based reverse engineering of interface structure. Proceedings 28th international conference on Human factors in computing systems (pp. 1525-1534). Atlanta, USA. [40] Dixon, M. (2013). Pixel-based reverse engineering of graphical interfaces. Proceedings 26th annual ACM symposium on User interface software and technology (pp. 29–32). St Andrews, UK. [41] Banovic, N. et al. (2012). Waken: Reverse engineering usage information and interface structure from software videos. Proceedings 25th Annual ACM Symposium on User Interface Software and Technology (pp. 83–92). Cambridge, USA. [42] Muhairat, M., Al-Qutaish, R. & Athamena, B. (2011). From graphical user interface to domain class diagram: A reverse engineering approach. Journal of Theoretical & Applied Information Technology 24(1), pp. 28–40. [43] Marchetto, A., Tonella, P. & Ricca, F. (2012). ReAjax: A reverse engineering tool for Ajax Web applications. IET Software 6(1), pp. 33-49. [44] Becce, G. et al. (2012). Extracting Widget Descriptions from GUIs. Lectures Notes in Computers Sciences 7212, pp. 347– 361. [45] Morgado, I. et al. (2012). GUI reverse engineering with machine learning. Proceedings First International Workshop on Realizing AI Synergies in Software Engineering (pp. 27–31). Zurich, Switzerland. [46] Lu, L, & Huang, Y. (2012). Automated GUI Test Case Generation. Proceedings 2012 International Conference on Computer Science and Service System (pp. 582–585). Nanjing, China. [47] Sacramento, C. (2014). Web Application Model Generation through Reverse Engineering and UI Pattern Inferring. Proceedings 9th International Conference on the Quality of Information and Communications Technology (pp. 105– 115). Guimaraes, Portugal. [48] Sánchez, R., Sánchez, J. & García, J. (2010). Model-driven reverse engineering of legacy graphical user interfaces. Proceedings IEEE/ACM International Conference on Automated Software Engineering (pp. 147-150). Antwerp, Belgium. [49] Yang, W., Prasad, M. & Xie, T. (2013). A grey-box approach for automated GUI-model generation of mobile applications. Lecture Notes on Computer Science 7793, pp. 250–265. [50] Shah, E. & Tilevich, E. (2011). Reverse-engineering user interfaces to facilitateporting to and across mobile devices and platforms. Proceedings of the compilation of the colocated workshops on DSM (pp.255–259). Portland, USA. [51] Pérez, R. et al. (2011). An empirical comparison of static and dynamic business process mining. Proceedings 2011 ACM Symposium on Applied Computing (pp. 272-279). Taichung, Taiwan. [52] Fahmi, S. & Choi, H. (2007). Software Reverse Engineering to Requirements. Proceedings International Conference on Convergence Information Technology (pp. 2199–2204). Gyeongju, China. 45