133
UNIVERSIDAD NACIONAL DE SAN LUIS FACULTAD CIENCIAS FÍSICO MATEMÁTICAS Y NATURALES Tesis para optar a la titulación de posgrado correspondiente a la Maestría en Ingeniería de Software Definición de Métricas en OCL según el Metamodelo de la OMG aplicadas al Diseño Orientado a Aspectos Lorena Soledad Baigorria Fernández Director: Dr. Daniel Riesco Co director: Mg. Ing. Germán Montejano San Luis 2010

Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

UNIVERSIDAD NACIONAL DE SAN LUIS

FACULTAD CIENCIAS FÍSICO MATEMÁTICAS Y NATURALES

Tesis

para optar a la titulación de posgrado correspondiente a la

Maestría en Ingeniería de Software

Definición de Métricas en OCL según el

Metamodelo de la OMG aplicadas al Diseño Orientado a Aspectos

Lorena Soledad Baigorria Fernández

Director: Dr. Daniel Riesco Co director: Mg. Ing. Germán Montejano

San Luis 2010

Page 2: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

Agradecimientos

A mi esposo e hijos por su apoyo incondicional. A mis directores por su dedicación. A mis compañeros de trabajo, en especial a Mg. Ana Garis, Esp. Mario Peralta y Esp. Carlos Salgado por su apoyo y amistad.

Page 3: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

Nada te turbe, Nada te espante

todo se pasa Dios no se muda

La paciencia todo lo alcanza

quien a Dios tiene nada le falta

Sólo Dios basta.

Santa Teresa

A.M.D.G.

Page 4: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

I

Índice de Contenidos

Índice de Figuras IV Índice de Tablas V Capítulo 1 Introducción 1 1.1. Introducción 11.2 Motivación 3 1.2.1 Modelado de Sistemas Orientados a Aspectos (OA) 3 1.2.2 Realización de Prueba 4 1.2.3 Comparación de OA con OO 5 1.2.4 Reingeniería OA 6 1.2.5 Verificación de modelos OA 61.3 Objetivos 81.4 Publicaciones derivadas del presente trabajo de tesis 81.5 Estructura de Informe 9 Capítulo 2 Desarrollo de Software Orientado a Aspectos 11 2.1 Introducción 112.2 Separación de concerns 122.3 Aspectos, puntos de enlace y puntos de corte 182.4 Ingeniería de software con aspectos 23 2.4.1 Ingeniería de requerimientos orientada por concerns 25 2.4.2 Análisis orientado a aspectos 27 2.4.3 Diseño orientado a aspectos 28 2.4.4 Implementación orientada a aspectos 32 2.4.5 Prueba orientada a aspectos 32 Capítulo 3 Métricas de Software 36 3.1 Introducción 363.2 Conceptos básicos de métricas 363.3 Proceso de creación de métricas 37 3.3.1 Modelo Alarcos para la obtención de métricas 383.4 Objetivos de las Métricas de Software 403.5 Métricas de software 41 3.5.1 Medición del Proceso 42 3.5.2 Medición del Proyecto 43 3.5.3. Medición del Producto 45 3.5.3.1 Métricas de Código fuente 45 3.5.3.2 Métricas de Complejidad 47 3.5.3.3 Métricas para sistemas OO 483.6 Herramientas de medición de software 533.7 Importancia de las métricas en el proceso 54

Page 5: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

II

Capítulo 4 Metamodelo de UML 2.3 56 4.1 Introducción 564.2 Arquitectura del lenguaje 56 4.2.1 Niveles de Modelado 56 4.2.2 Infraestructura 58 4.2.3 Modelos Estáticos 61 4.2.4 Mecanismo de extensión de UML 65 4.2.4.1 Ventajas 66 4.2.4.2 Elementos 66 4.2.5 OCL: Descripción y ventajas de su uso 68 4.2.5.1 Tipos básicos 71 4.2.5.2 Objetos y propiedades 71 4.2.5.3 OCL y el metamodelo UML 74 4.2.6 Sintaxis Abstracta de Perfil UML 74 4.2.6.1 Notación gráfica 79 4.2.6.2 Relación entre paquetes y perfiles 80 Capítulo 5 Definición de Métricas para el Diseño Orientado a Aspectos

82

5.1 Introducción 825.2 Extensión de UML 2.3 para sistemas OA 82 5.2.1 Participantes 84 5.2.3 Restricciones 86 5.2.4 Definición del perfil OA en la herramienta Papyrus 90 5.2.5 Generación automática de código AspectJ a partir del Perfil OA 935.3 Definición de Métricas Orientadas a Aspectos en OCL 95 5.3.1 Peso de método por Aspecto (PMA) 96 5.3.2 Profundidad del árbol de herencia (PAH) 96 5.3.3. Número de Hijos (NH) 97 5.3.4. Acoplamiento entre Aspectos (AA) 97 5.3.5. Dependencia entre Aspectos (DA) 98 5.3.6 Dependencia entre Clase-Aspectos (DCA) 99 5.3.7 Respuestas por Aspecto (RA) 99

5.3.8 Numero de Aspectos (NA) 99 5.3.9 Cantidad de operaciones de un aspecto (COA) 100 5.3.10 Cantidad de atributos de un aspecto (CAA) 101 5.3.11 Cantidad total de operaciones de un aspecto (CTO) 101 5.3.12 Cantidad total de atributos de un aspecto (CTA) 101 5.3.13 Tamaño de un aspecto (TA) 102 5.3.14 Indicación de herencia múltiple (HM) 102

5.3.15 Clases Tejidas 1025.4 Aplicación empírica de métricas en un diseño orientado a aspectos 103 5.4.1 Pool de conexiones de base de datos OA 104 5.4.2 Resultados y análisis de métricas 105 Capitulo 6 Conclusiones y Trabajos Futuros 110

Page 6: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

III

Referencias 113

Anexo A Restricciones del Perfil OA 118

Anexo B Métricas OA en Papyrus 121

Page 7: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

IV

Índice de Figuras Figura 2.1 Crosscutting Concerns 15Figura 2.2 Código mezclado de la administración de un buffer compartido 16Figura 2.3 Código diseminado en los métodos para implementar concerns secundarios

17

Figura 2.4 Aspecto autenticación de usuario 20Figura 2.5 Tejido de aspectos 22Figura 2.6 Núcleo del sistema con extensiones 24Figura 2.7 Enfoque orientado por punto de vista 26Figura 2.8 Casos de uso del sistema de administración de ambulancias 28Figura 2.9 Extensión de un Caso de Uso 28Figura 2.10 Proceso genérico de diseño orientado a aspectos 30Figura 2.11 Modelo de Diseño Orientado a Aspectos 31Figura 2.12 Modelo parcial de un aspecto 31Figura 3.1: Método Alarcos para la Definición de Métricas de Software 39Figura 3.2: Tipos de Entidades de Medición del Software 42Figura 4.1- Ejemplo de la jerarquía de metamodelos 58Figura 4.2 - Infraestructura UML 59Figura 4.3 Reutilización de “Core” 59Figura 4.4 Núcleo 60Figura 4.5 Class Diagrams 63Figura 4.6 Dependencies 65Figura 4.7 Perfil EJB 68Figura 4.8 Uso de operador “oclAsType()” 73Figura 4.9 Elementos definidos en el paquete Profile 75Figura 4.10 Ejemplo de aplicación de perfiles a un paquete 78Figura 4.11 Ejemplo de definición de un estereotipo 79Figura 4.12 Instancia de especificación de un estereotipo 79Figura 4.13 Ejemplo de relación de perfiles con paquetes 81Figura 5.1 Paquete Profiles de UML 2.3 83Figura 5.2 Definición de Perfil para Orientación de Aspectos 85Figura 5.3 (a) Metamodelo UML 2.3 (Class Diagrams) 89Figura 5.3 (b) Metamodelo UML 2.3 (Dependencies) 89Figura 5.4 Perfil OA en la Herramienta Papyrus 91Figura 5.5. Modelado de sistema 92Figura 5.6. Modelo que contiene un aspecto aislado (SaludoJapones) 93Figura 5.7 Transformaciones desde Perfil OA hasta código AspectJ 94Figura 5.8 Pool de conexiones de BD utilizando OA 104Figura 5.9 RA 105Figura 5.10 CAA 106Figura 5.11 DA 108Figura 5.12 ECT 109

Page 8: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

V

Índice de Tablas Tabla 3.1 Métricas MOOD aplicables a la fase de diseño 49Tabla 3.2 Métricas de Lorenz y Kidd 51Tabla 3.3 Métricas para complejidad estructural de diagramas de clase UML 52Tabla 4.1 Tipos básicos 71Tabla 4.2 Operaciones predefinidas 71Tabla 4.3 Notación gráfica de vínculos 80Tabla 4.4 Notación gráfica de estereotipos, metaclases y perfiles 80

Page 9: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

1

Capítulo 1

Introducción

1.1. Introducción

El desarrollo de grandes sistemas de software es una actividad que es abordada por la

ingeniería de software desde diferentes puntos de vista y en cada una de las fases de

desarrollo. Cada día surgen nuevas técnicas y metodologías que intentan mejorar la

calidad y la eficiencia del software.

El objetivo de la Ingeniería de Software es construir un producto de software o mejorar

alguno existente. Un proceso de desarrollo de software efectivo proporciona normas

para la construcción eficiente de software de calidad. Este proceso está compuesto, a

grandes rasgos, por cinco etapas: Requisitos, Análisis, Diseño, Implementación y

Prueba. La etapa de diseño tiene como propósito crear una abstracción de la

implementación, en el sentido de que la implementación es un refinamiento directo del

diseño. Esto permite la utilización de tecnologías como la generación de código y la re-

ingeniería entre el diseño y la implementación, entre otros. Es por esto que el diseño

detallado está directamente relacionado con los lenguajes de programación y en esta

etapa, se construyen modelos que dependen de ellos.

Por otro lado, uno de los principales problemas en el proceso de desarrollo de software

es el uso de grandes cantidades de tiempo y recursos. Aún con el incremento de la

automatización de diferentes actividades del desarrollo de software, los recursos son

escasos y costosos. Como consecuencia de esto y en la constante búsqueda de mejoras

en el desarrollo de sistemas de software, los investigadores y desarrolladores están

utilizando la orientación a aspectos (OA) en el proceso de desarrollo.

La orientación a aspectos surge a partir de la orientación a objetos (OO) tratando de

solucionar una de sus principales falencias. Si bien la OO es uno de los avances más

importantes en la ingeniería de software para la construcción de sistemas complejos

utilizando el principio de descomposición, y la reutilización, entre otros. Las

descomposiciones poseen el inconveniente de que muchas veces se tienen ejecuciones

ineficientes. Éstas surgen debido a que las unidades de descomposición no siempre van

acompañadas de un buen tratamiento de los aspectos tales como: sincronización, manejo

de errores y manejo de excepciones, administración de memoria y gestión de seguridad.

Page 10: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

2

Estos aspectos que entrecruzan y atraviesan todo el sistema no pueden ser totalmente

separados con las técnicas de OO.

Surge entonces la OA, la cual tiene como unidad principal el aspecto. Los aspectos

encapsulan los crosscutting concerns1 que afectan a distintos componentes del sistema,

es decir se encuentran en varias partes de un programa (por ej. manejo de excepciones)

de manera tal que se reduzca la dependencia, y aumente su reutilización.

La industria del software ha atravesado una serie de etapas a lo largo del tiempo, desde

el interés de seguir la moda, hasta el desarrollo rápido de calidad requerido en los

noventa. La calidad de software es un punto crucial en cualquier desarrollo serio. Para

determinar si un software es de calidad o no, se utilizan métricas de software las cuales

son también aplicables a otras áreas como prueba, administración y mantenimiento del

software.

En los últimos años existe un gran interés en las métricas de software debido a su

potencial para predecir el uso más eficiente de los recursos y mejorar la calidad. Se han

realizado una gran cantidad de trabajos relacionados a las métricas, en especial

aplicadas a la orientación a objetos y procedimentales [1,2], pero no para software

orientado a aspectos.

Las métricas de software son formas de calificar, entre otros, el diseño de software. Se

puede decir entonces que las métricas aplicadas a la OA son cruciales para determinar la

efectividad de su uso.

En un desarrollo de software de calidad se utilizan herramientas que permitan modelar y

documentar el mismo, siendo en la actualidad UML (Unified Modeling Language) un

estándar.

UML es un lenguaje que sirve para modelar la mayoría de los dominios, pero no todos

los dominios son factibles de ser modelados en este lenguaje. Es por esto que UML

provee mecanismos de extensión. Uno de las formas de extender dicho lenguaje es a

través de estereotipos. Un estereotipo amplía el vocabulario del UML, permitiendo crear

nuevos tipos de bloques de construcción parecidos a los existentes, pero específicos a

un problema. El uso de definición de estereotipos en la arquitectura de Perfiles del

estándar UML permite extender los modelos para diseños orientado a aspectos. Además

UML utiliza OCL (Object Constraint Language) para especificar las restricciones del

1 Crosscutting concerns: son los distintos requerimientos funcionales, necesidades, restricciones que debe cumplir un sistema. Además éstos se encuentran dispersos en el sistema atravesándolo. En el campo de la orientación a aspectos se utiliza la palabra en inglés ya que no hay una traducción concensuada.

Page 11: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

3

metamodelo UML en sus diferentes capas. OCL es un lenguaje que utiliza lógica de

primer orden y permite definir operaciones y restricciones de forma precisa.

Tanto el diseño como el modelado de sistemas ocupan un lugar importante en la

Ingeniería de Software. Los modelos brindan la posibilidad de abstraer sistemas y

facilitar la implementación. La construcción de buenos modelos asegura un correcto

desarrollo de la arquitectura del sistema.

Es imprescindible entonces contar con herramientas para evaluar la calidad del diseño,

es por esto que la definición de métricas específicas a la OA es indispensable. La

utilización para esto de estándares de la OMG (Object Management Group) como lo son

UML y OCL, las cuales son actualmente utilizadas por la mayoría de los

desarrolladores de software, provee las ventajas propias de los mismos. La definición de

métricas OA permitirá evaluar objetivamente el desarrollo de un producto de software

de manera tal que se logre aprovechar al máximo las ventajas de la OA.

1.2 Motivación

Este trabajo se enfoca en ayudar al ingeniero de software en el modelado de sistemas

orientados a aspectos, en particular en la etapa del diseño. Dado que esta etapa es la

más significativa en cuanto a estimaciones de recursos, la aplicación de métricas sería

muy provechosa [1, 2].

Como se dijo anteriormente la evolución continua del campo de la ingeniería de

software en pos de mejorar la calidad y el aprovechamiento de recursos, han surgido

nuevas tecnologías y metodologías para el desarrollo de software, como la Orientación a

Aspectos [3,4]. La OA es ampliamente utilizada para desarrollar software de alta

calidad, sin embargo la investigación de métricas aplicables a la misma es en la

actualidad muy escasa, la mayoría de los trabajos están enfocados hacia la

programación orientada a aspectos y no al Desarrollo de Sistemas Orientado a Aspectos

(DSOA).

En cuanto a la investigación existente acerca de la Orientación a Aspectos se pueden

distinguir algunas ramas principales. A continuación se presentan algunos de los

trabajos que las muestran.

1.2.1 Modelado de sistemas Orientados a Aspectos (OA)

El modelado se realiza usando una extensión de UML a través de diferentes técnicas, la

mayoría basadas en versiones anteriores a la actual versión de UML 2.3. Otros han

Page 12: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

4

definido perfiles para sistemas OA enfocados en la Programación Orientada a Aspectos

o en lenguajes de propósito específico.

a. Zakaira, en [5], realiza una extensión de UML para el desarrollo

orientado a aspectos, considerando que la temprana detección de los

aspectos minimiza la interdependencia de las clases y permite una

generación automática de código. En este trabajo, la extensión realizada

se basa en versiones anteriores de UML y no utiliza perfiles, como está

especificado a partir de UML 2.0, sino que realiza la extensión a través

del uso de metaclases. Es claro, en este trabajo, la ventaja de la extensión

de UML y la generación automática de código AspectJ a través de una

herramienta (CASE). Pero se debe considerar que la extensión se realizó

sin usar perfiles a pesar que ya existían como mecanismo de extensión de

UML.

b. Aldawud, en [6], aborda el problema de la definición de perfiles para

extender UML y modelar sistemas que utilizan lenguajes orientados a

aspectos como AspectJ, sin definirlo en forma clara o estructural. Trata

el problema a modo de discusión y considera los puntos a tener en cuenta

y la importancia de la detección temprana de los aspectos en sistemas

orientados a aspectos.

c. Zambrano, en [7], hace hincapié en la detección temprana de los aspectos

para encapsular los crosscutting concerns en etapas tempranas del

desarrollo de software. Propone una herramienta que permita de forma

automática detectar aspectos candidatos a través de un patrón de colores

para poder diferenciar los crosscutting concerns en los requerimientos

del sistema.

1.2.2 Realización de Pruebas

En estos trabajos realiza la definición de lotes de prueba de los puntos más débiles de la

OA, es decir una vez ya desarrollado el sistema no en etapas anteriores.

a. Xu, en [8] y Bradi, en [9] consideran las distintas debilidades de la

programación OA. Teniendo en cuenta que los aspectos afectan a una o

más clases, que participan en el desarrollo, surgen otro tipo de errores

además de los habituales. Por ejemplo la interacción y sincronización

entre la clase base y él o los aspectos que utiliza. Es por este motivo que

Page 13: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

5

se presentan en estos trabajos diferentes técnicas de prueba basadas en

los diagramas de estados de UML para comprobar que la interacción se

realice en tiempo y forma correcta.

b. Groher y Schuzle, en [10], presentan tres técnicas de prueba de

metamodelos (extensiones de UML). Una de ellas está basada en la

orientación a aspectos, detectando que si el modelado es realizado con

aspectos los errores se encuentran centralizados y las posibles soluciones

son más rápidas que en otras metodologías.

c. Quintero, en [11], muestra las ventajas del uso de la orientación a

aspectos con respecto a la reutilización de las clases base y de los

aspectos. Debido a esto la cantidad de pruebas disminuye notoriamente y

además las pruebas realizadas sobre un aspecto pueden reutilizarse para

probar otros, debido a sus similitudes.

1.2.3 Comparación de OA con OO

Se comparan las ventajas de OA con respecto al paradigma OO, mencionando cuáles

son las mejoras introducidas. Se consideran además algunas métricas, sin definirlas sólo

como comparación subjetiva.

a. Zhao, en [12], considera la medición del acoplamiento entre clases y

aspectos, el cuál debería disminuir. Afirmando que ésta métrica es la más

importante y propone diferentes estrategias o puntos a tener en cuenta

para disminuir el acoplamiento, sin medirlo, sólo sugiriendo que hacer

para disminuirlo. En este trabajo no se considera el modelado de

sistemas orientados a aspectos.

b. Baniassad, en [4], propone modelar los aspectos de un sistema en forma

separada e identificar los puntos de unión entre las clases base y los

aspectos. De esta manera se modela las clases bases por un lado y los

aspectos por otro. Aplica así las métricas OO a las clases base, sin

estimar los aspectos.

c. Shiu, Clarke y Baniassad, en [13], comparan la OO con la OA.

Consideran las similitudes y diferencias entre ambas y cómo el uso de

Aspectos disminuye distintas métricas. Se compara un sistema OO con el

mismo sistema desarrollado usando la OA. Se determina que distintas

métricas se favorecen con el uso de la OA, sin definir métricas

Page 14: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

6

específicas para la OA pero sí indicando las posibles mejoras de las

métricas OO en el sistema OA debido al uso de ésta.

1.2.4 Reingeniería OA

En estos trabajos se proponen técnicas o herramientas que ayudan al ingeniero de

software a realizar el paso de sistemas OO a sistemas OA. Se realiza ingeniería inversa

de los sistemas y se detectan los aspectos candidatos. Una vez identificados los posibles

aspectos se convierte el sistema OO a OA.

a. Abait, en [14], realiza la identificación de crosscutting concerns

candidatos a través de una herramienta que utiliza técnicas de

inteligencia artificial. Esta herramienta usa técnicas de entrenamiento de

redes neuronales. Se identifican los crosscutting concerns en el código

OO para de esta manera entrenar las redes neuronales y que ésta pueda

identificar posteriormente de forma automatizada otros en el código.

b. Marcos, en [15], propone un proceso de refactoring de sistemas OO a

OA. Utiliza redes neuronales para verificar si los crosscuting concerns

identificados son efectivamente aspectos. Se realizan diferentes

observaciones para obtener evidencias de que los concerns detectados

son aspectos. Una vez confirmado el aspecto se realiza el refactoring del

sistema.

c. Martín, en [16], propone un enfoque de OA para el desarrollo de sitios

Web. Este trabajo hace hincapié en que el desarrollo de aplicaciones

Web para mejorar la accesibilidad de los mismos. Propone un enfoque

orientado a aspectos para realizar la reingeniería de aplicaciones Web y

mejorar la accesibilidad para personas con discapacidad. Muestra una

comparación entre las reingeniería OA con otras técnicas de reingeniería

utilizadas en aplicaciones Web y las ventajas que surgen de la aplicación

de esta nueva metodología.

1.2.5 Verificación de modelos OA

Otra rama que ha empezado a investigarse es la verificación formal de modelos OA.

a. Mostefaoui, en [17,18], propone una verificación formal de modelos

UML OA utilizando Alloy, un lenguaje de modelado estructural basado

en lógica relacional. Esta tarea se realiza debido a que es difícil predecir

Page 15: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

7

el comportamiento de los aspectos una vez que éstos son tejidos en las

clases base. Muchas veces los aspectos tejidos no cumplen con el

propósito para el que fueron definidos. Es por esto que a partir de un

modelo OA realiza una traducción a Alloy para verificar el SOA. El

autor presenta una herramienta que permite realizar en forma automática

la verificación.

b. Ubayashi, en [19], provee un enfoque de verificación lightweight para

arquitecturas OA utilizando Alloy. Propone un método de verificación

para el chequeo de corectitud del tejido de un programa orientado a

aspectos. A través del analizador Alloy automatiza el chequeo una vez

realizado el modelo OA.

Luego del análisis de los diferentes trabajos encontrados, es llamativa la carencia de

definiciones formales o semi formales de métricas aplicables al diseño orientado a

aspectos. Considerando que las métricas son herramientas objetivas que permiten

calificar el desarrollo de software y ayudan a los diseñadores a decidir la viabilidad del

proyecto es importante su utilización.

Se puede observar que el mayor esfuerzo de investigación está en destacar las ventajas

que provee la OA sin realizar una valoración objetiva de los desarrollos que la

implementan.

En este trabajo se propone una serie de métricas precisas para sistemas OA las cuales

permitirán al ingeniero de software evaluar objetivamente el diseño realizado. Además

se utiliza para la definición de estas métricas estándares de la OMG. Considerando

también la tendencia actual de utilizar el enfoque MDA (Model Driven Architecture) el

cual se utiliza para el desarrollo de software dirigido por modelos propuesto también

por la OMG, la utilización de perfiles permite enmarcarse en el mismo. Esto se debe a

que MDA sostiene que a partir de un modelo de alto nivel de abstracción se llegue a

código ejecutable a través de transformaciones. MDA consta principalmente de tres

vistas [20]:

- CIM (Computation Independent Model): descripción de la lógica del negocio

desde una perspectiva independiente de la computación

- PIM (Platform Independent Model) descripción de la funcionalidad del sistema

en forma independiente de las características de plataformas.

Page 16: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

8

- PSM (Platform Specific Model) descripción del sistema en términos de una

plataforma. A partir del cual debería ser posible la generación automática de

código fuente.

Si se tiene en cuenta que en este trabajo se enfoca en la orientación a aspectos se puede

situar el mismo en la vista PIM.

1.3 Objetivo

Esta tesis tiene varios objetivos basados en la situación actual de la OA en la ingeniería

de software.

1) Definir una extensión precisa de UML para el modelado de sistemas orientados

a aspectos.

Las extensiones existentes de UML para OA no proveen una definición precisa de las

restricciones que debe cumplir un modelo OA. Es por esto que como parte de este

trabajo se define una extensión de UML a través de perfiles y especificando la

semántica de los elementos que lo componen con OCL.

2) Definir métricas aplicables al desarrollo de software en la fase de diseño para

sistemas Orientados a Aspectos (OA), utilizando el lenguaje Object Constraint

Language (OCL), basándose en la extensión de UML para OA.

Definir métricas específicas para sistemas OA utilizando lenguajes estándares como lo

son UML y OCL. Se definen métricas a partir de la extensión del metamodelo de UML.

Esta definición se realiza utilizando la lógica de primer orden provista por OCL.

3) Aplicar el perfil y las métricas propuestas en este trabajo.

Realizar una aplicación práctica del perfil OA, en alguna herramienta actual. Calcular

las métricas OA sobre modelos OA. Describiendo en particular un caso de estudio.

1.4 Publicaciones derivadas del presente trabajo de tesis

Es importante destacar que se han realizado y publicado diferentes trabajos relacionados

a la temática abordada en esta tesis de maestría como así también la aplicación de la

extensión de UML para sistemas orientados a aspectos.

A continuación se listan los trabajos relacionados publicados por el autor de este trabajo

de tesis:

Page 17: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

9

- Baigorria L. - Montejano G. - Riesco D.; “Definición y Aplicación de Perfil UML para

AspectJ”; ASSE; 39 Jornadas Argentinas de Informática; 2010.[21]

- L. Baigorria, G. Montejano, D. Riesco, C. Abdelahad, N. Perez, "Definición del

Diseño Orientado a Aspectos según el Metamodelo de la OMG", XV Congreso

Argentino de Ciencias de la Computación, 2009. [22]

- N. Debnath, L. Baigorria, D. Riesco, G. Montejano, “Metrics Applied to Aspect

Oriented Design using UML Profiles”, IEEE 13TH Symposium on Computers and

Communications 2008. [23]

- L. Baigorria, G. Montejano, D. Riesco, “Metricas C&K Aplicadas al Diseño Orientado

a Aspectos”, XII Congreso Argentino de Ciencias de la Computación, 2006. [24]

- L. Baigorria, D. Riesco, G. Montejano, “Métricas Aplicadas a la Programación

Orientada a Aspectos" WICC2006 en Morón (Argentina), Anales del VIII Workshop de

Investigadores en Ciencias de la Computación. [25]

- N. Debnath, D. Riesco, G. Montejano, R. Uzal, L. Baigorria, A. Dasso, A. Funes, "A

Technique Based on the OMG Metamodel: A Definition of Object Oriented Metrics

applied to UML Models", The 3rd ACS/IEEE International Conference on Computer

Systems and Applications, 2005.[26]

1.5 Estructura de Informe

El informe se ha estructurado en seis capítulos, el contenido de cada uno de ellos se

describe brevemente en los siguientes párrafos.

En el capítulo 1 se explican las motivaciones, objetivos y marco en el cual se realiza el

presente trabajo de tesis de maestría.

En el capítulo 2 se explica la Orientación a Aspectos desde Programación Orientada a

Aspectos (POA) hasta el desarrollo de sistemas siguiendo la metodología OA. Además

se explican los conceptos claves de la misma.

En el capítulo 3 se explican las métricas de software. La utilidad de las mismas y cuales

son los posibles usos. Cómo se definen y cuál es su importancia en el desarrollo de

Page 18: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

10

software con calidad. También se detallan los diferentes tipos de métricas (producto,

proceso, proyecto) existentes.

En el capítulo 4 se explica el Metamodelo de UML 2.3 publicado en mayo de 2010.

Muestra sus componentes básicos, modelos, arquitecturas. Se describe también Object

Constraint Language (OCL 2.2) el cual es parte de UML desde la versión 2.1.

En el capítulo 5 se presentan las métricas definidas en OCL a partir de la extensión de

UML con un Perfil OA. Se analiza y compara la importancia de las mismas con

respecto a la OA. Se muestra además las diferencias esperables en los valores de las

métricas con respecto a los sistemas desarrollado siguiendo la OO.

En el capítulo 6 se muestran las conclusiones alcanzadas en el estudio de la orientación

a aspectos así como la importancia del uso de métricas para su evaluación. Además se

proponen trabajos futuros relacionados a la tesis presentada. Considerando que la

orientación a aspecto es un tema de investigación nuevo en comparación con otras

metodologías de desarrollo surgen una gran variedad de trabajos. Estos posibles trabajos

están enfocados en ayudar al ingeniero de software en el desarrollo de sistemas OA.

Page 19: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

11

Capítulo 2

Desarrollo de Software Orientado a Aspectos

2.1 Introducción

En la mayoría de los grandes sistemas, la relación entre los requerimientos y los

componentes es compleja. Un requerimiento puede implementarse por varios

componentes y cada componente puede incluir elementos de muchos requerimientos.

Esto significa que implementar un cambio en un requerimiento puede involucrar

conocer y modificar varios componentes. Por este motivo la reutilización de

componentes puede resultar difícil ya que éstos no implementan una sola abstracción

del sistema sino que incluyen fragmentos de código de otros requerimientos.

El desarrollo de software orientado a aspectos, es un nuevo enfoque para el desarrollo

de software que intenta manejar éstos problemas y así hacer programas más fáciles de

mantener y reutilizar. El desarrollo de software orientado a aspectos (DSOA) se basa en

un nuevo tipo de abstracción llamado aspecto. Los aspectos se utilizan a lo largo de

otras abstracciones como objetos y métodos. Éstos encapsulan funcionalidades que

atraviesan y co-existen con otras funcionalidades que están incluidas en el sistema. Un

programa ejecutable orientado a aspectos se crea por la combinación automática (tejido)

de objetos, métodos y aspectos, de acuerdo a una especificación que es incluida en el

código del programa.

El beneficio clave del enfoque orientado a aspectos es que soporta la separación de

concerns. La separación de concerns, en elementos independientes, es una buena

práctica en la ingeniería de software porque evita incluir diferentes concerns en la

misma abstracción lógica. Si se representan los crosscutting concerns como aspectos,

estos conceptos pueden ser entendidos, reutilizados y modificados independientemente.

Por ejemplo, suponga que la autenticación de usuario se represente como un aspecto que

requiere un nombre de usuario y una contraseña. La autenticación de usuario es tejida

automáticamente en el programa cuando sea necesaria.

Una característica importante de los aspectos es que incluyen una definición de dónde

deben ser incluidos en el programa, así como el código que implementa los crosscutting

concerns. Se puede especificar entonces dónde el código que atraviesa el programa

debería ser incluido, si antes o después de la llamada al método o cuando un atributo es

Page 20: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

12

accedido. Los aspectos son tejidos en el núcleo del programa para crear un sistema

enriquecido.

Por ejemplo, suponga que, en los requerimientos, la autenticación de usuario es

necesaria antes de cualquier cambio en los datos personales de la base de datos. Se

podría especificar esto como un aspecto, diciendo que el código de autenticación debe

incluirse antes de cada llamada a los métodos que actualizan los datos personales. De

ser necesario, se puede extender este requerimiento a todas las actualizaciones de la

base de datos. Esto puede ser implementado fácilmente modificando el aspecto,

cambiando la definición de dónde el código de autenticación es tejido en el sistema. De

esta manera no es necesario buscar en el código todas las ocurrencias de estos métodos,

lo que puede llevar a cometer errores o introducir vulnerabilidades en la seguridad del

sistema.

El desarrollo e investigación de la orientación a aspectos se enfocó en una primera etapa

en la programación orientada a aspectos (POA). Lenguajes de programación orientados

a aspectos (LOAs) como AspectJ [27, 28, 29] se han desarrollado para extender la

programación orientada a objetos de manera tal que incluyan aspectos. Algunas

compañías como IBM, están utilizando la POA en el proceso de desarrollo de software

[30]. Sin embargo, no se reconoce que los crosscutting concerns sean igualmente

problemáticos en otras etapas del proceso de desarrollo de software. Los investigadores

trabajan ahora en cómo utilizar la orientación a aspectos en los requerimientos del

sistema, en el diseño del sistema y en como probar y verificar los programas orientados

a aspectos.

El desarrollo de software orientado a aspectos (DSOA) no es aún parte principal de la

ingeniería del software. Aún no existen prácticas o convenciones para el DSOA y

tomará varios años de experiencia práctica para que éstos surjan. Actualmente las

tecnologías se enfocan en los beneficios y en intentar solucionar algunos de los

problemas o costos.

En este capítulo se mostrarán los conceptos claves de la OA y los problemas que surgen

al aplicar esta metodología de desarrollo. Se explicará también cómo la OA influye en

las distintas etapas de desarrollo de software.

2.2 Separación de concerns

La clave principal del diseño y la implementación de sistemas de software es la

separación de concerns.

Page 21: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

13

Básicamente esto significa organizar el software de manera tal que cada elemento del

programa (clase, método, procedimiento, etc.) pueda realizar una y sólo una tarea. De

esta manera es posible enfocarse en este elemento sin considerar los demás elementos

del programa. Se pueden entender los concerns de un elemento sin la necesidad de

entender los demás elementos del programa. Cuando se requiere un cambio las

modificaciones se encuentran localizadas en pocos elementos.

La importancia de la separación de concerns fue detectada en etapas muy tempranas de

la historia de la ciencia de la computación. Las subrutinas, que encapsulaban una unidad

de funcionalidad y la estructuración de programas a través de procedimientos y objetos,

se inventaron en los 50’s, desde entonces se ha diseñado mecanismos para obtener una

mejor separación de concerns. Sin embargo, todos estos mecanismos tienen problemas

con cierto tipo de concerns que están dispersos en otros conceptos. Los aspectos se han

inventado para ayudar a manejar estos crosscutting concerns.

La separación de concerns es una buena práctica en el desarrollo de software pero es

difícil establecer a qué se refiere cuando se habla de un concern. A veces se lo define

como una noción funcional donde el concern es algún elemento funcional del sistema;

también se lo puede definir de manera muy amplia diciendo que es cualquier pieza o

punto de interés en un programa. Pero ninguna de estas definiciones es realmente útil.

Los concerns son más que simples elementos funcionales y la definición general es

realmente inútil.

Además estas definiciones de concerns intentan unir los aspectos con el programa. Pero

los aspectos son el reflejo de los requerimientos del sistema y las prioridades de los

stakeholders1 del sistema [31]. La performance del sistema puede ser un concern porque

los usuarios quieren una rápida respuesta del sistema; algunos stakeholders pueden

requerir alguna funcionalidad particular del sistema; las compañías que tienen el sistema

pueden requerir que sea fácil de mantener. Un concern es algo que es de significancia

para un stakeholder o para un grupo de stakeholders.

Con esta visión de aspectos, se puede observar porque el enfoque de separación de

concerns, en diferentes elementos del programa, es una buena práctica. Es más fácil

seguir los concerns, que se expresan como un requerimiento o un conjunto de

requerimientos, y los componentes del programa que implementan estos concerns. Si

los requerimientos cambian la parte del programa que se debe modificar es obvia.

1 Stakeholder: es cualquier persona que tenga algún interés y/o participación en el desarrollo del sistema. Por ejemplo: diseñadores, arquitectos, usuario final, cliente, organización, etc.

Page 22: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

14

Hay diferentes tipos de concerns [32]:

1- Concerns funcionales: los que están relacionados a funcionalidades específicas

que deben incluirse en un sistema. Por ejemplo, en un sistema de control de

vuelo, un interés funcional es aterrizar el avión.

2- Concerns de calidad de servicio: los que se relacionan al comportamiento no

funcional del sistema. Esto incluye características como performance,

confiabilidad y disponibilidad.

3- Concerns de reglamentación o políticas organizacionales: los que se relacionan a

todas las reglas que gobiernan el uso del sistema. La regulación incluye

seguridad e intereses relacionados a las reglas de negocio.

4- Concerns del sistema: los que se relacionan a atributos del sistema como un

todo, como su mantenimiento y configuración.

5- Concerns organizacionales los que se relacionan a las metas y prioridades de la

organización como producir un sistema sin errores, reusar software existente o

mantener la reputación de la empresa.

Los concerns básicos del sistema son aquellos concerns funcionales que están

relacionados a su propósito principal. Por esto, para un sistema de información de

pacientes de un hospital, los concerns básicos son la creación, edición, devolución y

manejo de los registros de los pacientes. Además de los concerns básicos, la mayoría de

los grandes sistemas tienen funcionalidades secundarias. Éstas pueden ser

funcionalidades que comparten información con los concerns básicos o requerimientos

no funcionales del sistema.

Como un ejemplo de un requerimiento no funcional, considere un sistema que tenga el

requerimiento de proveer acceso concurrente a un buffer compartido. Éste es el caso de

procesos productores-consumidores, donde el productor coloca datos en el buffer y el

consumidor saca los datos del buffer. Sin embargo, para evitar que los procesos

interfieran entre si, hay un concern secundario esencial de sincronización. El sistema

debe diseñarse de manera tal que el proceso productor no sobre escriba los datos que

aún no han sido consumidos. Y que el proceso consumidor no pueda acceder a un buffer

vacío.

Además de la sincronización, otros concerns relacionados a la calidad de servicio y

políticas organizacionales reflejan requerimientos esenciales del sistema. En general,

estos concerns son intereses del sistema (se aplican al sistema como un todo y no como

Page 23: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

15

si fueran requerimientos individuales o la realización de estos requerimientos en un

programa).

Se llamará a los concerns que son transversales al sistema, crosscutting concerns, para

distinguirlos de los concerns básicos. Los concerns funcionales secundarios pueden ser

también concerns transversales aunque no atraviesen todo el sistema; están asociados

con un grupo de concerns básicos que proveen la funcionalidad correspondiente.

En la figura 2.1 se muestra un ejemplo de un sistema de Homebanking. Este sistema

tiene requerimientos relacionados a los usuarios como consulta de saldo y verificación

de domicilio. También tiene requerimientos relacionados al manejo de usuarios

existentes y al manejo de las cuentas de los mismos. Todos estos son concerns básicos

que están asociados con el propósito principal del sistema. Sin embargo, el sistema tiene

también requerimientos de seguridad basados en las reglas de seguridad del banco y

requerimientos de recuperación, para asegurar que no se pierden datos en el caso de

falla del sistema. Estos crosscutting concerns pueden influenciar la implementación de

todos los demás requerimientos del sistema.

Las abstracciones de los lenguajes de programación como los procedimientos y las

clases son mecanismos que se utilizan para organizar y estructurar los concerns básicos

de un sistema. Sin embargo, la implementación de los concerns básicos en lenguajes

Figura 2.1 Crosscutting Concerns

convencionales de programación, generalmente incluyen código adicional que

implementan estos crosscutting concerns funcionales, de calidad de servicio y políticas

Requerimientos de Seguridad

Requerimientos de Recuperación

Req. de Nuevo Usuario

Req. de Cuenta Req. de Administración Usuario

Crosscutting Concerns

Intereses básicos

Page 24: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

16

organizacionales. Esta solución lleva a dos fenómenos indeseables: código mezclado o

código diseminado.

El código mezclado ocurre cuando un módulo del sistema incluye código que

implementa diferentes requerimientos del sistema. Por ejemplo, la figura 2.2, muestra el

código mezclado que implementa la sincronización de un buffer. El código que

implementa el concern básico (en este caso colocar un registro en el buffer), está

mezclado con el código que implementa la sincronización. El código de sincronización

que está asociado con el concern secundario de asegurar la exclusión mutua debe

incluirse en todos los métodos que acceden al buffer compartido. El código asociado

con el interés de sincronización se muestra sombreado en la figura 2.2.

Figura 2.2 Código mezclado de la administración de un buffer compartido

El fenómeno de código diseminado ocurre cuando la implementación de un único

concern (un requerimiento lógico o un conjunto de requerimientos) es diseminado en

muchas componentes de un programa. Ésto puede ocurrir cuando se implementan los

requerimientos relacionados a los concerns secundarios funcionales o de política

organizacional.

Por ejemplo, la administración de un sistema de registros de hospitales tiene un número

de componentes que tienen que ver con la administración de la información personal,

medicación, consultas, imágenes médicas, diagnósticos y tratamientos. Ésto puede

configurarse de diferentes formas para diferentes tipos de clínicas e implementar los

conceptos básicos del sistema (mantener los registros de los pacientes).

synchoronized void put (SensorRecord rec) throws InterruptedException {

If (cantelem==tambuf) wait(); store[cant]=new Sensorrecord(recsensorid, recsensorVal); cant=cant+1; if (cant==tambuf) cant=0; cantelem= cantelem +1; notify(); }//put

Page 25: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

17

Sin embargo, asuma que también hay un concern secundario importante que es la

generación de información estadística (el hospital desea registrar los detalles de cómo

los pacientes son admitidos y dados de alta cada mes, cuántos pacientes mueren, qué

medicamentos fueron utilizados, las razones de consulta, etc.). Estos requerimientos

deben implementarse de manera tal que se agregue código para que la información se

vuelva anónima (asegurar la privacidad del paciente) y escriba los datos en una base de

datos estadística. Componentes estadísticos procesan la información estadística y

generan los reportes estadísticos que se requieren.

En la figura 2.3 se muestra un diagrama que ejemplifica las tres clases que podrían ser

incluidas en el sistema de registros de pacientes en algunos de los métodos de

administración de información del paciente. El área sombreada muestra los métodos

necesarios para implementar los concerns secundarios (estadísticas). Se puede observar

que estos concerns estadísticos están diseminados a través de los otros concerns básicos.

Figura 2.3 Código diseminado en los métodos para implementar concerns secundarios

Los problemas de código mezclado y diseminado aparecen cuando los requerimientos

iniciales del sistema cambian. Por ejemplo, si nuevos datos estadísticos deben

recolectarse en el sistema de registro de un paciente. Los cambios al sistema no están

todos en un sólo lugar y por esto hay que ocupar tiempo buscando en el sistema los

componentes que deben cambiarse. Después hay que modificar cada uno de estos

componentes para incorporar los cambios requeridos. Debido al tiempo consumido en

esta tarea el proceso es costoso. Además siempre está la posibilidad de olvidarse de

modificar algún código y por esto las estadísticas serían incorrectas. Otro punto a

Paciente

<decl atrib>

getnomb(); editnomb(); getdom(); editdom(); . . p_anonimo()

Estudio

<decl atrib>

modalidad(); archivar(); getfecha(); editfecha(); . . guardardiag(); guardartipo();

Consulta

<decl atrib>

dartuno(); cancelturno( enfermera(); equipo(); . . p_anonimo(); guardarcons();

Page 26: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

18

considerar es que cuanto más sean los cambios a realizar más posibilidades de cometer

errores e introducir errores en el software.

2.3 Aspectos, puntos de enlace y puntos de corte

En esta sección, se introducen los conceptos más importantes asociados al DSOA y se

darán ejemplos de los mismos basándose en el sistema de pacientes de un hospital. La

termología utilizada fue introducida por los desarrolladores de AspetcJ en los 90’s [33].

Sin embargo, los conceptos son genéricos y aplicables no sólo a la programación

orientada a aspectos sino también al desarrollo orientado a aspectos.

Los conceptos principales de la OA son:

Advice (Consejo): El código que implementa un interés.

Aspectos: Una abstracción que define un crosscutting concern del sistema. Éste incluye

la definición de un punto de corte y el advice asociado con ese interés.

Join-Point (Punto de enlace): Un evento de un programa en ejecución que causa que el

advice asociado con un aspecto se ejecute.

Modelo de punto de enlace: El conjunto de eventos que se referencia en un punto de

corte.

Point cut (Punto de corte): Una sentencia, incluida en un aspecto, que define el punto

de unión donde los aspectos asociados al advice deben ejecutarse.

Tejedor (Weaver): La incorporación del código de un advice en un punto de unión

específico es realizada por un tejedor de aspectos. Este tejedor es parte del lenguaje

orientado a aspectos.

El sistema de información de pacientes de hospitales, introducido en la sección 2.2,

incluye un número de diferentes componentes que manejan la lógica relacionada a la

información del paciente. La clase paciente contiene la información personal del

paciente; medicamento es la clase que tiene la información acerca de los medicamentos

que se pueden recetar, etc. Si se diseña el sistema usando un enfoque orientado a

objetos, diferentes instanciaciones del sistema se pueden configurar. Por ejemplo, una

configuración de versión para cada clínica, habilitando a los doctores sólo para que

receten medicamentos correspondientes a la especialidad. Esto simplifica el trabajo del

personal de la clínica y reduce las posibilidades de que el doctor recete por error un

medicamento no autorizado.

Sin embargo, esta organización implica que la base de datos sea actualizada desde

diferentes partes del sistema. Por ejemplo, cuando los datos personales del paciente

Page 27: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

19

cambian, cuando la medicación cambie, cuando se los deriva a un nuevo especialista,

etc. Considere que todas las clases tienen los métodos que actualizan los datos y que los

nombres de estos métodos empiezan con “update”. Como por ejemplo:

updateInfo_Personal(id_paciente, infoupdate)

updateMedicamento(id_paciente, medicaciónupdate)

El paciente es identificado con id_paciente y los cambios a realizar están en el segundo

parámetro (los detalles no son necesarios para continuar con el ejemplo). Las

actualizaciones (updates) son realizadas por personal de la clínica que se encuentra

habilitado en el sistema.

Suponga ahora que surge un problema de seguridad, la información del paciente ha sido

modificada maliciosamente. Alguien dejó la computadora conectada al sistema y una

persona, no autorizada a ingresar, accedió a modificar la información del paciente

maliciosamente.

Para reducir la probabilidad de que esta violación de seguridad ocurra nuevamente, se

establece una nueva regla. Antes de realizar cualquier cambio en la base de datos de los

pacientes, el sistema solicita que el usuario se autentifique nuevamente en el sistema.

Los detalles de quién realizó los cambios se almacenan en un archivo separado. Esto

ayuda a resolver problemas de seguimiento de usuario.

Una manera de implementar esta nueva regla de seguridad es modificar el método

update, en cada clase, para llamar a otros métodos que realizan el seguimiento y la

autenticación de usuario. Otra solución es que cada vez que el método update es

invocado, se agreguen invocaciones a métodos para hacer el seguimiento y la

autenticación de usuario y después de la autenticación realizar los cambios. Pero

ninguna de éstas es una buena solución al problema:

1- El primer enfoque lleva a la implementación de código mezclado. Lógicamente,

la actualización de la base de datos, identificar quien realiza la actualización

(seguimiento de usuario) y la autenticación de usuario están separadas, son

concerns que no están relacionados. El seguimiento y autenticación de usuario

deben agregarse en muchos métodos.

2- La otra alternativa lleva a la implementación de código diseminado. Si se

agregan explícitamente invocaciones a métodos que realizan el seguimiento y

Page 28: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

20

autenticación de usuario, antes y después de cada invocación a update, este

código se debe incluir en diferentes partes del sistema.

El seguimiento y autenticación de usuario atraviesan los concerns básicos del sistema y

es posible que se los incluya en diferentes partes. En un sistema orientado a aspectos, se

pueden representar estos crosscutting concerns del sistema, como aspectos separados.

Un aspecto incluye una especificación de dónde el crosscutting concern debe tejerse en

el programa y el código para implementar éstos. En la figura 2.4, se define el aspecto

autenticación de usuario. La notación utilizada sigue el estilo de AspectJ pero con una

sintaxis simplificada, para que se entienda sin necesidad de conocer Java o AspectJ.

Figura 2.4 Aspecto autenticación de usuario

Los aspectos son completamente diferentes de otras abstracciones del programa, ya que

en ellos se incluye la especificación de dónde debe ejecutarse. En las demás

abstracciones hay una clara separación entre la definición de la abstracción y su

utilización. Se puede invocar a un método mientras sea alcanzable y no se puede decir,

mirando el código del método, de dónde puede invocarse. Los aspectos en cambio

incluyen un punto de corte (una sentencia que define cuándo el aspecto debe ser tejido

en el programa).

En este ejemplo el punto de corte es:

before: call (public void update*(..))

aspect auten_usuario { before: call (public void update*(..)) // punto de corte { //un consejo que debe ejecutarse cuando se teja el aspecto en

//ejecución en el sistema int intento=0; string clave_us=Clave.Get(intento);

while ((intento<3) && (clave_us!= this.Usuario.clave())) { intento=intento+1;

clave_us=Clave.Get(intento); } if ((clave_us!=this.Usuario.clave())then // si la clave es incorrecta salir del sistema System.Logout(thisUsuario.uid); } }

Page 29: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

21

El significado de esto es que antes de la ejecución de cualquier método que comience

con la cadena update (el carácter * es un comodín que reemplaza cualquier

identificador), se ejecuta el código que está a continuación del punto de corte. Este

código se llama advice y es la implementación del crosscutting concern. En este caso, el

advice obtiene la contraseña de la persona que solicita el cambio y chequea que coincida

con la contraseña del usuario que se encuentra en el sistema. Si no coincide, el usuario

es desconectado del sistema y la actualización no continúa.

La habilidad de especificar, usando puntos de cortes, dónde se deben ejecutar es una

característica distintiva de los aspectos. Sin embargo, para entender que significan los

puntos de corte, es necesario entender otro interés básico, el punto de enlace. Un punto

de enlace es un evento que ocurre durante la ejecución del programa (como la

invocación a métodos, la inicialización de variables, etc.). Hay una gran cantidad de

eventos que ocurren en un programa en ejecución. Un modelo de puntos de enlace

define aquellos eventos que pueden ser referenciados por un programador orientado a

aspectos. Por ejemplo en AspectJ, los eventos que son parte del modelo de puntos de

enlace incluyen. [34]

- eventos de invocación – invocaciones a métodos o constructores;

- eventos de ejecución – la ejecución de un método o un constructor;

- eventos de inicialización – inicializaciones de clases u objetos;

- eventos de datos – acceso o actualización de un dato;

- eventos de excepciones – el manejo de excepciones.

Un punto de corte identifica los eventos específicos (ej. la invocación a un

procedimiento determinado) con el cual el advice debe asociarse. Esto significa que se

puede tejer el advice en el programa en diferentes contextos. Por ejemplo:

1. Antes de la ejecución de un método específico, de una lista de métodos o de una

lista de métodos cuyos nombres empiecen con un patrón específico (como el

update*).

2. Luego de la finalización de la ejecución del método sea exitosa o no. En el ejemplo

de la figura 2.4, se puede definir un punto de corte que ejecute el código de

autenticación de usuario, luego de las invocaciones a los métodos update.

3. Cuando un campo en un objeto es modificado, se puede incluir un advice para

seguir las modificaciones del campo.

La inclusión de un advice en el punto de enlace especificado en el punto de corte es

responsabilidad de un tejedor de aspectos. Los tejedores de aspectos son extensiones de

Page 30: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

22

compiladores que procesan la definición de los aspectos y de los objetos y métodos de

clase del sistema. El tejedor genera después un nuevo programa con los aspectos

incluidos en los puntos de enlace especificados. Los aspectos son integrados de manera

tal que los crosscutting concerns se ejecuten en los lugares que correspondan en el

sistema final.

La figura 2.5 muestra el tejido del aspecto para el seguimiento y autenticación del

usuario que deben incluirse en el sistema de administración de pacientes.

Hay tres enfoques diferentes para el tejido de aspectos:

1. Pre-procesamiento de código fuente donde un tejedor toma como entrada código

fuente y genera un nuevo código en un lenguaje como Java o C++ el cual luego

puede ser compilado usando un compilador estándar. Este enfoque es el utilizado

por el lenguaje AspectX con XWeaver [35]

2. Tejido en tiempo de enlace (Link time weaving) donde el compilador es modificado

para incluir un tejedor de aspectos. Un lenguaje orientado a aspectos como AspectJ

es procesado y se genera bytecode Java. Éste puede ser ejecutado directamente por

un intérprete Java o ser procesado aún más para generar código de máquina. Este es

el enfoque más utilizado

3. Tejido dinámico en tiempo de ejecución. Este es el enfoque más general pero

también el que tiene mayor overhead. En este caso, los puntos de enlace son

monitoreados y cuando un evento que es referenciado desde un punto de corte

ocurre, se integra el advice correspondiente al programa en ejecución.

Figura 2.5 Tejido de aspectos

Aspecto autenticación de usuario

Aspecto logging

…. updateInfo(..) …

Paciente

Tejedor de aspectos

…. código de autentic updateInfo(..) código de logging ....

Paciente

Page 31: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

23

2.4 Ingeniería de software con aspectos

Los aspectos se introdujeron originalmente como una construcción de los lenguajes de

programación pero, la noción de concern proviene de los requerimientos del sistema.

Por esto es posible adoptar el enfoque orientado a aspectos en todas las etapas del

proceso de desarrollo de software. En etapas tempranas de la ingeniería de software,

adoptar el enfoque orientado a aspectos implica utilizar la noción de separación de

concerns como base para pensar en los requerimientos y en el diseño del sistema.

Identificar y modelar los concerns debe ser parte de la ingeniería de requerimientos y

análisis. Los lenguajes orientados a aspectos proveen el soporte tecnológico para

mantener la separación de concerns en la implementación del sistema.

Jacobsen en [31] sugiere que se debe pensar en un sistema que soporte los concerns de

los diferentes stakeholders como una extensión del núcleo del sistema. En la figura 2.6

se muestra el núcleo y las extensiones del sistema utilizando paquetes UML [36] para

representarlos. El núcleo del sistema es un conjunto de características del mismo, que

soporta el propósito esencial del sistema. En el caso del sistema que se ha visto en las

secciones anteriores, el propósito del sistema es mantener la información de los

pacientes de un hospital. Entonces el sistema provee básicamente la creación, edición,

administración y acceso a la base de datos de los registros de los pacientes. Las

extensiones al núcleo del sistema reflejan concerns adicionales de los stakeholders del

sistema, los cuales deben integrarse con los concerns básicos del sistema. Por ejemplo,

es importante que la información de los pacientes del hospital sea confidencial, por esto

algunas extensiones pueden estar relacionados con el acceso de datos, otra con

encriptación, etc..

Page 32: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

24

Figura 2.6 Núcleo del sistema con extensiones

Existen un número de extensiones que son derivadas de los diferentes tipos de concerns

[32], que se explicaron en la sección 2.2.

1. Extensiones secundarias funcionales: agregan funcionalidades adicionales a la

funcionalidad provista por el núcleo del sistema. Por ejemplo, la generación de

reportes de las drogas prescriptas en los meses anteriores.

2. Extensión de reglas: agregan funcionalidades que soportan las reglas de la

organización. Ejemplos de estas extensiones son la incorporación de

características de seguridad de la organización.

3. Extensiones QoS: agregan funcionalidades que ayudan a alcanzar los

requerimientos de calidad de servicio que han sido especificados para el sistema.

Por ejemplo, una extensión para reducir el número de accesos a la base de datos

a través de una cache o recuperaciones automáticas ante una falla del sistema.

4. Extensiones de infraestructura: agregan funcionalidades que soportan la

implementación de un sistema sobre una plataforma específica. Por ejemplo, en

un sistema de información de pacientes, las extensiones de infraestructura se

pueden utilizar para la implementación de una interfaz para el sistema de

administración de base de datos existente.

Las extensiones siempre agregan alguna clase de funcionalidad o característica

adicional al núcleo del sistema. Los aspectos son una manera de implementar

Extension 1

Extension 6 Extension 5 Extension 4

Extension 3 Extension 2

Núcleo del sistema

Page 33: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

25

estas extensiones, las que pueden componerse con las funcionalidades básicas

del sistema utilizando el tejido en el ámbito de los programas orientados a

aspectos.

2.4.1 Ingeniería de requerimientos orientada por concerns

Los concerns reflejan los requerimientos de los stakeholders. Éstos pueden reflejar una

funcionalidad requerida por un stakeholder, la calidad del sistema, políticas

organizacionales o de uso que están relacionados con los atributos del sistema como un

todo. Entonces tiene sentido adoptar un enfoque para la ingeniería de requerimientos

que identifique y especifique los concerns de los distintos stakeholders. El término

aspectos tempranos (early aspects) se usa a veces para referirse al uso de aspectos en

etapas tempranas del ciclo de vida del software donde se enfatiza la separación de

concerns.

La importancia de la separación de concerns durante la ingeniería de requerimientos es

reconocida desde hace muchos años. Los puntos de vista [37, 38] que se han

incorporado a algunos métodos de la ingeniería de requerimientos, son una manera de

separar los concerns de diferentes stakeholders. Éstos reflejan las distintas

funcionalidades que se requieren por distintos grupos de stakeholders. Sin embargo, hay

requerimientos que atraviesan todos los puntos de vista como se muestra en la figura

2.7. Este diagrama muestra que los puntos de vista pueden ser de diferentes tipos pero

los crosscutting concerns (como disponibilidad, seguridad y políticas o reglas de

negocio) generan requerimientos que impactan en todos los puntos de vista del sistema.

Para desarrollar un sistema que está organizado como se muestra en la figura 2.6, es

necesario identificar los requerimientos básicos del sistema más los requerimientos de

extensión del sistema. Un enfoque orientado por los puntos de vista para la ingeniería de

requerimientos, donde cada punto de vista representa un requerimiento de los grupos de

stakeholders relacionados, es una forma de separar los requerimientos básicos de los

secundarios. Si se organizan los requerimientos de acuerdo a los requerimientos de los

stakeholders, se pueden encontrar los requerimientos relacionados que aparecen en la

mayoría de los puntos de vista. Éstos representan las funcionalidades básicas del

sistema. Otros requerimientos pueden ser requisitos para la separación de concerns que

pueden implementarse como extensiones de las funcionalidades básicas.

Page 34: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

26

Figura 2.7 Enfoque orientado por punto de vista

El sistema de la figura 2.7 se utiliza para seguir ambulancias usadas para servicios de

emergencias médicas. Estas ambulancias se encuentran en diferentes lugares a lo largo

de una zona o provincia y en caso de una emergencia médica, como accidente de

tránsito, infarto o incendio, el servicio de emergencia usa el sistema para buscar cuál de

las ambulancias está más cerca del lugar de la emergencia.

Los stakeholders de los distintos puntos de vista necesitan encontrar diferentes

instrumentos que se encuentran en las ambulancias, buscar las ambulancias disponibles

en cada depósito y controlar la salida/entrada de las mismas. Éstos son requerimientos

básicos para el sistema, los requerimientos secundarios son extensiones del sistema que

se encargan del mantenimiento, administración y soporte técnico de los instrumentos de

las ambulancias.

Un ejemplo de un crosscutting concern del sistema es la necesidad de disponibilidad del

sistema, ya que una emergencia puede ocurrir en cualquier momento. Salvar las vidas

de las personas requiere que la ambulancia llegue rápidamente al lugar de la

emergencia. Es por esto que el sistema de administración de ambulancias debe tener un

alto nivel de disponibilidad. Una solución para esto es tener un sistema de respaldo en

un algún lugar en el caso de que falle el sistema principal.

El resultado del proceso de ingeniería de requerimientos es un conjunto de

requerimientos estructurados con respecto al sistema básico más las extensiones.

Sistema

Políticas Disponibilidad Seguridad

Ambulancia

Usuario

Administrador

Empresa

Sociedad

Puntos de Vista Intereses

Page 35: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

27

En esta etapa, es importante no tener demasiados concerns o extensiones del sistema. En

caso contrario la libertad de los diseñadores puede verse afectada y llevar a un diseño

temprano del sistema.

2.4.2 Análisis orientado a aspectos

En esta etapa, es necesario traducir los concerns relacionados con los problemas a

resolver en los correspondientes aspectos en el programa que implementa la solución.

También es necesario saber cómo estos aspectos se compondrán con los otros

componentes del sistema y asegurar que no surjan ambigüedades en esta composición.

Las condiciones de alto nivel de los requerimientos proveen una base para identificar

algunas extensiones del sistema que pueden implementarse como aspectos. Es necesario

desarrollar éstas más detalladamente para identificar futuras extensiones del sistema y

entender las funcionalidades requeridas. Una manera de realizar las extensiones es

identificar el conjunto de casos de uso [32] relacionado con lo diferentes puntos de

vista. Los modelos de casos de uso son el puente entre los requerimientos y el diseño.

Son más detallados que los requerimientos del usuario. En un modelo de casos de uso se

puede describir los pasos de cada interacción con el usuario y así comenzar a identificar

y definir las clases del sistema.

Los casos de uso cumplen un rol fundamental en la ingeniería de software orientada a

aspectos [29]. Cada caso de uso representa un aspecto, se modelan los puntos de corte y

los puntos de enlace se modelan con las extensiones. Jacobson en [31] introduce la idea

de slice el caso de uso y módulos de casos de usos, los que incluyen fragmentos de las

clases que implementan un aspecto y los cuales pueden ser compuestos para crear el

sistema completo.

En la figura 2.8 se muestran tres ejemplos de casos de uso que podrían formar parte de

sistema de administración de ambulancias. Éstos reflejan los concerns adicionales del

sistema de administración de las ambulancias y el pedido de una nueva ambulancia. El

pedido e incorporación de la ambulancia al depósito son concerns relacionados. Una vez

recibido el pedido, la ambulancia debe ser incorporada al inventario y enviada a uno de

los depósitos.

Page 36: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

28

Figura 2.8 Casos de uso del sistema de administración de ambulancias

UML [36] tiene la noción de extensión de caso de uso donde la extensión de un caso de

uso extiende la funcionalidad de otro caso de uso. La figura 2.9 muestra como la

ubicación de una ambulancia (envío a un depósito) extiende el caso de uso básico de

incorporar una ambulancia a un depósito. Si la ambulancia a incorporar no existe, puede

ser pedida e incorporada al depósito cuando sea entregada. Durante el desarrollo de los

modelos de casos de uso, se deben buscar características similares en los modelos de

casos de uso y, donde sea posible, organizar los casos de uso como casos de uso básicos

más las extensiones. Las características transversales como el logging de todas las

transacciones, puede representarse también como una extensión.

Figura 2.9 Extensión de un Caso de Uso

2.4.3 Diseño orientado a aspectos

El diseño orientado a aspectos es el proceso de diseñar un sistema que utiliza los

aspectos para implementar los crosscutting concerns y las extensiones que se detectan

en las etapas anteriores del desarrollo de software.

Page 37: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

29

Es esencial la realización de un proceso de diseño orientado a aspectos eficaz para que

esta metodología de desarrollo sea aceptada y utilizada. El proceso de diseño OA

debería incluir [32] las actividades que se muestran en la figura 2.10. Estas actividades

se describen a continuación.

1. Diseño del núcleo del sistema: en esta etapa, se debe diseñar una arquitectura

que soporte las funcionalidades básicas del sistema. La arquitectura debe

considerar la calidad de los servicios requeridos como así también la

performance y los requerimientos dependientes. Sin embargo, las

funcionalidades específicas deberían implementarse como extensiones.

2. Identificación y diseño de aspectos: analizar las extensiones especificadas en los

requerimientos del sistema, para determinar si son un único aspecto o si deben

dividirse en varios aspectos. Una vez que los aspectos se han identificado, estos

pueden diseñarse separadamente, considerando el diseño de las características

básicas del sistema.

3. Diseño de la composición (tejido): en esta etapa, se analiza el sistema básico y el

diseño de los aspectos para determinar donde se deben tejer los aspectos con los

componentes del sistema. Se identifican los puntos de enlace en un programa

que será tejido.

4. Análisis y solución de conflictos: un problema con los aspectos es que pueden

interferir entre sí cuando son compuestos con el sistema básico. Los conflictos

surgen cuando en un punto de corte colisionan diferentes aspectos especificando

que deben ser compuestos en el mismo punto del programa. Sin embargo,

pueden surgir conflictos menores cuando los aspectos se diseñan

independientemente. Éstos pueden realizar suposiciones acerca de

funcionalidades básicas del sistema que tienen que ser modificadas. Sin

embargo, cuando muchos aspectos son compuestos, la funcionalidad del sistema

puede no verse afectada de manera tal que las suposiciones realizadas sean

válidas.

5. Diseño de estándares de nombres: esta es una actividad importante del diseño

que define los estándares para nombrar las clases en un programa. Esto es

esencial para evitar el problema de falsos puntos de corte. Esto ocurre cuando,

en algún punto de enlace del programa, los nombres coinciden con un patrón de

un punto de corte pero no se debía tejer un advice en esa etapa. Una vez

Page 38: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

30

diseñado los estándares para los nombres, es posible que se deban modificar los

modelos de diseño para renombrar los elementos diseñados.

Figura 2.10 Proceso genérico de diseño orientado a aspectos

El proceso de DSOA es iterativo, se realizan propuestas de diseños iniciales y luego se

refinan hasta entender los usos del diseño. Generalmente, las extensiones identificadas

en etapas anteriores del proceso de desarrollo de software se refinan en varios aspectos.

La salida del diseño orientado a aspectos es un modelo de diseño orientado a aspectos.

Esto puede expresarse en una versión extendida de UML, éste debe contener los

constructores específicos para la orientación a aspectos. Aunque ningún estándar se ha

definido, los elementos esenciales que debe incluir el UML “extendido” son: formas de

representar los aspectos y los puntos de enlace.

La figura 2.11 muestra un ejemplo de un modelo de diseño orientado a aspectos. En esta

figura se modela el sistema de administración de ambulancias más algunos aspectos que

pueden componerse a éste. Esta figura muestra una parte del diseño del sistema. Se

utilizan las notas de UML para proveer información adicional acerca de las clases que

son atravesadas y cortadas por algunos aspectos.

Page 39: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

31

Figura 2.11 Modelo de Diseño Orientado a Aspectos

En la figura 2.12 se muestra una versión expandida del modelo orientado a aspectos la

cual detalla más información de los aspectos. Obviamente antes de realizar el diseño de

aspectos se debe tener el diseño del sistema básico. El modelo de diseño completo no es

necesario por lo que se harán algunas suposiciones acerca de las clases y métodos del

núcleo del sistema.

Figura 2.12 Modelo parcial de un aspecto

La primera sección del conjunto de aspectos establecen los puntos de corte que

especifican donde se compondrán con el núcleo del sistema. Por ejemplo, el primer

Page 40: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

32

punto de corte especifica que los aspectos pueden ser compuestos en el punto de enlace

call getiteminfo(..). La siguiente sección define las extensiones que son implementadas

por aspectos. En el ejemplo, la sentencia de extensión se puede leer como:

En el método viewitem, después de llamar al método getiteminfo, se debería

incluir una llamada al método mostrarHistorial para mostrar el registro de

mantenimiento.

2.4.4 Implementación orientada a aspectos

El inicio de la orientación a aspectos fue a través de la programación orientada a

aspectos (POA). En 1997 en los laboratorios Xerox se crea el lenguaje de programación

AspectJ [34]. Este lenguaje orientado a aspectos de propósito general es el más utilizado

en la actualidad para la implementación de software OA. Otros lenguajes como C# y

C++ [39, 40] han realizado extensiones para soportar la separación y composición de

los croscutting concerns.

Si se ha utilizado el enfoque orientado a aspectos en el desarrollo del sistema, y se han

identificado las funcionalidades básicas y las extensiones de las clases para luego

implementar los crosscutting concerns con aspectos. La tarea principal de la

implementación es realizar la programación de las funcionalidades básicas y las

extensiones. La tarea más importante es la especificación de los puntos de corte en los

aspectos. De esta manera, el advice será tejido en el lugar correcto del código.

La correcta especificación de los puntos de corte es muy importante ya que definen

dónde los advices serán tejidos con las funcionalidades básicas. Si la especificación de

los puntos de corte es incorrecta, los aspectos serán tejidos en el programa en lugares

equivocados. Esto puede llevar a un comportamiento inesperado e impredecible del

programa. Es necesario revisar todos los aspectos para evitar interferencias entre ellos,

esto ocurrirá si dos o más aspectos son tejidos en el sistema básico en el mismo punto

de enlace. En general, es mejor evitar la completitud de los aspectos pero, a veces,

puede ser lo correcto. En esas circunstancias, se debe asegurar que los aspectos sean

completamente independientes ya que el comportamiento del programa no debería

depender del orden de tejido de los aspectos en el programa.

2.4.5 Prueba orientada a aspectos

La prueba es un proceso que demuestra si un programa cumple con las especificaciones

(verificación) y con las necesidades reales de los stakeholders. Existe gran variedad de

Page 41: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

33

técnicas de verificación. Las técnicas de verificación estáticas se centran en el análisis

manual o automático del código fuente del programa. La dinámica intenta descubrir los

defectos en el programa o bien demostrar que el programa cumple con los

requerimientos. Cuando el objetivo es demostrar los defectos, el proceso de prueba

puede ser guiado por el código fuente del programa. Las métricas de prueba de

cobertura muestran la efectividad de las pruebas realizadas a través de la ejecución de

sentencias del código fuente.

Para los sistemas orientados a aspectos, el proceso de prueba no es diferente a cualquier

otro sistema. Cuando el programa final ejecutable es tratado como una caja negra y las

pruebas muestran si el sistema cumple o no los requerimientos. Sin embargo, existen

problemas con la inspección de código y las pruebas de caja blanca, donde se utiliza el

código del programa para identificar las potenciales pruebas de defectos. Además, el

uso de aspectos introduce problemas adicionales para los que diseñan y realizan las

pruebas [41]:

1. ¿Cómo se pueden especificar los aspectos de manera tal que se deriven las

pruebas para que alcancen estos aspectos?

2. ¿Cómo pueden probarse los aspectos independientemente del núcleo del sistema

con el que deben ser tejidos?

3. ¿Cómo se puede probar la interferencia entre los aspectos?

4. ¿Cómo se pueden diseñar las pruebas de manera tal que todos los puntos de

enlace sean ejecutados y aplicar las pruebas apropiadas?

Todos estos problemas son motivo de investigación en el desarrollo orientado a

aspectos, pero hasta ahora no hay soluciones disponibles. Los problemas de prueba que

surgen se deben a que los aspectos están altamente integrados al núcleo del sistema. Es

por esto, que son difíciles de probar de manera separada. Los aspectos deben ser tejidos

en un programa en muchos lugares diferentes, no se puede asegurar que si un aspecto

funciona exitosamente en un punto de enlace lo haga en todos.

Por otra parte, otra técnica, como la inspección de programas involucra un equipo de

lectores que miren el código fuente del programa para descubrir los defectos que el

programador pudiera introducir. Es una técnica muy efectiva para la detección de

errores. Sin embargo, los programas orientados a aspectos no pueden leerse

secuencialmente, de arriba hacia abajo. Por esto es más difícil que las personas los

entiendan.

Page 42: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

34

Una guía general para que un programa se entienda, es que el lector debe ser capaz de

leer el programa de izquierda a derecha, de arriba hacia abajo sin tener que prestar

atención a otras partes del código. Esta guía es útil para el lector y el programador, ya

que evita cometer errores debido a que su atención está en una única sección del código.

En un sistema orientado a aspecto, la lectura secuencial del programa es imposible. El

lector debe examinar cada aspecto, entender sus puntos de corte (los cuales pueden ser

patrones) y el modelo de puntos de enlace del lenguaje orientado a aspectos. Cuando se

lee el programa, el lector debe identificar los potenciales puntos de enlace y pasar su

atención hacia el código del aspecto para ver si debe ser tejido en ese punto o no. Luego

éste debe volver la atención al flujo de control principal del código base. En realidad,

este proceso es cognitivamente imposible y la única manera de inspeccionar el código

orientado a aspectos es a través de herramientas de lectura de código.

Las herramientas de lectura de código deben escribirse de manera tal que “aplane” el

programa orientado a aspectos y presente al lector un programa con los aspectos tejidos

en el punto especificado del programa. Sin embargo, el modelo de puntos de enlace en

un lenguaje puede ser dinámico en vez de estático y puede ser imposible demostrar que

el programa aplanado se comporte exactamente como el programa en ejecución.

Además, debido a que es imposible tener la misma especificación para todos los puntos

de corte, la herramienta de lectura del programa debe saber cómo el tejedor de aspectos

maneja los aspectos y cómo se realiza la composición.

La prueba de caja blanca o estructural es un enfoque sistemático para la prueba donde el

conocimiento del código fuente se utiliza para diseñar las pruebas de errores. La idea es

diseñar las pruebas para que provean algún nivel de cobertura de programa.

Generalmente, el conjunto de pruebas debe asegurar que cada rama lógica del programa

se siga, luego cada sentencia del programa sea ejecutada al menos una vez. Pueden

utilizarse analizadores de ejecución de programas para demostrar qué nivel de cobertura

se ha alcanzado.

En un sistema orientado a aspectos, hay dos problemas con la prueba de caja blanca. :

1. Cómo derivar sistemáticamente las pruebas del programa a partir del código

fuente.

2. Qué es exactamente la prueba de cobertura en un programa orientado a aspectos.

Se puede observar un grafo de flujo del programa para diseñar pruebas en un programa

estructurado (por ej. pruebas del código de un método) sin ramas condicionales. Éste

grafo muestra cada uno de los posible caminos de ejecución del programa. Luego se

Page 43: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

35

examina el código y, por cada camino del grafo de flujo, se eligen los valores de entrada

que causen la ejecución del camino.

Sin embargo, en un programa orientado a aspectos, el problema principal es decidir que

significa prueba de cobertura. Significa que ¿cada aspecto debe ejecutarse al menos una

vez? Esta es una condición muy débil por la interacción existente entre aspectos y

código base, en los puntos de enlace donde los aspectos son tejidos. Entonces prueba de

cobertura significa que ¿los aspectos deben ejecutarse al menos una vez en cada punto

de enlace? ¿Qué ocurre en aquellas situaciones donde diferentes aspectos definen un

mismo punto de corte? Surgen dos problemas con esta propuesta uno teórico y otro

práctico. Se necesitan herramientas para soportar la prueba de programas orientados a

aspectos que ayuden a acceder a la extensión de la cobertura de prueba de un sistema.

Los grandes proyectos por lo general tienen un equipo encargado del aseguramiento de

calidad el cual establece un conjunto de pruebas estándares y solicita un aseguramiento

y revisión formal del programa para verificar que cumpla con los estándares de calidad

establecidos.

Una barrera importante a vencer para adoptar el desarrollo orientado a aspectos en

grandes proyectos es la dificultad de inspeccionar y derivar las pruebas de los

programas.

Page 44: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

36

Capítulo 3

Métricas de Software

3.1 Introducción

La medición de Software cumple un rol importante en la Ingeniería de Software.

En la actualidad, se ha demostrado que las métricas de software son muy efectivas para:

la construcción y estimación de proyectos de alta calidad, entender y mejorar el

desarrollo y mantenimiento de proyectos de software [42], asesorar y mantener sistemas

de software de calidad resaltando las áreas conflictivas, determinar la mejor forma de

ayudar a los desarrolladores en su trabajo [43], etc.

Además, las métricas de software son herramientas importantes para ayudar en el

asesoramiento e institucionalización de Mejoras de Procesos de Software en

organizaciones. De hecho, la medición de software es un punto clave en iniciativas de

SW-CMM (Capability Maturity Model for Software), ISO/IEC 15504 (SPICE,

Software Process Improvement and Capability dEtermination) y CMMI Capability

Maturity Model Integration) [44]. ISO/IEC 9003:2004 [45] hace hincapié en la

importancia de la medición para asegurar calidad y gerenciamiento.

Para apreciar la importancia de las métricas en la evaluación de los sistemas de software

es importante clarificar algunos conceptos básicos relacionados a las mismas. Es

necesario también distinguir las clases de métricas existentes y el rol que cumplen en las

distintas etapas del desarrollo de software.

3.2 Conceptos básicos de métricas

En esta sección se definen los posibles términos que encierra la palabra métrica, porque

es muy común asociarla con las palabras medición y medida, aunque estas tres son

distintas. La medición “es el proceso por el cual los números o símbolos son asignados

a atributos o entidades en el mundo real tal como son descritos de acuerdo a reglas

claramente definidas” [46]. Una medida “proporciona una indicación cuantitativa de

extensión, cantidad, dimensiones, capacidad y tamaño de algunos atributos de un

proceso o producto” [47]. El IEEE “Standard Glosary of Software Engineering Terms”

define la palabra métrica como “una medida cuantitativa del grado en que un sistema,

componente o proceso posee un atributo dado”.

Page 45: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

37

Se ha intentado desarrollar una sola métrica que proporcione una medida completa de la

complejidad del software. Aunque se han propuesto docenas de métricas, cada una de

éstas tiene un punto de vista diferente; y por otro lado, aunque bien se sabe que existe la

necesidad de medir y controlar la complejidad del software, es difícil obtener un sólo

valor de estas métricas de calidad. Aún así es posible desarrollar medidas de diferentes

atributos internos del programa.

Aunque todos estos obstáculos son motivo de preocupación, no son motivo de desprecio

hacia las métricas. Si se desea realmente alcanzar la calidad en software la medición es

esencial, es por eso que existen distintos tipos de métricas para poder evaluar, mejorar y

clasificar al software final. Dependiendo del entorno de desarrollo de software se deben

orientar las métricas para evaluar el mismo.

3.3 Proceso de creación de métricas

Como se dijo en secciones previas se han propuesto cientos de métricas para el

software, pero no todas proporcionan suficiente soporte práctico para su desarrollo.

Algunas demandan mediciones que son demasiado complejas, que pocos profesionales

tienen la esperanza de entenderlas, y otras violan las nociones básicas intuitivas de lo

que realmente es el software de alta calidad. Debido a esto, se han definido una serie de

atributos que deben acompañar a las métricas efectivas de software, por lo tanto la

métrica obtenida y las medidas que conducen a ella deben cumplir con las siguientes

características fundamentales [48]:

- Simple y fácil de calcular: debería ser relativamente fácil de aprender a obtener la

métrica y su cálculo no debe causar un esfuerzo o consumir una cantidad de tiempo

inusual.

- Empírica e intuitivamente persuasiva: la métrica debería satisfacer las nociones

intuitivas del ingeniero de software sobre el atributo que se mide del producto en

cuestión (por ejemplo: una métrica que mide la cohesión de un módulo debería

aumentar su valor a medida que crece el nivel de cohesión).

- Consistente en el empleo de unidades y tamaños: el cálculo matemático de la métrica

debería utilizar medidas que no lleven a extrañas combinaciones de unidades. Por

ejemplo, multiplicar el número de personas de un equipo por las variables del lenguaje

de programación en el programa resulta una sospechosa mezcla de unidades que no son

intuitivamente concluyentes.

Page 46: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

38

- Independiente del lenguaje de programación: las métricas deberían apoyarse en el

modelo de análisis, modelo de diseño o en la propia estructura del programa. No

deberían depender de los caprichos de la sintaxis o semántica del lenguaje de

programación.

- Un mecanismo eficaz para la realimentación de calidad: la métrica debería

suministrar al desarrollador de software información que le lleve a un producto final de

calidad superior.

La mayoría de las métricas de software compensan las características anteriores aunque

algunas métricas usualmente empleadas no cumplen una o dos características.

3.3.1 Modelo Alarcos para la obtención de métricas

Intentando progresar en la disciplina de las métricas de software, se ha buscado una

forma metodológica y disciplinada de creación de métricas. La definición de la métrica

debe tener una base sólida con objetivos de medición claros y satisfacer necesidades de

la organización. Se puede encontrar en la bibliografía diferentes métodos para la

definición de las métricas de software. Se muestra a continuación uno de ellos que es el

propuesto por el Grupo Alarcos [49] (Figura 3.1). Esta propuesta contiene los pasos

generales de la obtención de métricas siendo un modelo representativo de los existentes.

En la figura 3.1 Modelo del Grupo Alarcos las flechas continuas representan el flujo de

las métricas y las discontinuas representan el flujo de información a lo largo de todo el

proceso.

La propuesta del grupo Alarcos consta de dos fases:

- Identificación: en esta etapa se deben identificar los objetivos de medición y las

hipótesis sobre las cuales se crean las métricas. Los objetivos indican lo qué se pretende

conseguir con el proceso de medición y representan porqué se realiza la medición. La

hipótesis es parte de cómo se llevará a cabo la medición para conseguir los datos

necesarios para alcanzar los objetivos propuestos. Como resultado de ésta se deben

obtener los requisitos que debe cumplir la métrica. Además los objetivos son utilizados

nuevamente en la aceptación, aplicación y acreditación de las métricas como se muestra

en la Figura 3.1.

Page 47: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

39

Figura 3.1: Método Alarcos para la Definición de Métricas de Software

- Creación: en este proceso se creará una métrica válida para aplicar en un entorno real.

Este proceso es evolutivo e iterativo y se subdivide en varias etapas intermedias. Se

realiza el refinamiento de las métricas a través de la retroalimentación de la validación,

teórica o empírica, fallida. Al final de la etapa de creación se dejarán las métricas

consideradas válidas y se descartarán las inválidas. Las etapas en las que se divide la

creación son:

- Definición: se considera las características del producto a medir y la

experiencia de los profesionales. Es importante que la definición sea lo más formal

posible para que logre alcanzar el objetivo propuesto en la fase anterior.

- Validación teórica: en esta etapa se debe demostrar que la métrica mide el

atributo que pretende medir, es decir se comprueba si la idea intuitiva de la métrica se

cumple. La validación teórica proporciona información relacionada a las escalas de las

métricas y poder así determinar las operaciones matemáticas y tests estadísticos a

aplicar a la hora de analizar los valores. No existe ningún estándar para la validación

teórica, pero si existen dos tendencias principales: los marcos basados en propiedades

que definen formalmente propiedades deseables de las métricas para un atributo

software concreto [50] y los que se basan en la teoría de la medida [51] y cuyo objetivo

es obtener una escala matemática relacionada a la métrica.

Page 48: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

40

- Validación empírica: en esta etapa se debe probar la utilidad práctica de las

métricas propuestas. Es necesaria la validación empírica para obtener información

objetiva acerca de las métricas, esto se logra a través de hipótesis en el mundo real.

- Explicación psicológica: poder explicar la influencia de la métrica desde el

punto de vista psicológico.

- Aceptación: suele ser necesaria una fase de prueba de laboratorio, donde

sistemáticamente se verifique si la métrica cumple con los objetivos buscados dentro del

entorno real. Es aconsejable realizar estas pruebas con sistemas pilotos, donde el riesgo

es controlado, de esta manera la no aceptación de la métrica no causará el fracaso del

proyecto. Si se consigue demostrar que la métrica sigue cumpliendo los objetivos para

la cual fue definida se puede pasar a la etapa de aplicación.

- Aplicación: en esta fase se aplica la métrica en un entorno real y se puede llevar en

paralelo con la fase de acreditación.

- Acreditación: en esta última fase se busca mejorar la métrica. Al tener los resultados

de la aplicación en casos reales puede ser posible mejorar o especializar la métrica

(siempre y cuando siga cumpliendo los objetivos para la cual fue definida). Es posible

también que luego de la aplicación en entornos muy variables se llegue a la conclusión

de descartar la métrica. Esto puede ser porque no es aplicable y que los conocimientos

adquiridos permitan la identificación de una nueva métrica.

3.4 Objetivos de las Métricas de Software

Los objetivos principales de las métricas en el software son:

Mejor comprensión de la calidad del producto.

Estimación de la efectividad del proceso.

Mejora de la calidad del trabajo realizado en distintos niveles del proyecto.

Cada uno de estos objetivos es importante por sí mismo, pero la calidad de la ingeniería

del producto es esencial. Si el proceso de desarrollo de un producto no es evaluado a

través de algún mecanismo, como son las métricas, la calidad del producto resultante se

ve afectada.

Page 49: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

41

3.5 Métricas de software

El objetivo de todo proceso de medición es recopilar indicadores cuantitativos sobre

entidades software1. Para realizar la medición es necesario identificar tanto las entidades

como los atributos a medir. Esto se debe a que no se puede medir una entidad o un

atributo en forma aislada. Por ejemplo, si se quiere medir el tamaño de un programa, se

deben medir de forma conjunta las entidades y los atributos [52].

Para realizar la medición del software hay que estudiar las entidades que pueden ser

objeto de medición así como los atributos característicos de dichas entidades.

A continuación se mostrará una visión general sobre el campo de las métricas software.

De acuerdo a modelos de evaluación y mejora como ISO 15504, CMM, o CMMI, a la

hora de incrementar el nivel de madurez de una organización hay que establecer una

base cuantitativa enfocada en:

- Medición del Proyecto, basado en la gestión de proyectos.

- Medición del Producto, centrado en su calidad y aspectos técnicos.

- Medición del Proceso, basado en el estudio y control de la capacidad de los

procesos, así como en la gestión de los cambios en el proceso.

La relación entre las métricas de proceso [48], proyecto y producto se muestra en la

figura 3.2. Como se puede observar en dicha figura, el proceso de software constituye la

base a partir de la cual se realiza el trabajo dentro de una organización. Dicho proceso

se aplica en forma de proyectos. Como resultado de la ejecución de proyectos concretos

se utilizan recursos y se obtienen productos. Por lo tanto, para establecer un marco de

medición dentro de la organización es necesario definir, recoger y analizar métricas

sobre el proceso, el proyecto y recursos asociados así como el producto software.

1 Una entidad software todo elemento software sobre el que se puede aplicar un proceso de medición y que están caracterizadas por una serie de atributos (tamaño, tiempo, etc.).

Page 50: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

42

Figura 3.2: Tipos de Entidades de Medición del Software

3.5.1 Medición del Proceso

La medición del proceso implica medir las actividades relacionadas con el software

siendo algunos de sus atributos típicos el esfuerzo, el costo y los defectos encontrados

[53].

De acuerdo a Pressman en [47] las métricas del proceso de software se utilizan para

propósitos estratégicos. En muchas propuestas, la medición del proceso se realiza

extrayendo las características de tareas específicas de la ingeniería de software y

obteniendo como resultado métricas de: errores detectados antes de la entrega del

software, defectos detectados e informados por los usuarios finales, productos de trabajo

entregados, el esfuerzo humano y tiempo consumido, ajuste con la planificación, etc..

Por esta razón, en la bibliografía, el enfoque de la medición del proceso se ha centrado

en recopilar una serie de métricas de todos los proyectos. Además si esto se realiza

durante un largo período de tiempo, con el objetivo de proporcionar indicadores que

lleven a mejoras de los procesos de software a largo plazo. En este sentido un área clave

de investigación es el control estadístico de procesos [54].

Otro posible enfoque de medición del proceso es a nivel conceptual, como medir la

complejidad u otras características de calidad del modelo de los productos finales

obtenidos. En este aspecto se pueden encontrar algunos estudios para evaluar la

mantenibilidad de los modelos de procesos de software [55].

Métricas de Proceso

Métricas de Proyecto

Métricas de Proyecto

Métricas de Producto

Métricas de Producto

Métricas de Producto

Métricas de Producto

Page 51: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

43

3.5.2 Medición del Proyecto

La medición del proyecto y sus recursos asociados constituye el elemento principal

sobre el que se basa el estudio de las métricas del proceso software. Cuando se mide el

proyecto, el objetivo fundamental es reducir el costo total del proyecto y el tiempo de

desarrollo del mismo. Los indicadores de proyecto permiten al administrador de

software [47]:

- Evaluar el estado del proyecto en curso

- Realizar un seguimiento de los riesgos potenciales

- Detectar las áreas de problemas antes de que se convirtieran en “críticas”.

- Ajustar el flujo y las tareas de trabajo

- Evaluar la habilidad del equipo del proyecto en controlar la calidad de los

productos de trabajo relacionados con la integridad de la ingeniería de software.

En relación a las métricas de proceso, las mediciones del proyecto de software son

tácticas. Las métricas de proyectos y los indicadores derivados de ellos son utilizados

por un administrador de proyectos y por un equipo de software para adaptar el flujo de

trabajo del proyecto y las actividades técnicas.

El primer conjunto de métricas de proyectos software pueden ser obtenidas durante la

fase de estimación. Las métricas recopiladas de proyectos anteriores se utilizan como la

base de partir de la cual se realizan las estimaciones del esfuerzo y del tiempo necesario

para el proyecto. A medida que avanza un proyecto, las métricas del esfuerzo y del

tiempo consumido se comparan con las estimaciones originales (y la planificación del

proyecto). El administrador de proyectos utiliza estos datos para supervisar y controlar

el avance. Para la estimación del tamaño del software cabe destacar la métrica de

“Punto Función” [56] mientras que para la estimación de costos de un proyecto caben

destacar los modelos COCOMO (COnstructive COst MOdel) creado por Barry Boehm.

Este modelo surge en 1981 y su posterior refinamiento en la versión actual COCOMO

II.

En la relación a la estimación de proyectos software existen modelos como el de

Putman y Myers [57] en el que se desarrollan una ecuación básica del software como:

Producto= Productividad * Esfuerzo*Tiempo

Donde “Producto” representa la funcionalidad expresada en tamaño, “Esfuerzo” el

esfuerzo total del personal del proyecto para desarrollar el producto, “Tiempo” es la

Page 52: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

44

duración del proyecto, y la “Productividad” depende de diversos factores que se pueden

clasificar en factores de producto. Algunos de estos factores son dificultades técnicas en

función de aspectos como restricciones de hardware, complejidad algorítmica,

complejidad lógica, complejidad de gestión, estabilidad de la plataforma.

La anterior ecuación fue posteriormente ajustada en base al análisis de resultados

históricos de una gran base de datos de proyectos, quedando:

Tamaño Producto= Índice de Productividad*Esfuerzoa*Tiempob.

donde a=1/3 y b=4/3, el “tamaño” igual al número de líneas de código fuente (nuevas y

modificadas pero sin considerar espacios en blanco y comentarios), y esfuerzo y tiempo

representan los años de esfuerzo y duración de todas las fases del proyecto.

Otro de los elementos clave a medir a nivel de proyectos son sus recursos, que son entre

otros, el personal implicado, las infraestructuras hardware y software, etc.

Una métrica muy utilizada es la productividad del personal, que se obtiene dividiendo el

tamaño por el esfuerzo. Esto implica dividir una métrica de producto por una métrica de

proceso para obtener una métrica de recurso. En general se considera la productividad

como la división de la salida por la entrada. En ingeniería del software es habitual

indicar la entrada como el esfuerzo en personas mes, y la salida como el número de

líneas de código. Al utilizar líneas de código como métrica de tamaño existen algunas

dificultades sobre todo para comparar distintos proyectos en los que se utilizan otros

lenguajes o entornos de programación.

La métrica anterior sólo mide la productividad del personal durante la implementación.

Autores como Fenton y Pfleeger [53] sugirieron utilizar otras métricas de productividad

ya que la productividad del personal no considera la calidad del código obtenido.

Otros recursos relevantes a considerar son los equipos de trabajo y las herramientas

[53]. La productividad de los miembros del equipo de trabajo depende de muchos

factores, como por ejemplo la estructura del equipo, las herramientas y los métodos

utilizados. Por otro lado también se considera la experiencia como un factor importante

de la productividad, aunque es difícil de medir. También es importante considerar de

forma separada la experiencia de los individuos y la experiencia del equipo, ya que

aunque los integrantes del equipo puedan tener buena experiencia el equipo puede que

no funcione bien y la productividad sea baja.

Page 53: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

45

En relación a las herramientas, es importante establecer la relación con otras variables

de proyecto como la eficacia de las herramientas en términos de la calidad obtenida,

tiempo de entrega y la productividad del personal que la utilizó. De hecho los modelos

de estimación consideran el uso de herramientas a la hora de estimar el tamaño o costo

de desarrollo de software.

Tal y como indica Pressman en [47], otras métricas de proyectos pueden ser obtenidas

una vez que comienza el desarrollo del producto propiamente dicho y en este aspecto es

importante realizar un seguimiento de los errores detectados durante todas las tareas de

la ingeniería del software. A medida que el software va evolucionando desde la

especificación al diseño, se recopilan las métricas técnicas para evaluar la calidad del

diseño y para proporcionar indicadores que influirán en el enfoque a seguir para la

generación de código y para las pruebas. El uso de las métricas para los proyectos tienen

dos características fundamentales [58]: se utilizan para minimizar la planificación de

desarrollo guiando los ajustes necesarios que eviten retrasos, atenúen problemas y

riesgos potenciales; y se utilizan para evaluar la calidad de los productos en el momento

actual con el fin de poder mejorarlos.

3.5.3. Medición del Producto

La medición del producto software está centrada en evaluar la calidad de los

entregables. Los productos del software son las salidas del proceso de producción del

software, que incluyen todos los artefactos entregados o documentos que son productos

durante el ciclo de vida del software. En la literatura existe gran diversidad de

propuestas relacionadas con la medición del producto. A continuación se resumen a

modo de ejemplo algunas propuestas representativas de métricas de producto.

3.5.3.1. Métricas de Código fuente

Las métricas de código fuente más importantes son Líneas de Código y Longitud Total.

Líneas de Código (LOC, Lines of Code), es la métrica más popular a nivel de código de

programa. Sin embargo, a pesar de ser ampliamente conocida y utilizada, el problema

de esta métrica es la falta de consenso existente a la hora de definir qué es una línea de

código, ya que esta definición variará en función de las necesidades o de la persona que

lo aplique. Por ejemplo, según el objetivo perseguido por la medición será importante

contar las líneas de comentario como líneas de código mientras que en otras ocasiones

será imprescindible no contar los comentarios como líneas de código. Por ello, para

Page 54: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

46

aplicar esta métrica es fundamental establecer claramente qué elementos hay que

considerar como líneas de código y como deben contarse. En particular es necesario

clarificar elementos como las líneas en blanco, los comentarios, las declaraciones de

datos y las líneas que tienen instrucciones separadas. En general se recomienda separar

en la medición de la longitud, las líneas de código y los comentarios [53].

Se define Longitud Total (LT) como la suma del Número de Líneas de Código que no

son Comentarios (NCLC, Not Commented Lines of Code) más el número de líneas de

código que son comentarios (CLOC, Commented Lines of Code).

A partir de las métricas anteriores se pueden definir otras métricas derivadas útiles,

como la densidad de cometarios (CLOC/LOC), que puede dar una idea sobre el punto

hasta el cual está documentado el código.

Para facilitar la obtención e interpretación de la métrica LOC, el SEI (Software

Engineering Institute) ha definido listas de comprobación [59] en las que considera línea

de código a todo código ejecutable, declaraciones no ejecutables y directivas de

compilación, pero no las líneas en blanco. También se debe considerar en la medición la

forma en la que el código ha sido producido (programado, usando generadores de

código fuente, copiando o reutilizando sin realizar cambio, modificado o convertido con

traductores automáticos).

Otras métricas definidas para evaluar la longitud de un programa son:

- Número de sentencias de programación. Presenta el mismo tipo de problema de

ambigüedad de la métrica LOC.

- SIZE Definida como el número de puntos y coma [60]. Se creó intentando

paliar el problema de ambigüedad de definición de las líneas de código.

- Métricas de la Ciencia del Software (Software Science). Propuestas por Halstead

en [61] para intentar independizar las métricas del lenguaje de programación. Se

basan en los tokens (unidades sintácticas elementales distinguibles por el

compilador) y que pueden ser divididos en operadores y operandos. Las métricas

son la longitud de un programa, el volumen de un programa y el esfuerzo de

implementación de un programa.

A partir de métricas base Halstead [61] define una serie de métricas derivadas que

permiten evaluar [47]: la longitud global del programa; el volumen mínimo

potencial para un algoritmo; el volumen real; el nivel del lenguaje; y otras

características tales como esfuerzo de desarrollo, tiempo de desarrollo e incluso el

número esperado de fallos en el software.

Page 55: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

47

Fenton y Pflegger en [53] consideran que aunque la propuesta de Halstead [61] ha

tenido un gran impacto en la medición software, constituye un ejemplo de medición

inadecuado. Esto se debe a que al proporcionar algunas métricas con definiciones

confusas lo que puede provocar diversas interpretaciones de las mismas.

3.5.3.2. Métricas de Complejidad

Entre las métricas de complejidad se destacan las siguientes:

- Complejidad Ciclomática (V(G)), propuesta por McCabe en [62], para evaluar la

complejidad de un programa. Esta métrica es, además de la primera métrica

conocida, una de las más estudiadas y utilizadas. La métrica V(G) está basada en

la teoría de grafos y mide el número de caminos linealmente independientes de

un programa, que puede representarse mediante un grafo de flujo de control.

Esta métrica puede calcularse de la siguiente forma:

V(G)=A-N+2

siendo A el número de arcos del grafo y N el número de nodos.

A mayor valor de la métrica V(G) mayor complejidad del programa. McCabe [62]

indicó también que un valor razonable de esta métrica debe ser menos de diez para que

un módulo sea mantenible. Otra de las aplicaciones de esta métrica es a nivel de prueba

de programa ya que indica el esfuerzo necesario para probar un módulo o programa. Las

métricas a nivel de módulo son:

- Fan-in (concentración) y fan-out (expansión). Propuesta por Henry y Kafura en

[63]. Ambas métricas trabajan sobre la estructura de un módulo representada

como un árbol o grafo de llamadas entre módulos. El fan-in de un módulo m es

el número de flujos que terminan en m mientras que el fan-out es el número de

flujos que salen de m.

- Complejidad de un módulo, que está basada en las dos métricas anteriores

creadas también por Henry y Kafura [63] siendo su definición:

MHK=longitud(i) . [fan-in(i) + fan-out(i)]2,

donde la longitud (i) es el número de sentencias en lenguaje de programación en

el módulo i.

Page 56: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

48

Henry y Kafura [63] amplían la definición de concentración y expansión no sólo

como el número de conexiones de control del módulo (llamadas al módulo), sino

también el número de estructuras de datos del que el módulo i reúne

(concentración) o actualiza (expansión) datos.

3.5.3.3 Métricas para sistemas OO

El software desarrollado siguiendo el paradigma OO difiere en importante medida del

desarrollo utilizando enfoques tradicionales. Esta característica planteó la necesidad de

definir nuevas métricas adaptadas a las características particulares de este paradigma. A

continuación se presentan algunas propuestas representativas.

- Conjunto de Métricas MOOSE, compuesto por las siguientes seis métricas

propuestas por Chidamber y Keremer [64]:

o Métodos ponderados por clase (WMC, Weigthed Methods per Class),

que mide la complejidad de una clase, basándose en la complejidad de

cada método.

o Profundidad del Árbol de herencia de una Clase, (DIT, Depth of

Inheritance Tree). La métrica DIT mide el máximo nivel en la jerarquía

de herencia. Se trata de la cuenta directa de los niveles de jerarquía de

herencia, considerando que el nivel cero de la jerarquía se encuentra la

clase raíz. DIT se considera como una métrica del número de clases

antecesoras que una clase podría potencialmente afectar, debido a que

cuanto mayor sea el nivel de profundidad de herencia mayor es el

número de métodos y atributos que hereda de otras clases.

o Número de Hijos (NOC, Number of Children). NOC es el número de

subclases subordinadas a una clase en la jerarquía, es decir, la cantidad

de subclases que pertenecen a una clase. Según Chidamber y Kemerer

[64], NOC es un indicador de: el nivel de reutilización, la posibilidad de

haber creado abstracciones erróneas, y el nivel de pruebas requerido.

o Acoplamiento entre Objetos (CBO, Coupling Between Objects). La

métrica CBO indica para una clase el número de otras clases con las que

está acoplada. Se considera que un objeto está acoplado a otro cuando

actúa sobre ese otro objeto, por ejemplo cuando un método de un objeto

utiliza un método de otro objeto. Esta métrica se considera útil para

predecir el esfuerzo necesario para el mantenimiento y las pruebas.

Page 57: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

49

Tabla 3.1: Métricas MOOD aplicables a la fase de diseño

o Respuesta de una clase (RFC, Response For a Class). RFC indica el

número de métodos que pueden ser ejecutados potencialmente como

respuesta a un mensaje recibido por un objeto de esa clase. RFC por lo

Nombre Descripción

MHF

El factor de ocultamiento de los métodos (Method Hiding Factor)

mide la proporción entre los métodos definidos como protegidos o

privados. El número total de métodos MHF se propone como una

medida de encapsulación, cantidad relativa de información oculta.

AHF

El factor de ocultamiento de los atributos (Attribute Hiding Factor) se

define como el cociente entre la suma de las invisibilidades de todos

los atributos definidos de todas las clases y el número total de

atributos definidos en el sistema considerado. La invisibilidad de un

atributo es el porcentaje del total de las clases desde las cuales los

atributos son invisibles. AHF se definió como una medida de

encapsulación.

MIF

El factor de herencia de los métodos (Method Inheritance Factor) se

define como el cociente entre la suma de los métodos heredados de las

clases del sistema considerado y el número total de métodos existentes

en todas las clases. MIF se define como una medida de herencia y por

lo tanto como una medida de reutilización en un sistema.

AIF

El factor de herencia de los atributos (Attribute Inheritance Factor) se

define como el cociente entre la suma de los atributos heredados en

todas las clases del sistema considerando y el número total de

atributos existentes en todas las clases. AIF se define como una

medida de herencia y por lo tanto como una medida de reutilización

en un sistema.

PF

El factor de polimorfismo (Poliymorphism Factor) se define como el

cociente entre el número actual de posibles diferentes situaciones de

polimorfismo, y el número máximo de posibles situaciones distintas

de polimorfismo para una clase. PF es una mediad del polimorfismo y

una medida indirecta de la asociación dinámica de un sistema.

Page 58: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

50

tanto se calcula contando las ocurrencias de llamadas a otras clases de

una clase particular.

o Falta de cohesión en los métodos (LCOM, Lack of Cohesion in

Methods). LCOM establece en qué medida los métodos hacen referencia

a atributos. Se calcula como el número de pares de funciones sin

variables compartidas de instancia menos el número de pares de

funciones con variables de instancia compartida. LCOM es una métrica

de la cohesión de una clase en base al número de atributos comunes

usados por diferentes métodos. Un valor alto de LCOM implica falta de

cohesión, es decir, escasa similitud entre los métodos siendo siempre

deseable un alto grado de cohesión en lo métodos de una clase.

- Métricas MOOD [65]. El objetivo de las métricas MOOD es medir los

principales mecanismos del paradigma OO, tales como encapsulamiento,

herencia, polimorfismo y paso de mensajes, así como polimorfismo y su

consecuente influencia sobre la calidad del software y la productividad en el

desarrollo. Las métricas MOOD se pueden utilizar en las fases de diseño y se

definieron para ser aplicadas a nivel de clases (ver Tabla 3.1)

- Métricas de Lorenz y Kidd [63] propusieron un conjunto de métricas llamadas

“Métricas de Diseño”, que se refieren a características estáticas del diseño de un

producto software. Estos autores clasificaron las métricas de tamaño, métricas de

herencia y métricas de características internas de las clases. En la tabla 3.2 se

muestran aquellas métricas que pueden ser aplicadas a un diseño de alto nivel.

En resumen, se consideran las relaciones de inclusión y extensión y las

relaciones de control y de dependencia de datos. La intuición aconseja que

cuantas más relaciones haya en el modelo, más difícil será hacer cualquier

cambio. Otro factor que influye en la modificabilidad de los casos de uso es el

tipo de caso de uso. Simplificando la idea, si un caso tiene varios objetivos, es

más susceptible de cambiar que si tiene sólo un objetivo.

Page 59: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

51

Tipo Nombre Descripción

PIM El número total de métodos de instancia públicos de

una clase. (Public Instances of Methods)

NIM El número de métodos de instancia es el total de

métodos públicos, privados y protegidos (Number of

Instances od Methods)

NIV El número de variable de instancias públicas, privadas

y protegidas (Number of Instances Variables )

NCM El número de métodos de clase es el número total de

métodos a nivel de una clase.(Number of Class

Methods)

Métricas

de Tamaño

NVV El número de variables de clase es el número total de

variables a nivel de clase de una clase.(Number of

Variables )

NMO El número de métodos sobrecargados totales de una

subclase.(Number of Method Overwritten )

NMI El número de métodos que hereda una clase.(Number

of Methods Inherited)

NMA El número de métodos nuevos que define una

subclase. (Number of Method Added)

Métricas de

Herencia

SIX Índice de especialización de cada clase (Specialization

Index)

Numero de métodos sobreescritos * Nivel de Anidamiento en la Jerarquía

Número total de métodos

Métricas de

características

internas de las

clases

APPM El promedio de parámetros por método(Avarage

Parameters Pass by Methods)

Número Total de Parámetros por Método

Numero Total de Métodos

Tabla 3.2 Métricas de Lorenz y Kidd

- Métricas para UML. En la bibliografía se pueden encontrar diversas propuestas

de métricas para los distintos tipos de diagramas de UML. Algunas de ellas son:

Page 60: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

52

o Casos de Uso: pocas métricas se han definido para este diagrama. Se

destaca Marchesi [66] que propuso un conjunto de métricas de

complejidad para diagramas de caso de uso. Dichas métricas contabilizan

el número de casos de uso, el número de actores, y el número de

relaciones de inclusión y extensión.

o Diagramas de Clase UML. Genera et al. [67] definieron un conjunto de

métricas para la complejidad estructural de diagramas de clase de UML

debido al uso de relaciones de UML, tales como asociaciones,

generalizaciones, dependencias y agregaciones (Tabla 3.3). Los autores

suponen que estas métricas pueden ser buenos indicadores de las

características de mantenibilidad de los diagramas de clases de UML.

Bansiya et al. [68] también definieron métricas a nivel de clase para

evaluar propiedades de diseño como el encapsulamiento, el

acoplamiento, la cohesión, la composición y la herencia.

Métricas Definición

Nassoc Es el número total de asociaciones (Number of Associations).

NAgg Es el número total de relaciones de asociación de un diagrama

de clases (Number of Aggregations).

NDep Es el número total de relaciones de dependencia de un

diagrama de clases (Number of Dependences).

NGen Es el número total de relaciones de generalización de un

diagrama de clases (Number of Generalizations).

NAggH Es el número total de jerarquías de agregación dentro de un

diagrama de clases (Number of Aggregations Hierarchies).

NGenH Es el número total de jerarquías de herencias dentro de un

diagrama de clases (Number of Generalizations Hierarchies).

MaxDIT Es el camino más largo en el árbol de herencia desde una clase

hasta la raíz de la jerarquía para cada clase (Max Deepness of

Inheritance Tree).

MaxHagg Es el camino más largo en una jerarquía de agregación desde

una clase hasta la raíz para cada clase (Max Hierarchy

Aggregation).

Tabla 3.3 Métricas para complejidad estructural de diagramas de clase UML

Page 61: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

53

o Diagramas de Estados. Derr en [69] definió el número de estados y el

número de transiciones como métricas que miden la complejidad de los

diagramas de estados OMT (aunque también se pueden aplicar a UML).

Miranda en [70] propone, con la hipótesis de que el tamaño y la

complejidad estructural de los diagramas de estados de UML puede

influenciar su facilidad de entendimiento (y por tanto mantenibilidad),

definió un conjunto de métricas para la complejidad estructural y el

tamaño de los diagramas de estados de UML.

o Expresiones OCL (Object Constraint Language). La propuesta de

Reynoso [71] toma como hipótesis que las propiedades estructurales de

una expresión OCL tienen un importante impacto en la propiedad

cognitiva de los modeladores. Aunque las expresiones OCL pueden

añadirse a cualquier diagrama de UML, Reynoso et al. [71] definieron

métricas para expresiones OCL que puedan usarse en un diagrama de

clases de UML. Un ejemplo de éstas son las métricas relacionadas con el

“tracing” como el Número de Relaciones Navegadas (NNR, Number of

Navigable Relationships), que cuenta el número total de relaciones que

se navegan en una relación.

3.6 Herramientas de medición de software

El desarrollo de un marco efectivo para la medición requiere un soporte metodológico,

pero también es muy importante el aspecto tecnológico [72]. Es decir, para que las

métricas puedan ser evaluadas de un modo práctico, eficiente y exacto es necesario

contar con las herramientas que permitan automatizar la adquisición, la presentación y

el análisis de los valores de las métricas [73]. Las ventajas de contar con una

herramienta que permita automatizar tanto la adquisición y la presentación como el

análisis de los valores de las métricas son [72]:

- Posibilitar la obtención de los valores de las métricas sin mayor esfuerzo.

- Minimizar los errores en el cálculo de las métricas, logrando una mayor

exactitud en sus valores.

- Permitir centrarse en el análisis de los resultados de la medición y no en la etapa

de adquisición.

Page 62: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

54

Una herramienta de métricas de software puede definirse como una herramienta

para el modelado y el cálculo de componentes de desarrollo de software, bien sean

del proceso, del producto o de los recursos.

El proceso de desarrollo de software también incluye la preparación de los

componentes del software a la medición y del proceso de evaluación. Entonces, es

necesario contar con herramientas que den soporte a la medición de software como

un grupo dentro del conjunto de métricas. Son las denominadas CAME (Computer

Assisted Software Measurement and Evaluation), es decir, Herramientas para la

Medición y Evaluación de Software Asistidas por Computador.

Giles y Daich [73] distinguen las tres principales tareas que deben realizar las

herramientas de métricas y las características necesarias que deben implementar

para que dichas tareas se puedan llevar a cabo:

- Adquisición de datos: manual, semiautomática, automática y programable

- Análisis de las mediciones: almacenamiento de los datos, recuperación de

los datos, análisis aritmético y análisis estadístico.

- Presentación de los datos: tablas, gráficos, posibilidad de exportar archivos a

otras aplicaciones.

3.7 Importancia de las métricas en el proceso

Las métricas de proceso de software se emplean para fines estratégicos, y las métricas

del proyecto de software son tácticas. Éstas últimas van a permitir proporcionar al

desarrollador de proyectos de software una evaluación al proyecto que sigue en

continuo desarrollo. Además, podrá ver los defectos que logren provocar riesgos a largo

plazo (áreas de problema); y observar si el área de trabajo (equipo) y las distintas tareas

se ajustarán.

Existe una preocupación en la unificación de las métricas dentro del proceso del

software, dado que los desarrolladores de software no tienen la cultura de la medición.

Es por eso que el uso de métricas demanda un cambio cultural, tanto en el recopilado de

datos (investigación histórica), como en el cálculo de métricas (LDC, PF, métricas de

calidad, orientadas a objetos y orientada a aspectos) y también en la evaluación

(resultados obtenidos) para adquirir una visión más profunda de lo que se está

elaborando.

Las métricas de software aportan una manera de estimar la calidad de los atributos

internos del producto, permitiendo al ingeniero de software valorar la calidad antes de

Page 63: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

55

construir el producto, el tiempo invertido será identificando, examinando y

administrando el riesgo. Este esfuerzo merece la pena por muchas razones ya que habrá

disminución de problemas durante el proyecto, asimismo se podrá desarrollar una

habilidad de seguir y controlar el proyecto y se alcanzará la seguridad que da planificar

los problemas antes de que ocurran. Además se conseguirá absorber una cantidad

significativa del esfuerzo en la planificación del proyecto.

Del mismo modo existen diferentes tipos de métricas para poder evaluar, mejorar y

clasificar al software desde sus inicios hasta el producto final.

Page 64: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

56

Capítulo 4

Metamodelo de UML 2.3

4.1 Introducción

Para la descripción de un modelo, es necesario tener un lenguaje con una sintaxis y

semántica precisa. Un lenguaje de modelado, permite elaborar los modelos requeridos

en el diseño de un sistema. UML (Unified Modelling Language) es uno de los lenguajes

de modelado más conocidos y utilizados en la actualidad.

En 1997 la OMG (Object Management Group), presenta la primera versión de UML

como lenguaje de modelado estándar. A partir de allí, la OMG realiza numerosas

versiones, hasta llegar a la versión 2.3, vigente en la actualidad.

La versión UML 2.3 se presenta a través de dos documentos que se complementan entre

sí, una “Superstructure” (superestructura) [74] y una “Infraestructure” (infraestructura)

[75]. La primera define los constructores a nivel de usuario y la segunda los

fundamentos de los constructores del lenguaje.

En este capítulo se detalla la Infraestuctura de UML 2.3, la cual define el lenguaje, sin

detallar los usos de UML como lenguaje de modelado. Esto se debe a que en esta tesis

de maestría se utiliza una extensión del metamodelo de UML para la definición de las

métricas, así como se utiliza OCL (Object Constraint Language) [76] para la definición

de restricciones y métricas para sistemas orientados a aspectos.

4.2 Arquitectura del lenguaje

La especificación de UML se realiza usando un metamodelado (un metamodelo se

utiliza para especificar un modelo que represente UML) que se adapte a las técnicas

formales de especificación. Aunque este acercamiento carece del rigor formal de un

método de especificación, ofrece las ventajas de ser más intuitivo y pragmático para la

mayoría de los implementadores y prácticos.

4.2.1 Niveles de Modelado

La especificación de UML se define a través de un enfoque de metamodelado. Cuando

se utiliza meta-niveles para definir lenguajes, generalmente siempre se tiene en cuenta

un lenguaje de especificación (o metalenguaje), especificación de usuario (o modelo), y

objetos del modelo. En particular, la arquitectura UML se divide de cuatro niveles

Page 65: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

57

conceptuales. En la figura 4.1 se muestra un ejemplo que ayuda a explicar los niveles de

modelado.

Nivel 3 (M3): El nivel de meta-metamodelado es la base en la jerarquía de

metamodelado. En este nivel se definen lenguajes para especificar metamodelos.

Es conveniente que tanto el meta-metamodelo y el metamodelo compartan

constructores comunes. Sin embargo, ambos niveles mantienen independencia

en cuanto al diseño. MOF (Meta-Object Facility) es considerado como un

ejemplo de lenguajes dentro de este nivel. Dicho lenguaje se define por la OMG

con el fin de establecer constructores y mecanismos para describir metamodelos.

Nivel 2 (M2): El metamodelo es una instancia del meta-metamodelo. Su función

es la de definir un lenguaje para especificar modelos. UML, es un ejemplo de un

lenguaje que se encuentra en este nivel. La semántica de UML se describe a

través de su meta-modelo, que, a su vez, se expresa en MOF. Dado que la

semántica de UML se define en esta etapa, todas las extensiones al modelo

deben hacerse en este nivel. La especificación de UML se lleva a cabo de

manera recursiva; es decir, utilizando un subconjunto de su sintaxis y semántica.

Nivel 1 (M1): Un modelo es una instancia de un metamodelo. En este nivel, el

usuario de un lenguaje, describe la semántica de un dominio particular. Los

conceptos definidos en M1 especifican la clasificación para los elementos de M0

(por ejemplo, el concepto “Video” y su atributo “title”).

Nivel 0 (M0): Los elementos de este nivel son instancias de un modelo

particular, de un sistema real. Se describe información del dominio, los

elementos concretos. Por ejemplo, el video “Avatar” es una instancia de la clase

Video.

Existen tres categorías de elementos dentro de un modelo: clasificadores,

eventos y comportamientos. Los clasificadores establecen un conjunto de

objetos relacionados, cada uno de ellos en un estado determinado. Un evento

describe un conjunto de posibles ocurrencias, cada ocurrencia produce una

consecuencia dentro del sistema. Finalmente, el comportamiento representa un

conjunto de posibles ejecuciones de algún algoritmo.

Page 66: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

58

Figura 4.1- Ejemplo de la jerarquía de metamodelos

UML tiene una arquitectura estructurada en capas y a su vez está organizada en

paquetes. Los elementos del modelo, son definidos por medio de una sintaxis abstracta,

reglas bien formadas y la semántica.

- Sintaxis Abstracta: Se utilizan diagramas de clases para presentar el

metamodelo. El metamodelo se compone de metaclases, relaciones y

restricciones, cuyas definiciones también se incluyen.

- Reglas bien formadas: Se especifican reglas y restricciones sobre modelos

válidos. Se puede utilizar el lenguaje natural o el lenguaje formal OCL (ver

4.2.5).

- Semántica: La semántica del modelo se describe en lenguaje natural.

4.2.2 Infraestructura

La infraestructura de UML se establece a través de una librería (Figura 4.2) [75]. Esta

librería define el núcleo del metalenguaje (“metalanguage core”) que puede ser

Page 67: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

59

reutilizado para definir metamodelos (incluidos UML y MOF). Intenta alinear UML,

MOF y XMI para poder soportar el intercambio entre modelos. También permite

personalizar UML por medio de los “Perfiles UML”.

El paquete Core es un metamodelo particularmente diseñado para tener alta

reusabilidad. Otros metamodelos tales como, MOF, CWM (Common Warehouse

Metamodel), pueden importar o especializar sus metaclases. En la figura 4.3 se muestra

como UML, CWM y MOF depende de un mismo Core. La reutilización de dicho

paquete permite que otros metamodelos se beneficien de una sintaxis abstracta y una

semántica ya definida.

Figura 4.2 - Infraestructura UML

Para facilitar la reutilización, el núcleo es dividido en subpaquetes, ellos son:

PrimitiveTypes, Abstractions, Basic y Constructs. En las figura 4.4, se muestra la

relación entre estos elementos [75].

Figura 4.3 Reutilización de “Core”

Page 68: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

60

PrimitiveTypes contiene un conjunto de tipos predefinidos. Abstractions está compuesta

de metaclases abstractas para que sean utilizarlas en diferentes metamodelos y

Constructs agrupa a las metaclases concretas. Finalmente Basic representa a algunos

constructores usados como base para producir metamodelos basados en la

Infraestrucure Library (como UML y MOF).

Figura 4.4 Núcleo

Como puede observarse, existen una serie de principios sobre el que se guía el diseño

del metamodelo. Ellos son: la modularidad, la separación en niveles, el particionado, la

extensibilidad y el reuso. A continuación se describen brevemente cada uno de ellos.

- Modularidad: Los constructores se agrupan en paquetes y las características

en metaclases.

- Separación en niveles: Por un lado, la estructura paquete se separa en dos

niveles: los constructores del núcleo (en inglés, core) del metalenguaje y los

constructores que ellos usan. Por otro lado, se definen cuatro niveles de

abstracción del metamodelo.

- Particionado: Las áreas conceptuales se organizan dentro de un mismo

nivel. En el metamodelo, el particionado contiene muchas partes

superficiales permitiendo incrementar la cohesión dentro de los paquetes.

- Extensibilidad: Se definen nuevos elementos UML para plataformas o

dominios particulares. O se define un nuevo lenguaje relacionado a UML,

reutilizando parte del lenguaje y aumentando con metaclases y

metarelaciones.

Page 69: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

61

- Reuso: Se provee una librería de metamodelo flexible. La misma es

reutilizada para definir el metamodelo UML. También para otros

metamodelos relacionados al de UML, como los son MOF y CWM.

Como se dijo en secciones anteriores UML permite realizar extensiones para modelar

diferentes dominios. En particular, se profundiza sobre la extensibilidad de UML

presentando el concepto de “Perfiles UML”. Dicho mecanismo permite extender UML

sin la necesidad de definir un nuevo lenguaje, utilizando MOF.

En esta tesis de maestría se utilizan los perfiles UML para poder modelar sistemas

orientados a aspectos.

4.2.3 Modelos Estáticos

En esta sección se realiza una breve explicación del metamodelo de UML (Nivel 2 de la

arquitectura) en particular las metaclases correspondientes a los diagramas de clases de

UML (Figuras 4.5, 4.6). Esto se debe a que el paquete Class, que corresponde al

modelado estático de UML, es utilizado en este trabajo de tesis.

Descripción de Metaclases

La descripción de las metaclases se realiza de la siguiente manera: breve descripción,

atributos que contiene, asociaciones en las que la metaclase es origen o destino,

restricciones más relevantes si las hubiere.

Class (Clase) describe un conjunto de objetos que comparten las mismas características

de especificación, restricciones y semántica. Una clase es un tipo de clasificador cuyas

características son atributos y operaciones. Los atributos de una clase se representan

como instancias de Property que posee la clase. Algunos de estos atributos pueden

representar los extremos de asociación de una relación binaria.

Atributos: no posee atributos adicionales

Asociaciones:

nestedClassifier: Classifier Element[*]1 hace referencia a todos los

Classifier que están definidos anidados en la clase.

ownedAttribute: Property[*] son los atributos que posee la clase.

ownedOperation: Operation [*] son las operaciones que posee la clase.

1 El valor especificado entre [] representa la cardinalidad, ej. * (cero o más), 1..* (uno o más), [n] n >0

Page 70: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

62

/superClass: Class[*]: esta da las superclases de la clase. Es derivada

Restricciones: no posee restricciones adicionales

Association (Asociación) describe un conjunto de tuplas cuyos valores referencia a la

instancia tipada. Una instancia de una asociación se denomina enlace (link). Un enlace

es una tupla con un valor para cada extremo de asociación, donde cada valor es una

instancia de tipo del final de asociación. Es una especificación de la metaclase

Relationship y Classifier. Una asociación representa la relación semántica que ocurre

entre dos instancias tipadas. Tiene al menos dos extremos representados por

propiedades, cada una de las cuales está conectada al tipo del extremo de asociación.

Atributos

isderived: Boolean especifica si la asociación es derivada de un modelo

de elementos como asociaciones o restricciones.

Asociaciones

memberEnd: Property[*] cada extremo de asociación representa la

participación de la instancia de los clasificadores conectados en el enlace.

ownedEnd: Property[*] los extremos que posee la asociación en sí.

navigableOwnedEnd: Property[*] el extremo navegable que posee la

asociación.

Operation (Operación) es una característica de comportamiento de un clasificador que

especifica el nombre, tipo, parámetros y restricciones para invocar el comportamiento

asociado. Es una especificación de Behavioral Feature.

Atributos

/isOrdered: Boolean indica si los parámetros están ordenados.

/isQuery: Boolean indica si el estado del sistema no cambia luego de la

ejecución del comportamiento

/lower: Integer[0..1] indica la multiplicidad inferior de parámetros

necesarios.

/upper: UnlimitedNatural[0..1] indica la multiplicidad superior del

parámetro de retorno.

Asociaciones

Class: Class[0..1] la clase que posee la operación

Page 71: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

63

ownedParameter: Parameter[*] los parámetros que posee la operación

/type: Type[0..1] especifica el tipo de retorno de la operación

redefinedOperation: Operation[*] indica la operación que es redefinida

por ésta.

Figura 4.5 Class Diagrams

Dependency (Dependencia) es una relación que significa que un elemento o un conjunto

de elementos del modelo requieren otros elementos del modelo para su especificación o

implementación. Esto significa que la semántica del elemento dependiente se completa

con la semántica del elemento prestador (supplier).

Atributos: no posee atributos adicionales.

Asociaciones:

client: NamedElement[1..*]. El/los elemento/s dependiente/s del o los

elementos prestadores (supplier). Se puede asignar una dirección a la

relación, la cual queda a discreción del modelador.

Page 72: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

64

supplier: NamedElement[1..*] son los elemntos independientes del electo

cliente.

Restricciones: no posee restricciones adicionales

Realization (Realización) es una abstracción de Dependency. Una realización es una

abstracción de una relación entre dos conjuntos de elementos del modelo. Uno

representa una especificación (supplier) y el otro representa una implementación del

anterior (client). La realización se puede utilizar para modelar pasos de refinamiento,

optimizaciones, transformaciones, composiciones, etc.

Atributos: no posee atributos adicionales

Asociaciones: no posee asociaciones adicionales

Restricciones: no posee restricciones adicionales

Property (Propiedad) es una característica estructural. Property representa un estado de

una o más instancias de una relación de un valor o valores. Cuando una propiedad es un

atributo de un clasificador, el valor o valores relacionados están asociados a una

instancia del clasificador que contiene los valores actuales. Si la propiedad es un

extremo de asociación, el valor o valores relacionado/s a la instancia/s representan el fin

de la asociación.

Atributos:

aggregation: AggreationKind[1] especifica el tipo de agregación que se

aplica a Property.

/isComposite: Boolean[1] indica si la agregación es una composición. Es

derivada.

isReadOnly: Boolean[1] si es verdadero indica que el atributo es de solo

lectura.

Asociaciones:

association: Association[0..1] hace a la asociación de la cual es miembro.

owingAssociation: Association [0..1] referencia la asociación que posee

la propiedad.

redefinedProperty: Property[*] indica las propiedades redefinidas por

ésta.

associationEnd: Porperty[0..1] designa el extremo de asociación opcional

que posee el atributo.

Page 73: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

65

class: Class[0..1] hace referencia a la clase a la cual pertenece la

propiedad.

Figura 4.6 Dependencies

4.2.4 Mecanismos de extensión de UML

En repetidas ocasiones, UML no es lo suficientemente expresivo para representar

conceptos de dominios específicos. Por esta razón, UML estándar incluyó un

mecanismo para extender y adaptar UML a diferentes dominios y plataformas: el “Perfil

UML”.

El mecanismo de extensión basado en perfiles, no permite modificar el metamodelo

existente, sino adaptarse al metamodelo existente, agregando constructores propios para

un dominio particular.

El origen de este mecanismo se remonta a la versión UML 1.1. En ese momento se

definieron los conceptos de “estereotipos” y “valores etiquetados” como elementos

básicos de extensión. La intención inicial era proveer un conjunto de características que

permitiese añadir información a los elementos del modelo de una manera sencilla y

flexible.

Page 74: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

66

Las versiones siguientes procuraron otorgar cada vez mayor precisión en su definición.

Pero UML 2.0 es el que muestra mayores avances en este sentido, proveyendo una

técnica de metamodelado sólida y consistente. Los estereotipos son especificados como

metaclases, los valores etiquetados como metaatributos y los perfiles como una clase de

paquete.

El mecanismo de extensión del metamodelo impone restricciones en cómo el

metamodelo UML puede ser modificado. No está permitido insertar nuevas metaclases,

o modificar definiciones de la metaclase (agregando metaasociaciones).

Las características presentes a partir de UML 2.0 hacen que sea posible especializar la

semántica de elementos del metamodelo de UML estándar. También brinda una

convención de notación para definiciones de estereotipos gráficos.

Han sido creados numerosos perfiles para los más variados dominios. Por ejemplo, se

han definido perfiles para “Testing”, “Java y especificaciones EJB”, “Tiempo Real”,

“Agentes inteligentes”, “Tolerancia a las fallas”; entre otros.

4.2.4.1 Ventajas

Algunas de las ventajas que genera el uso de perfiles son:

- Definir un nuevo vocabulario para un dominio o plataforma específica (para

Tiempo Real, Enterprise Java Beans –EJB-, etc.).

- Dar una sintaxis para constructores que no tienen notación.

- Definir una notación particular para elementos ya existentes, de acuerdo al

dominio donde dichos elementos se encuentran.

- Agregar semántica a elementos del metamodelo que tienen un significado

impreciso.

- Agregar nueva semántica al metamodelo.

- Agregar restricciones que especifiquen la forma en que el metamodelo y sus

constructores puedan ser usados.

- La posibilidad de agregar información en los modelos puede ser usada para

transformarlos en código.

4.2.4.2 Elementos

El perfil UML incluye los elementos necesarios para hacer posible la extensión del

lenguaje. Ellos son: los estereotipos (stereotypes), los valores etiquetados (tags values) y

las restricciones (constrains).

Page 75: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

67

Un estereotipo permite extender el vocabulario UML. Durante su definición, se lleva a

cabo su asociación con elementos del metamodelo (clase, operación, etc.). Dentro de los

modelos el estereotipo es denotado de la siguiente manera “<<stereotype-name>>”.

Los valores etiquetados están cercanamente relacionados a los estereotipos, dado que

son sus atributos asociados. La forma de expresarlos es a través de {name=value}.

Las restricciones permiten agregar semántica tanto a los elementos del modelo como a

los del metamodelo. Este último caso, es llevado cabo cuando se le añaden restricciones

a los estereotipos. Si esto sucede, debe cumplirse que los modelos que utilicen dichos

estereotipos, conformen las restricciones impuestas para él.

En muchas ocasiones, el lenguaje natural es usado para definir restricciones. Sin

embargo, OCL [76] es una mejor alternativa, debido a su precisión y consistencia.

Un ejemplo se muestra en la figura 4.7 para ilustrar los conceptos antes descriptos. En

esta figura se muestra el Perfil de Enterprise Java Beans (EJB) (En el ejemplo se

muestra cómo definir estereotipos, valores etiquetados y restricciones).

La forma de especificar un estereotipo es asociando su nombre con elementos del

metamodelo. Por ejemplo, el estereotipo JAR es asociado con el metaelemento Artifact;

Remote y Home con Interface, y el estereotipo abstracto Bean con Component (una

instancia de clases concretas Entity o Session debe ser asociado a cada instancia de

Component). Un ejemplo de valor etiquetado es state, el cual es asociado a Session.

Además existen dos restricciones, una relacionada a Component y otra a Bean, ambas

en lenguaje natural, OCL no es utilizado.

Page 76: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

68

Figura 4.7 - Perfil EJB

Es importante recordar que MOF construye expresiones equivalentes a las extensiones.

Lo hace a través de una agregación desde la metaclase extendida al estereotipo, también

es posible navegar desde el estereotipo a la metaclase extendida. Los nombres de rol son

provistos usando las siguientes reglas:

- El nombre de rol de la metaclase extendida es:

‘base$’ extendedMetaclassName.

- El nombre de rol del estereotipo es:

‘extension$’ stereotypeName

4.2.5 OCL: Descripción y ventajas de su uso

Tal como se mencionó anteriormente, las restricciones son frecuentemente descriptas a

través del lenguaje natural, pero esto resulta en ambigüedades. OCL es un lenguaje de

modelado formal para la especificación de restricciones no ambiguas [76].

Una de sus principales características es su amigabilidad, no es necesario tener excesivo

conocimiento previo en matemáticas para entender sus especificaciones y son fáciles de

Page 77: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

69

leer y escribir. La utilidad de OCL se manifiesta en la diversidad de propósitos para los

cuales puede ser aplicado, algunos usos son:

- Como lenguaje de consultas

- Para especificar invariantes sobre clases y tipos en los modelos de clases.

- Para especificar invariantes de tipos para estereotipos.

- Para describir pre y post condiciones sobre operaciones y métodos.

- Para describir guardas.

- Para especificar objetivos (o conjuntos) para mensajes y acciones.

- Para especificar restricciones sobre operaciones.

- Para especificar reglas de derivación de atributos para cualquier expresión

sobre un modelo UML.

OCL es un lenguaje tipado, cada expresión tiene un tipo. Por ejemplo, no se puede

comparar un Integer con un String. Los tipos pueden ser cualquier clase de

clasificadores dentro de UML.

Cabe destacar que no es un lenguaje de programación, por lo que no es posible escribir

lógica de programas o flujos de control. Tampoco es válido pensar que la especificación

pueda ser directamente ejecutable.

El mismo OCL es utilizado para definir la semántica de UML, especificando reglas bien

formadas sobre el metamodelo. Las reglas bien formadas son definidas como

invariantes sobre las metaclases en la sintaxis abstracta. También es usado para definir

operaciones adicionales, cuando las reglas bien formadas las precisan.

En las expresiones OCL, la palabra clave “context” introduce el contexto para una

expresión. Las palabras claves “inv”, “pre” y “post” denotan respectivamente a los

estereotipos «invariant», «precondition», y «postcondition». Se muestra a continuación

un ejemplo (todos las especificaciones OCL que se presentan fueron extraídas de [76])

el cual indica cómo se especificaría una restricción para TypeName.

context TypeName inv:

'una expresión OCL con el estereotipo <<invariant>> en el

contexto de TypeName' = 'restricción'

Las expresiones OCL pueden ser usadas para especificar invariantes, precondiciones y

postcondiciones. Una invariante es asociada con un tipo, la expresión es verdadera si

todas las instancias del tipo cumplen con la restricción. Una operación OCL es

especificada en el contexto de una instancia de un tipo específico. La palabra reservada

“self” es usada para referenciar una instancia contextual.

Page 78: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

70

La siguiente invariante específica que el número de empleados de una compañía debe

exceder a 50.

context Company inv:

self.numberOfEmployees > 50

Una expresión OCL también puede ser parte de una precondición o poscondición.

Normalmente, este tipo de restricciones están relacionadas a una característica de

comportamiento o a una operación. La forma de definirlas es como se sigue.

context Typename::operationName(param1 : Type1,

.. ): ReturnType

pre : param1 > ...

post: result = ...

Antes de especificar el contexto de una invariante, precondición o poscondición; es

posible mostrar el paquete al cual pertenece el clasificador. Esto se logra utilizando la

palabra clave “package”. La sintaxis se muestra a continuación.

package Package::SubPackage

context X inv:

... some invariant ...

context X::operationName(..)

pre: ... some precondition ...

endpackage

Un archivo OCL puede contener varias sentencias de paquete. De esta forma,

invariantes, precondiciones y poscondiciones se agrupan en un único archivo. Dicho

archivo puede coexistir con modelos UML como una entidad separada.

Dentro del contexto de los perfiles, cuando las restricciones son agregadas sobre los

estereotipos, los nombres de rol son usados también para navegar en las restricciones

OCL. Por ejemplo, la siguiente expresión establece que la interfaz Home (ver figura

4.7) no tiene atributos:

self.baseInterface.ownedAttributes->size() = 0

Una expresión OCL puede ser utilizada para indicar un valor inicial o un valor derivado

de un atributo o final de asociación. Las expresiones iniciales y derivadas pueden ser

combinadas, tal como se muestra en el siguiente ejemplo:

context Person::income : Integer

init: parents.income->sum() * 1% -- pocket

allowance

Page 79: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

71

derive: if underAge

then parents.income->sum() * 1% -- pocket

allowance

else job.salary -- income from regular job

endif

4.2.5.1 Tipos básicos

OCL tiene un conjunto de tipos básicos predefinidos. Para cada uno de estos tipos,

existen también un conjunto de operaciones predefinidas. En la tabla 4.1 y 4.2 se

exponen algunas de las más importantes [76].

OCL tiene también otros tipos predefinidos. Estos tipos básicos son Collection, Set,

Bag, Sequence y Tuple. Sus operaciones predefinidas se encuentran definidas en [76].

Finalmente, es importante aclarar que cada expresión OCL se escribe en el contexto de

un modelo UML. Esto significa que todos los clasificadores de un modelo (tipos, clases,

interfaces, asociaciones) son tipos en las expresiones OCL.

4.2.5.2 Objetos y propiedades

Las expresiones OCL pueden referirse a clasificadores, atributos, fin de asociaciones,

métodos y operaciones (o métodos) de modelos UML. En un diagrama de clases, los

atributos, asociaciones finales, y operaciones (libre de efectos colaterales) son

propiedades dentro de las expresiones OCL.

Tipos predefinidos Operaciones

Integer *, +, -, /, abs()

Real *, +, -, /, floor()

Boolean and, or, xor, not, implies, if-then-else

String concat(), size(), substring()

Tabla 4.2 Operaciones predefinidas

Tipos predefinidos Ejemplos

Boolean true, false

Integer 1, -5, 0

Real 1.5, 7.2

String ‘hola’

Tabla 4.1 Tipos básicos

Page 80: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

72

Cabe mencionar que self hace referencia a un objeto, y “self.propiedad” se relaciona al

valor de una propiedad para self. En el siguiente ejemplo, se muestra cómo el valor de

una propiedad para un objeto se expresa a través de OCL.

context Person inv:

self.isMarried

La forma de especificar el valor de un atributo en OCL, también se muestra con un

ejemplo. En este caso, la expresión “self.age” especifica el valor del atributo age para

una instancia de Person. Dicha expresión es expuesta en forma seguida.

context Person inv:

self.age > 0

A partir de un objeto específico, es posible navegar una asociación de un diagrama de

clases para alcanzar a otros objetos. Esto se logra a partir de las asociaciones finales de

una asociación (role name), tal como se muestra a continuación:

object.associationEndName

El valor de la expresión previa es el conjunto de objetos que están en el otro extremo de

associationEndName. Si la multiplicidad en el final de la asociación es 1, el resultado

de la expresión es un objeto. Pero si la multiplicidad es “*”, el resultado es un conjunto.

context Company

inv: self.manager.isUnemployed = false

inv: self.employee->notEmpty()

En el ejemplo que se encuentra el la parte superior, “self.manager” devuelve una

instancia (un objeto) de la clase persona ya que la multiplicidad del fin de asociación es

uno. En cambio, “self.employee” devuelve un conjunto, dado que la multiplicidad del

fin de asociación es superior a uno.

Por defecto, la navegación a través de una asociación resulta en un conjunto. Pero si la

asociación esta adornada con “{ordened}”, entonces resulta en un conjunto ordenado

(OrdenedSet).

Los tipos Set, OrdenedSet, Bag y Sequence tienen como supertipo común a Collect.

Todos los tipos predefinidos de OCL, tienen asociadas operaciones predefinidas. Una

propiedad de Collect se accede por medio del símbolo “->”, seguido del nombre de la

propiedad; por ejemplo:

context Person inv

self.employer->size() < 3

Page 81: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

73

Figura 4.8 - Uso de operador “oclAsType()”

Cuando las propiedades se redefinen para un tipo, la propiedad de los supertipos pueden

ser accedidas usando la operación oclAsType(). En la figura 4.8 la clase ModelElement

tiene dos subclases Note y Dependency. Si se desea acceder al atributo source, desde el

contexto Dependency (el cual hereda de ModelElement), pueden surgir ambigüedades

que sólo son resueltas a través del uso del operador oclAsType(). Esto queda explícito en

la siguiente restricción:

context Dependency

inv: self.oclAsType(Dependency).source

->isEmpty()

inv: self.oclAsType(ModelElement).source

->isEmpty()

Existen otras operaciones predefinidas que resultan de utilidad. Dos de las más

importantes son oclIsType y oclIsKindOf, cuya sintaxis se muestra a continuación:

oclIsTypeOf(t : OclType):Boolean

soclIsKindOf(t : OclType):Boolean

La operación oclIsTyeOf devuelve true si el tipo de objeto representado por self y “t” es

el mismo; y oclIsKindOf devuelve true si el tipo es el mismo o es un supertipo. A

continuación, se ejemplifica la utilización de la primera de dichas operaciones.

context Person

inv: self.oclIsTypeOf( Person ) -- is true

inv: self.oclIsTypeOf( Company) -- is false

Page 82: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

74

4.2.5.3 OCL y el metamodelo UML

Las referencias hechas a las metaclases del metamodelo UML son utilizadas en la

definición de la sintaxis abstracta de OCL. Estas referencias necesitan ser alineadas con

el metamodelo de UML.

La infraestructura de UML 2.3 y el núcleo de MOF 2.3, se desarrollaron en paralelo con

OCL 2.2. La especificación de OCL se define basándose en el núcleo de UML y MOF.

Esto permite que el subconjunto de OCL pueda ser utilizado tanto por UML como por

MOF.

Las herramientas CASE que manipulen a OCL, UML y MOF, deben tener en cuenta

algunos puntos para lograr compatibilidad. Algunas de ellas son la compatibilidad de

sintaxis y de XMI (XML Metadata Interchange) [76].

Compatibilidad en la sintaxis se refiere a que la herramienta puede leer y escribir

expresiones OCL de acuerdo con la gramática. Esto incluye la validación, teniendo en

cuenta la compatibilidad de sus tipos y la de las reglas bien formadas. Por otro lado, la

compatibilidad XMI, se relaciona al hecho de que la herramienta intercambia

expresiones OCL utilizando XMI.

4.2.6 Sintaxis Abstracta de Perfil UML

Se describe a continuación la sintaxis abstracta. Las clases del paquete Profile se

muestran a través de un diagrama de clases (ver figura 4.9).

Descripción de metaclases

Dentro de la especificación de la sintaxis abstracta, se describen las metaclases

principales con sus respectivas restricciones y operaciones adicionales. Se muestran

algunas de las restricciones y de las operaciones.

Class (Clase) se relaciona con un subtipo de asociación. Esto indica como ésta puede

ser extendida a través de uno o más estereotipos. Pero un estereotipo no puede ser

extendido por otros estereotipos.

Page 83: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

75

Figura 4.9 - Elementos definidos en el paquete Profile

Asociaciones

• / extension: Extension [*]

Hace referencia a las extensiones que especifican propiedades adicionales

de la metaclase. La propiedad es derivada desde las extensiones. Donde el

valor entre [] representa la cardinalidad.

Extension (Extension) es una clase de asociación. Se utiliza para indicar que las

propiedades de una metaclase son extendidas a través de un estereotipo. Brinda la

capacidad para flexibilizar la agregación y el borrado de estereotipos. El elemento

Extension no existe en versiones anteriores a UML 2.0. Las ocurrencias de

“Stereotype::baseClass” en UML 1.4 son en UML 2.0 una instancia de Extension.

Atributos

• / isRequired: Boolean

Indica si debe crearse una instancia del estereotipo extendido cuando una

instancia de la clase extendida es creada. El valor por defecto de isRequired es

false. El atributo es derivado de la multiplicidad de Extension::ownedEnd; una

multiplicidad de 1 significa que isRequired es true, de otra forma es false. La

multiplicidad por defecto de un ExtensionEnd es 0..1.

Asociaciones

• ownedEnd: ExtensionEnd [1]

Page 84: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

76

Hace referencia el lado final de la extensión que es tipado por un

estereotipo, redefine a Association::ownedEnd.

• / metaclass: Class [1]

Referencia a la clase que es extendida. La propiedad es derivada desde el

tipo de memberEnd que no es el ownedEnd.

Restricciones

Si una extensión no tiene owned end entonces es tipada por una

clase.

metaclassEnd()->notEmpty() and

metaclass()->oclIsKindOf(Class)

Una extensión es binaria (tiene sólo dos memberEnds).

memberEnd->size() = 2

ExtensionEnd (final de extensión) es una clase de Property utilizada para asociar una

extensión a un estereotipo, cuando se extiende una metaclase. Sólo puede se accedida a

través de Extension. No es posible agregar propiedades a un clasificador extendido (no

esta permitido cambiar un elemento del metamodelo, únicamente agregar nuevas

propiedades).

Asociaciones

• type: Stereotype [1]

Hace referencia al tipo de la extensión final. Restringe sus posibles tipos

sólo a Stereotype, redefine Property::type

Restricciones

- ExtensionEnd tiene multiplicidad 0..1 o 1.

(self->lowerBound() = 0 or self->lowerBound() = 1)

and self->upperBound() = 1

- El destino de la relación de agregación que termina en

ExtensionEnd es una composición.

self.aggregation = #composite

Package (paquete) un paquete puede tener uno o más ProfileApplications para indicar

cuáles son los perfiles que se aplican. Dado que un perfil es un paquete, es posible

aplicar un perfil no sólo a un paquete sino también a perfiles.

Asociaciones

Page 85: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

77

• appliedProfile: ProfileApplication [*]

Hace referencia a ProfileApllications, el cual indica cuáles son los perfiles

que se aplican al paquete appliedProfile que asocia un paquete y un perfil,

relaciona un elemento desde un modelo (una clase de paquete) a un

elemento de su metamodelo. Representa al conjunto de perfiles que

definen las extensiones aplicables al paquete. Esto muestra que el modelo

y el metamodelo pueden coexistir en el mismo espacio y pueden tener

vínculos entre ellos.

Profile (perfil) es una clase de paquete que establece las extensiones para un elemento

del metamodelo. El propósito es adaptarlo a un dominio particular. El elemento básico

de extensión es el estereotipo. Por esta razón es definido como parte del perfil. Un perfil

es una forma restrictiva de un metamodelo. Las extensiones se definen como

estereotipos que se aplican a metaclases existentes.

Asociaciones

• metaclassReference: ElementImport [*] es la metaclase extendida.

• metamodelReference: PackageImport [*] es el paquete que contiene las

metaclases extendidas.

• ownedStereotype: Stereotype [*] son los estereotipos que conforman el

perfil.

Restricciones

Una metaclase importada no puede ser especializada ni generalizada.

self.metaclassReference.importedElement->

select(c | c.oclIsKindOf(Classifier) and

(c.generalization.namespace = self or

(c.specialization.namespace = self) )->isEmpty()

Todos los elementos importados, ya sea como referencia a una metaclase

o a través de una referencia al metamodelo, son miembros de la misma

referencia base del metamodelo.

self.metamodelReference.importedPackage.elementI

mport.

importedElement.allOwningPackages())->

union(self.metaclassReference.importedElement.

allOwningPackages() )->notEmpty()

Page 86: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

78

ProfileApplication (perfil de aplicación) se utiliza para mostrar cuáles son los perfiles

que se aplican a un paquete. Uno o más perfiles pueden ser aplicados a un paquete, tal

como se muestra en la figura 4.10.

Asociaciones

importedProfile: Profile [1]

Hace referencia a los perfiles que se aplican a un paquete por medio de

“ProfileApplication”.

Figura 4.10 - Ejemplo de aplicación de perfiles a un paquete

Stereotype (estereotipo) un estereotipo define cómo se extiende una metaclase y habilita

al uso de una terminología específica para un dominio particular. Es un tipo de clase que

extiende clases a través de Extension. Una clase puede ser extendida por uno o más

estereotipos.

Dado que es una clase, puede tener propiedades, a las cuales se refiere como

definiciones de etiquetas (tags). Cuando un estereotipo se aplica a un elemento del

modelo, los valores de las propiedades se refieren como valores etiquetados.

Asociaciones

icon: Image [*]

Un estereotipo puede cambiar la apariencia gráfica del modelo extendido

utilizando íconos añadidos.

Restricciones

Un estereotipo sólo puede generalizar o especializar a otro estereotipo.

generalization.general->

forAll(e | e.oclIsKindOf(Stereotype)) and

generalization.specific->

Page 87: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

79

forAll(e |

e.oclIsKindOf(Stereotype))

Cuando un estereotipo es aplicado a un elemento del modelo, se asocia una instancia de

un estereotipo a una instancia de la metaclase. Un ejemplo de la definición de

estereotipo se muestra en la figura 4.11 [74].

Figura 4.11 - Ejemplo de definición de un estereotipo

En la figura 4.12, es posible observar una instancia de la especificación expresada en la

figura 4.11. En este caso, la instancia extendida es una clase (en Class, el atributo name

es Class).

Figura 4.12 - Instancia de especificación de un estereotipo

4.2.7 Notación gráfica

En el momento de llevar a cabo la definición de un perfil se hace uso de distintos

elementos gráficos que representan diferentes elementos de un perfil. Se han establecido

diferentes estereotipos que denotan los elementos. A continuación se exponen las

diferentes notaciones gráficas, cada notación con su correspondiente elemento de perfil

Page 88: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

80

asociado. En la tabla 4.3 se muestran los vínculos y en la tabla 4.4, se muestra la

notación para los estereotipos, metaclases y perfiles.

Tabla 4.3 Notación gráfica de vínculos

4.2.8 Relación entre paquetes y perfiles

Uno o más perfiles pueden ser aplicados a un paquete utilizando el estereotipo

<<apply>>. Esto significa que: si se aplica un perfil es posible, aunque no estrictamente

necesario, utilizar en el paquete estereotipos definidos en el perfil. Pueden ser aplicados

en múltiples perfiles siempre que no exista conflicto con las restricciones. El nuevo

perfil debe respetar las restricciones de los perfiles que fueron aplicados previamente.

Un paquete puede ser importado desde un perfil a través del estereotipo <<import>>.

Esto permite utilizar los elementos del paquete dentro del perfil. Si el perfil es aplicado

a otro paquete, los tipos importados también están disponibles desde el paquete que

aplica el perfil.

En la figura 4.13 se muestra un ejemplo de cómo un perfil puede importar elementos de

un paquete [75]. También se ejemplifica la forma en que un perfil puede ser aplicado.

Elemento de Perfil Notación gráfica

Extension

ProfileApplication

Elemento de Perfil Notación gráfica

Stereotype

Metaclass

Profile

Tabla 4.4 Notación gráfica de estereotipos, metaclases y perfiles

Page 89: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

81

Es importante observar que JavaInteger puede ser utilizado como metapropiedad (en

Device) y como propiedad común (en TV).

Figura 4.13 - Ejemplo de relación de perfiles con paquetes

Page 90: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

82

Capítulo 5

Definición de Métricas para el Diseño Orientado a Aspectos

5.1. Introducción

Las métricas de software intentan medir la complejidad del mismo para predecir el

costo final del proyecto, evaluar la calidad y la eficiencia del diseño.

Las métricas de software tienen múltiples aplicaciones en diferentes tareas de la

ingeniería del software como prueba, gerenciamiento y mantenimiento.

La investigación en el campo de las métricas se va adaptando a las necesidades y a las

nuevas propuestas de desarrollo de software, lenguajes y paradigmas de programación

como por ejemplo la POA.

Los aspectos son “concerns” que tienden a atravesar los componentes principales del

sistema, incrementando la interdependencia, y reduciendo su reutilización en los

sistemas desarrollados siguiendo la orientación a objetos. Sin embargo estos problemas

serían resueltos por el desarrollo de software orientado a aspectos. El diseño orientado a

aspectos provee un soporte explícito para lidiar con los crosscutting concerns. Usando

esta técnica, los aspectos se separan en módulos que luego son tejidos con las clases

bases para construir la aplicación. Además los aspectos en el diseño permiten capturar a

los componentes más reutilizables y posibilita la generación automática de código.

Como se dijo anteriormente el paradigma orientado a aspectos se basa en el de

orientación a objetos introduciendo a los aspectos como un tipo “especial” de clase. De

esta manera se pueden aplicar métricas que evalúen algunas características similares a la

OO y otras propias de la OA.

5.2 Extensión de UML 2.3 para sistemas OA

Para extender UML estándar a una plataforma o dominio particular se utiliza el paquete

“Profile” provisto por UML 2.3 [74]. Este paquete incluye tres mecanismos para

redefinir estereotipos, valores etiquetados y restricciones. Estos elementos permiten

adaptar la semántica de UML a un requerimiento particular sin cambiar el metamodelo

UML. En la figura 5.1 se muestra el paquete Profile de UML utilizado en este trabajo.

En esta sección se muestra la definición de un Perfil UML para la orientación a

aspectos. Este perfil considera trabajos existentes, los cuales si bien definen un perfil

considerando los valores etiquetados y los estereotipos, no especifican las restricciones

Page 91: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

83

o lo hacen con lenguaje natural, el cual es ambiguo. La presente propuesta de perfil

cumple con los tres elementos necesarios para su definición, con la ventaja de que las

Figura 5.1: Paquete Profiles de UML 2.3

restricciones son especificadas en OCL, el cual, como se dijo anteriormente, provee un

formalismo gracias a la lógica de primer orden que utiliza.

Un perfil es un paquete estereotipado que contiene elementos de modelado, los cuales

son específicos al dominio particular al cual se aplica, en este caso orientación a

aspectos.

La definición del perfil tiene en cuenta los elementos de los LOA de propósito general.

Esto se debe a que estos lenguajes son los más utilizados a la hora de implementar el

software, tomando como caso de estudio Aspect J [34].

AspectJ es un lenguaje orientado a aspectos de propósito general, cuya primera versión

fue lanzada en 1998 por el equipo conformado por Gregor Kickzales.

AspectJ es una extensión compatible de Java para facilitar el uso de aspectos por parte

de los programadores de Java. Por compatible se entiende:

- Compatibilidad base: todos los programas válidos de Java deben ser programas

válidos de AspectJ.

Page 92: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

84

- Compatibilidad de plataforma: todos los programas válidos de AspectJ deben correr

sobre la máquina virtual estándar de Java.

- Compatibilidad de programación: la programación en AspectJ debe ser una extensión

natural de la programación en Java.

Esta última meta fue una de las guías más importante a la hora de tomar decisiones

sobre el lenguaje. Es estáticamente tipado y usa el sistema de tipos estático de Java.

Se extiende Java [34] para soportar el manejo de aspectos agregando a la semántica de

Java cuatro entidades principales.

- Los puntos de enlace (join point) son puntos bien definidos en la ejecución de un

programa, entre ellos se pueden citar llamadas a métodos y accesos a atributos.

- Los cortes (pointcuts) agrupan puntos de enlace y permiten exponer el contexto en

ejecución de dichos puntos. Existen dos tipos de cortes los primitivos y los definidos

por el usuario.

- Los consejos (advices) son acciones que se ejecutan en cada punto de enlace incluido

en un corte. Los consejos tienen acceso a los valores expuestos por el corte. Las tres

entidades anteriores son dinámicas porque permiten definir comportamiento adicional

que actuará en tiempo de ejecución.

- Las introducciones y declaraciones permiten cambiar la estructura de clases de un

programa, agregando o extendiendo interfaces y clases con nuevos atributos,

constructores o métodos. Esta última entidad es estática porque afecta la signatura

estática del programa.

Se puede concluir entonces que AspectJ soporta tanto implementación estática como

dinámica de los croosscutting concerns.

5.2.1 Participantes

A continuación se listan los estereotipos que participan en el perfil.

Aspect: es el estereotipo que modela los aspectos como un “tipo particular” de clase.

Dado que la estructura y comportamiento de un aspecto es semejante al de una clase se

realiza una extensión de la metaclase Class para definirlo. Un aspecto puede contener

atributos, operaciones y referirse a los demás componentes a través de relaciones.

Realize: es la relación entre una clase y un aspecto. Indica que una clase incorpora el

comportamiento del aspecto relacionado. Se realiza la extensión de la metaclase

Realization ya que Realize es un tipo particular de relación. Pero es más específica que

una relación ya que sólo puede existir entre una clase y un aspecto.

Page 93: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

85

PointCut: es el estereotipo que modela el punto de corte; describe un conjunto mínimo

de propiedades que se deben cumplirse en una clase. En definitiva, un punto de corte es

una sentencia que indica el lugar dónde se debe colocar el conjunto de sentencias a

ejecutar siempre y cuando se cumpla una determinada condición y/o operación. Pointcut

extiende la metaclase Operation ya que indica a través de una sentencia invoca la

ejecución de un conjunto de sentencias que incorporan el comportamiento del aspecto

en la clase base.

WeavedClass: es la unión de la clase y el/los aspectos que la afectan. Una clase tejida

aparece en el momento que se realiza el tejido de los aspectos a la/s clase/s que lo

utilizan. Es una subclase de un aspecto ya que la misma tiene características de clase y

aspecto por esto WeavedClass extiende la metaclase Class.

Advice: son acciones que se ejecutan en cada punto de enlace incluido en un corte. Las

acciones son en definitiva partes de código que son ejecutadas en el punto de corte.

Advice se extiende de la metaclase Operation ya que es una operación a realizar en un

lugar determinado.

En la figura 5.2 se muestra la definición del perfil para modelar sistemas orientados a

aspectos para lenguajes de propósito general como AspectJ.

Figura 5.2: Definición de Perfil para Orientación de Aspectos

Page 94: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

86

5.2.3 Restricciones

En esta sección se definen las restricciones semánticas correspondientes al perfil OA

(Figura 5.2). En las figuras 5.3 (a) y (b) se muestra parte de la Superestructura de UML

2.3 [74] para facilitar el seguimiento de las restricciones.

Se define la operación IsAspect para identificar si la clase está estereotipada como un

aspecto.

Context Class:: IsAspect():boolean

Pre:

Post:

IsAspect=self.extension.ownedEnd->exist(e/e.type.name=’Aspect’)

Otras operaciones similares a la anterior se definen con el fin de establecer si una

metaclase es un estereotipo particular ya que UML 2.3 no provee una operación que

devuelva los estereotipos que tengan la etiqueta ‘X’, en el caso anterior ‘Aspect’.

a) Una WeavedClass (clase tejida) tiene como superclase al menos un aspecto y una

clase. Esto se debe a que una clase tejida es el resultado de la unión entre una clase y al

menos un aspecto. La clase tejida es una clase base que incorpora en el momento de la

ejecución el comportamiento de al menos un aspecto.

Context Class::IsWeavedClass():Boolean

Pre:

Post: IsWeavedClass= self.extension.ownedEnd ->

exist (e/e.name=”WeavedClass”)

La operación anterior (IsWeavedClass) indica si la clase esta estereotipada como

WeavedClass

Context Class:

Inv: self.IsWeavedClass() implies self.parents()->

exist(x,y/x.isAspect() and x<>y and not y.IsAspect())

Donde parents() es una operación propia de UML que devuelve las superclases de la

clase que invoca la operación.

Page 95: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

87

b) Un aspecto en caso de ser una subclase sólo puede tener como superclase a otro

aspecto. Esto se debe a que puede existir la necesidad de especificar un aspecto, esto se

puede realizar creando una subclase del mismo. Un aspecto no puede ser una subclase

de una clase ya que violaría el sentido de la OA la cual indica que los aspectos

implementan los crosscutting concerns del sistema. Si un aspecto tiene como superclase

una clase este debería ser una clase tejida, por consiguiente debe tener otra superclase

estereotipada como aspecto.

Context Class

Inv: self.isAspect()and self.parents()->notempty()

implies self.allparents()->

forall(c/c.isAspect())

La operación allparents() es de UML y devuelve todos las superclases de todas las

superclases de la clase que la invoca.

c) La relación Realize existe únicamente entre un Aspecto y una clase. Esta relación

indica que una clase utiliza el aspecto en algún punto de su especificación. El aspecto

modela un crosscutting concern que luego será incorporado a la clase base en el

momento indicado por los puntos de enlace definidos.

Context Class::IsRealize():Boolean

Pre:

Post: IsRealize= self.extension.ownedEnd->

exist(e/e.name=”Realize”)

La operación anterior (IsRealize) indica si la clase esta estereotipada como Realize.

Context Realization:

Inv: self.IsRealize() implies (self.supplier.isAspect()-

>exist(x\x.IsApect())) and (self.client->exist(y\y->not

isAspect())

En esta restricción pide que el extremo de la relación Realize (supplier) exista una clase

que es un aspecto y a su vez que el origen (client) exista una clase que no sea un

aspecto.

Page 96: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

88

d) Las operaciones Pointcut y Advice sólo pueden pertenecer a un aspecto. Estas

operaciones son propias de la OA, por lo que no pueden existir en las clases que no sean

aspectos las cuales modelan dónde (Pointcut) ejecutar las sentencias (Advice) que

implementan el crosscutting concern.

Se definen las operaciones IsAdvice e IsPointcut de manera que indique si las clases

están estereotipadas como Advice y Pointcut respectivamente.

Context Class::IsPointCut():Boolean

Pre:

Post: IsPointCut= self.extension.ownedEnd->

exist(e/e.name=”PointCut”)

Context Class::IsAdvice():Boolean

Pre:

Post: IsAdvice= self.extension.ownedEnd->

exist(e/e.name=”Advice”)

Context Operation

Inv: self.IsPointCut() implies self.class.IsAspect()

Inv: self.IsAdvice() implies self.class.IsAspect()

Las restricciones anteriores aunque parecen obvias son necesarias debido a que no se

puede modelar en los perfiles UML relaciones entre los estereotipos a menos que esta

sea una generalización y/o especialización.

Page 97: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

89

Figura 5.3 (a): Metamodelo UML 2.3 (Class Diagrams)

Figura 5.3 (b): Metamodelo UML 2.3 (Dependencies)

Page 98: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

90

e) No pueden existir aspectos aislados. Está restricción se debe a que si se define un

aspecto para implementar un crosscutting concern, éste debe estar relacionado. Un

aspecto sólo puede “ejecutarse” si otra clase lo incorpora en su comportamiento.

Context Class

Inv: Class.allInstances()->

forall(c/c.IsAspect() implies

(RelationShip.allInstances().relatedelement-> exist(x| x=c)

En esta restricción se afirma que todas las clases que son estereotipadas con Aspect

implica que existe alguna relación que tiene ese aspecto como origen o destino.

Con el fin de verificar la utilidad del perfil OA definido y de contrastar las restricciones

en OCL aplicadas sobre el metamodelo UML se han realizado aplicaciones del mismo.

En las secciones siguientes se detallan las aplicaciones del perfil OA en dos casos de

estudio.

5.2.4 Definición del perfil OA en la herramienta Papyrus

Se realizó la definición del Perfil OA utilizando una herramienta de modelado. La

herramienta utilizada fue Papyrus[77].

Papyrus es un proyecto de software libre que se incorpora a Eclipse. Esta herramienta se

utiliza para graficar modelos UML 2 y definir restricciones en OCL para el mismo.

Utiliza la versión UML 2.2 y la versión OCL 2.1. Además de la definición de modelos

es posible definir perfiles y luego aplicarlos en un modelo particular. Siendo esta

característica la que llevó a elegirlo como herramienta de prueba. Existen otras

herramientas que permiten validar OCL pero no permiten la incorporación de un perfil

para aplicarlo en modelos.

Para verificar la utilidad del perfil así como las restricciones del mismo se define el

perfil propuesto en esta tesis de maestría en el entorno de Papyrus. La ventaja del uso de

esta herramienta es que permite validar y “ejecutar” las operaciones de OCL. Papyrus

utiliza una definición de UML 2.2 la cual es semejante a la última versión de UML 2.3.

Page 99: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

91

Figura 5.4 Perfil OA en la Herramienta Papyrus

Una vez definido gráficamente el perfil se definieron las restricciones en el nivel M2 de

modelado (Figura 5.4).

Como ejemplo de implementación de las restricciones definidas en la sección anteior se

muestra a continuación la restricción (a). Ésta especifica que una WeavedClass debe

tener como superclase al menos un aspecto y al menos una clase. En este caso la

restricción se define en el contexto WeavedClass.

self.parents()->exists( x,y |y.getAppliedStereotypes().name->

includes('Aspect')->notEmpty() and x<>y)

Se muestra ahora la definición en Payrus de la restricción (e). Ésta indica que no debe

haber aspectos aislados. La restricción es definida a nivel del perfil, no en una clase o

estereotipo particular.

Relationship.allInstances().relatedElement->

includesAll(Class.allInstances()->

select(c|c.getApplicableStereotypes().name->includes('Aspect')))

Page 100: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

92

Como se puede observar en las restricciones anteriores se utiliza la operación

getAppliedStereotypes(). Esta operación es provista por Papyrus, permite determinar si

una metaclase tiene un estereotipo aplicado. La operación getAppliedStereotypes()

devuelve un conjunto de estereotipos. Luego se pregunta si incluye el estereotipo

‘Aspect’.

Por otro lado se puede observar que la implementación de esta restricción (e) no fue tan

directa como el caso de la restricción (a). Esto se debe a que por motivos de

implementación de la herramienta Papyrus algunos de los caminos accesibles a través

de las metaclases de UML no están implementadas. Por esta razón, se toman todas las

relaciones y luego se solicita que todos los aspectos del modelo estén incluidos en ese

conjunto.

Luego de definir las restricciones correspondientes al perfil (ver Anexo A) se aplico el

mismo a un modelo particular. En la figura 5.5 se muestra el modelado de un sistema

que envía mensajes a través de un comunicador. El comunicador se encarga de enviar

un mensaje. Como este mensaje lleva un encabezado que indica la modalidad de envío

(urgente, normal, etc.) el aspecto Modal le antepone esta información. Luego del

mensaje el aspecto SaludoJapones coloca el saludo de despedida al mensaje el cual va

en Japones. Este modelo es una parte de un sistema de mensajes internacionales, que

para los fines de ejemplo ha sido simplificado.

Figura 5.5. Modelado de sistema

Page 101: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

93

Se realizaron diferentes modelos de manera tal que se pudiera realizar la verificación de

éstos de acuerdo al perfil OA definido. En particular el modelo de la figura 5.5 cumple

con las restricciones definidas en el perfil.

Siguiendo con el ejemplo anterior se muestra el mismo modelo con un aspecto aislado.

Recuerde que se definió como restricción (e) del perfil que no puede haber aspectos

aislados. En este caso la validación es fallida ya que no cumple con la restricción

mencionada. En la figura 5.6 se muestra el error al validar el modelo, es decir la

restricción “No existen aspectos aislados” devuelve el valor FALSE; por lo tanto el

modelo no cumple con la restricción (e) del perfil OA.

Figura 5.6. Modelo que contiene un aspecto aislado (SaludoJapones)

Como se dijo anteriormente se realizaron diferentes pruebas del Perfil OA aplicado a

distintos modelos OA con el fin de evaluar su aplicación en casos, aunque de

laboratorio, permitieran de alguna manera verificar su aplicabilidad y validez.

5.2.5 Generación automática de código AspectJ a partir del Perfil OA

El perfil OA definido en este trabajo se utilizó como base para la construcción de una

herramienta que genera código AspectJ automáticamente.

A continuación se explica brevemente la herramienta construida como trabajo final de

Licenciatura en Cs. de la Computación [78].

Page 102: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

94

Para el soporte de aspectos, se mostró anteriormente la definición de un Perfil OA, el

cual es aplicado para lograr construir el modelo OA. Una vez generado el modelo OA

con formato XMI [79], se hace la transformación del documento XMI al metamodelo

XML basado en el esquema OA visto antes.

Este metamodelo es construido a través del lenguaje de consulta XQuery [80].

Utilizando el metamodelo XML para el cual se definió un esquema OA, se comienza la

transformación de código XML a AspectJ. Esta transformación se hace por medio de un

programa escrito en lenguaje de programación Java.

La Figura 5.7 muestra los pasos seguidos para la construcción la herramienta que genera

código AspectJ.

Figura 5.7: Transformaciones desde Perfil OA hasta código AspectJ

El programa construido en Java parsea el metamodelo XML guardándolo en una

estructura interna. Esta estructura está compuesta de un conjunto de clases y un

conjunto de relaciones. Las clases poseen un conjunto de atributos y un conjunto de

operaciones. A su vez las operaciones poseen un conjunto de parámetros. Una vez

Page 103: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

95

guardada toda la información en la estructura interna, se comienza la generación de

código AspectJ.

5.3 Definición de Métricas Orientadas a Aspectos en OCL

Se realizó la definición de métricas específicas para sistemas OA, aplicables a partir de

la etapa del diseño. En esta etapa, la más costosa, surge el modelado de los aspectos del

sistema.

Teniendo en cuenta que la POA es una nuevo paradigma para el desarrollo de sistemas

de software. La evaluación de la misma puede realizarse a través de distintas

herramientas para poder así calificar su uso. Una de las herramientas que permiten

medir de manera más objetiva el diseño realizado son las métricas. Mediante la

aplicación de distintas técnicas se puede evaluar el proceso de desarrollo de sistemas

OA.

La mayor parte del diseño OA es subjetivo, un diseñador “sabe” como caracterizar un

sistema OA para implementar efectivamente los requerimientos del cliente. Pero se sabe

que una vista más objetiva del diseño es más beneficiosa. La definición de métricas

proporciona esta vista objetiva del diseño realizado [48]

Se pueden encontrar distintos trabajos acerca de métricas aplicadas a diferentes

metodologías, en particular las métricas para sistemas OO [81, 82] es un campo muy

estudiado. Éstos trabajos definen formal o semi formalmente métricas aplicables a la

OO.

En cuanto a métricas específicamente para sistemas OA hay muy poco realizado,

algunos como el trabajo [12] han establecido que si se aplica la metodología de OA para

el desarrollo se mejoran los valores obtenidos en las métricas para OO: es decir se

compara un sistema OA con un sistema OO usando métricas OO y se puede observar

que la aplicación de la OA mejora el diseño del sistema.

Teniendo en cuenta las similitudes entre la OA y la OO algunas métricas como las C&K

(Chidamber & Kemerer) [64] o las métricas MOOD (Metrics for Object Oriented

Design) [65], sirven de base para la definición de métricas para sistemas OA y además

al tener una extensión de UML a través de un perfil se puede definir métricas para

sistemas OA utilizando OCL.

Page 104: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

96

5.3.1 Peso de método por Aspecto (PMA)

La cantidad de métodos y su complejidad es un indicador razonable de la cantidad del

esfuerzo necesario para implementar y verificar un aspecto. Si el número de métodos es

grande el árbol de herencia será más complejo porque los aspectos hijos heredan los

métodos de sus predecesores.

Context Class:: PMA():Integer;

pre: self.isAspect()

PMA=(self.ownedOperation->collect(m/m.CPMA())-> sum();

Donde el valor que devuelve CPMA() es la complejidad del método asignada por el

equipo de desarrollo.

Context Operation::CPMA():Integer

Pre:

CPMA= if self.IsPointcut() then 100

else

If self.IsAdvice() then 50

else 10

endif

endif

Es importante tener en cuenta que el número de los métodos de los aspectos debería ser

pequeño ya que su función es encapsular la funcionalidad.

En los sistemas OO, si el número de métodos crece para una clase particular es probable

que sea muy específica para la aplicación, limitando su potencial reuso. Esto puede

considerarse como un indicador de que la clase tiene mezclada en su estructura un

aspecto.

En cambio en los sistemas OA si el valor de PMA es alto, el esfuerzo de prueba del

aspecto será mayor y no necesariamente indicará que éste no es reutilizable como en el

caso de la OO.

5.3.2 Profundidad del árbol de herencia (PAH)

Esta métrica indica la longitud máxima desde el nodo raíz a la hoja del árbol de

herencia. Es decir PAH mide el número de ancestros de un aspecto.

Context Class::PAH:Integer

pre: self.isAspect()

Page 105: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

97

PAH= if self.parents()-> isEmpty() then 0;

else 1+ (self.parents().PAH())-> sum()

endif

dónde parents() es una operación provista por UML que devuelve los predecesores

inmediatos de la clase.

Considerando que en los sistemas OO muchas veces las subclases se definen para

modelar el comportamiento transversal de la clase. La profundidad del árbol de herencia

(PAH) será menor en los sistemas OA ya que ese comportamiento se encapsula en un

aspecto separado.

5.3.3 Número de Hijos (NH)

Los aspectos que están subordinamos por una clase, se llaman descendientes. A medida

que el número de descendientes crece, la reutilización aumenta, pero también es cierto

que a medida que crece NH, la abstracción representada por sus predecesores puede

disolverse.

Context Class::hijos():Set(Class)

hijos= (Class.allinstances()-> select(c/ c.parents()->

includes(self)));

Context Class::NH:Integer

pre: self.isAspect()

NH=(self.hijos()->size())

Esta métrica representa el mismo indicador en los sistemas OO que en los OA un

número alto de NH puede causar que el predecesor sea abstracto perjudicando el diseño

del sistema.

5.3.4 Acoplamiento entre Aspectos (AA)

AA está asociado a la noción de que un aspecto está acoplado a otro si uno actúa sobre

el otro. Esto significa que dos clases (clase y aspecto o aspecto y aspecto) están

acopladas cuando métodos declarados en una clase utilice métodos o variables de

instancias definidas por otra clase.

AA es la suma de las clases y/o aspectos a las cuales un aspecto se encuentra acoplado.

Page 106: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

98

Se define la operación asociaciones y dependencias las que devuelven las asociaciones y

dependencias en la cual la clase es origen o destino.

context Class::asociaciones(): Set (Association)

asociaciones= (Association.allInstances()->

select(a|a.memberEnd.class->includes(self)) ->asset();

context Class::dependencias()Set (Dependency)

dependencias=Dependency.allInstance()-> select (d\d.supplier

->includes(self.clientDependency.client)->union

(self.clientDependency.supplier) ->asset())

context Class::AA:Integer

pre: self.isAspect()

AA= (self.asociaciones()->size()+ self.dependencias()-> size())

Si bien AA indica el nivel de acoplamiento de un aspecto es interesante saber por

separado si el acoplamiento es con otros aspectos o con otras clases. Esto se debe a que

es esfuerzo de prueba se ve incrementado si una clase esta fuertemente acoplada con

mas de un aspecto.

5.3.5 Dependencia entre Aspectos (DA)

Una métrica que indica si se produce la llamada “paradoja entre aspectos” es la que

indique si se produce el acoplamiento y/o dependencia entre aspectos.

La paradoja entre aspectos surge cuando en pos de mejorar el diseño se reutilizan los

aspectos entre aspectos. Es decir se produce acoplamiento entre aspectos el cual tiene

consecuencias similares al acoplamiento entre objetos.

Entonces ocurre que al aplicar la OA para resolver el problema de crosscutting concerns

el que causa el acoplamiento entre objetos se llega al acoplamiento entre aspectos el

cual trae los mismos inconvenientes, esta es la paradoja entre aspectos.

Se define la métrica DA la cuál indica si existe acoplamiento entre aspectos del sistema.

context Class::DA:Boolean

pre: self.isAspect()

DA= (self.asociaciones()->exist(c\c.memberEnd.class.IsAspect()

and c.memberEnd.class <> self)

Page 107: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

99

or self.dependencias()-> excluding(self)->

exist(c\c.IsAspect())

5.3.6 Dependencia entre Clase -Aspectos (DCA)

Una clase puede utilizar uno o más aspectos para complementar una funcionalidad. Un

aspecto es tejido en muchos lugares diferentes, y no se puede asegurar que la clase

tejida funcione correctamente sino no se han probado cada uno de los puntos de enlace.

Además si se tiene en cuenta que muchas veces una clase esta relacionada con más de

un aspecto, el costo de prueba de la clase aumentará a medida que crece el acoplamiento

entre clases y aspectos. La siguiente métrica indica el nivel de dependencia de una clase

con respecto a los aspectos del sistema

context Class::DCA:Integer

pre:

DCA= (self.dependencias()->select(x/x.IsRealize()))->size());

5.3.7 Respuestas por Aspecto (RA)

El total de las respuestas de un aspecto a una clase es el conjunto de métodos que

pueden ejecutarse potencialmente como respuesta a un mensaje que recibe el aspecto.

Estos son todos los métodos accesibles en una jerarquía de clases. Se define RA como

el número de métodos existentes en el conjunto de respuestas.

context Class::RA:Integer

pre: self.isAspect()

RA=

If self.allparents() -> isempty() then self.allmethod()->size();

else collect(self.parents().RA())->sum()

endif

5.3.8 Número de Aspectos (NA)

En un diseño orientado a aspectos la unidad principal es el aspecto, es natural medir la

cantidad existente.

context Class::NA:Integer

pre:

Page 108: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

100

NA=Class.allInstances()->select (c\c.IsAspect())->size();

Se considera la orientación a aspectos como una mejora a los problemas que tiene la

orientación a objetos con respecto a los crosscutting concerns. Pero si en un diseño

orientado a aspectos el número de aspectos es alto, indica que probablemente el diseño

haya sido demasiado específico.

El uso de la orientación a aspecto promueve que los aspectos sean utilizados por

distintas clases. Un alto acoplamiento de un aspecto de una clase causara un incremento

en el esfuerzo de prueba del aspecto. Esto se debe a que uno de los problemas de la OA

es el costo de prueba de un aspecto (esto es porque se debe probar en todas las clases y

en todos los lugares de la misma en la que se incorpora el aspecto). Además si el

número de aspectos es alto el esfuerzo total se incrementará también.

Un diseño orientado a aspectos es aceptable si el número de aspectos es bajo caso

contrario la utilización de este paradigma debería reconsiderarse ya que no aporta

mejora con respecto al uso de la OO.

5.3.9 Cantidad de operaciones de un aspecto (COA)

Esta medida indica la cantidad de operaciones de un aspecto sin tener en cuenta las

operaciones heredadas.

Context Class::COA():Integer

Pre: self.isAspect()

Post: COA=self.ownedOperation->size()

De forma similar se puede calcular a partir de esta medida cuantas de las operaciones

existentes son pointcut.

Context Class::CPCA():Integer

Pre: self.isAspect()

Post:CPCA=self.ownedOperation->select (x/x.IsPointCut())->size()

Cuantas operaciones son advice.

Context Class::CAdA():Integer

Pre: self.isAspect()

Page 109: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

101

Post: CAdA=self.ownedOperation->select (x/x.IsAdvice())->size()

5.3.10 Cantidad de atributos de un aspecto (CAA)

Esta medida indica los atributos de un aspecto sin tener en cuenta los atributos

heredados.

Context Class:CAA():Integer()

Pre: self.isAspect()

Post: CAA=self.ownedAttribute->size()

5.3.11 Cantidad total de operaciones de un aspecto (CTO)

Esta medida indica las operaciones de un aspecto teniendo en cuenta las operaciones

heredadas. Recuerde que una clase puede heredar de múltiples padres.

Context Class::CTO():Integer

Pre: self.isAspect()

Post: CTO= if self.parents()->isempty() then self.COA()

else

collect(self.parents().CTO())-> sum()

endif

5.3.12 Cantidad total de atributos de un aspecto (CTA)

Esta medida indica los atributos de un aspecto teniendo en cuenta los heredados.

Recordemos que una clase puede heredar de múltiples padres.

Context Class:CTA():Integer

Pre: self.isAspect()

Post: CTA= if self.parents()->isempty() then self.CAA()

else collect(self.parents().CTA())->sum()

endif

Page 110: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

102

5.3.13 Tamaño de un aspecto (TA)

Teniendo en cuenta que el tamaño total de un aspecto depende de la cantidad total de

atributos y operaciones que contiene, es directa la definición del tamaño de un aspecto.

Context Class:TA():Integer

Pre: self.isAspect()

Post: TA= self.CTA()+self.CTO()

5.3.14 Indicación de herencia múltiple (HM)

Esta medida indica si el aspecto hereda o no de múltiples superclases, y en caso de que

sea así indica de cuantas.

Context Class:HM():Integer

Pre: self.isAspect()

Post: HM= self.parents()->size()

5.3.15 Clases Tejida

Las WeavedClass surgen del tejido de la clase con el/ los aspectos que utiliza en el

momento de la implementación del sistema. En la etapa de diseño el diseñador puede

predecir cuantas clases surgirán en el momento de la implementación si es que el

lenguaje utilizado hace uso de esta componente. Los LOA que no especifican las clases

tejidas son aquellos lenguajes de propósito específico. En ese caso las clases tejidas no

serán artefactos del diseño por lo que las métricas relacionadas a la misma carecen de

interés.

En el caso de AspectJ la cantidad de clases tejidas es un indicador para la realización de

las pruebas. Esto se debe a que éstas son las que efectivamente pasan por el proceso de

prueba y no las clases y los aspectos separadamente.

Se puede estimar la cantidad de clases tejidas en la etapa del diseño con respecto a la

cantidad de clases que se utilizan aspectos. Luego ECT estima la cantidad de clases

tejidas que surgirán en la implementación. Esta medición es interesante ya que dará un

indicador del esfuerzo de prueba.

Page 111: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

103

Context Class:ECT:Integer

Pre:

Post: Class.allinstances->select(c/c.DCA()>0)->size()

Otras métricas para clases tejidas se derivan directamente de las vistas en las secciones

anteriores como la cantidad de operaciones, atributos, el tamaño de la clase tejida y el

acoplamiento con otras clases o entre clases tejidas. Estas métricas son semejantes a las

realizadas para aspectos por esto se presentará el acoplamiento entre clases tejidas

(AWC) a manera de ejemplo.

Ésta métrica es significativa ya que cuanto mayor sea el acoplamiento entre clases

tejidas mayor será el esfuerzo de prueba ya que no se podrán hacer pruebas modulares.

Si el sistema esta altamente acoplado la prueba deberá realizarse sobre todos el sistema.

El equipo de prueba deberá desarrollar una técnica de manera tal que se verifique el

cumplimiento de los requerimientos principales sin realizar un prueba total, la cual es

costoso en tiempo y recursos.

context Class:AWC:Integer

pre: self.isWeavedClass()

AWC= (self.asociaciones()->size()+ self.dependencias()->size();

5.4 Aplicación empírica de métricas en un diseño orientado a aspectos

En esta sección se mostrarán algunos de los valores de la aplicación de las métricas para

un modelado orientado a aspectos. La aplicación de las métricas se realiza de forma

empírica para poder constatar las afirmaciones realizadas en las secciones anteriores.

Se mostrará el diseño de un sistema que aplica la orientación a aspectos de acuerdo a las

métricas definidas se evaluará que tan adecuado es.

Como se dijo en la sección 5.2.4 el perfil OA fue definido en la herramienta Papyrus.

Además se definieron diferentes modelos OA con el fin de calcular sobre ellos las

métricas definidas en la sección 5.3.

Se muestra a continuación la aplicación de las métricas en un caso de estudio. Éste es

ampliamente utilizado en el desarrollo OA.

Page 112: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

104

5.4.1 Pool de conexiones de base de datos OA

Se muestra a continuación el modelo de diseño correspondiente a un Pool de recursos,

en particular conexiones de base de datos (BD). Como se sabe la creación y destrucción

de conexiones a BD es costosa, el Pool de conexiones es una mejora tradicional que se

utiliza en los sistemas para mejorar su performance. El código convencional para

realizar esta tarea requiere de un código que explícitamente maneje la lógica del pool en

cada uno de los módulos que crean o destruyen las conexiones. Si además se pretende

reutilizar el pool en otros sistemas, seguramente de debe adaptar al mismo modificando

todos los módulos que crean y destruyen las conexiones. Si se implementa el pool con

OA, se puede ver la creación y destrucción de las conexiones como un crosscutting

concern. Se puede entonces encapsular la lógica del pool en un aspecto. La figura 5.8 se

muestra el modelo OA de este sistema.

Figura 5.8 Pool de conexiones de BD utilizando OA

Si bien el modelo es simple se pueden encontrar en el los principales problemas a la

hora de utilizar la OA, como la reutilización de aspectos, tejido de las clases, etc. Se

muestra a continuación la aplicación de las métricas más significativas para este

modelo.

Page 113: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

105

5.4.2 Resultados y análisis de métricas

Se definieron todas las métricas presentadas en esta tesis de maestría (Anexo B), en

particular se muestran algunas de las métricas y la explicación del significado del valor

obtenido.

RA: self.allParents().getOperations()->size()+self.ownedOperation

->size()

Es el número posible de respuestas de un aspecto frente a un posible mensaje recibido.

La métrica es aplicada en el contexto de un aspecto particular, en este caso el aspecto

DBConexionPoolAspect. El valor de RA es 4 (Figura 5.9) esto indica que existen 4

operaciones que pueden responder a un mensaje. En el caso que el aspecto sea una

subclase RA considera las operaciones heredadas.

Para la implementación de RA se utilizan la operación getOperations provista por la

herramienta, la cual devuelve todas las operaciones. Esta operación no se encuentra

definida en UML.

Figura 5.9 RA

Page 114: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

106

CAA: self.attribute->size()

En este caso se modifica el modelo de conexión agregando un atributo al aspecto

DBConexionPoolAspect (Figura 5.10). La existencia de atributos en un aspecto muchas

veces indica la dependencia o relación con otra clase del modelo, por lo cual es

necesaria una revisión del mismo de manera tal que no exista información redundante o

ambigua en éste.

Figura 5.10 CAA

COA: self.ownedOperation->size()

En este caso particular el valor obtenido de COA es el mismo de RA ya que el aspecto

sólo cuenta de operaciones propias del aspecto y no de superclases u interfaces.

CTO: self.ownedOperation->

union(self.allParents().getAllOperations())->size()

La cantidad total de operaciones de un aspecto considera además las operaciones de las

superclases del aspecto, estas se obtienen utilizando una operación propia de la

Page 115: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

107

herramienta Papyrus, no presente en UML. Esta implementación difiere en gran manera

de la definición teórica ya que debido a las operaciones adicionales de la herramienta no

es necesaria realizar una recursión para obtener el valor de CTO.

DA : (self.clientDependency.supplier->

union(Dependency.allInstances()->

select(d|d.clientDependency.supplier ->

includes(self.clientDependency.client)).supplier)-> excluding

(self)->exist(c:NamedElement|c.getApplicableStereotypes().name-

>includes(‘Aspect’)))

or

(Association.allInstances()->

select(a|a.endType-> includes(self))) .memberEnd.class.

getAppliedStereotypes().name

->includes(‘Aspect’)

Aunque a simple vista la implementación de la dependencia entre aspectos parece

diferir notablemente de la definición teórica. Esto no es así, lo que sucede es que en este

caso particular no se puede utilizar operaciones definidas por el usuario de la

herramientas (dependencias() y asociaciones()). Esto se debe a que al utilizar la

operación getAppliedstereotypes que indica si la clase esta estereotipada con una

etiqueta en particular no se puede aplicar a un conjunto resultante de clases y realizar la

colección de éstas. Se muestra en la Figura 5.11 el modelo de Pool de Conexiones

modificado. Se modela la necesidad de realizar la conexión antes de la autenticación de

usuario a través de una dependencia entre aspectos.

El valor de DA en este caso es TRUE indicando que existe dependencia entre aspectos.

Este valor puede ser un indicador de que se produce la “paradoja entre aspectos”.

Además al tener dependencia entre aspectos la prueba de los mismos debe realizarse

simultáneamente y a su vez en todos los puntos de cortes que tengan cada uno de ellos.

El esfuerzo de prueba se ve incrementado como se dijo en el capitulo 2, el principal

problema de la OA es la prueba del sistema desarrollado.

ECT: Class.allinstances->select(c|

Page 116: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

108

(c.clientDependency.supplier->

union(Dependecy.allInstances()->

select(d|d.clientDependency.supplier ->

includes(self.clientDependency.client)).supplier))

->(select(x|x.getAppliedStereotypes().name

->includes(‘Realize’))->size())

> 0)->size();

Figura 5.11 DA

ECT es definida a nivel de modelo. La estimación de la cantidad de clases tejidas indica

en esfuerzo necesario para probar el sistema. En particular para LOAs de propósito

general esta métrica es muy significativa ya que si ECT crece el esfuerzo de prueba

también. Note que (1) es la implementación de dependencias() y (2) es la

implementación de DCA (Dependencia entre Clase-Aspecto). El valor de ECT en este

modelo es 4 (Figura 5.12).

Una manera más simple de obtener la cantidad de clases tejidas es a través de la

cantidad de relaciones estereotipadas Realize. Dado que cada clase se puede relacionar

con más de un aspecto y un aspecto puede relacionarse con más de una clase, por cada

1

2

Page 117: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

109

relación existente se creará una clase tejida. Considere que existe la relación Realize la

cual modela que clase con qué aspecto será tejido, luego la cantidad de clases tejidas es

igual a la cantidad de relaciones Realize.

ECT = DCA

Dependency.allInstances()->

select(d|d.getApplicableStereotypes().name->

includes('Realize'))->size()

Figura 5.12 ECT

Page 118: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

110

Capítulo 6

Conclusiones y Trabajos Futuros

La orientación a aspectos ha surgido como una mejora de la orientación a objetos. Ésta

permite aumentar la reutilización de los crosscutting concerns encapsulados en unidades

denominadas aspectos.

El propósito de este trabajo es ayudar a los ingenieros de software que decidan

incorporar la OA (orientación a aspectos) en su desarrollo de software proveyendo

herramientas que faciliten esta tarea y permitan además evaluarla de manera objetiva.

En la actualidad no hay acuerdo con respecto al modelado de sistemas orientados a

aspectos por lo que la definición del perfil basado en ApectJ, el lenguaje OA más

utilizado, ayuda a los arquitectos y diseñadores de software en las etapas de diseño e

implementación, ya que en éstas se modelan los aspectos desarrollados en este trabajo.

Si bien se tomó un lenguaje de propósito general como caso de estudio para definir la

extensión OA, el perfil, debido a sus características es aplicable a otros lenguajes OA e

incluso a lenguajes de propósito específico. Esto se debe a que el perfil contiene los

elementos necesarios para modelar cualquier sistema OA (Aspect, PointCut, Advice y

Realize).

Uno de los objetivos de este trabajo de tesis fue definir una extensión precisa de UML

(Unified Modeling Language) para el modelado de sistemas OA, para ello, se realizó

una extensión de UML, esto se logró a través de perfiles. Se define no sólo los

estereotipos, sino también las restricciones necesarias para completar la semántica del

mismo. Al definir las restricciones utilizando lógica de primer orden, que proporciona

OCL (Object Constraint Language), se tiene la ventaja de no ser ambigua y más precisa

que otras definiciones existentes. Además al utilizar estándares de la OMG (Object

Management Group), ampliamente conocidos en la ingeniería de software, es simple de

comprender y de rápida aplicación.

El perfil definido se aplicó a modelos reales para validar su utilidad. Esto se hizo a

través de dos formas:

- Definición y aplicación del Perfil OA en la herramienta Papyrus. Definiendo

modelos OA en los cuales se aplicó el perfil y se verificó si estos modelos

cumplían o no con las restricciones del perfil.

Page 119: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

111

- Generación automática de código AspectJ. A partir de un modelo que utiliza el

perfil se realizan una serie de transformaciones que llevan a la generación

automática de código AspectJ.

La ventaja de la aplicación del perfil en el modelado de sistemas OA reales es que se

provee a los ingenieros de software de una herramienta que les permite simplificar la

tarea del diseño OA. Al definir el perfil en una herramienta de modelado utilizada,

como lo es Papyrus, la cual permite no sólo la definición sino la exportación de perfiles,

se puede aplicar el perfil a distintos modelos OA simple y rápidamente. De esta forma

se logra alcanzar otro de los objetivos propuestos en este trabajo de tesis.

Como se ha visto la OA permite un manejo más fácil del seguimiento y mantenimiento

del software desarrollado. Pero como toda nueva técnica debe ser evaluada a través de

distintas herramientas para calificar su uso. Una de las herramientas que permiten medir

de manera más objetiva el diseño realizado mediante la aplicación de distintas técnicas

son las métricas.

Las métricas proporcionan una vista más objetiva del desarrollo que se realiza, esto es

crucial en el momento de mejorar y evaluar la calidad. Por este motivo el análisis de las

métricas aplicadas a distintas etapas del desarrollo de software es un tema que debe ser

profundizado, en particular para la orientación a aspectos ya que su uso en grandes

proyectos de software aumenta rápidamente.

Esto ha motivado el análisis de las métricas para poder aplicarlas al diseño OA y

encontrar además de los posibles efectos, nuevas métricas que ayuden a calificar

objetivamente un sistema OA.

La definición de métricas para sistemas OA fue el objetivo principal de este trabajo de

tesis. Estas métricas son aplicables en la etapa del diseño, ya que ésta es la más costosa

y en la cual surge generalmente el modelado de los aspectos del sistema.

Para realizar la definición de las métricas se utilizó OCL a través de expresiones

lógicas. Además la definición de las métricas se realizó a partir de la extensión de UML

2.3 realizada, la que permite modelar el dominio específico de la OA.

Luego de la verificación teórica y semántica de las métricas propuestas se realizan

pruebas de aplicación a través de la herramienta Papyrus. Se utiliza esta herramienta ya

que permite definir perfiles, restricciones OCL y luego aplicarlas sobre modelos UML.

La definición práctica de las métricas se adecua a las propiedades de la herramienta

tales como nuevas operaciones y también a sus limitaciones. Esto se debe que la

Page 120: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

112

implementación de la capa M2 de la arquitectura UML que realiza Papyrus no es

exactamente igual a la definición propuesta por la OMG.

Uno de los objetivos de este trabajo de tesis era no sólo la definición, sino también la

aplicación de las métricas propuestas, esto se logra a través de casos de estudio. Se

realizó el modelado de sistemas OA utilizando el perfil para aplicar y ejecutar las

métricas en la herramienta Papyrus.

Los resultados obtenidos, en los modelos correspondientes a la capa M1 de la

arquitectura UML, estuvieron acorde a lo esperado. De esta manera se realizó una

validación empírica de las métricas propuestas.

A continuación se mencionan ventajas del presente trabajo de tesis que surgen

directamente del uso de estándares y de la gran variedad de herramientas CASE

existentes que los utilizan:

- Es posible automatizar la incorporación de perfiles a otras herramientas de modelado

UML de la misma manera que se hizo en Papyrus.

- A partir del uso del perfil OA realizar transformaciones en el marco de MDA para

llegar automáticamente, como se hizo la generación de código AspectJ, a código

ejecutable en diferentes lenguajes OA.

- Es posible incluir en otras herramientas, que permitan incorporar perfiles y

restricciones OCL, las métricas definidas de forma automatizada. Esto es colocando en

un archivo las métricas en OCL para aplicarlas sobre el modelo desarrollado y realizar

de esta manera el cálculo de las mismas.

Esta tesis de maestría, no sólo realiza una contribución en la evaluación de la calidad del

diseño de software OA, sino también deja la puerta abierta para seguir trabajando en la

OA en diferentes sentidos. Algunos de trabajos futuros relacionados son:

- Luego del refactoring de un sistema OO a uno OA realizar mediciones claves como la

no existencia de la paradoja entre aspectos o el alto acoplamiento.

- Proponer transformaciones específicas que lleven en el contexto de MDA, código OO

a OA (reingeniería).

- Definir métricas que ayuden a determinar la existencia de código OA en código OO.

Finalmente se puede decir que los tres objetivos planteados en este trabajo de tesis

fueron alcanzados de manera exitosa, logrando así ayudar al ingeniero de software a

evaluar objetivamente el diseño realizado e incluso evaluar la utilización o no de la OA

en el desarrollo de software.

Page 121: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

113

Referencias

[1]. Dines Bjorner: “Software Engineering 2”: Ed. Springer, 2006 [2]. Lorenz, Mark and Kidd, Jeff, “Object Oriented Software Metrics”, Prentice Hall

Publishing, 1994. [3]. Quintero A.; “Visión General de la Programación Orientada a Aspectos.”

Departamento de Lenguajes y Sistemas Informáticos. Universidad de Sevilla. http://www.us.es/centrosdptos/departamentos/departamento_I0A3

[4]. Elisa Baniassad and Siobh´an Clarke, “An Approach for Aspect-Oriented Analysis and Design”; ICSE 04 0270-5257/04 IEEE

[5]. Zakaria, H. Hosny, A.Zeid; “A UML extension for Aspect Oriented Systems”, International Workshop on Aspect-Oriented Modeling with UML,2002

[6]. O. Aldawud, T. Elrad, A. Bader; “A UML Profile for AOP”, OOPSLA 2001 workshop on Aspect Oriented Programming

[7]. Zambrano A., Rousselot J.;“Supporting Aspect Oriented requirements Engineering for Large Documents”; Anales de la 39 Jornadas Argentinas de Informática, ASSE 2010, ISBN

[8]. Dianxiang Xu, Weifeng Xu, Kendall Nygard: “A State-Based Approach to Testing Aspect-Oriented Programs”. In Proc. of the 17"h International Conference on Software Engineering and Knowledge Engineering (SEKE'05), Taiwan, July 2005.

[9]. Moui ad Badri,Linda Badri, Maxime Bourque-Fortin; “Generating unit test sequences for aspect-oriented programs: towards a formal approach using UML state diagrams”, APSEC’04 1530-1362/04 IEEE

[10]. Iris Groher, Stefan Schulze:” Generating Aspect Code from UML Models”: AOSD 2003

[11]. M. Reina Quintero,J. Torres Valderrama; “Using aspect-orientation techniques to improve the reuse of metamodels”. Aspect-Based and Model-Based Separation of Concerns in Software Systems (ABMB 2006)

[12]. Zhao J.; “Measuring Coupling in Aspect-Oriented Systems”; Department of Computer Science and Engineering; Fukuoka Institute of Technology

[13]. Shiu Lun Tsang, Siobhán Clarke, Elisa Baniassad; “Object Metrics for Aspect Systems: Limiting Empirical Inference Based on Modularity”; ABMB 2006.

[14]. Abait E., Marcos C.; “Improving Effectiveness in the Identification of Crosscutting Concerns in Source Code ”; Anales de la 39 Jornadas Argentinas de Informática, ASSE 2010, ISBN

[15]. Marcos C., Vidal S.; “Automatización de un Proceso de Refactorización para la Separación de Concerns”; Anales de la 39 Jornadas Argentinas de Informática, ASSE 2010, ISBN

[16]. Martin A. Cechich A.; “Reingeniería Orientada a Aspectos para mejorar la Accesibilidad de sitios Web”; GIISCo Research Group; Departamento de Ciencias de la Computación, Universidad Nacional del Comahue

[17]. Mostefaoui F., Vachon J.; “Verification of Aspect-UML models using Alloy”; Workshop AOM ’07, March 12-13, 2007 Vancouver, British Columbia, ACM; 1-59593-658-5/07/03

[18]. Mostefaoui F., Vachon J.; “Design-level Detection of Interactions in Aspect-UML models using Alloy”; Journal of Object Technology; Vol. 6, No. 7, Special Issue: Aspect-Oriented Modeling, August 2007

Page 122: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

114

[19]. Ubayashi N., Sato Y., et al.; “Alloy-based Lightweight Verification for Aspect-oriented Architecture”; sixth International Conference on Software Engineering Research, Management and Applications; 978-0-7695-3302-5/08; 2008; IEEE

[20]. .Object Management Group. Model Driven Architecture Guide; http://www.omg.org; 2003

[21]. Baigorria L. - Montejano G. - Riesco D.; “Definición y Aplicación de Perfil UML para AspectJ”; ASSE; 39 Jornadas Argentinas de Informática; Buenos Aires; 2010.

[22]. L. Baigorria, G. Montejano, D. Riesco, C. Abdelahad, N. Perez, "Definición del Diseño Orientado a Aspectos según el Metamodelo de la OMG", XV Congreso Argentino de Ciencias de la Computacion, 05/10/2009, San Salvador de Jujuy, Jujuy, Universidad Nacional de Jujuy, pp 832-. Red de Universidades Nacionales con Carreras en Informática.

[23]. N. Debnath, L. Baigorria, D. Riesco, G. Montejano, “Metrics Applied to Aspect Oriented Design using UML Profiles”, IEEE 13TH Symposium on Computers and Communications 2008 (ISCC’08), July 6 - 9, 2008, Marrakech, Morocco. Page(s):654–657. ISSN: 1530-1346, ISBN: 978-1-4244-2702-4. Indexed by INSPEC. Proceedings published by the IEEE Computer Society. http://ieexplore.ieee.org

[24]. L. Baigorria, G. Montejano, D. Riesco, “Metricas C&K Aplicadas al Diseño Orientado a Aspectos”, XII Congreso Argentino de Ciencias de la Computación, San Luis, del 24 al 27 de Octubre de 2006. Pg. 368-377. Universidad Nacional de San Luis, Red de Universidades Nacionales con Carreras en Informática. ISBN 950-609-050-5.

[25]. L. Baigorria, D. Riesco, G. Montejano, “Métricas Aplicadas a la Programación Orientada a Aspectos" WICC2006 en Morón (Argentina), Anales del VIII Workshop de Investigadores en Ciencias de la Computación, ISBN en CD 950-9474-35-5 y obra impresa 950-9474-34-7, pg. 313-317. Universidad Nacional de Moron, Red de Universidades Nacionales con Carreras en Informática.

[26]. N. Debnath, D. Riesco, G. Montejano, R. Uzal, L. Baigorria, A. Dasso, A. Funes, "A Technique Based on the OMG Metamodel: A Definition of Object Oriented Metrics applied to UML Models", The 3rd ACS/IEEE International Conference on Computer Systems and Applications January 3-6, 2005, Cairo, Egypt. pp 118-125. ISBN: 0-7803-8735-X, IEEE Catalog Number: 05EX949, Library of Congress Number: 2004110879. URL: http:// ieeexplore.ieee.org. IEEE Computer Society Press.

[27]. Ramnivas Laddad; “I want my AOP”; Parte 1, 2 y 3; JavaWorld; 2002. [28]. Colyer A., Clement A., Harley G., Webster M.; “Eclipse AspectJ: Aspect-

Oriented Programming with AspectJ and the Eclipse AspectJ Development Tools”; 2004

[29]. Colyer A., Clement A.; Aspect-oriented programming with AspectJ. IBM Systems J.; 44(2); 301-308; 2005.

[30]. Colyer, Clement; “Large-scale AOSD for middleware”; Proceedings of the 3rd international conference on Aspect-oriented software development; ACM, 2004

[31]. Jacobson and P. Ng; “Aspect-oriented Software Development”; Adison Wesley, 2005

[32]. Sommerville I.; “Software Engineering”, 8va. Ed.; Prentice Hall; 2007. [33]. Kiczales G., Lamping J., Mendhekar A., Maede C., et al.; “Aspect-Oriented

Programming”, Publicado en European Conference on Object-Oriented Programming (ECOOP); Finland, 1997

Page 123: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

115

[34]. Ramnivas Laddad, “AspectJ in action”. Practical Aspect-Oriented Programming; Manning Publictions, 2003.

[35]. Birrer I, Pasetti A., et al; “The Xweaver Project: aspect-oriented programming for on-board applications”; http://control.ee.ethz.ch/index.cgi?page=publications;action=details; id=2361.

[36]. Ivar Jacobson, Grady Booch, James Rumbaugh; “El lenguaje unificado de modelado”; Adison Wesley; 1999

[37]. Easterbrook S., Nuseibeh B., “Using ViewPoints for Inconsistency Management”, Software Engineering Journal, 11(1): 31-43, BCS/IEE Press, January 1996

[38]. Finkelstein A., Kramer J. et al.; “Viewpoints: a framework for integrating multiple perspectives in system development. Int. Software Engineering Knowledge Engineering; Vol 2; 310-58; 1992.

[39]. R.E. Filman, T. Elrad ; “Aspect-oriented Software Development”; Adison Wesley; 2005

[40]. T. Highley, M. Lack, P. Myers, “Aspect-Oriented Programming: A Critical Analysis of a New Programming Paradigm”. University of Virginia, Department of Computer Science, Technical Report CS-99-29, Mayo 1999 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.43.5033 último acceso 04/07/2009.

[41]. Katz E., Katz S.; “Verifying Scenario-Based Aspect Specifications”; Formal Methods, International Symposium of Formal Methods Europe, Newcastle; 2005

[42]. Briand L., El Eman K., Morasca S.; “Theorical and empirical validation of software product measures”; Technical report ISERN-95-03, International Software Engineering Research Network; 1995.

[43]. IEEE Computer Society. "Metrics in Software." Computer 27, 9; pag 13-79; 1995.

[44]. Shrum, Sandy, Konrad, Mike, “CMMI: Guía pata la integración de procesos y la mejora de productos”, Addison Wesley, 2da Edición, 2009

[45]. ISO/IEC 9003. Software engineering-Guidelines for the application of ISO 9001:2000 to computer software. International Organizations for Standarization. Ginebra, Suiza, 2004.

[46]. Fenton N.; “Software Measurement: A Necessary Scientific Basis”; IEEE Transaction of software engineering; 1994.

[47]. Pressman, R., “Software Engineering”, Mc Graw Hill, 6ta Edición; 2005. [48]. Piattini M., Garcia F., Caballero I.; “Calidad de Sistemas Informáticos”;

Alfaomega, Ra-Ma; 2007. [49]. Serrano, M. Calero C., Piattini M.; “Validating Metrics for Data Warehouses ”;

Proceeding of the Conference on Empirical Assesement in Software Engineering (EASE 2002); Reino Unido;pag 8-10 ; 2002.

[50]. Weyuker E.; “Evaluating software complexity measures”; IEEE Transactions Software Eng., Vol 14 N 9, pag. 1357-1365; 1988.

[51]. Zuse H.; “A framework of software measurement”; Berlin, Walter de Gruyter. [52]. Morasca S.; “Software measurement”; En Handbook of Software Engineering

and Knowledge Engineering; Vol 1.; Fundamentals. Pag. 239-276; 2001. [53]. Fenton N., Pflegger S.; “Software Metricas: a Rigorous Approach”; 2da. Ed.;

Londres; Chapman & Hall; 1997. [54]. Florac W., Carlenton A.; “Measuring the software Process”; Statistical Process

Control for Software Process Improvement, Addison Wesley; 1999.

Page 124: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

116

[55]. Garcia F.; et al.; “Towards a Consistent Terminology for Software Measuremrent”; Information and Software Technology; 2005.

[56]. Garmus D., Herron; “Function Point Analysis: Measurement Practices for Successful Software Projects”; Addison Wesley; Boston; 2000.

[57]. Putman L., Myers W.; “Measures for excellence – Reliable software on time, within budget”; Prentice Hall; 1992.

[58]. McDerming J.; “Software Engineering Reference Book”; Butterworth Heinemann; 1991.

[59]. Park R.; “Software size measurement: A framework for Counting Source Statements”; Software Engineering Institute; Carnegie Mellon University; Pittsburgh; 1992.

[60]. Li W., Henry S.; “Object-oriented metrics that predict maintainability”, Journal of Systems and Software; vol. 23; pag 111-122; 1993.

[61]. Halstead, M.; “Elements of Software Science”; Elsevier North Holland; The Netherlands; 1977.

[62]. McCabe T.; “A software complexity measure”; IEEE Transaction Software on Software Engineering; vol 2; pag 308-320; 1976.

[63]. Henry S., Kafura S.; “Software Structure Metrics Based on Information Flow”; IEEE Transaction Software on Software Engineering; pag. 510-518; 1981.

[64]. Chidamber S., Kemerer C.; IEEE Transaction Software on Software Engineering; pag 476-493; 1994.

[65]. Brito e Abreu F., Melo W.; “Object-oriented Software Engineering: Measuring and controlling the development process”; 4th. International Conference on Software Quality; McLean; USA; 1994.

[66]. Marchesi M.; “OOA Metrics for the Unified Modeling Language”; 2nd. Euromicro Conference on Software Maintenance and Reengineering; pag 67-73; 1998.

[67]. Genero M., Piattini M., Calero M.; “Metrics for Software Conceptuals Models”; Imperial College Press; UK; 2004.

[68]. Bansiya J., Davis C.; “A Hierarchical Model for Object-Oriented Design Quality Assesement”; IEEE Transaction on Software Engineering; pag 4-17; 2002.

[69]. Derr K.; “Applying OMT”. SIG Books; Prentice Hall; New York; 1995. [70]. Miranda D., Genero M., Piattini M.; “Empirical Validation of Metrics for UML

statechart diagrams”; 5th International Conference on Enterprice Information Systems (ICEIS 03); pag 87-95; 2003.

[71]. Reynoso L. et al.; “Measuring OCL Expressions: An Approach Based on Cognitive Techniques”; Capítulo 5 en Metrics for Software Conceptual Models; Imperial College Press; UK; 2004.

[72]. Lavazza L.; “Providin Automated Support for the GQM Measurement Process”; IEEE Software; 2000.

[73]. Giles A., Daich G., “Metrics Tools”; Crosstalk; The Journal of Defense Software Engineering; 1995.

[74]. UML 2.3 Superstructure; http://www.omg.org/spec/UML/2.3/Superstructure/PDF/; Mayo 2010.

[75]. UML 2.3 Infrastructure; http://www.omg.org/spec/UML/2.3/Infrastructure/PDF/Mayo 2010.

[76]. UML 2.0 OCL Specification, http://www.omg.org, Agosto del 2006.

[77]. Papyrus http://www.papyrusuml.org/ último acceso septiembre 2010.

Page 125: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

117

[78]. Adbelahad C, Trabajo de Licenciatura en Ciencias de la Computación; Facultad de Ciencias Físico Matemáticas y Naturales; UNSL; 2010.Directores: Riesco D. Baigorria L

[79]. IBM “XML (Extensible Markup Language)” IBM Corp. 1998, 2001 http://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/rzakl/rzakl.pdf

[80]. XQuery J. J. Gutiérrez, M. J. Escalona, M. Mejías, J. Torres, D.Villadiego “XQuery”. Universidad de Sevilla Lenguajes y Sistemas Informáticos España Sevilla, Febrero 2005 http://www.lsi.us.es/investigacion/informes.php último acceso 16/4/2010

[81]. Uzal, R.; Baigorria, L., Peralta, M.; Riesco, D.; “Object Oriented Metrics Applied To Rup Models”; Special Issue of the Journal of Computational Methods in Science and Engineering (JCMSE), ISBN 1-58603-495-2; 2004.

[82]. Yacoub S., Ammar H., Robinson T.; “Dynamic Metrics for Object Oriented Design”; Software Metrics Symposium; Proceedings. Sixth International; IEEE; 1999.

Page 126: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

118

Anexo A

Restricciones del Perfil OA

Restricción (b)

En el caso de que el aspecto sea una subclase entonces la superclase debe ser un

aspecto.

self.superClass->notEmpty() implies self.superClass ->exists( y

|y.getAppliedStereotypes().name->includes('Aspect')->notEmpty())

Figura A.1 Restricción b

Restricción (c)

La relación Realize sólo existe entre clase y aspecto

Realization.allInstances()->select(d|d.getAppliedStereotypes().name-

>includes('Realize')).supplier.getAppliedStereotypes().name->

includes('Aspect')

and

Realization.allInstances()->select(d|d.getAppliedStereotypes().name-

>includes('Realize')).client.getAppliedStereotypes().name->

excludes('Aspect')

Page 127: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

119

Figura A.2 Restricción c

Restricción (d)

Las operaciones Pointcut y Advice sólo pueden pertenecer a aspectos

Pointcut

Operation.allInstances()->select(o|o.getAppliedStereotypes().name->

includes('Pointcut')).class.getAppliedStereotypes().name-

>includes('Aspect')

Figura A.3 Restricción d.1 Pointcut

Page 128: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

120

Advice

Operation.allInstances()->select(o|o.getAppliedStereotypes().name->

includes('Advice')).class.getAppliedStereotypes().name-

>includes('Aspect')

Figura A.4 Restricción d.2 Advice

Page 129: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

121

Anexo B

Métricas OA en Papyrus

PAH self.allParents()->size()+1

RA self.allParents().getOperations()->size()+self.ownedOperation->size()

Page 130: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

122

PMA self.getAllOperations()->collect (c| if c.getAppliedStereotypes().name->includes('Pointcut') then 10 else if c.getAppliedStereotypes().name->includes('Advice')then 50

else 0 endif endif)->sum()

CAA self.attribute->size()

CTA

self.allParents()->collect(attribute)->union(self.attribute)

Page 131: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

123

COA self.ownedOperation->size()

CTO self.ownedOperation->union(self.allParents().getAllOperations())->size()

Page 132: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

124

AA Association.allInstances()->select(a: Association| a.endType->includes(self))->size()+ Dependency.allInstances()->select(d:Dependency |d.client->includes(self) or d.supplier->includes(self))->size()

NA Class.allInstances()->select(c|c.getApplicableStereotypes().name->includes('Aspect'))->size()

Page 133: Tesis Maestría en Ingeniería de Softwaresel.unsl.edu.ar/lacis/tesis_grado/2010/Tesis Maestria...Las métricas de software son formas de calificar, entre otros, el diseño de software

125