Una extensión de UML para modelar refinamientos Roxana S. Giandini Claudia F. Pons Universidad Nacional de La Plata, Facultad de Informática LIFIA - Laboratorio de Investigación y Formación en Informática Avanzada La Plata, Argentina, 1900 [giandini, cpons]@sol.info.unlp.edu.ar Resumen La técnica de refinamiento permite capturar la relación entre especificación e implementación en desarrollos de software. La documentación precisa de la relación de refinamiento facilita el rastreo de los requerimientos a través de los pasos de refinamiento. Cuanto más detalladamente se formula esta documentación, los requerimientos podrán ser rastreados más precisamente. La especificación detallada de la documentación para refinamientos no puede ser representada ni formalizada en UML, ya que este lenguaje carece de notación para ello. En este artículo presentamos una extensión del metamodelo de UML para modelar refinamientos, basada en la definición de nuevos estereotipos. 1. Introducción El concepto de Abstracción [ Dijkstra, 76 ] es la clave para manejar complejidad. La abstracción hace posible entender sistemas complejos y manejar las cuestiones principales antes de tomar en cuenta los detalles. Un modelo abstracto muestra información con no más detalle que el necesario, para luego poder ser refinado. Un refinamiento es una descripción más detallada que conforma a otra (su abstracción). Cada propiedad especificada en el modelo abstracto sigue siendo válida en el refinamiento, pero aquí posiblemente sean válidas nuevas propiedades. Además de permitir manejar complejidad, la técnica de refinamiento captura la relación esencial entre especificación e implementación. El desarrollo por pasos de refinamiento, y en particular su documentación, permiten a los desarrolladores verificar si el código cumple con su especificación, controlar el impacto de cambios en los objetivos del negocio y ejecutar aserciones escritas en términos del vocabulario del modelo abstracto, traduciéndolas al vocabulario del modelo concreto. La relación de refinamiento ha sido estudiada en varias notaciones formales tales como Z [Derrick - Boiten, 2001] y [Lano, 1996] y en diferentes contextos pero todavía, en lenguajes semi-formales como UML, existe una carencia de definiciones formales para este concepto. En este sentido, el artículo [Davies and Crichton, 2002] define una semántica formal para refinamiento y otro subconjunto de elementos de UML. El lenguaje de modelado standard UML [OMG, 2004(b)] provee un artefacto llamado Abstraction (un tipo de Dependency) para especificar explícitamente relaciones entre elementos de modelado de UML. En el metamodelo de UML una Abstraction es una relación dirigida desde un cliente (client ) a un proveedor (supplier) estableciendo que el cliente (el refinamiento) es dependiente del proveedor (la abstracción). El artefacto Abstraction tiene un meta-atributo llamado mapping para registrar los mapeos abstracción/ refinamiento, que es una documentación explícita de cómo las propiedades de un elemento abstracto son mapeados a sus versiones refinadas y, en la dirección opuesta, cómo elementos concretos pueden ser simplificados para ajustarse a una definición abstracta. Cuanto más formalmente se formula el mapping, los requerimientos serán rastreados más detalladamente a través de los pasos de refinamiento. Existen trabajos recientemente publicados que analizan nociones básicas de las relaciones de dependencia en UML. Los artículos [Hnatkowska et al., Liu et al., 2004] presentan dos enfoques diferentes para la definición y uso de la relación de refinamiento, mientras que en [Kostrzewa, 2004] se describen algunos métodos formales de exploración automática de los conceptos de dependencias en el contexto de especificación de UML.