Fundamentos del Desarrollo de Software Dirigido por Modelos

La Habana, 19 al 23 de septiembre de 2011 Fundamentos del Desarrollo de Software Dirigido por Modelos Jesús J. García Molina Grupo Modelum Universid

0 downloads 147 Views 2MB Size

Recommend Stories


Diseño de Servicios Web Semánticos utilizando el desarrollo de software dirigido por modelos* 1
Universidad de Manizales Facultad de Ciencias e Ingeniería Diseño de Servicios Web Semánticos utilizando el desarrollo de software dirigido por mode

INTROUDCCIÓN, FUNDAMENTOS Y MODELOS DEL TRABAJO SOCIAL
INTROUDCCIÓN, FUNDAMENTOS Y MODELOS DEL TRABAJO SOCIAL DIPLOMATURA EN TRABAJO SOCIAL. ASIGNATURA TRONCAL Asignatura sin docencia Profesora responsabl

AMBIENTAL DIRIGIDO POR:
GESTIÓN AMBIENTAL PARA LOS SUBPRODUCTOS DERIVADOS DE UNA PLANTA DE TRATAMIENTO DE AGUAS RESIDUALES EN EL JARDÍN BOTÁNICO DE LA UNIVERSIDAD NACIONAL DE

Story Transcript

La Habana, 19 al 23 de septiembre de 2011

Fundamentos del Desarrollo de Software Dirigido por Modelos

Jesús J. García Molina Grupo Modelum Universidad de Murcia [email protected]

Organización del Seminario  Fundamentos de MDD – – – –

Visión global Principios básicos Introducción a la creación de DSL con metamodelos. Ejemplo Paradigmas MDD más extendidos: MDA, Desarrollo Específico del Dominio y Factorías de Software

 Metamodelado – – – –

Arquitectura de cuatro capas Lenguajes de metamodelado Ecore y MOF. OCL Perfiles UML

Organización del Seminario  Creación de DSL – DSL externos vs. DSL internos – Gramáticas vs. Metamodelos – Familias de DSL

 Transformaciones de modelos – – – –

Lenguajes m2m: ATL, QVTr, QVTo y RubyTL Dimensiones de un lenguaje de transformaciones m2m Lenguajes m2c: Mof2Text, MofScript Lenguajes c2m: Gra2MoL

 Modernización de software dirigida por modelos – El modelo horseshoe de reingeniería – La iniciativa ADM de OMG – Ejemplo.

Grupo Modelum 

Universidad de Murcia – 30.000 alumnos – 66 titulaciones de grado – 33 programas de posgrado



Facultad de Informática – Grado y Master en Ingeniería Informática – 1200 alumnos – 140 profesores – 10 grupos de investigación

Grupo de Investigación Modelum  Investigación en “Desarrollo de Software Dirigido por Modelos” desde 2005. – Transformaciones de modelos – Familias de DSL – Modernización basada en modelos

 Resultados en revistas y conferencias internacionales – IEEE Transactions on Software Engineering, IEEE Software (2), Software and System Modeling (2), Information and Software Technology (2) – Models (2), EC-MDA (4), ICMT (4), ASE, WCRE

 Proyectos con empresas – Sinergia, Steria, Visualtis, Open Canarias, CenTIC – Automatización de la migración Oracle Forms (Sinergia, 900.000 euros)

 Colaboración con otros grupos: AtlanMod (INRIA, Nantes), Onekin (U. País Vasco), Atenea (Malaga),..

Contenidos  Motivación del nuevo paradigma MDD – La importancia de lenguajes orientados al dominio – El modelado del software

 MDD: Una nueva visión del desarrollo – Conceptos básicos

 Diferentes paradigmas MDD: – MDA – Desarrollo con DSL – Factorías de software

 Situación actual del MDD

Motivación del nuevo paradigma  Principal objetivo de la ingeniería del software: Conseguir un enfoque industrial: “capacidad de producir software de alta calidad a bajo coste”  Hasta ahora la industria del software ha satisfecho unas demandas cada vez más exigentes con un uso intensivo de tareas manuales.  Avances en abstracción, reutilización, automatización y estándares, pero no es suficiente.

Motivación  Algunos hitos en la evolución del desarrollo del software: – – – –

Lenguajes de programación y Compiladores Lenguajes 4GL Herramientas CASE Orientación a objetos  Lenguajes (Smalltalk, C++, Java, C#, Ruby,..)  Frameworks, patrones de diseño  Modelado con UML  Componentes (EJB, DCOM, .Net,..)  Objetos distribuidos (RMI, Corba, :Net,..)  Servicios web y SOA

 Algunos hitos en la evolución acceso y manejo de la información: – Bases de datos relacionales – Modelado conceptual ER

Motivación  Algunos hitos en la evolución de las plataformas – – – – – – – –

Cliente/Servidor Aplicaciones empaquetadas: ERP EAI XML como formato estándar de intercambio Servicios Web SOA BPMS Motores reglas de negocio

Motivación  Automatización del proceso de desarrollo de software – Compiladores / Lenguajes de Alto Nivel 

– – – – – –

Abstracción y automatización

Cargadores y Linkers Depuradores Gestión de versiones Editores Generadores de documentación …

Motivación

+Abstracción + Automatización

 ¿Cómo conseguir mayor abstracción y automatización?

Lenguajes de modelado y Especificación formal

Elevado salto semántico

Compiladores

“Personal reflections on automation, programming, culture, and model-based software engineering”, Bran Selic, Autom. Softw. Eng. (2008) 15: 379-391.

Motivación

+Abstracción + Automatización

 ¿Cómo conseguir mayor abstracción y automatización?

Lenguajes 4GL (Matlab, SQL, SPSS,..)

Compiladores

Son específicos del dominio. Beneficio más limitado

Motivación

+Abstracción + Automatización

 ¿Cómo conseguir mayor abstracción y automatización?

Herramientas CASE

¡No tuvieron el éxito esperado!

Compiladores

Motivación  El Desarrollo de Software Dirigido por Modelos (Ingeniería Dirigida por Modelos o Ingeniería del Software Basada en Modelos) se ha convertido en el nuevo paradigma que promete elevar los niveles de abstracción y automatización.

¿Cómo?

Motivación  Nombres más extendidos en la literatura: – – – –

Model-driven development (MDD) Model-driven software development (MDSD) Model-driven engineering (MDE) Model-based software engineering (MBSE)

 MDD aplicacado en áreas concretas: – – – –

Model-driven security (MDS) Model-driven requirement engineering (MDRE) Model-driven testing ….

 Markus Voelter habla de MD*

Motivación  La idea detrás del MDD es: – Utilizar modelos para automatizar el desarrollo de software. – Los modelos se crean mediante lenguajes de modelado o lenguajes específicos del dominio (DSL) que pueden ser textuales o gráficos. – Cadenas de transformación de modelos para generar código Transformaciones de modelos

Código Java Framework aplicaciones móviles

Modelo (DSL)

Plataforma

Motivación “De los objetos a los modelos” Model Driven Development (MDD)

Valor

Abstracción, Reutilización y Automatización limitada

OO

Tiempo (Jack Greenfield y Keith Short, “Software Factories”, 2004)

Motivación  “La libertad ofrecida por los lenguajes de programación sólo es necesaria para una pequeña parte de una business application. La mayor parte del trabajo se puede hacer mejor y más barata con wizards, feature models, MDD y patrones”  “El paso de lenguajes como Java y C# a mayores niveles de abstracción (modelos) puede suponer mayores beneficios que el paso de ensamblador a esos lenguajes” (J. Greenfield y K. Short, “Software Factories”, John Wiley, 2004)

Motivación  Sergey Dmitriev, “Language-Oriented Programming. The next programming paradigm”, JetBrains, 2004. “Cualquier GPL, como Java o C#, nos permite hacer lo que queramos con un ordenador, hasta cierto punto, ya que ellos tienden a ser improductivos. Una alternativa es el uso de DSL diseñados para ser productivos en un dominio particular, como es el caso de SQL. La fortaleza de los DSLs es su debilidad, ya que cualquier problema requiere bastantes dominios diferentes” “Language-Oriented Programming, LOP”

Motivación

+Abstracción + Automatización

Lenguajes de Modelado / DSL

Conceptos del dominio

Traductor

Lenguajes de Programación

tipos, funciones, clases, etc.

Traductor

Lenguajes Ensambladores

registros, direcciones, etc.

Motivación  “DSLs

have been a part of the computing landscape since before I got into programming” (Martin Fowler, “Domain-Specific Languages”, Addison-Wesley, 2010)

 Un DSL es un lenguaje destinado a resolver problemas en un determinado dominio de aplicación.  Tipos de DSLs – Gráficos y Textuales – Externos o internos (embebidos) – Ejemplos: BPMN, WF, SQL, HTML, Excel, VHDL, make, etc.

Motivación  En la pasada década aumentó considerable el interés por los DSL, ¿Por qué?

(según M. Fowler) – Mejorar la productividad y facilitar mantenimiento – Mucho código XML de metadatos – Uso extensivo de fraweworks

creo que también … – … el éxito de MDD y la creación de nuevas herramientas que facilitan la creación de DSLs.

Motivación  OMG (Object Management Group) presentó MDA (ModelDriven Architecture) en noviembre de 2001. – Un enfoque para aplicar MDD basado en estándares de OMG: MOF, UML, XMI, QVT.

 Durante muchos años se confunde MDD con MDA.  En 2003 OMG también lanzó una propuesta para fomentar la aplicación de MDD en modernización de legacy software. – ADM (Architecture-Driven Modernization) – No ha tenido tanto éxito como MDA

 El desarrollo de software a partir de modelos no surge con MDA. – Generadores de aplicaciones, generadores de GUI, etc.

Modelo BPMN

 Sistemas BPMS  Generación de código BPEL a partir de diagramas BPMN  Herramientas como Intalio

Biztalk

Windows Wokflows Foundations (.Net)

Generador de GUI de JBuilder

Contenidos  Motivación del nuevo paradigma MDD – La importancia de lenguajes orientados al dominio – El modelado del software

 MDD: Una nueva visión del desarrollo – Conceptos básicos

 Diferentes paradigmas MDD: – MDA – Desarrollo con DSL – Factorías de software

 Situación actual del MDD

¿Qué es un modelo?

Modelo “Un modelo es una simplificación de la realidad, como resultado de un proceso de abstracción, y ayuda a comprender y razonar sobre esa realidad”

Modelo Un modelo oculta ciertos detalles para mostrar aquellos relevantes para cierto propósito. Un modelo se expresa en algún lenguaje o notación.

¿Qué es un modelo del software?

Modelos del software  Un modelo de software es una descripción de un aspecto de un sistema software escrita en un lenguaje bien definido

U s u a rio

P e d id o

realiza

n o m b re 1 n if

0* .. n

id t ot a l

L in e a P e d id o 1

1..n 1..*

u n id a d e s 0..n

1

tiene 1 1 C a rro C o m p ra total

1

0..n *

Ite m C a rro u n id a d e s

0 .. n

*

1

P r o du c t o nom bre p re c i o d e s c rip c io n

Modelo de clases UML

Modelado del software  Un modelo software es una descripción abstracta del sistema que oculta ciertos detalles para mostrar otros de una forma más simple.  Los modelos permiten especificar aspectos del sistema software tales como los requisitos, la estructura, el comportamiento o el despliegue. – Permite “separation of concerns”

 En el análisis/diseño de aplicaciones software se crean modelos (“planos del software”) antes de escribir el código.  A finales de los noventa aparece UML (Unified Modeling Language) como lenguaje estándar para realizar modelado de software.

Modelos / Diagramas UML Realizar puja ordinari a

Pujador

Cerrar edición de subasta

Cancelar puja ordinaria Realizar pago de subasta ordinaria

Producto precio descripcion id

Rechazar adjudicac ión Sistema Notif icar adjudicatario Teleoperador

CatalogoProducto 1..n

cargarProd() getProducto()

1

getPrecio()

Participant e

1

1

Usa 1

describe 1..n

Diagrama Casos de Uso

Crear edic ión de subasta

Tienda

LineaVenta 1 1..n 1 Venta

Anular anuncio de subast a

Administrador

registra

1 TPV

0..n

completar() crearLV() crearPago() 1 getDevolucion() getTotal() 1 pagada 1 Pago

Anular edición de subasta

añadirVenta() 1 posee

Captura 1

crearVenta() finalizarVenta() introducirItem() realizarPago()

Diagrama de clases

cantidad getCantidad()

1. introducirItem(cant, id)

1.2. crearLV( )

1.2.1. lv:=crear( )

: TPV

: Venta

lv : LineaVenta

: Cajero 1.1. p:= getProducto(id ) 1.2.2. add(lv)

Diagrama de Colaboración

: CatalogoProducto : LineaVenta

1.1.1. p:=get(id)

: Producto

Modelos / Diagramas UML Responsable

Se rv ici o PE

Alumno

Diagrama de actividades Sistema

Registrar Curso Aprobar Curso Preinscripción

Avisar Admitidos

Mat ri culación Hay al umnos?

no Cambiar admitidos

Hay alumnos? no

Cancelar Curso

Diagrama de Despliegue

Crear Proyecto Cerrar Curso

introducirProducto

Espera Venta

introducirProducto

Introduccion Productos

Terminar Venta manejarRespuesta efectuar Pago Efectivo

Máquinas de estado

Autorizacion Pago efectuar Pago Tarjeta

Espera Pago

Utilidad del modelado  Ayuda a razonar sobre el cómo se implementa.  Se facilita la comunicación entre el equipo al existir un lenguaje común.  Se dispone de documentación que trasciende al proyecto. – Hay estructuras que no son visibles en los programas.

 y también …  Generación de código a partir de modelos

Modelado UML y MDD  “UML no está desempeñando el papel esperado por sus creadores en MDD” “He sido testigo de miles de proyectos que han se han beneficiado del uso de UML pero un menor número ha fallado por tres motivos principales: nunca han llegado al código, o sólo usan UML para documentar, lo que no está mal, pero no es lo más importante, o sólo usan UML los analistas pero no los programadores” “la nueva etapa de UML como lenguaje para MDD… MDD puede influir en mejorar la calidad del software al elevar los modelos a ciudadanos de primera clase como el código de los lenguajes textuales tradicionales”. 

“Un reciente informe de IDC propone automatizar la conexión de la lógica de negocio a la lógica de la infraestructura y a las APIs de la tecnología para crear software más rápido”

Grady Booch, “Growing UML”, ICSE, 2002

De modelos que documentan a .. Código public interface Cuenta extends EJBObject {...} public interface CuentaHome extends EJBHome {...} public abstract class CuentaBean implements EntityBean{...} ...

Documentar (hasta ahora)

Modelo Cuenta codigo : Integer 0..n saldo : Float

1

Cliente id : String nombre : St ri ng apelli do : St ri ng fi ndByLast Name()

.. modelos ejecutables Modelo Cuenta codigo : Integer 0..n saldo : Float

1

Cliente id : String nombre : St ri ng apelli do : St ri ng fi ndByLast Name()

Automatización

Código public interface Cuenta extends EJBObject {...} public interface CuentaHome extends EJBHome {...} public abstract class CuentaBean implements EntityBean{...} ...

Motivación

DSL Perfiles UML

… modelos de entidades del negocio (diagramas de clase) y máquinas de estado son muy usadas en MDD pero ni siquiera en esos casos se usa UML

Profiles UML (Perfiles)  UML es una familia de lenguajes – Lenguaje core + Mecanismo de extensión (Perfiles)

 Un perfil está formado por un conjunto de estereotipos que pueden tener valores etiquetados y restricciones, con su correspondiente notación.  Un perfil define una extensión de UML para su especialización a un dominio concreto: EJB, aplicaciones web, CORBA, modelado del negocio, esquemas relacionales, etc.

Perfiles UML  Estereotipos – Extienden el vocabulario de UML, permitiendo definir nuevos tipos de elementos y relaciones a partir de los existentes pero específicos de un dominio. – Algunos son predefinidos en UML.

 Valores etiquetados – Extienden las propiedades de un estereotipo.

 Restricciones – Especifican condiciones sobre los elementos del modelo mediante OCL

Perfiles UML Cliente



Empleado

id : String nombre : String

dni : String nombre : String edad : int

1

apellido : String findByLastName()

Estereotipo: Table Valores Etiquetados: key

Estereotipo: BusinessEntity Valores Etiquetados: UniqueID y Query

context Schema inv: tablasDistintoNombre tablas -> forAll ( t1, t2 | t1.name = t2.name implies t1 = t2) end

Reglas OCL  Se expresan en OCL  Permiten asociar información que no se puede expresar en UML que denota cuando un modelo está bien formado.  Ejemplo: “Dos tablas de un mismo esquema relacional deben tener distinto nombre”. context Schema inv: tablasDistintoNombre tablas -> forAll ( t1, t2 | t1.name = t2.name implies t1 = t2) end

Modelos y abstracción en MDD  En una solución MDD se usan modelos a diferente nivel de abstracción, incluso modelos muy cercanos al código. ─ Abstracción

Modelo 1

Modelo 2



Modelo n

DSL 1

Cadena de transformaciones

Código

Contenidos  Motivación del nuevo paradigma MDD – La importancia de lenguajes orientados al dominio – El modelado del software

 MDD: Una nueva visión del desarrollo – Conceptos básicos

 Diferentes paradigmas MDD: – MDA – Desarrollo con DSL – Factorías de software

 Situación actual del MDD

Desarrollo de software dirigido por modelos (MDD) Los modelos dirigen las tareas del ciclo de vida de desarrollo del software, permitiendo elevar el nivel de abstracción y de automatización. Abstracción

MDD

Automatización

Estándares

MDE. Principios y Paradigmas  Aplicaciones de MDE – Ingeniería directa (MDD), Ingeniería Inversa, Models@Runtime

 Principios básicos en MDE – Modelos conformes a un metamodelo – Generación de artefactos software a través de una cadena de transformaciones de modelos – Uso de lenguajes de modelado o lenguajes específicos del dominio (DSL) para escribir los modelos.

 Diferentes visiones o paradigmas MDD: – Model-Driven Architecture (MDA) – Domain-Specific Development (Desarrollo basado en DSL) – Factorías de Software = Líneas de Producto Software + MDD

MDA MDD

forward engineering

Software Factories DSM Models@runtime

MDE reengineering

ADM

sistemas adaptativos

MDR

MDE: Model Driven Engineering MDD: Model Driven Development MDM: Model Driven Reengineering

MDA: Model Driven Architecture DSM: Domain-Specific Modeling ADM: Architecture Driven Modernization

MDD / DSLs DSL (Sintaxis + Semántica)

expresado en

Aspecto de un Sistema S

Modelo M representa a / genera parte de

MDD. Elementos en la definición de un DSL  Metamodelo de la sintaxis abstracta – Describe conceptos del lenguaje y relaciones entre ellos, y reglas que determinan sin un modelo está bien formado (well-formedness): sintácticamente válido. – Se crea con un lenguaje de metamodelado, p.e. Ecore y MOF – Lenguaje tipo OCL para expresar las well-formedness rules

 Sintaxis concreta o notación  Semántica (transformaciones de modelos) – Normalmente mediante traducción a un lenguaje con semántica bien definida, p.e. un lenguaje de programación o una máquina virtual. – Lenguajes de transformación de modelos – Modelo-Modelo: ATL, QVT, RubyTL,.. – Modelo-Texto: MofScript, xPand, Jet,..

MDD. Sintaxis abstracta vs. Sintaxis concreta descripción de un DSL

Metamodelo MM (Sintaxis abstracta)

expresado con

conforma con

Aspecto de un Sistema S

Notación (Sintaxis concreta)

Modelo M representa a / genera parte de

MDD. Transformaciones de modelos m2m

Modelo origen

Modelo destino es transformado en

m2t

Modelo es transformado en

Texto (Código, XML,..)

MDD. Elementos Metamodelo M0

Gramática, XML Schema, ..

Metamodelo M1

conforma

conforma

Modelo 0 (L0)

conforma

Código

Modelo 1 (L1) m2m

(Java, HTML, XML,...)

m2t escrita

escrita Lenguaje de transformación modelo a modelo

Lenguaje de transformación modelo a texto

MDD. Metamodelo Describe el DSL Metamodelo

conforma a

Sistema representa a / genera parte de

Modelo

Metamodelos y Gramáticas

Gramática Java

Metamodelo UML

conforma a

Programa Java

conforma a

Modelo UML

MDD / Metamodelo UML descripción de UML Metamodelo UML

conforma a

Sistema Pujas representa a

Un Modelo de Clases UML Creado por el desarrollador

MDD. Metamodelo UML Structural Fea ture Classifier

Relationship

Classifier

Property

+cla ss Class

0..1

+ownedAttribute

{subsets classifier, subsets namespace, subsets featuringClassifier}

* {o rdere d, subsets attrib ute , subsets ownedMember}

+memberEnd

isDe rive d : Boolean = false isRe adOnly : Bo ole an = false isDe rive dUni on : Boo lea n = false [0..1] / d ef aul t : String [0..1] ag gregati on : Aggreg ationK ind = no ne / isComposite : Boo le an

{ordered, sub sets member}

+subsettedProperty +/superClass

isDerived : Boolean = false 0..1 +o wni ngAssocia tion

+owne dEnd *

Association

+associati on

2..*

{ordered, subsets memberEnd, subsets feature, subsets ownedMember}

{subsets association, 0..1 subsets namespace, subsets featuringClassifier}

+navigableOwnedEnd

*

*{re defin es gen eral}

* {subsets o wned End} + re defin edPropert y 0..1

0..1 {subsets redefinedElement} * +class 0..1

+owningProperty {subsets owner}

+nested Cla ssif ie r

{subsets namespace, subsets redefinitionContext}

+cla ss

{ordered, * subsets ownedMember}

0..1

{ordered, * subsets feature, subsets ownedMember}

ValueSpecification

+/opposite

Classifier +/endType {o rdere d}

AggregationKind

+ownedOperation

0..1 {subsets redefinitionContext, sub sets name spa ce, subsets feat uring Cla ssif ie r}

+defaultValue {subsets ownedElement}

1..*

Type

none shared composite

Operatio n

MDD. Notación UML Diagrama de clases UML U s u a rio

P e d id o

realiza

n o m b re 1 n if

0* .. n

id t ot a l

L in e a P e d id o 1

1..n 1..*

u n id a d e s 0..n

1

tiene 1 1 C a rro C o m p ra total

1

0..n *

Ite m C a rro u n id a d e s

0 .. n

*

1

P r o du c t o nom bre p re c i o d e s c rip c io n

¿Cómo creo un DSL basado en un metamodelo?

Metamodelado  Un metamodelo (modelo de la sintaxis abstracta ) es un modelo que describe qué modelos pueden ser expresados con un lenguaje de modelado o DSL.  Un metamodelo describe los conceptos en el lenguaje y las relaciones estructurales entre ellos. – Más well-formedness rules expresadas en OCL

 Las herramientas manejan metamodelos y los desarrolladores la sintaxis concreta (modelos).

Metamodelo  Crear un metamodelo es una actividad de modelado conceptual orientado a objetos. – Necesidad de conocer bien el dominio – Conceptos como clases, propiedades de un concepto como atributos, relaciones como asociaciones, relación parte-de cómo composición, especialización de conceptos como generalización, paquetes, etc.

 MOF y Ecore se basan en elementos de modelado orientado a objetos: – – – – –

Clases y Atributos Asociaciones Agregación Generalización Paquetes

Modelo conceptual. Ejemplo

context Pedido inv: fechaEntrega.after(fechaPedido) context PedidoUrgente inv: fechaEntrega. diffHoras (fechaPedido) forAll (s1 | states->forAll (s2 | s1.name = s2.name implies s1 = s2)) end

*

* outgoing trigger

Transition

Trigger

0..1

guard

0..1

State

Guard

InitialState

Metamodelos y Gramáticas

Gramática Java

conforma a

Programa Java

Metamodelo UML

conforma a

Modelo UML

Sintaxis concreta 

Dada una sintaxis abstracta podemos definir una o más notaciones textuales o gráficas. Herramientas de metamodelado que permiten:

 – – – – – –

Definir el metamodelo (sintaxis abstracta) de un DSL Asociarle una sintaxis concreta Generar un editor Validar modelos del DSL Generar un parser (DSL textuales) Generar código a partir de modelos

– –

Herramientas cerradas: MetaEdit+, DSL Tools Herramientas sólo sintaxis concreta: GMF de Eclipse, xText de openArchitectureware, TCS, EMFText

Ejemplo “Máquina de estados”. Notación gráfica after (2 sec) send c.estaActivo

ruido

Inactivo

objetivoEn(p) [amenaza] / t.añadirObjetivo(p)

Buscando

Acoplamiento

Rastreando contactar

Ejemplo “Máquina de estados”. Notación textual state Inactivo { is_initial transitionTo Rastreando { event objetivoEn(p) condition amenaza action [t.addObjetivo(p)] } transitionTo Buscando { event ruido } } state Buscando { transitionTo Rastreando { } } state Rastreando { transitionTo Acoplamiento { event contactar } } state Acoplamiento { is_final }

Ejemplo “modelo relacional” CREATE TABLE Cliente (dni integer PRIMARY KEY, nombre varchar(30), sueldo integer));

CREATE TABLE Cuenta (ID integer primary key, fecha date, Cliente_dni integer references Cliente(dni), saldo double);

Lenguaje

Metamodelo

Esquema, tabla, columna, clave ajena,.. (conceptos)

Metaclases (Schema, Table, Column, FKey)

Un esquema y una tabla tienen un nombre;.. Una clave ajena referencia a una tabla,..

Un esquema está formado por tablas; Una tabla tiene columnas;..

Atributos name en Schema y Table Asociaciones (Table y Fkey) Composición (Schema y Table; Table y Column)

Metamodelo: Ejemplo “modelo relacional”

name: String

Table

*

Schema tbls

0..1

name: String refs

1 pkey cols

*

Column name: String type: String *

* FKey

cols

fkeys Metamodelo Simple RDBMS

Metamodelo. Ejemplo “UML simple”

Metamodelo. Ejemplo “Relacional”

Semántica de un DSL  Se expresa normalmente mediante transformaciones a un lenguaje que tenga una semántica bien definida, por ejemplo código de un lenguage de programación, una máquina virtual, etc.  Dos tipos de transformación: – Directa con transformaciones modelo a código – Indirecta con transformaciones modelo a modelo que generan modelos intermedios: cadena de transformación.

Ejemplo de transformación modelo-modelo Metamodelo Simple UML

Classifier type

PrimitiveDataType

name: String 1

Package name: String

Schema name: String

*

* Class elems isPersistent: Bool

Table

* tbls

0..1

name: String

refs

1 pkey cols

* *

fkeys

Attribute

attrs

Column name: String type: String *

cols

Metamodelo Simple RDBMS

FKey

Ejemplo de definición de transformación m2m phase 'class2table' do top_rule 'class2table' do from ClassM::Class to TableM::Table mapping do |class, table| table.name = class.name table.cols = class.attrs end end

RubyTL

rule 'property2column' do from ClassM::Attribute to TableM::Column filter { |attr| attr.type.is_a? ClassM::PrimitiveType } mapping do |attr, column| column.name = attr.name column.type = attr.type.name column.owner.pkeys @MediaCharacterRepository int getNumberOfMovies(Long libraryId) => AccessObject; List findMediaByCharacter(Long libraryId, String characterName); findById; save; findAll; findByQuery; protected findByKeys(Set keys, String keyPropertyName, Class persistentClass); List findMediaByName(Long libraryId, String name); Map findMovieByUrlIMDB(Set keys); } } Entity Book extends @Media { !auditable String isbn key length="20“ } Entity Movie extends @Media { !auditable String urlIMDB key Integer playLength } }

Ejemplo Javato Prototipo de arquitectura generativa para la plataforma Javato del Gobierno Regional de la Región de Murcia

Capa Presentación

JSF Capa Lógica de Negocio

Spring Capa de persistencia

Hibernate

BD

Ejemplo Javato Aplicación (código infraestructura)

Arquitectura Generativa

Estructura proyecto Eclipse Ficheros de configuración Clases Java (negocio y controlador) Ficheros mapping Hibernate Backing beans Páginas JSP Script DDL Errores de validación

DSL (Entidades Dominio)

Generador

Transformaciones m2m y m2t

JSF, Hibernate, SGBD

Modelo Dominio

Ejemplo Javato Modelo del dominio M2M

M2M

M2M

Modelo de presentación

Modelo de persistencia

JSF

Hibernate

M2T

Java, JSP, XML

M2T

XML

Modelo del esquema relacional

M2T

SQL

Ejemplo de aplicación “Apuestas deportivas” Cuenta saldo : String numeroCuenta : String moneda : String activada : String

+cuenta

Apuesta cantidadApostada : String pronostico : String

+apuestas 0..*

1

+apuestas

+anuncio +usuario

AnuncioApuesta resultado : String fechaCierre : String fechaApertura : String idAnuncio : String datos : String cuota : float

Usuario nombre : String direccion : String login : String password : String pregunta : String email : String

1 +anuncio

+eventos

1..*

EventoDeportivo idEvento : String informacion : String fechaCelebracion : String

Creación de metamodelos NamedElement name : String

Metamodelo del Dominio TypedElement ordered : boolean unique : boolean lowerBound : int upperBound : int collection : boolean required : boolean

+type

Classifier

+classifiers

+package

+subPackages Package

0..1 +exceptions

0..*

0..*

+superPackage

Parameter

Operation

DataType 0..* +parameters 0..*

Class abstract : boolean interface : boolean persistent : boolean version : int saved : boolean

+operation

+operations

+class +class

+superType

1 +ReferenceType

0..* +structuralFeatures StructuralFeature changeable : boolean persistent : boolean

Reference containment : boolean container : boolean

+references 0..*

0..1 +opposite Attribute key : boolean

0..* +attributes

0..1

1

+AttributeType

Creación de metamodelos Metamodelo del Esquema Relacional NamedElement name : String

Schema

+schema 1

+tables 1..* Table

+references

1

+table 1 +identifies 1 +table 1

Column unique : boolean null : boolean type : String isKey : boolean

+columns 1..* +keys 1..*

+columns 1..*

0..* +foreignKeys

0..1

+belongs

ForeignKey

Creación de metamodelos Metamodelo Hibernate NamedElement name : String

Deployment

+deployment 1 PropertyFile driverClass : String url : String username : String password : String

+propertyFile

+mappingFiles 1..* MappingFile DTDdeclaration : String

1 +mapping

HibernateMapping schema : String packet : String

+theHibernateMapping

+classElements 1..* Element

+elements 1..*

+classElement

ClassElement className : String tableName : String

Creación de metamodelos Metamodelo JSF DataTable Message for : String

Messages showDetail : String showSummary : String

value : String var : String first : String rows : String dir : String rules : String

PanelGrid PanelGroup

columns : String border : Integer dir : String rules : String

Form

HTMLJSFComponent (from PageModel)

CommandComponent action : String value : String

CommandButton

InputComponent

OutputComponent

SelectComponent

value : String converter : String validator : String

value : String converter : String

value : String

Column

GraphicImage value : String width : Integer height : Integer title : String

CommandLink

Generación de código SQL

Mapping Objeto-Relacional (m2m + m2c)

Generación ficheros mappings Hibernate

m2m + m2c ’dark_room’ }

Ejemplo de Línea de Productos

TextAdventures

Output

Input

Navegation GUI

alter

Text

Voice Voice

Syntetized

Recorded

Text

Widget

Text

Ejemplo de Línea de Productos Metamodelo SM

adv2StateMachine Modelo SM room table_and_notebook { text % There is … % object lamp { allowed_actions: take description: "a normal lamp“ } when_exit: west, goto =>’dark_room’ }

Metamodelo GUI adv2Commands Modelo GUI

Metamodelo GUI

adv2GUI

Modelo GUI

Ejemplo de Línea de Productos

Modelo SM

Intérprete de commands m2c Modelo GUI

Navegación GUI

Modelo GUI

Factorías de software Una factoría de software es una línea de productos dirigida por modelos – una línea de productos automatizada por metadatos representados por modelos expresados lenguajes específicos del dominio. Basada en la idea de esquema software y plantilla de software.  Microsoft no adopta estándares de MDA, pero comparte principios básicos: modelos, DSL, metamodelado, transformaciones, generación automática de código fuente.

Factoría de software construye /usa Desarrollador línea producto

Esquema Factoría construye Plantilla Factoría

cargada en IDE

Factoría Software usa

Desarrollador del producto

construye

Miembros de la familia de productos

La plantilla es un conjunto de elementos software (procesos, patrones, frameworks, DSL, ..) que son instalados en un IDE para desarrollar aplicaciones para un dominio.

Ejemplo de Esquema Información Conceptual

Entidad de negocio

Aplicación Proceso de negocio

Web Service

Lógico

Implementación

Tecnología

Lenguaje de Programación

Servidor Lógico

Topología de red

Plataforma

El esquema es un grafo de viewpoints que describe la información requerida para producir un miembro de la familia.

Aplicaciones del MDD Ingeniería directa Código Aplicación

Modelos Ingeniería inversa Modernización Models@runtime

Sistema Run-time

MDD y OMG MDA (Model-Driven Architecture) Código Aplicación

Modelos

ADM (Architecture-Driven Modernization)

Soluciones MDD  Modelos permiten automatizar – Tareas de codificación repetitivas  

– – – – – – –

Crear adaptadores (wrappers) Ficheros de configuración XML

Generar software (código de infraestructura) Instanciar un framework para crear una aplicación concreta Aplicar patrones Refactoring Migración de aplicaciones Automatizar el despliegue y la construcción (build) Automatizar test

Soluciones MDD  Algunos ejemplos de automatización: – Instanciar el framework myMobileWeb de aplicaciones móviles. – Arquitectura generativa con los frameworks JSF, Spring e Hibernate. – Añadir contribuciones a Eclipse – Crear wrappers Java y servicios web a código PL/SQL – Línea de productos muy simple para “adventures games” – Automatizar la migración de aplicaciones Oracle Forms a Java – DSL para aplicaciones context-aware

Soluciones MDD Metamodelo 1

Metamodelo 2

Modelo 1

Modelo 2

Gramática/ XMLSchema/ …



DSL 1

Cadena de transformaciones

Código

Modernización Dirigida por Modelos Generación

Código nuevo sistema

Modelo 2 Ingeniería inversa

Modelo 1

Extractores de modelos

Código Legacy

Ejemplo de modernización. Migración Forms

Ejemplo de modernización Migración de GUIs en aplicaciones RAD (Forms, VisualBasic, Delphi ..) a otros entornos más modernos (Web, Java, .Net,..)

Ejemplo de modernización Migración de GUIs en aplicaciones RAD (Forms, VisualBasic, Delphi ..) a otros entornos más modernos (Web, Java, .Net,..)

Contenidos  Motivación del nuevo paradigma MDD – La importancia de lenguajes orientados al dominio – El modelado del software

 MDD: Una nueva visión del desarrollo – Conceptos básicos

 Diferentes paradigmas MDD: – MDA – Desarrollo con DSL – Factorías de software

 Situación actual del MDD

MDD. Estado actual  Bran Selic (“Manifestaciones sobre MDD”, número especial sobre MDD en Novática/Upgrade, 2008) – “El principal problema que MDD intenta resolver es la frecuente y

abrumadora complejidad involucrada en el diseño e implementación del software moderno”… a través de abstracción, automatización y estándares” – “MDD tiene el potencial para proporcionar mejoras en el desarrollo de software” – “Existen casos de éxito en la industria, pero MDD es la excepción no la norma” – “Aunque hay muchos obstáculos de tipo técnico, los más importantes son de tipo cultural” http://www.upgrade-cepis.org/issues/2008/2/upgrade-vol-IX-2.html#contents

Ventajas MDD  Elevación del nivel de abstracción. – Nivel de conceptos cercanos al dominio del problema

 El código final se genera a partir de especificaciones de alto nivel: Automatización – Mayor productividad – Mayor calidad – Favorece el mantenimiento – Usuarios no expertos puedan escribir código

Deficiencias  Técnicos ─ ─ ─ ─

Pobre usabilidad de las herramientas Problemas de interoperabilidad entre herramientas. Problemas de escalabilidad de los modelos. Falta base teórica, tecnología actual desarrollada ad-hoc

 Culturales ─ ─ ─

Falta concienciación sobre su potencial Dificultad de introducir nuevos métodos en la empresa Mentalidad conservadora de muchos profesionales, inercia al cambio

• Económicos ─ ─

Empresas centradas en el corto plazo para conseguir el ROI Dificultad de encontrar personas con experiencia “Personal reflections on automation, programming, culture, and model-based software engineering”, Bran Selic, Autom. Softw. Eng. (2008) 15: 379-391.

Problemas a resolver  Madurez y usabilidad de las herramientas  Manejo ineficiente de grandes modelos y versionado – Ahora modelos serializados como XMI – Necesidad de repositorios

 Evolución de soluciones MDD – Modelos, metamodelos, notación, transformaciones

 Reutilización de DSLs  Generación de código  Lenguajes m2m

 …

El camino a seguir  Enseñanza universitaria − Inculcar respeto por el usuario − Enseñar MDD

 Investigación − Plan global

 Transferencia de tecnología  Definición de estándares (de facto o de iure) − Eclipse implementando los estándares de OMG.

MDD en los planes de estudio  Asignatura en muchos postgrados. – Universidad de Murcia: http://modelum.es/cursos/mnti2010/

 Diploma Internacional de Posgrado “MDE for Software Management”, Ecole des Mines de Nantes, Francia desde 2009/2010. – 60 ECTS con un semestre de prácticas en empresas

Necesarios conocimientos y destrezas  Visión general de MDD …  Metamodelado  Creación de DSL – Sintaxis abstracta (metamodelos) vs. Sintaxis concreta – Herramientas

 Transformaciones modelo a modelo – Lenguajes ATL, QVT o RubyTL

 Transformaciones modelo a texto – Lenguajes MofScript, Mof2Text o plantillas Ruby

 Y por supuesto conocer el dominio, en este caso frameworks y tecnologías software.

MDD. Gran interés en la actualidad “My cat is Model Driven” Some times ago, there was an excellent paper by Roger King entitled : "My cat is Object-Oriented" [1]. Today we could easily take the arguments expressed in this paper and repeat all of it again. Here is my cat named Caml. As Trash, Roger King's cat he has a lot of qualities that I would summarize today by stating how much model driven my cat is. (blog “Models Everywhere”, de Jean Bézìvin)

[1] Roger King My Cat Is Object-Oriented. Object-Oriented Concepts, Databases, and Applications 1989: 23-30

Bibliografía 

Clark, A. , Andy Evans, Paul Sammut, J. Willians. “Applied Metamodelling A Foundation for Language Driven Development”. Xactium, 2008 http://itcentre.tvu.ac.uk/~clark/docs/Applied%20Metamodelling%20(Second% 20Edition).pdf



Greenfield, Jack y Short, Keith. “Software Factories: Assembling Applications with Patterns, Frameworks, Models & Tools", John Wiley, 2004.



Kelly, Steven and Juha-Pekka Tolvanen, “Domain Specific Modeling: Enabling Full code generation”, John Wiley, 2008.



Kleppe, Anneke “Software Language Engineering: Creating Domain-Specific Languages Using Metamodels”, Addison-Wesley, 2009.



Kleppe, Anneke, Jos Warmer, and Win Bast. MDA Explained. 2003, AddisonWesley.



Stahl, Thomas y Volter, Marckus. “Model-driven Software Development”. John Wiley, 2006.

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.