DEPARTAMENTO DE SISTEMAS Arquitecturas de Software Lenguajes de Descripción de Arquitecturas ADLs Agenda DEPARTAMENTO DE SISTEMAS • Introducción • Lenguajes de Descripción de Arquitecturas Introducción DEPARTAMENTO DE SISTEMAS • Uno de los objetivos de una Arquitectura de Software es comunicar o Documentos de Arquitecturas de Software o Usualmente expresados en lenguaje natural Modelos (UML) Comunican bien decisiones arquitecturales No son facilmente verficables y validables Lenguajes de Descripción (ADLs) Formales Semántica clara Verificables / Validables Sintaxis compleja ADLs - Acme DEPARTAMENTO DE SISTEMAS • ADLs o o Lenguajes que proveen elementos para modelar la arquitectura conceptual de un sistema Debe soportar los bloques principales de una descripción arquitectural Componentes Conectores ADLs - Acme DEPARTAMENTO DE SISTEMAS • Algunos ADLs o o o o o ACME Rapide Wrigth UML xADL ADLs - Acme DEPARTAMENTO DE SISTEMAS • ACME o o o Creado en 1995 Su objetivo principal era ofrecer un mecanismo de intercambio de descripciones arquitecturales Adicionalmente provee herramientas de análisis y diseño de arquitecturas o ACME Language ACME Tool Developer’s Library (AcmeLib) Provee tres funcionalidades básicas Intercambio arquitectural Plataforma extensible de herramientas de arquitectura Descripción de arquitecturas ADLs - Acme DEPARTAMENTO DE SISTEMAS • Lenguaje ACME o Ontología de arquitecturas o o o Components, Connectors, Systems, Ports, Roles, Representations, Re-maps Provee un mecanismo de anotaciones Provee tipos arquitecturales (Estilos) Marco de análisis semántico ADLs - Acme DEPARTAMENTO DE SISTEMAS System simple_cs = { Component client = { Port send-request; }; Component server = { Port receive-request; }; Connector rpc = { Roels { caller, callee}}; Attachments { client.send-request to rpc.caller; server.receive-request to rpc.callee; } } ADLs - Acme DEPARTAMENTO DE SISTEMAS System simple_cs = { Component client = { Port send-request; Property Aesop-style : style-id = client-server; Property UniCon-style : style-id = client-server; Property source-code : external = "CODE-LIB/client.c"; } Component server = { Port receive-request; Property idempotence : boolean = true; Property max-concurrent-clients : integer = 1; source-code : external = "CODE-LIB/server.c"; } Connector rpc = { Role caller; Role callee; Property asynchronous : boolean = true; max-roles : integer = 2; protocol : Wright = " ... "; } Attachment client.send-request to rpc.caller; Attachment server.receive-request to rpc.callee; } ADLs - Acme DEPARTAMENTO DE SISTEMAS • Análisis Semántico o o o o o Open Semantic Framework Formalismo lógico basado en relaciones y restricciones Una descripción Acme se representa con un predicado El predicado puede ser consultado mediante sentencias lógicas Comparado con artefactos para verificación • Herramientas de Soporte o AcmeStudio / Plugin Eclipse • Mayor Información o http://www.cs.cmu.edu/~acme/index.html ADLs-Acme DEPARTAMENTO DE SISTEMAS ADLs - Rapide DEPARTAMENTO DE SISTEMAS • Rapide o o o Desarrollado por David Luckham (Stanford) ADL de propósito general Su objetivo es facilitar la simulación de eventos o o Las especificaciones Rapide son ejecutables Lenguaje OO o Comportamientos aceptados y prohibidos Modela concurrencia Requerimientos del sistema son expresados como restricciones en el tiempo ADLs - Rapide DEPARTAMENTO DE SISTEMAS • Principales Elementos o Component o Connector o Interface Objects Module (Implementan los Objetos Interface) Interfaces de envío y recepción Los componentes se comunican a través de conectores Tres tipos de conecciones Básicas, Pipes y Agentes Constraints Se definen en las conecciones de la arquitectura ADLs - Rapide DEPARTAMENTO DE SISTEMAS type Producer (Max : Positive) is interface action out Send (N: Integer); action in Reply(N : Integer); behavior Start => send(0); (?X in Integer) Reply(?X) where ?X<Max => Send(?X+1); end Producer; type Consumer is interface action in Receive(N: Integer); action out Ack(N : Integer); behavior (?X in Integer) Receive(?X) => Ack(?X); end Consumer architecture ProdCon() return SomeType is Prod : Producer(100); Cons : Consumer; connect (?n in Integer) Prod.Send(?n) => Cons.Receive(?n); Cons.Ack(?n) => Prod.Reply(?n); end architecture ProdCon; ADLs - Wright DEPARTAMENTO DE SISTEMAS • Desarrollado por David Garlan (CMU) • ADL de propósito general • Enfasis en análisis de protocolos de comunicación • Elementos Principales o o Componente Conector • Herramientas de desarrollo limitadas ADLs - Wright DEPARTAMENTO DE SISTEMAS System simple_cs Component client = port send-request = [behavioral spec] spec = [behavioral spec] Component server = port receive-request= [behavioral spec] spec = [behavioral spec] Connector rpc = role caller = (request!x -> result?x ->caller) ^ STOP role callee = (invoke?x -> return!x -> callee) [] STOP glue = (caller.request?x -> callee.invoke!x -> callee.return?x -> callee.result!x-> glue) [] STOP Instances s : server c : client r : rpc Attachments : client.send-request as rpc.caller server.receive-request as rpc.callee end simple_cs. ADLs - xADL DEPARTAMENTO DE SISTEMAS • Lenguaje de Descripción de Arquitecturas basado en XML • Desarrollado por el Institute for Software Research (Universidad de California) • Principales elementos o o o o Componente Conector Interfaces Configuraciones • Facilmente extensible (módulos) ADLs - xADL DEPARTAMENTO DE SISTEMAS <types:component xsi:type="types:Component" types:id="xArchADT"> <types:description xsi:type="instance:Description">xArchADT</types:description> <types:interface xsi:type="types:Interface" types:id="xArchADT.IFACE_TOP"> <types:description xsi:type="instance:Description">xArchADT Top Interface</ types:description> <types:direction xsi:type="instance:Direction">inout</types:direction> <types:type xsi:type="instance:XMLLink" xlink:type="simple" xlink:href="#C2TopType" /> </types:interface> <types:interface xsi:type="types:Interface" types:id="xArchADT.IFACE_BOTTOM"> <types:description xsi:type="instance:Description">xArchADT Bottom Interface</ types:description> <types:direction xsi:type="instance:Direction">inout</types:direction> <types:type xsi:type="instance:XMLLink" xlink:type="simple" xlink:href="#C2BottomType" /> </types:interface> <types:type xsi:type="instance:XMLLink" xlink:type="simple" xlink:href="#xArchADT_type" /> </types:component> ADLs - xADL DEPARTAMENTO DE SISTEMAS ADLs - xADL DEPARTAMENTO DE SISTEMAS archInstance{ componentInstance{ (attr) id = "comp1" description = "Component 1" interfaceInstance{ (attr) id = "comp1.IFACE_TOP" description = "Component 1 Top Interface" direction = "inout" } interfaceInstance{ (attr) id = "comp1.IFACE_BOTTOM" description = "Component 1 Bottom Interface" direction = "inout" } } ADLs - xADL DEPARTAMENTO DE SISTEMAS • xADL diferencia dos tipos de elementos o o Instancias Arquitecturales (Ejecución) Estructura Arquitectural (Diseño) • Herramientas de Desarrollo – ArchStudio/ ArchEdit o o o Editor gráfico para documentos xADL 2.0 Visualización de Arquitecturas Análisis de Arquitecturas ADLs - xADL DEPARTAMENTO DE SISTEMAS