Uso de Ontologías para mapear una Arquitectura de Software con su Implementación H. C. Vázquez1,2 , J. A. Díaz Pace1,2 , and C. Marcos1,3 1 ISISTAN Research Institute. UNICEN University. Campus Universitario, Tandil (B7001BBO), Buenos Aires, Argentina. Tel.: +54 (249) 4439682. 2 Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET). 3 CIC, Committee for Scientific Research B1900AYB, La Plata, Argentina. Resumen La arquitectura de software de un sistema es un activo importante para una organización que desarrolla software. Para maximizar los beneficios que pro- vee una arquitectura, ésta debe estar en correspondencia con la implementación del sistema. En muchos proyectos existe cierta documentación de la arquitectura, pero sin embargo, la información de mapeos entre los elementos de dicha arqui- tectura y su implementación en código es escasa o inexistente. Este problema trae aparejadas dificultades de entendimiento de los elementos de código en relación a la arquitectura originalmente diseñada, lo que repercute negativamente sobre el aseguramiento de la calidad y los esfuerzos de mantenimiento del sistema. Si bien la provisión manual de estos mapeos es factible, es una tarea compleja y proclive a errores, particularmente a medida que la implementación del sistema evolu- ciona en el tiempo. En este contexto, las técnicas de alineación de ontologías se presentan como una alternativa para producir mapeos en forma automática. Por esta razón, el presente trabajo propone un enfoque automatizado y basado en on- tologías para la generación de mapeos entre la arquitectura de un sistema y su implementación. 1. Introducción La arquitectura de un sistema de software [3] se refiere a la organización de alto ni- vel del sistema, que comprende elementos de software, las propiedades externamente visibles de esos elementos, y las relaciones entre ellos. Una arquitectura de softwa- re [3] proporciona un modelo que hace explícitas las principales decisiones de diseño respecto a la satisfacción de atributos de calidad (por ej., performance, disponibilidad, modificabilidad, entre otros). A medida que un sistema evoluciona, comienzan a exis- tir discrepancias entre la arquitectura “según se documentó” y su implementación “en código” [10]. La acumulación de cambios (típicamente, en la implementación) tiende a “erosionar” la arquitectura inicial. Este problema impacta negativamente sobre los esfuerzos de mantenimiento y el aseguramiento de la calidad del sistema. Una práctica que permite mantener la arquitectura alineada (y consistente) con su implementación es la conformidad arquitectural [16]. Esta práctica se refiere a verificar periódicamente las relaciones entre los elementos arquitectónicos y sus contrapartes en la implementación, previniendo posibles violaciones de las reglas de arquitectura y re- parando aquellas que puedan existir. En la actualidad, existen varias herramientas que ayudan al arquitecto a desarrollar con la conformidad arquitectural (por ej., Archium [9], ArchJava [1]). Para esto, el prerrequisito es contar con mapeos entre los elementos 3URFHHGLQJRI6$2$&RS\ULJKW‹KHOGE\WKHDXWKRU V  Uso de Ontologías para mapear una Arquitectura de Software con su Implementación de la arquitectura (por ej., componentes, responsabilidades, escenarios) y los elementos de la implementación (por ej., paquetes, clases, métodos). Es habitual encontrar descrip- ciones de la arquitectura prevista del sistema, pero generalmente los mapeos entre dicha arquitectura y el código son escasos o inexistentes. Esto no permite capitalizar en los beneficios que provee la arquitectura. Si bien es factible que un arquitecto/desarrollador defina en forma manual los mapeos de la arquitectura a una versión dada del sistema, esta tarea suele ser compleja y requiere un análisis detallado de la implementación. Es- te problema se acentúa a medida que la implementación del sistema evoluciona en el tiempo. En este contexto, un enfoque alternativo para producir mapeos en forma automáti- ca son las técnicas de alineación de ontologías [6]. Una ontología es una formulación explícita de un esquema conceptual, que permite la abstracción de entidades y sus re- laciones dentro de una estructura determinada [8]. Si se considera la arquitectura de software como un representación conceptual del sistema, tanto la semántica de la ar- quitectura como el código correspondiente pueden ser utilizados para crear ontologías que representen sus conceptos y relaciones más importantes. En este trabajo se propo- ne la utilización de dos ontologías, una para representar la arquitectura y otra para su implementación. Estas ontologías pueden ser luego alineadas de forma automática para establecer correspondencias entre sus entidades. Dichas correspondencias proveen los mapeos entre elementos de la arquitectura y su implementación. El resto del trabajo se estructura de la siguiente manera. En la Sección 2 se presentan los aspectos más importantes del enfoque propuesto para la generación de mapeos. La Sección 3 discute algunos resultados de la evaluación del enfoque con casos de estudio. En la Sección 4, se analizan algunos trabajos relacionados. Finalmente, la Sección 5 presenta las conclusiones del trabajo y menciona trabajos futuros. Figura 1: Un enfoque para establecer mapeos entre elementos de la arquitectura y su implemen- tación. 2. Enfoque propuesto La ausencia de mapeos entre la arquitectura de un sistema y su implementación di- ficulta: el entendimiento del código en relación a su diseño arquitectónico original, el mantenimiento evolutivo del sistema y la práctica de chequeo de conformidad arquitec- 3URFHHGLQJRI6$2$&RS\ULJKW‹KHOGE\WKHDXWKRU V  Uso de Ontologías para mapear una Arquitectura de Software con su Implementación tural. Por esta razón, en este trabajo se propone un enfoque para la generación automá- tica de mapeos que permita identificar correspondencias entre elementos de la arqui- tectura y su implementación (Figura 1). A partir de una descripción de la arquitectura y del código fuente, se definen dos ontologías, denominadas “ontología arquitectóni- ca” y “ontología de la implementación”, respectivamente. Luego, estas dos ontologías son tomadas como entradas por el proceso de alineación, el cual tiene como objetivo encontrar las correspondencias entre ambas ontologías. Dicho proceso está compues- to por tres actividades: emparejamiento, cómputo de similitud y agrupamiento. En el emparejamiento, se generan todas las posibles parejas entre las entidades de las dos ontologías. A partir de este emparejamiento, se realiza el cómputo de similitud de cada pareja de entidades basándose en sus características. Luego del cómputo de similitud se realiza el agrupamiento de las parejas de entidades de acuerdo al grado de similitud pre- sentado entre estas. Finalmente, se selecciona como resultado de la alineación el grupo que posee parejas de mayor similitud, las cuales se presentan como salida al usuario. 2.1. Definición de las ontologías Una ontología es una especificación explícita de una conceptualización [8]. Algunas de las características más representativas de las ontologías que se adecuan a nuestro problema son: la capacidad de adaptarse a distintos niveles de abstracción, y la posi- bilidad de realizar correspondencias de ontologías estableciendo relaciones entre los elementos de una o más ontologías, para establecer conexiones, especializaciones, y generalizaciones, entre otras. En este trabajo, las ontologías son definidas a través del lenguaje OWL (Ontology Web Lenguage [14]). OWL tiene como objetivo proporcionar un lenguaje que puede ser utilizado para describir las clases y las relaciones entre ellas, que son inherentes a documentos y aplicaciones Web. Sin embargo, es un lenguaje que también puede ser utilizado para representar otros tipos de descripciones como, por ejemplo, la arquitectura de software y su implementación. A continuación, se presentan las definiciones de la ontología arquitectónica y la on- tología de la implementación. Notar que la generación de ambas ontologías se realiza en forma automática. Ontología arquitectónica Existen diversas formas de representar la arquitectura de un sistema y la relación entre sus componentes, este trabajo se basa en una vista parcial de la arquitectura denominada blueprint [11]. El blueprint es una vista de los componentes de alto nivel de un sistema y de sus interfaces hacia otros componentes. Un componen- te en esta vista arquitectónica representa una porción de código que tiene asignadas responsabilidades (o concerns) del sistema. Estos componentes son vistos como “cajas negras” y su interacción con el resto del sistema se realiza solo mediante sus interfa- ces. Las interfaces pueden ser provistas o requeridas, determinando así una forma de dependencia entre los componentes. La representación blueprint se traduce a una ontología utilizando el lenguaje OWL (Figura 2). Los componentes se representan como clases OWL:Class, la dependencia entre estos dada por las interfaces se traduce como propiedades OWL:ObjectProperty, y los concerns simplemente se traducen como strings utilizando OWL:DatatypeProperty. Por ejemplo, en la figura 2, los componentes 1 y 2 son traducidos a dos clases OWL homónimas, la “interface1to2” a una relación ObjectProperty, y los concerns a dos strings. 3URFHHGLQJRI6$2$&RS\ULJKW‹KHOGE\WKHDXWKRU V  Uso de Ontologías para mapear una Arquitectura de Software con su Implementación Ontología de la implementación La implementación de un sistema se lleva a cabo mediante la producción de código. Para poder realizar los mapeos, este trabajo se basa en código escrito en el lenguaje Java. El código Java se traduce a una ontología OWL (Figura 2). En esta traducción, las clases Java se representan como OWL:Class, las dependencias entre clases vía invocaciones a métodos se representan como propiedades de objetos OWL:ObjectProperty. Adicionalmente, también pueden informarse concerns de la misma forma que en la ontología anterior utilizando OWL:DatatypeProperty. Esto permite que un concern pueda ser asociado a una clase cuando exista información de trazabilidad. Por ejemplo, en la figura 2, las clases Java 1 y 2 son traducidas a dos clases OWL homónimas, la invocación a “method2” como una relación ObjectProperty, y en el caso de la clase 1, se informa el concern1 como string. Figura 2: Definición de las ontologías a partir de la representación del sistema. 2.2. Alineación de las ontologías A partir de las ontologías anteriores, es posible trazar una correspondencia entre los conceptos y relaciones de las mismas, lo que se conoce como alineación de ontologías [6]. La Figura3 muestra un pequeño ejemplo de arquitectura y su implementación. En la parte inferior se muestra la descripción (parcial) de un sistema dada por su blueprint y su implementación (vista como clases e invocaciones a métodos); y en la parte superior se muestra la representación ontológica de ambas. Emparejamiento El emparejamiento de entidades de las ontologías se refiere al pro- ducto cartesiano entre los componentes (de la arquitectura) y las clases (de la implemen- tación). Para el ejemplo de la Figura 3, el emparejamiento de entidades se observa en el Cuadro 1, donde los componentes GUI_Elements, Business_Rules y Data_Manager, son cruzados con las clases GUI_Adapter, BusinessManager, BusinessRule, Business- DataManager y DataObject. Para problemas complejos (en términos de tamaño de las ontologías), por cuestiones de performance, podría pensarse en una forma de limitar los emparejamientos con información adicional, no obstante, ese problema no será aborda- do en este trabajo. 3URFHHGLQJRI6$2$&RS\ULJKW‹KHOGE\WKHDXWKRU V  Uso de Ontologías para mapear una Arquitectura de Software con su Implementación Figura 3: Ejemplo de generación de ontologías a partir de la representación del sistema. Cómputo de similitud A cada par de entidades resultante de la fase anterior se le aplican funciones de similitud que lo evalúan de acuerdo a distintas propiedades. Este enfoque utiliza tres funciones de similitud (lingüística, de concerns, y estructural) para cubrir todos los aspectos en lo que dos entidades puedan ser comparadas. Cada función de similitud produce, para cada pareja de entidades, un valor entre 0 (baja similitud) y 1 (alta similitud) generando así una matriz de similitud.. El Cuadro 1 resume las tres matrices de similitud en una única matriz para los emparejamientos del ejemplo de la figura 3. GUI_Adapter BusinessManager BusinessRule BusinessDataManager DataObject L C E L C E L C E L C E L C E GUI_Elements 0.5 1,00 0.84 0.25 0,00 0.52 0.28 0,00 0,00 0.22 0,00 0,00 0.06 0,00 0,00 Business_Rules 0.0 0,00 0,00 0.63 1,00 1,00 1,00 1,00 0.38 0.6 0.66 0.49 0.23 0,00 0,00 Data_Manager 0.0 0,00 0,00 0.71 0,00 0,00 0.28 0,00 0.37 0.9 0.66 0.37 0.5 1,00 0.42 Cuadro 1: Similitud lingüística (L), de concerns (C) y estructural (E) para los elementos de la Figura 3. Similitud Lingüística Se basa en la comparación de los nombres de las entidades de las ontologías. Los nombres son divididos en palabras de acuerdo a espacios, guiones, y divisiones de mayúsculas, entre otros criterios. Una vez divididas las palabras, se obtie- ne una oración que es utilizada como entrada de la función de similitud. En particular, para el cálculo de similitud lingüística se evaluó el uso de tres técnicas: Greedy [19], Optima [19] y el método Corley Mihelcea [4], empleando para ello el API de similitud semántica SEMILAR [20]. Por ejemplo, en el Cuadro 1, puede observarse en la co- lumna L el valor de similitud lingüística entre las entidades usando el método Corley Mihelcea. 3URFHHGLQJRI6$2$&RS\ULJKW‹KHOGE\WKHDXWKRU V  Uso de Ontologías para mapear una Arquitectura de Software con su Implementación Similitud de Concerns Un concern de software es cualquier aspecto que impacte so- bre la implementación de un sistema de software [22], generalmente impactando sobre varios artefactos de software. Ejemplos típicos de concerns pueden ser aspectos de per- sistencia, seguridad, o performance. En nuestra representación, los concerns que afectan ciertos elementos de la arquitectura, también pueden a afectar a los elementos de códi- go que materializan dichos componentes. La ecuación 1 muestra el cálculo de similitud de concerns entre dos entidades E1 y E2, calculada como la suma de los concerns de E1 y E2, sobre la suma de los concern de E1 que se encuentran en E2 más la suma de los concerns de E2 que se encuentran en E1. Esta información es representada en la columna C del Cuadro 1. ∑ concernsE1 + ∑ concernsE2 Similitud(E1, E2) = (1) ∑ concernsE1enE2 + ∑ concernsE2enE1 Similitud Estructural Este tipo de similitud proviene de considerar las ontologías co- mo grafos dirigidos para poder analizar su estructura y determinar la correspondencia entre sus nodos. En base a esta característica, se utiliza el algoritmo de matching de gra- fos Similarity Flooding (SFA) [15]. El SFA toma dos grafos como entrada y produce como salida un mapeo entre los nodos de ambos grafos. Cabe destacar que el SFA uti- liza como entrada un mapeo inicial (o semilla), a fin de reducir su espacio de búsqueda. En este enfoque, para evitar la intervención del usuario, este mapeo inicial es resuelto utilizando las funciones de similitud lingüística y de concerns. Es decir, primeramente se buscan los mapeos para los cuales las funciones de similitud anteriores hayan pro- ducido un alto valor de similitud (muy cercano a 1), y se utilizan estos como semilla del SFA. Este proceso es descripto por el pseudocódigo 1. En la Cuadro 1, se puede observar en la columna E, el valor de similitud estructural usando el algoritmo SFA. Algoritmo 1 Pseudocódigo del proceso de similitud estructural. 1. G1 = Graph(Ontology1); 2. G2 = Graph(Ontology2); 3. initialMap = maxSimilarityMappings(G1, G2); 4. similarityMatrix = SFA(G1, G2, initialMap); Agrupamiento A partir de las matrices, se obtienen instancias de los pares de entida- des y sus valores de similitud. Finalmente, estas instancias son agrupadas mediante la utilización de una técnica de clustering [18] con el fin de reunir los pares de entidades de acuerdo a la similitud de sus características. Particularmente, se utilizó la técnica de clustering K-Means [2]. K-Means tiene como objetivo la partición de un conjunto de n observaciones en k grupos, en el que cada observación pertenece al grupo más cercano a la media. Para este trabajo, el resultado de la alineación es el clúster con la media más cercana a 1, que es presentado en última instancia al usuario, como mapeos entre componentes y clases. En la Figura 3, la línea punteada entre las entidades ex- pone la alineación final, por ejemplo entre el componente Data_Manager y las clases BusinessDataManager y DataObject 3URFHHGLQJRI6$2$&RS\ULJKW‹KHOGE\WKHDXWKRU V  Uso de Ontologías para mapear una Arquitectura de Software con su Implementación 3. Evaluación En el área de alineación de ontologías, se utilizan generalmente los criterios de pre- cision y recall evaluar la performance del sistema de alineamiento [5]. Estas medidas son definidas por las ecuaciones siguientes: (givenAlignment ∩ correctAlignment) Precision = (2) givenAlignment (givenAlignment ∩ correctAlignment) Recall = (3) correctAlignment Se denomina precision a la fracción de instancias recuperadas que son relevantes, mientras que recall es la fracción de instancias relevantes que han sido recuperadas. Además de estas dos medidas, se utilizó F-Measure como una medida armónica de precision y recall. Esta medida está definida por la siguiente ecuación: 2 ∗ Precision ∗ Recall F − Measure = (4) Precision + Recall F-measure es utilizada para evaluar qué tan lejos está la solución de la utilidad teóri- ca, y también para observar qué tan balanceadas están las medidas de precision y recall. Descripción HWS MM Líneas de código (LOC) 8697 3015 Componentes 7 25 Interfaces 14 70 Clases 135 51 Métodos 1090 251 Cuadro 2: Descripción de los proyectos HWS y MM Se utilizaron dos casos de estudio para validar el enfoque propuesto: i) el sistema Mobile Media (MM) [24] que es una SPL (Software Product Line) para aplicaciones móviles, y ii) el sistema Health Watcher (HWS) [13] que es un sistema para recoger y gestionar quejas y notificaciones relacionadas con la salud pública. Los mapeos de referencia para MM y HWS fueron provistos por expertos en forma manual, a fin de realizar comparaciones contra los mapeos obtenidos automáticamente mediante nuestro enfoque. En la Cuadro 2 se provee una descripción breve de ambos proyectos, tanto a nivel de arquitectura como de su implementación. Se experimentó con el enfoque en los dos casos de estudio, y se realizaron pruebas variando el valor K (cantidad de clusters) y la técnica de similitud lingüística, obtenien- do los resultados mostrados en la Cuadro 3. Estos resultados evidencian alrededor de K=20 un valor de f-measure superior al conseguido con otros K, lo que significa un mayor balance entre precision y recall. La técnica de similitud lingüística con la que el proceso de alineación arrojó resultados más precisos fue Greedy, con cerca del 95 % para K=20, mientras que el recall se mantuvo cerca del 50 %. Como era de esperar, para valores más altos de K=20 la medida precision aumenta, pero recall disminuye como puede observarse en la Figura 4. Esto se debe a que el aumento en el valor de K disminuye la cantidad promedio de instancias por cada clúster, lo que genera un trade- 3URFHHGLQJRI6$2$&RS\ULJKW‹KHOGE\WKHDXWKRU V  Uso de Ontologías para mapear una Arquitectura de Software con su Implementación MM HWS CorleyMihalcea Greedy Optimum CorleyMihalcea Greedy Optimum K P R F P R F P R F P R F P R F P R F 2 0,07 0,68 0,13 0,08 0,68 0,15 0,09 0,68 0,16 0,22 0,98 0,37 0,22 0,98 0,37 0,22 0,98 0,37 4 0,22 0,37 0,27 0,25 0,48 0,33 0,34 0,59 0,43 0,85 0,58 0,69 0,77 0,55 0,64 0,85 0,53 0,66 6 0,23 0,21 0,22 0,51 0,41 0,45 0,53 0,39 0,45 0,85 0,58 0,69 0,89 0,40 0,55 0,85 0,53 0,66 8 0,38 0,35 0,36 0,62 0,39 0,48 0,60 0,39 0,47 0,85 0,58 0,69 0,96 0,39 0,56 0,89 0,41 0,56 10 0,79 0,31 0,44 0,62 0,39 0,48 0,66 0,38 0,48 0,89 0,39 0,54 0,96 0,40 0,56 0,89 0,40 0,55 12 0,79 0,31 0,44 0,71 0,35 0,47 0,69 0,34 0,45 0,94 0,40 0,56 0,96 0,40 0,56 0,96 0,40 0,56 14 0,41 0,34 0,37 0,69 0,35 0,47 0,74 0,32 0,45 0,94 0,39 0,55 0,96 0,40 0,56 0,96 0,40 0,56 16 0,88 0,30 0,44 0,71 0,35 0,47 0,74 0,32 0,45 0,94 0,39 0,55 0,96 0,40 0,56 0,96 0,40 0,56 18 0,88 0,30 0,44 0,73 0,34 0,46 0,73 0,34 0,46 0,94 0,40 0,56 0,96 0,40 0,56 0,96 0,40 0,56 20 0,88 0,30 0,44 0,95 0,30 0,45 0,88 0,31 0,46 0,94 0,40 0,56 0,96 0,40 0,56 0,96 0,40 0,56 22 0,87 0,28 0,43 0,88 0,31 0,46 0,88 0,31 0,46 0,94 0,40 0,56 0,96 0,40 0,56 0,96 0,40 0,56 24 0,91 0,28 0,43 0,95 0,28 0,43 0,88 0,30 0,44 0,94 0,40 0,56 0,96 0,40 0,56 1,00 0,38 0,55 26 0,86 0,27 0,41 0,95 0,28 0,43 0,88 0,31 0,46 1,00 0,17 0,29 0,96 0,39 0,56 1,00 0,38 0,55 28 0,92 0,17 0,29 0,95 0,28 0,43 0,88 0,31 0,46 1,00 0,17 0,29 0,96 0,39 0,56 1,00 0,38 0,55 30 0,92 0,17 0,29 0,95 0,28 0,43 0,88 0,30 0,44 1,00 0,17 0,29 0,96 0,39 0,56 1,00 0,38 0,55 32 0,90 0,27 0,41 0,95 0,28 0,43 0,88 0,30 0,44 1,00 0,17 0,29 0,96 0,39 0,56 1,00 0,38 0,55 34 0,92 0,17 0,29 0,93 0,18 0,31 0,88 0,31 0,46 1,00 0,17 0,29 1,00 0,38 0,55 1,00 0,38 0,55 36 0,92 0,17 0,29 0,93 0,18 0,31 0,88 0,31 0,46 1,00 0,17 0,29 1,00 0,38 0,55 1,00 0,38 0,55 38 0,92 0,17 0,29 0,95 0,25 0,40 0,95 0,27 0,42 1,00 0,17 0,29 1,00 0,38 0,55 1,00 0,38 0,55 40 0,92 0,17 0,29 0,95 0,27 0,42 0,95 0,25 0,40 1,00 0,17 0,29 1,00 0,38 0,55 1,00 0,38 0,55 Cuadro 3: Resultados de precision (P), recall (R) y f-measure (F) de la herramienta de alineación. off entre precision y recall. Entre estas dos medidas se prioriza precision, dado que es más importante que los mapeos que se recuperen sean correctos, a que se recuperen muchos mapeos a costa de introducir incorrectos. Mapeos erróneos pueden dar lugar a razonamientos incorrectos sobre los análisis que puedan hacerse entre la arquitectura y su implementación. En la Figura 4 puede verse que los valores de precision, recall y f-measure tienden a estabilizarse más rápido en el proyecto MM que el HWS. Esto se debe a que la alineación depende exclusivamente de la correspondencia semántica entre las ontologías, y esta puede ser más evidente en algunos proyectos y más difusa otros. 1,00 1,00 0,90 0,90 0,80 0,80 0,70 0,70 MM HWS 0,60 0,60 P P 0,50 0,50 R R 0,40 0,40 F F 0,30 0,30 0,20 0,20 0,10 0,10 0,00 0,00 0 5 10 15 20 25 30 35 40 0 5 10 15 20 25 30 35 40 Figura 4: Gráfico de de precision (P), recall (R) y f-measure (F) para distintos valores de K (eje x) utilizando Greedy. 4. Trabajos relacionados Obtener un nivel de comprensión adecuado de la arquitectura de un sistema de soft- ware es importante por muchas razones [10]. En los últimos años, varias investigaciones han explorado el uso de técnicas de Inteligencia Artificial para recuperar la arquitectura 3URFHHGLQJRI6$2$&RS\ULJKW‹KHOGE\WKHDXWKRU V  Uso de Ontologías para mapear una Arquitectura de Software con su Implementación de un sistema a partir de su código fuente. En [17], se analizaron técnicas de Machi- ne Learning para condensar diagramas de clases en pos de obtener una representación de más alto nivel del diseño del sistema. Otros enfoques como [12] intentan recuperar la arquitectura del código fuente utilizando clustering. Un enfoque similar al anterior fue utilizado en [7], donde el interés está primero en la recuperación de concerns del sistema implementado, y luego junto a información estructural, se intenta identificar automáticamente componentes y conectores. Sin embargo, estos enfoques apuntan a recuperar la arquitectura desde la implementación en casos en los que no existe in- formación acerca de la arquitectura original del sistema. Este trabajo se centra en la recuperación de mapeos entre una arquitectura dada y la implementación del sistema, considerando que dicha arquitectura se conoce de antemano (ya sea porque existe algo de documentación, o porque se ha consultado a un experto). Por otro lado, Jing Sung et al. [21] plantean una descripción ontológica de una arquitectura representada por componentes y conectores, y exponen algunas de las ventajas de las ontologías como representación alternativa a los lenguajes de descripción de arquitecturas (ADLs). A partir de eso, proponen un enfoque de diseño y verificación de modelos de arquitec- turas de software usando tecnología de web semántica. Si bien en nuestro enfoque es posible aprovechar técnicas de razonamiento ontológico, el aporte del presente trabajo consiste en considerar la implementación del sistema como una ontología que se adecue a la ontología de la arquitectura, para luego obtener mapeos mediante la alineación de dichas ontologías. 5. Conclusiones En este trabajo se presentó un enfoque para la generación automática de mapeos entre elementos de una descripción arquitectónica y elementos de la implementación, apro- vechando técnicas existentes de alineación de ontologías. Una constribución novedosa del enfoque es la combinación de tres medidas de similitud (lingüística, de concerns y estructural). El enfoque fue evaluado en dos casos de estudio, obteniendo buenos resultados en cuanto a precisión aunque con un recall moderado. Por otra parte, se en- contraron puntos a mejorar en el proceso de alineación. Uno de estos refiere a la función de similitud estructural, cuando existen diferencias de tamaño entre los grafos corres- pondientes al blueprint y a la implementación Java, ya que el algoritmo SFA no está preparado para alinear grafos de tamaños muy dispares. Por lo tanto es necesario, como un paso previo a la alineación, llevar ambas representaciones a un nivel de abstrac- ción similar, o bien, experimentar con otros algoritmos. Otra posible mejora consiste en aportar más información estructural al proceso de alineamiento mediante la inclusión de una función de similitud basada en métricas de SNA (Social Network Analisys) [23]. Referencias 1. Aldrich, J., Chambers, C., Notkin, D.: Archjava: connecting software architecture to imple- mentation. In: Software Engineering, 2002. ICSE 2002. Proceedings of the 24rd International Conference on. pp. 187–197. IEEE (2002) 2. Arthur, D., Vassilvitskii, S.: k-means++: The advantages of careful seeding. In: Proceedings of the eighteenth annual ACM-SIAM symposium on Discrete algorithms. pp. 1027–1035. Society for Industrial and Applied Mathematics (2007) 3. Bass, L., Clements, P., Kazman, R.: Software Architecture in Practice. Addison-Wesley Pro- fessional, 3rd edn. (2012) 3URFHHGLQJRI6$2$&RS\ULJKW‹KHOGE\WKHDXWKRU V  Uso de Ontologías para mapear una Arquitectura de Software con su Implementación 4. Corley, C., Mihalcea, R.: Measuring the semantic similarity of texts. In: Proceedings of the ACL workshop on empirical modeling of semantic equivalence and entailment. pp. 13–18. Association for Computational Linguistics (2005) 5. Do, H.H., Rahm, E.: Matching large schemas: Approaches and evaluation. Information Sys- tems 32(6), 857–885 (2007) 6. Euzenat, J., Shvaiko, P., et al.: Ontology matching, vol. 18. Springer (2007) 7. Garcia, J., Popescu, D., Mattmann, C., Medvidovic, N., Cai, Y.: Enhancing architectural recovery using concerns. In: Proceedings of the 2011 26th IEEE/ACM International Confe- rence on Automated Software Engineering. pp. 552–555. IEEE Computer Society (2011) 8. Gruber, T.R.: A translation approach to portable ontology specifications. Knowledge acqui- sition 5(2), 199–220 (1993) 9. Jansen, A., Bosch, J.: Software architecture as a set of architectural design decisions. In: Software Architecture, 2005. WICSA 2005. 5th Working IEEE/IFIP Conference on. pp. 109– 120. IEEE (2005) 10. Kazman, R., Woods, S.G., Jeromy Carriere, S.: Requirements for integrating software ar- chitecture and reengineering models: Corum ii. In: Reverse Engineering, 1998. Proceedings. Fifth Working Conference on. pp. 154–163. IEEE (1998) 11. Kruchten, P.B.: The 4+ 1 view model of architecture. Software, IEEE 12(6), 42–50 (1995) 12. Maqbool, O., Babri, H.A.: Hierarchical clustering for software architecture recovery. Soft- ware Engineering, IEEE Transactions on 33(11), 759–780 (2007) 13. Massoni, T., Soares, S., Borba, P.: Requirements health-watcher version 2.0. Early Aspects, ICSE 7 (2007) 14. McGuinness, D.L., Van Harmelen, F., et al.: Owl web ontology language overview. W3C recommendation 10(10), 2004 (2004) 15. Melnik, S., Garcia-Molina, H., Rahm, E.: Similarity flooding: A versatile graph matching algorithm and its application to schema matching. In: Data Engineering, 2002. Proceedings. 18th International Conference on. pp. 117–128. IEEE (2002) 16. Moriconi, M., Qian, X., Riemenschneider, R.A.: Correct architecture refinement. Software Engineering, IEEE Transactions on 21(4), 356–372 (1995) 17. Osman, M.H., Chaudron, M.R., Van Der Putten, P.: An analysis of machine learning algo- rithms for condensing reverse engineered class diagrams. In: Software Maintenance (ICSM), 2013 29th IEEE International Conference on. pp. 140–149. IEEE (2013) 18. Rohlf, F.J.: NTSYS-pc: numerical taxonomy and multivariate analysis system. Applied Bios- tatistics (1992) 19. Rus, V., Lintean, M.: A comparison of greedy and optimal assessment of natural language student input using word-to-word similarity metrics. In: Proceedings of the Seventh Works- hop on Building Educational Applications Using NLP. pp. 157–162. Association for Compu- tational Linguistics (2012) 20. Rus, V., Lintean, M.C., Banjade, R., Niraula, N.B., Stefanescu, D.: Semilar: The seman- tic similarity toolkit. In: ACL (Conference System Demonstrations). pp. 163–168. Citeseer (2013) 21. Sun, J., Wang, H.H., Hu, T.: Design software architecture models using ontology. In: SEKE. pp. 191–196 (2011) 22. Sutton Jr, S.M., Rouvellou, I.: Modeling of software concerns in cosmos. In: Proceedings of the 1st international conference on Aspect-oriented software development. pp. 127–133. ACM (2002) 23. Wasserman, S.: Social network analysis: Methods and applications, vol. 8. Cambridge uni- versity press (1994) 24. Young, T.J.: Using aspectj to build a software product line for mobile devices. Ph.D. thesis, The University of British Columbia (2005) 3URFHHGLQJRI6$2$&RS\ULJKW‹KHOGE\WKHDXWKRU V