Download Modelos

Document related concepts
no text concepts found
Transcript
Sobre la adopción industrial de
MDE
Jesús J. García Molina
Grupo Modelum
Universidad de Murcia
[email protected]
DFD, Statecharts, Petri nets, E/R, etc.
80's
Domain Specific Languages (DSL)
1997
UML 1.1
2000
MDA
Mediados
00's
2016
MDE
(MDA, Domain Specific Development,
Software Factories, Modernization, ...)
¿Estado en la Adopción
Industrial de MDE?
¿Cómo mejorar la productividad
(y calidad)?
+ Abstracción
+ Automatización
+ Abstracción
+ Automatización
Lenguajes de Programación
tipos de datos, clases,
métodos etc.
Compiladores / Intérpretes
Lenguajes Ensambladores
registros CPU,
direcciones MC, etc.
Dominio del
Problema
accion
bono
Salto Semantico
cuenta
Dominio de la
Solución
objeto
clase
tipo
fondo
inversión
modulo
Generación de código
(o interpretación)
Modelado
Representación con
alto nivel de
abstracción
Lenguajes Específicos del Dominio
(DSL) / Lenguajes de Modelado
Conceptos del
Dominio
+ Abstraction
+ Automation
Compilador / Intérprete
Lenguajes de Programación
tipos de datos, clases,
métodos etc.
Compilador / Intérprete
Lenguajes Ensambladores
registros CPU,
direcciones MC, etc.
DSL to generate apps for smartphones
Nokia S60 (http://dsmforum.org/phone.html )
SCULPTOR (Generation of Java code)
Windows Workflows Foundation (WF)
DOT/Graphviz (graph visualization)
http://www.graphviz.org/Gallery.php
WindowBuilder (GUI builder)
(https://eclipse.org/windowbuilder/ )
DSL Definition
̶
̶
̶
̶
̶
̶
̶
̶
̶
̶
̶
̶
̶
Un Lenguaje Específico del Dominio (DSL) ofrece
construcciones y notation que es apropiada para resolver
problemas en un particular dominio.
SQL
GUI builder
HTML
make
YACC
Matlab
Mathematica
Excel
OCL
GraphViz
Csound
WebUML
etc.
Activity area: Business, Domotic, Banking, Financial,..
Knowledge area: Graphs, Biomedical, Statistics…
Software area: Web, Mobile, Editors, Parsers,..
Beneficios de uso de DSL vs. GPL:
– Mayor expresividad y facilidad de uso.
•
A menudo son lenguajes declarativos.
– Programas (Modelos) más cortos y legibles.
– Se incrementa la productividad.
•
Generación automática de código
– Se reducen costes de mantenimiento.
– Se facilita comunicación con expertos del dominio.
– Posible mayor número de programadores.
+Abstracción
+ Automatización
¿Cómo conseguir mayor abstracción y
automatización?
Entornos CASE (90’s)
¡No tuvieron el éxito
esperado!
Lenguajes de programación
No estándares, muchos vendedores
Muchos lenguajes de modelado
Generación de código poco útil
Orientación a objetos contribuyó a la pérdida de interés
“De los objetos a los modelos”
MDE
Valor
Abstracción,
Reutilización y
Automatización limitada
OO
Tiempo
(Jack Greenfield y Keith Short, “Software Factories”, 2004)
Modelo
“Un modelo es una representación de la realidad que es obtenida
por medio de un proceso de abstracción con el propósito de ayudar
a comprender y razonar sobre esa realidad". Un modelo es
expresado en un lenguaje.
Modelo
“Un modelo es una representación de la realidad que es obtenida
por medio de un proceso de abstracción con el propósito de ayudar
a comprender y razonar sobre esa realidad". Un modelo es
expresado en un lenguaje.
Modelos del Software
Una descripción abstracta de algún aspecto de los sistemas
software, por ejemplo: requisitos, estructura, comportamiento,..
Diagramas de clase UML
Diagramas de Secuencia UML
Otros Diagramas UML
Responsable
Se rv ici o PE
Alumno
Diagrama de
actividades
Sistema
Registrar Curso
Aprobar Curso
Preinscripción
Avisar
Admitidos
Mat riculación
Hay alumnos?
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
¿Cuál es la utilidad de
los modelos?
Documentación
Comunicación
con modelos
Razonar con
modelos
UML y MDE
“I have witnessed many thousands of projects extract value from the use
of the UML. That being said, there appear to be three common modes of
failure among those (vastly fewer number of) projects that have failed to
derive value from the UML…. some projects use the UML only as a means
of documenting their design decisions. "
Precision is especially important for the next phase in the growth of the
UML, namely, as a language for Model-Driven Development. MDD
represents an approach to delivering software intensive systems through
the transformation of models –primarily expressed in the UML – into
executable components and applications.
Grady Booch, “Growing the UML”,
ICSE, 2002
De modelos para documentar …
public interface Cuenta extends EJBObject {...}
public interface CuentaHome extends EJBHome {...}
public abstract class CuentaBean
implements EntityBean{...}
...
<<BusinessEntity>>
Cuenta
<<UniqueID>> codigo : Integer
0..n
saldo : Float
1
<<BusinessEntity>>
Cliente
<<UniqueId>> id : String
nombre : St ring
apelli do : St ring
<<Query>> fi ndByLast Name()
.. a modelos para generar código
<<BusinessEntity>>
Cuenta
<<UniqueID>> codigo : Integer
0..n
saldo : Float
1
<<BusinessEntity>>
Cliente
<<UniqueId>> id : String
nombre : St ring
apelli do : St ring
<<Query>> fi ndByLast Name()
Automatización
public interface Cuenta extends EJBObject {...}
public interface CuentaHome extends EJBHome {...}
public abstract class CuentaBean
implements EntityBean{...}
...
MDA
m2m
PIM
Modelo
independiente de
la plataforma
m2t
PSM
Código
Modelo
específico de la
plataforma
MDA = MDE (Primera etapa)
MDA
Iniciativa de
OMG (2000)
DSL eran
Perfiles UML
OCL
QVT
Estándares
Mof2Text
Model-Driven Software Engineering (MDE)
Abstracción
MDE
Automatización
Estándares
Model-Driven Software Engineering (MDE)
Uso sistemático de modelos en las etapas del ciclo
de vida del desarrollo de software para incrementar
los niveles de abstracción y automatización.
Intención
Código
Modelo
Solución MDE
Principios básicos de MDE
Modelos se expresan con DSLs (lenguajes de
modelado)
DSLs definidos con metamodelos
La automatización se consigue con transformaciones
de modelos
Solución MDE (Generación de código)
Metamodel 2
Metamodel 1
<<conforms>>
m2m
<<conforms>>
<<conforms>>
Model 2
Model 1
DSL
Grammar/
XMLSchema/
…
Code
…
m2m
m2t
Cadena de transformaciones de modelos
- Esfuerzo
+ Legibilidad
+ Comunicación
-Errores
-Mantenimiento
DSL Nokia
1 o más
transformaciones
Generación automática de
código
<<conforms>>
Código C++
Metamodelo DSL
Nokia
Solución MDE
Framework aplicaciones móviles
Plataforma
Metamodelo vs. Gramática
Meta-metamodelo
(e.g. Ecore)
Conforma a
Metamodelo UML
Conforma a
Modelo UML
EBNF
Conforma a
Gramática Java
Conforma a
Programa Java
Ejemplo: Modelos Entidades Negocio
Ejemplo: Entity metamodel
Transformación
modelo a modelo
Entity
metamodel
m2m
Simple Relational
metamodel
Schema
name: String
*
Table
0..1
tbls name: String
refs
1
pkey
cols
*
*
FKey
fkeys
Column
name: String
type: String
*
cols
Ejemplo de transformación m2m
phase 'entity2table' do
top_rule 'class2table' do
from ClassM::Entity
to
TableM::Table
mapping do |entity, table|
table.name = entity.name
table.cols = entity.props
end
end
rule 'property2column' do
from
ClassM::Property
to
TableM::Column
mapping do |prop, column|
column.name = prop.name
column.type = prop.type
end
end
end
ATL, QVT, ETL, RubyTL..
Java+API EMF
Transformación modelo a texto
props
Entity
Property
*
name:String
name:String
type: DataType
Metamodelo
instance-of
m2t
Account
code: String
owner: String
Modelo
public class Account{
//Atributos
private String code;
private String owner;
//Constructor
public Account() { }
//Métodos
public void setCode(String code){
this.code= code;
}
public String getCode() {
return this. code;
}
public void setOwner(String s){
this.owner= s;
}
public String getOwner() {
return this.owner;
}
44
Ejemplo de definición de transformación m2t
[template public Entity2JavaClass(c :
Entity) ]
class [c.name/]
{
// Atributos
[for (a : Property| c.props)]
[a.type.name/] [a.name/];
[/for]
class Account
{
// Atributos
String code;
String owner;
//Constructores
Account() { }
}
// Constructores
[c.name/] () { }
}
[/template]
Acceleo, MofScript
Xtend, Java,.., + API EMF
Solución MDE (Generación de código)
Metamodel 2
Metamodel 1
<<conforms>>
m2m
<<conforms>>
<<conforms>>
Model 2
Model 1
DSL
Grammar/
XMLSchema/
…
Code
…
m2m
m2t
Cadena de transformaciones de modelos
MDE para Evolución de Software
Código
- Migración
- Ingeniería inversa
- Obtener métricas
…
Modelo
Solución MDE
Cadena de transformaciones
de modelos
Código PL/SQL (Oracle Forms)
Solución MDE
(Migración)
Aplicación Java
MDE Use Cases
MDA
MDD
Domain-Specific
Modeling
MDE
Software
evolution
Reverse
Engineering
ADM
Model@
Runtime
MDE
MDA = MDE
DSL eran
Perfiles UML
MDE
Perfiles UML
NO son recomendados
MDA
Desarrollo con DSLs
Modernización
Models@Runtime
Escenarios de automatización MDE
Tareas “receta” de codificación
– Ejemplo: Generar wrappers Java para PL/SQL
Generar código para frameworks
Generar GUIs, tests, DDL scripts, …
Automatizar proceso de despliegue
Migración
Automatizar procesos basados en workflows
...
Tipos de herramientas
Herramientas de modelado
Basadas en UML u otros lenguajes de modelado
Facilitan el desarrollo de aplicaciones
Pueden soportar todo el ciclo de vida
Generadores de aplicaciones
Integran varios DSL y componentes
Herramientas de definición de DSL
Generan editor, parser, inyector de modelos
Pueden integrar lenguajes de transformación de modelos
Frameworks basados en modelos
Construidos alrededor de un lenguaje de metamodelado
Creación de DSLs
Lenguajes de transformación de modelos
Validación, Comparación, Almacenamiento
Herramientas de modelado
Desarrollo de software
Bases de datos
Simulación
Sistemas de tiempo real
Ciclo de vida completo
Generadores de aplicaciones
Herramientas de creación de DSLs
Framework MDE
Ejemplos de uso de MDE
PL/SQL
Wrapper
Java
Xtext
Inyección
m2t
MofScript
(discontinued)
Modelo PL-SQL
- Esfuerzo
+ Legibilidad
+ Comunicación
-Errores
-Mantenimiento
DSL Nokia
1 o más
transformaciones
Generación automática de
código
<<conforms>>
Código C++
Metamodelo DSL
Nokia
Solución MDE
Framework aplicaciones móviles
Plataforma
«m2m»
circe2relational
package facturaDemo;
entity Factura {
ref cliente[1] : Cliente;
ref partes [_] container : Item;
attr fecha[1] : Date;
-- Se obtendría de forma manual
-- modificando el código generado
attr total [1] : Float;
}
entity Item {
attr descripcion [1] : String ;
attr cantidad [1] : Integer;
attr precio [1] : Float;
}
entity Cliente {
attr name[1] : String ;
}
«model»
Circe_Relacional
«m2t»
relational2sql
Scripts
SQL
«m2m»
circe2hibernate
«model»
Circe_Hibernate
«m2t»
hibernatel2mappings
<<model>>
Circe
<<conforma>>
«m2m»
circe2tapestry
«model»
Circe_Tapestry
CRUD
forms
Metamodel Circe
MDE Solution
Hibernate
mappings
«m2t»
Tapestry2Code
Componentes
Específicos de
la app
Cadena de transformaciones
de modelos
Código PL/SQL (Oracle Forms)
Solución MDE
(Migración)
Aplicación Java
Perhaps surprisingly, the majority of MDE examples in our study
followed domain-specific modeling paradigms: the companies who
successfully applied MDE largely did so by creating or using languages
specifically developed for their domain, rather than using UML.
It’s common to develop small domain-specific languages (DSLs) for
narrow, well-understood domains. In contrast to perceived wisdom
practical application of domain modeling is “quick and dirty,” where DSLs
(and accompanying generators) can be developed sometimes in as little
as two weeks. There’s also widespread use of mini-DSLs, even within a
single project.
A clear challenge, then, is how to integrate multiple DSLs.
Our participants tended to use them in combination with UML—in some
cases, the DSL was a UML profile. Whatever the context, however,
modeling languages requires significant customization before the
languages can be applied in practice.
Jack Greenfield (2004)
“We think that the latitude afforded by
GPLs is needed only for a small part of
the typical business application. Most of
the work can be made faster, cheaper,
and less risky by using constrained
configurarion mechanisms like setting
properties, wizards, features models,
MDE, and patterns”
“Just as moving from assemby
language to GPLs yields significant
benefits for … there is much more
benefit to be gained by moving to even
higher levels of abstractions (DSLs)”
Sergey Dmitriev (2004)
“Any general-purpose language, like
Java or C++, gives us the ability to do
anything we want with a computer. This
is true, at least in theory anyway, but
GPLs tend to be unproductive as I will
explore later.
Alternatively, we could use DSL, which
are tailored to be highly productive in a
specific problem domain, such
as SQL for writing database queries. "
Sergey Dmitriev (2004)
"It's not a question of general-purpose
versus domain-specific. I want all
freedoms. I want to be able to do
anything, and also be highly productive
at the same time. There aren't any
good ways to do this yet. Ideally, I
would be able to use different
languages for each specialized part of
the program, all working together
coherently. And the environment would
fully support these languages with
refactoring, code completion,
navigation, and all the other productivity
tools that are available for mainstream
languages."
Martin Fowler (2010)
The interest is increasing due to
the framework and XMLintensive software development.
Metamodeling-based DSL
definition tools will play an
important role in the near future.
MDE
¿Por qué la adopción de MDE es lenta?
Factores sociales y culturales
– Inadecuada o errónea comprensión de MDE
– Escasa formación de los programadores
– Solución: Enseñar MDE en las universidades
Factores económicos
– Inercia al cambio en las empresas
– Costes en herramientas y formación
– Solución: Publicación de casos de éxito, tooling open-source
financiado por la industria.
Factores técnicos
– Inmadurez de técnicas y herramientas MDE
– Faltan fundamentos teóricos (lenguajes
transformaciones, sincronización, validación)
– Pobre usabilidad de herramientas
de
modelado,
A. Moreira et al. (Eds.): MODELS 2013, LNCS 8107, pp. 1–17, 2013.
Springer-Verlag Berlin Heidelberg 2013.
Match tools to people, not the other way around. Our interviewees
emphasized tool immaturity, complexity and lack of usability as major
barriers.
Finding the right problem is crucial. However, there is very little
data about which parts of projects are good for MDE and which are not.
Nor is there data about which tools are right for which jobs.
Open MDE Communities. There is a distinct lack of open MDE
developer forums.
The big conclusion of our studies is that MDE can work, but it is a
struggle. We need simpler tools and more focus on the underlying
processes. As with any new method, MDE is highly dependent on a
range of technical, social and organizational factors. Rather than
assuming a perfect configuration of such factors, MDE methods and
tools should be resilient to imperfections.
• The experience of WebRatio, a company focusing on Model-Driven
Engineering (MDE) tools and services since 2001.
• The experience of using Booster in the development of a number of
information systems, all of which were successfully deployed in real
world situations.
• The CancerGrid experience: Metadata-based model-driven
engineering for clinical trials
• Model-driven standardization of public authority data interchange
• Description of two MDE projects carried out in two small
companies.
PL/SQL
Wrapper
Java
Xtext
Inyección
m2t
MofScript
(discontinued)
Modelo PL-SQL
PL/SQL
Wrapper
Java
MofScript
Xtext
m2t
Inyección
Modelo
PL-SQL
Etapa
intermedia
Modelo
Wrappers
RubyTL
m2m
«m2m»
circe2relational
package facturaDemo;
entity Factura {
ref cliente[1] : Cliente;
ref partes [_] container : Item;
attr fecha[1] : Date;
-- Se obtendría de forma manual
-- modificando el código generado
attr total [1] : Float;
}
entity Item {
attr descripcion [1] : String ;
attr cantidad [1] : Integer;
attr precio [1] : Float;
}
entity Cliente {
attr name[1] : String ;
}
«model»
Circe_Relacional
«m2t»
relational2sql
Scripts
SQL
«m2m»
circe2hibernate
«model»
Circe_Hibernate
«m2t»
hibernatel2mappings
<<model>>
Circe
<<conforma>>
«m2m»
circe2tapestry
«model»
Circe_Tapestry
Hibernate
mappings
CRUD
forms
Metamodel Circe
«m2t»
Tapestry2Code
Componentes
Específicos de
la app
Conclusion
I described five situations in which MDD didn’t help us out. Do these five
points lead us to the conclusion that there is no future for Model Driven
Development?
I don’t think so… It means that if we do MDD in a proper way we will get new
challenges. Model Driven Development is necessary, but not sufficient!
We need to focus on the full application lifecycle. We need to support the
requirements gathering process. We need to translate requirements into
models and deploy these models in an easy way. Once an application is
deployed we need to gather feedback from users and translate this
feedback into new requirements, create a new model version, and deploy a
new version of the application. What we need is Agile Application Lifecycle
Management.
MDE. Gran interés en los últimos años
“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
Algunas conclusiones
¿Necesidad de un framework MDE open source a seguir
con Eclipse MDE?
Entornos de desarrollo MDE similares a los IDE actuales
Mejorar usabilidad e interoperabilidad.
Integración de varios DSL y de DSL con GPLs
Repositorio MDE con información sobre proyectos y
heramientas, casos de éxito, buenas prácticas,
herramientas, foro de discusión,…
Cuándo y cómo aplicar técnicas MDE
Enseñanza de MDE en las universidades
Proyectos de transferencia de tecnología a las empresas