Una integración de Patrones de Diseño en Procesos de Ingeniería Forward de Modelos Estáticos UML



Documentos relacionados
Patrones de software y refactorización de código

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

Elementos requeridos para crearlos (ejemplo: el compilador)

La Necesidad de Modelar. Diseño de Software Avanzado Departamento de Informática

El Proceso Unificado de Desarrollo de Software

"Módulo OOWS para StarUML" INTRODUCCIÓN

Transformación de modelos en el proceso de obtención de Modelos Conceptuales partiendo de BPMN

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON)

DISEÑO DE COMPONENTES DE SOFTWARE *

forma de entrenar a la nuerona en su aprendizaje.

DIAGRAMA DE CLASES EN UML

GUIA SOBRE LOS REQUISITOS DE LA DOCUMENTACION DE ISO 9000:2000

Tutorial de UML. Introducción: Objetivos: Audiencia: Contenidos:

Evolución de Plantillas Genéricas para la descripción de Casos de Uso a Plantillas Genéricas para Análisis y Diseño

BPMN vs UML. Los Requerimientos y el Modelo del Negocio. Autor: Norberto Figuerola

Ingeniería del Software I

UNIVERSIDAD AUTÓNOMA DE CHIAPAS LICENCIATURA EN SISTEMAS COMPUTACIONALES

GENERACIÓN DE APLICACIONES MEDIANTE LENGUAJES ESPECIFICOS DE DOMINIO

Ingeniería de Software

Una Introducción al UML. El Modelo de Proceso de Negocio

El Proceso Unificado Rational para el Desarrollo de Software.

1 GLOSARIO. Actor: Es un consumidor (usa) del servicio (persona, sistema o servicio).

Metodología Orientada a Objetos Clave Maestría en Sistemas Computacionales

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.1 UML: Introducción

Depto de Cs e Ing. de la Computación Universidad Nacional del Sur

Capítulo 1 Documentos HTML5

Orientación acerca de los requisitos de documentación de la Norma ISO 9001:2000

Entidad Formadora: Plan Local De Formación Convocatoria 2010

Metodologías de diseño de hardware

Parte I: Introducción

e-commerce vs. e-business

CURSO COORDINADOR INNOVADOR

IWG-101: Introducción a la Ingeniería. Departamento de Informática, UTFSM 1

Capitulo III. Diseño del Sistema.

Metodología básica de gestión de proyectos. Octubre de 2003

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Proceso Unificado de Rational PROCESO UNIFICADO DE RATIONAL (RUP) El proceso de desarrollo de software tiene cuatro roles importantes:

PROCESOS SOFTWARE. Según esta estrategia, todo proceso debe planificarse, implantarse y evaluarse, para luego actuar sobre él.

OMG UML 2.0 Marcando un hito en el desarrollo de software Resumen Keywords Historia del Surgimiento

Anteproyecto Fin de Carrera

Enterprise Analyst: Taller de Bautizo

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

CAPÍTULO 2 DEFINICIÓN DEL PROBLEMA

Configuración de Software

Modelos de Ciclo de Vida de Desarrollo de Software en el Contexto de la Industria Colombiana de Software

Int n rod o u d c u c c i c ón ó n Pr P oc o e c s e o s o ISW

TEMA 8: DIAGRAMA DE CLASE EN UML

Con el ánimo de conocer el

Modelado de relaciones existentes en un equipo de proyecto de software Modeling relationships in a software project team

M III ABSTRACCIÓN Y CLASIFICACIÓN

Traducción del. Our ref:

Notación UML para modelado Orientado a Objetos

UNIVERSIDAD AUTÓNOMA DE YUCATÁN FACULTAD DE MATEMÁTICAS MISIÓN

Bases de Datos Especializadas

EL PROCESO DE DESARROLLO DE SOFTWARE: UNA TAREA SOCIAL DE MEJORA CONTINUA

Nuevas Tendencias de Software y Creación de empresas.

Correspondencias entre taxonomías XBRL y ontologías en OWL Unai Aguilera, Joseba Abaitua Universidad de Deusto, EmergiaTech

Generación de código para Hibernate desde modelos UML

Algunas Herramientas de Apoyo al Análisis y Diseño de Software. Agustín J. González ELO329: Diseño y programación orientados a objetos

JavaScript como Orientación a Objetos

Gerencia de Procesos de Negocio (Business Process Management, BPM). Lic. Patricia Palacios Zuleta

Ventajas del software del SIGOB para las instituciones

"Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios

TEMA 1.-Programación orientada a objetos (POO) Objetivo

Una Introducción al UML. El Modelo Físico

2.4 Modelado conceptual

Una Introducción al UML. El Modelo de Componentes

BPMN Business Process Modeling Notation

Perfil UML para el desarrollo de aplicaciones WAP

INGENIERÍA DEL SOFTWARE

Sesión No. 4. Contextualización INFORMÁTICA 1. Nombre: Procesador de Texto

Aproximación práctica a ITIL. Proyecto VeredaCS. F r00

Estructuras de datos: Proyecto 2

Trabajo de Grado Análisis comparativo de Lenguajes Notacionales para Modelado de Procesos

Ingeniería de Software

Ing. Norman Vargas Chévez Facultad de Electrotecnia y Computación Universidad Nacional de Ingeniería norman.vargas@uni.edu.

Propiedad Colectiva del Código y Estándares de Codificación.

Universidad acional Experimental Del Táchira Decanato de Docencia Departamento de Ingeniería en Informática

1.1 EL ESTUDIO TÉCNICO

Tópicos Avanzados de Análisis y Diseño INGENIERIA DE SOFTWARE ING. MA. MARGARITA LABASTIDA ROLDÁN

EXTENSIBLE BUSINESS REPORTING LANGUAGE : XBRL NOVIEMBRE 2015

SISTEMAS DE INFORMACIÓN I TEORÍA

Unidad 1. Fundamentos en Gestión de Riesgos

CAPÍTULO 2 Sistemas De Base De Datos Multiusuarios

Ingeniería de Software con UML Unified Modeling Language Lenguaje Unificado de Modelado

ANALIZANDO GRAFICADORES

Glosario. actividad. 1. (tarea) 2. es un subproceso que no requiere mas descomposición.

Enginyeria del Software III

IES - Introducción a la Ingeniería del Software

En un proyecto de desarrollo de software la metodología define Quién debe hacer Qué, Cuando y Como hacerlo. 6

CONCLUSIONES Y RECOMENDACIONES

Interacción Persona - Ordenador

Capitulo I. Introducción

SÍNTESIS Y PERSPECTIVAS

Repetir el proceso para cada abstracción identificada hasta que el diseño este expresado en términos sencillos

SERVICE ORIENTED ARCHITECTURE (SOA) CONTENIDO

INGENIERÍA DEL SOFTWARE I Práctica 4 Interacciones

QUÉ ES Y PARA QUÉ SIRVE UML? VERSIONES DEL LENGUAJE UNIFICADO DE MODELADO. TIPOS DE DIAGRAMAS. INGENIERÍA DEL SOFTWARE (DV00205D)

Programación orientada a

Presentación de Pyramid Data Warehouse

Transcripción:

Una integración de Patrones de Diseño en Procesos de Ingeniería Forward de Modelos Estáticos UML Liliana Martinez Liliana Favre* INTIA - Facultad de Ciencias Exactas Universidad Nacional del Centro de la Provincia de Buenos Aires Tandil - Argentina { lfavre, lmartine@exa.unicen.edu.ar } *CIC (Comisión de Investigaciones Científicas de la Provincia de Buenos Aires) 1. INTRODUCCIÓN Los patrones de diseño describen soluciones a problemas de diseño recurrentes. Si bien no hay consenso sobre la forma de integrar patrones de diseño en el desarrollo de software (usando por ejemplo herramientas o lenguajes), si lo hay en cuanto a que la tarea debería ser automatizada o al menos asistida. La experiencia industrial (Beck, 1996) indica que los patrones de diseño reducen los tiempos de desarrollo, facilitan la comunicación, pero su aplicación manual es tediosa, propensa a errores y a pérdida de traceability. La importancia del diseño de software a partir de patrones de diseño es ampliamente reconocida. Varios IDEs (Integrated Development Environments) y ambientes de modelado de software basados en UML (OMG, 2004) han comenzado a introducir soporte para patrones de diseño aunque las herramientas comerciales existentes proveen limitada asistencia para la generación de código a partir de los mismos. La mayoría simplemente asiste en un proceso cortar y pegar, en el cual el diseñador selecciona un patrón y obtiene una pieza de código en el lenguaje apropiado. El programador necesita luego ajustar el código obtenido a la implementación (Peckham y Lloyd, 2003). En general, las técnicas empleadas no son independientes del lenguaje y son incapaces de generar código en más de un lenguaje. Estas propuestas asumen que los patrones de diseño involucran clases dedicadas a su rol como el de colaborador dentro de un patrón de diseño particular. En general esto no es verdad, los patrones raramente existen en forma aislada. Con frecuencia un colaborador en un patrón juega un rol diferente en otro. La definición de patrón pone el énfasis en esto: un patrón es "una solución a un problema en un contexto particular" (Gamma y otros,1995). Es más, un patrón es implementado generando no sólo nuevas clases y métodos, sino adaptando el contexto existente, es decir, las construcciones de código preexistentes, a los roles que asumen en el nuevo patrón aplicado (Eden y otros, 1997). Unas pocas herramientas CASE proveen asistencia al programador en la elección e integración de código generado automáticamente para los patrones de diseño en sus aplicaciones. Bulka (2002) analiza el estado de las herramientas de automatización de patrones de diseño y discute los pro y contras de varias propuestas. Establece que hay varios grados de automatización de patrones ofrecidos por las herramientas de modelado UML. Ellas van desde simples templates a patrones inteligentes. Las primeras simplemente insertan un grupo de clases relacionadas en un workspace (por ejemplo UMLStudio), mientras las últimas tienden a integrar el nuevo patrón insertado con las clases existentes, renombrando clases y métodos según sea requerido y respondiendo a cambios en otras partes del modelo UML (por ejemplo ModelMaker). La mayoría de las herramientas CASE que soportan UML no proveen asistencia en la integración y generación de código de los patrones de diseño, dejando esto en manos del programador. Teniendo en cuenta los aspectos mencionados se propone en esta investigación la integración de patrones de diseño en el proceso de ingeniería forward de modelos estáticos UML. La idea es definir estrategias para la detección y generación de código de patrones de diseño dentro de un

proceso riguroso que facilite el reuso y la evolución. Esta propuesta integra notaciones semiformales en UML con especificaciones algebraicas. Las transformaciones son soportadas por una librería de esquemas y por un sistema de reglas de transformación, que permiten traducir paso a paso diagramas UML a especificaciones algebraicas y éstas a la vez, a código orientado a objetos. Se definieron componentes específicos para asociaciones, colecciones OCL y patrones de diseño a fin de ser utilizadas en el proceso de generación de código. Para describirlos se utiliza el lenguaje NEREUS (Favre, 2003). A fin de probar la factibilidad de la propuesta se experimentará con los lenguajes orientados a objetos Eiffel y Java. En la sección 2 se describen trabajos relacionados a esta investigación. La sección 3 describe las bases del método de ingeniería forward propuesto y la sección 4 considera las conclusiones. 2. TRABAJOS RELACIONADOS Budinsky y otros (1996) presentan una herramienta para generar código de patrones de diseño en forma automática con asistencia del usuario. Esta propuesta tiene dos problemas. Por un lado el usuario debe entender qué cortar y dónde pegar y esta transformación no es reversible; una vez que el usuario ha incorporado código del patrón de diseño a su aplicación, cualquier cambio que involucre regenerar el código, lo forzará a reincorporarlo la aplicación. Por otra parte, los cambios en el código generado no pueden verse a través de la herramienta. Florijn y otros (1997) describen un prototipo de una herramienta que soporta patrones de diseño durante el desarrollo o mantenimiento de programas orientados a objetos. Albin-Amiot y Guéhéneuc (2001a) presentan un metamodelo que puede ser usado para obtener una representación de patrones que permite tanto la generación automática como la detección de los mismos. La propuesta apunta a la definición de patrones como entidades de modelado de primera clase. Su limitación es la integración del código del patrón generado con el código del usuario. En Amiot-Guéhéneuc (2001b) se presentan dos herramientas que ayudan a los desarrolladores a implementar grandes aplicaciones y grandes frameworks, usando patrones de diseño: Scriptor (Generación Pura): los desarrolladores tienen nada o poco control sobre el código generado, una vez que el código es generado y entregado, no hay forma de localizar que patrón ha sido aplicado y donde; PatternsBox (Generación conservativa): herramienta para instanciar patrones. El principal interés radica en la conservación de todos los atributos del código fuente. Los desarrolladores necesitan escribir la mayoría o gran parte del código a mano. 3. INGENIERÍA FORWARD A TRAVÉS DE PATRONES DE DISEÑO En esta investigación se propone integrar patrones de diseño en el proceso de ingeniería forward de diagramas estáticos UML. UML y OCL (Warmer y Kleppe, 2003) son usados para generar especificaciones de alto nivel en el lenguaje algebraico NEREUS. Estas especificaciones se vinculan a realizaciones específicas que se ajustan a una tecnología específica, las cuales a su vez son usadas para generar código. NEREUS es una notación para especificar formalmente diagramas estáticos UML. La característica que distingue a este lenguaje es que está centrado en la especificación de relaciones (relationcentric). Permite expresar diferentes clases de relaciones como primitivas para desarrollar especificaciones. Es una notación intermedia abierta a muchos otros lenguajes formales como por ejemplo en CASL y Larch. En particular su semántica fue definida dando un significado formal a cada una de sus construcciones en términos del lenguaje CASL, que puede decirse que es actualmente el lenguaje unificado de los lenguajes algebraicos (Astesiano y otros, 2002). Se definieron componentes específicos para asociaciones, colecciones OCL y patrones de diseño a fin de ser utilizadas en el proceso de generación de código. Un componente está definido en tres niveles de abstracción: especialización, realización e implementación. El nivel de

especialización describe componentes en un alto nivel de abstracción, el cual es independiente de cualquier tecnología de implementación. Este nivel define una jerarquía de especificaciones incompletas como un grafo acíclico. El nivel de especialización tiene dos vistas. Una de ellas basada en NEREUS y la otra en UML/OCL. OCL ayuda al usuario en el proceso de identificación de componentes sin forzarlo a cambiar el estilo de especificación. Las especificaciones en el nivel de especialización están vinculadas con subcomponentes en el nivel de realización. Los subcomponentes del nivel de realización son árboles de especificaciones algebraicas: la raíz es la definición más abstracta y los nodos internos se corresponden a diferentes realizaciones de la raíz. Las especificaciones en este nivel se ajustan a una tecnología específica. El nivel de implementación asocia cada hoja del nivel de realización con diferentes implementaciones del patrón de diseño en código orientado a objetos. Un componente reusable específico es Association. El nivel de especialización de este componente describe una taxonomía de asociaciones clasificadas de acuerdo a su tipo, su grado, su navegabilidad y multiplicidad. Cada hoja en este nivel se corresponde a subcomponentes en el nivel de realización. Por ejemplo para una asociación binaria, bidireccional y muchos a muchos, pueden asociarse diferentes realizaciones a través de hashing, secuencias o árboles. Los subcomponentes en el nivel de implementación expresan como implementar las asociaciones. Por ejemplo, una asociación binaria bidireccional con multiplicidad uno a uno será implementada como un atributo en cada clase asociada que contiene una referencia al objeto relacionado. Por el contrario, si la asociación es muchos a muchos, la mejor propuesta es implementar la asociación como una clase diferente, en la cual una instancia representa un vínculo y sus atributos. Otros componentes específicos fueron definidos para patrones de diseño. La Figura 1 muestra de manera gráfica y en forma parcial el componente Observer. Observer Sin registro de evento de interés Sin controlador de Cambios Con registro de evento de interés Con controlador de Cambios Nivel de Especialización Observ_Lista Vinculada Vinculada Atributo privado con ops de acceso Observ_Tabla Hash Nivel de Realización Esquema 1 Eiffel Esquema i Eiffel Esquema 1 Java Nivel de Implementación Figura 1. Componente reusable Observer

El reuso de componentes está basado en la aplicación de operadores de reuso: Rename, Hide, Extend y Combine. Éstos fueron definidos en los tres niveles de componentes (Favre y otros, 2003). 3.1. Generación de código a partir de patrones de diseño La Figura 2 muestra los principales pasos del método propuesto. A partir de diagramas de clase UML, puede construirse una especificación algebraica a través de la instanciación de esquemas y clases NEREUS preexistentes. Analizando las especificaciones OCL se pueden derivar axiomas en las especificaciones NEREUS. Las precondiciones escritas en OCL se usan para generar precondiciones en NEREUS. Las postcondiciones e invariantes permiten generar axiomas en NEREUS (Favre y otros 2000, Favre, 2001). De esta manera se puede construir semiautomáticamente una especificación algebraica incompleta que contiene la mayor cantidad de información que puede ser extraída del modelo UML. El refinamiento de la especificación incompleta NEREUS en la especificación algebraica completa y el código se basa en una librería de componentes. La especificación algebraica se usa para detectar patrones en el diseño por medio de un matching de signaturas y semántico. Se está construyendo una librería de componentes para soportar este proceso. Esta contiene esquemas de patrones de diseño en NEREUS. Se tuvieron en cuenta los patrones que aparecen en Gamma y otros (1995). Cuando un patrón de diseño es detectado, su especificación es integrada a la especificación del diagrama UML. Una implementación para el patrón de diseño es seleccionada y el código es generado e integrado con el código correspondiente al resto del diagrama UML. Esquemas Reglas de transformación PATRONES componentes Esquemas Reglas de transformación Diagramas UML OCL Transformación de UML a NEREUS Adaptación NEREUS de Patrones NEREUS Transformación de NEREUS a Código Código NEREUS Case- Extendido Case-Extendido Lenguaje Case- OO Extendido Figura 2. De UML/OCL a código 4. CONCLUSIONES Este proyecto pretende integrar patrones de diseño en el proceso de ingeniería forward de modelos estáticos UML. Esta propuesta se basa en la integración de notaciones semiformales con técnicas algebraicas y es guiado por reglas para traducir paso a paso construcciones UML permitiendo traceability. Las transformaciones propuestas preservan la integridad entre especificaciones y código. La mayoría de las transformaciones se pueden deshacer, lo cual provee gran flexibilidad en el proceso de generación de código soportado por las herramientas CASE UML existentes. Siguiendo esta propuesta podemos usar las transformaciones y aplicarlas para la ingeniería reversa de código a diagramas UML.

Nuestra propuesta depende de la disponibilidad de un gran catálogo de patrones, los cuales cubren implementaciones diferentes. Actualmente, se está construyendo una librería de componentes vinculados a patrones de diseño. Un problema crucial es como detectar sub-diagramas que se correspondan con un patrón de diseño. En la actualidad, se está analizando la identificación de patrones de diseño a través de matching de signatura y matching semántico. Prevemos la integración de nuestros resultados en los ambientes de las herramientas CASE UML existentes. REFERENCIAS Albin-Amiot H. y Guéhéneuc Y. (2001a). Meta-modeling Design Patterns: application to pattern detection and code synthesis. ECOOP Workshop on Automating Object-Oriented Software Development Methods, Budapest, Hungary. Albin-Amiot H. y Guéhéneuc Y. (2001b). Design Pattern Application: Pure-Generative Approach vs. Conservative-Generative Approach. OOPSLA Workshop on Generative Programming. USA. Astesiano, E., Bidoit, M., Kirchner, H., Krieg-Brückner, B., Mosses, P., Sannella, D. y Tarlecki, A. (2002). CASL: The Common Algebraic Specification Language. Theoretical Computer Science, 286(2), 153-196. Beck D., Coplien J., Crocker, R., Dominick, L., Meszaros, G. y Paulisch, F. (1996). Industrial experience with design patterns. ICSE-18 (International Conference on Software Engineering), Technical University of Berlin, Germany, 103-113. Budinsky, F., Finni, M., Vlissides, J. y Yu, P. (1996). Automatic code generation from design patterns. IBM System Journal, Vol 35, N 2. Bulka, A. (2002). Design Pattern Automation. Third Asia-Pacific Conference on Pattern Languages of Programs (KoalaPLoP 2002), Melbourne, Australia. Eden, A., Yehudai, A. y Gil, J. (1997). Precise specification and automatic application of design patterns. 1997 International Conference on Automated Software Engineering (ASE 97), Lake Tahoe, Canada, 143. Favre, L. (2001) A Formal Mapping between UML Static Models and Algebraic Specifications. Lecture Notes in Informatics (p. 7) SEW Practical UML-Based Rigorous Development Methods- Countering or Integrating the extremists (Eds. Evans, R. France, A. Moreira, B. Rumpe) GI Edition, Konner Kollen-Verlag, 113-127. Favre, L. (2003). El Lenguaje NEREUS. Reporte interno. Grupo de Tecnología de Software, INTIA. Universidad Nacional del Centro de la Provincia de Buenos Aires, Argentina. Favre, L., Martinez, L. y Pereira, C. (2000). Transforming UML Static Models to Object Oriented Code. Technology of Object-Oriented Languages and Systems, TOOLS 37, IEEE Computer Society, 170-181. Favre, L., Martinez, L. y Pereira, C. (2003). Forward Engineering and UML: From UML Static Models to Eiffel Code. UML and the Unified Process (Liliana Favre editor). Capítulo IX., IRM Press, USA, 199-217. Florijn, G., Meijers, M. y van Winsen, P. (1997). Tool support for object-oriented patterns. ECOOP (European Conference on Object Oriented Programming) 97, Jyväskylä, Finland, 472-795. Gamma, E., Helm, R., Johnson, R. y Vlissides, J. (1995). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. OMG (2004). Unified Modeling Language Specification, v. 1.5. Object Management Group. Disponible en www.omg.org. Peckham, J. y Lloyd S. (2003). Integrating Patterns into CASE Tools. Practicing Software Engineering in the 21 st Century. Capítulo 1, IRM PRESS, 1-8. Warmer, J. y Kleppe, A. (2003). The Object Constraint Language Second Edition: Getting Your Models Ready for MDA. Addison Wesley.