SlideShare a Scribd company logo
1 of 60
Download to read offline
TRANSFORMATION REUSE
IN MODEL-DRIVEN
ENGINEERING
McMaster CS Seminar. Jan 22 2018.
Juan de Lara
joint work with
Esther Guerra and Jesús Sánchez Cuadrado
Modelling&Software Engineering Research Group
http://miso.es @miso_uam
MODEL DRIVEN
ENGINEERING (MDE)
Increase the level of abstraction in software
development
Models are actively used to
• Describe the problem…
• Simulate/verify/test…
• Generate code for the final application
Move from the solution space (code-centric) to the
problem space
• Higher levels of productivity and quality
• Less accidental details
2
MODEL DRIVEN
ENGINEERING (MDE)
For specific domains
• Avoid coding the same
solutions over and over
• Families of applications
Domain-Specific Modelling
Languages (DSLs) Code
Generator
• Modelling, validation and automatic
generation of telephony services
3
BENEFITS OF MDE
Increase productivity
• Domain-Specific instead of General Purpose languages
• Reported productivity increases in the order of 20-30% [WH14]
Automation
• Avoid repetitive tasks
Higher level of abstraction
• Domain models vs low-level coding
• More intentional, easier to analyse
• Less accidental details
End-user development
• By Domain-Specific Languages
4
Whittle, Hutchinson, Rouncefield. “The state of practice in model-driven engineering”.
IEEE Software 31(3): 79-85 (2014)
DRAWBACKS OF MDE
High initial investment
• Meta-models
• Modelling environments
• Transformations
• Code generators
• Simulators
• Model-to-Model transformations
5
Model
Code
Modeli Modeli+1 Model Model’
Meta-
model Meta-
model
Meta-
models
Meta-
modelt«iOf»
«iOf» «iOf»
«iOf» «iOf»
Code generation
In-place transformation Model-to-model
trasformation
OUR GOAL
6
Make MDE more widely applicable by reducing its
required initial investment
MDE artefacts (transformations, code generators,
editors) are defined over specific meta-models
• Difficult to reuse for other related meta-models
How to avoid creating (essentially)
the same transformation for
different meta-models?
IN THE REST OF THIS TALK…
7
Current practice of “reuse”
• Ad-hoc reuse (clone and own)
• Explicit model adaptation
Three different approaches to reuse
• Concepts
• Multi-level modelling
• A-posteriori typing
Tool support
Conclusions and future work
EXAMPLE:
PROCESS MODELS TO PETRI NETS
8
Task
name: String
initial: boolean
next
* Place
Transitionid: String
tokens: int
inps
outs
*
*
9
press
wait
cross
start
start
press
wait
cross
Task
name: String
initial: boolean
next
* Place
Transitionid: String
tokens: int
inps
outs
*
*
EXAMPLE:
PROCESS MODELS TO PETRI NETS
task2PN
10
L R=NAC
t:Task
name=n
t:Task
name=n
:Place
id=n
tokens=t.initial?1:0
t1:Task
t2:Task
:next
p1:Place
p2:Place
t1:Task
t2:Task
:next
p1:Place
p2:Place
:Transition
:inps
:outs
L R=NAC
TRANSFORMATION
(GRAPH BASED)
11
TRANSFORMATION
(ATL)
rule Task2Place {
from t : Process!Task
to p : PN!Place (
id <- t.name,
tokens <- if t.initial then 1 else 0 endif
)
}
rule next2Transition {
from t1 : Process!Task,
t2 : Process!Task (t1.next->includes(t2))
to tr : PN!Transition (
inps <- t1,
outs <- t2
)
}
…
REUSE FOR ANOTHER
META-MODEL
12
Task
name: String
initial: boolean
next
* Place
Transitionid: String
tokens: int
inps
outs
*
*
Activity
ident: String
InitialActivity
task2PN
FlowEdge
from
to
13
rule Task2Place {
from t : Process!Task
to p : PN!Place (
id <- t.name,
tokens <- if t.initial then 1 else 0 endif
)
}
rule next2Transition {
from t1 : Process!Task,
t2 : Process!Task (t1.next->includes(t2))
to tr : PN!Transition (
inps <- t1,
outs <- t2
)
}
…
AD-HOC REUSE (CLONE&OWN)
AD-HOC REUSE (CLONE&OWN)
14
rule Task2Place {
from t : Process!Activity
to p : PN!Place (
id <- t.ident,
tokens <- if t.oclIsTypeOf(Process!InitialActivity) then
1 else 0 endif
)
}
rule next2Transition {
from t1 : Process!Activity,
t2 : Process!Activity
(Process!FlowEdge.allInstances()->exist(e |
e.from=t1 and e.to=t2))
to tr : PN!Transition (
inps <- t1,
outs <- t2
)
}
AD-HOC REUSE (CLONE&OWN)
15
rule Task2Place {
from t : Process!Activity
to p : PN!Place (
name <- t.ident,
tokens <- if t.oclIsTypeOf(Process!InitialActivity) then
1 else 0 endif
)
}
rule next2Transition {
from t1 : Process!Activity,
t2 : Process!Activity
(Process!FlowEdge.allInstances()->exist(e |
e.from=t1 and e.to=t2))
to tr : PN!Transition (
inps <- t1,
outs <- t2
)
}
• Complex and error prone
• Repetitive
• Does not scale to large
transformations
EXPLICIT MODEL ADAPTATION
1616
Task
name: String
initial: boolean
next
* Place
Transitionid: String
tokens: int
inps
outs
*
*
Activity
ident: String
InitialActivity
task2PN
FlowEdge
from
to
activity2task;task2PN
activity2task
MOTIVATION
17
rule Activity2Task {
from t : Activities!Activity
to p : Process!Task (
id <- t.ident,
initial <- t.oclIsKindOf(Activities!InitialActivity),
next <- Activities!FlowEdge.allInstances()->
select (e | e.from = t)->
collect(e | e.to )
)
}
t:
InitialActivity
ident=“a0”
p: Task
name=“a0”
initial=true
pl: Place
name=“a0”
tokens=1
activity2task task2PN
MOTIVATION
18
rule Activity2Task {
from t : Activities!Activity
to p : Process!Task (
name <- t.ident,
initial <- t.oclIsKindOf(Activities!InitialActivity),
next <- Activities!FlowEdge.allInstances()->
select (e | e.from = t)->
collect(e | e.to )
)
}
• Three models involved,
complicates traceability
• Two transformations: less
efficient
• May require a transformation
back to the initial model
19
Concept-
based
reuse
Automate ad-hoc copy-adaptation:
CONCEPT-BASED REUSE
20
Concept
Msrc Mtar
from to
«conforms to» «conforms to»
Template
execution
MMsrc
Instantiated
template
to
binding
MMtar
HOT
Transformation
template
definition
from
Final user
Transformation
developer
(with reuse)
Transformation
developer
(for reuse)
1
2 3
4
• Transformations defined
over “concepts”
• Binding to concrete
meta-model
• Automated
transformation
adaptation
Sánchez Cuadrado, Guerra, de Lara. “A Component Model for Model Transformations”. IEEE
Trans. Software Eng. 2014.
21
STRUCTURAL
CONCEPTS
Structural Concepts.
• They gather the structure needed
from meta-models for the
transformation to be applicable.
• They have the form of a meta-
model as well.
SimpleTask concept
Task
name: String
initial: boolean
next
*
Their elements are treated as variables, which need to be bound
to elements in specific meta-models.
Interface of the transformation
• No superflous elements
• No extra complexity
• Transformations become as simple as possible
22
REUSABLE
TRANSFORMATIONS
Transformations defined using the types of the concept.
L R=NAC
t:Task
name=n
t:Task
name=n
:Place
id=n
tokens=t.initial?1:0
t1:Task
t2:Task
:next
p1:Place
p2:Place
t1:Task
t2:Task
:next
p1:Place
p2:Place
:Transition
:inps
:outs
L R=NAC
23
BINDING
Concept binding:
• Bind each element in the
concept to an element in the
meta-model.
Task SETask
name  id
initial  isInitial
next  following
Binding SETaskEngineer
Coding Testing
actors
*
Software Engineering processes
Design
SimpleTask concept
Task
name: String
initial: boolean
next
*
Analysis
id: String
isInitial: boolean
following
0..5
ADAPTATION
The transformation gets automatically adapted
Similar to template instantiation in generic programming
24
t:SETask
id=n
t:SETask
id=n
:Place
id=n
tokens=t.isInitial?1:0
t1:SETask
t2:SETask
:following
p1:Place
p2:Place
t1:SETask
t2:SETask
:following
p1:Place
p2:Place
:Transition
:inps
:outs
IS THE RESULTING
TRANSFORMATION CORRECT?
Yes, by following some rules:
Rules for the binding
• Cardinalities
• Composition, features, subtyping, etc
Depends on what you do with the concept
• Read only (e.g., for M2M transformation)
• Write (e.g., for in-place transformation)
25
SETaskTask
SETaskTask
Concept Meta-modelbinding
R
W
Sánchez Cuadrado, Guerra, de Lara. “Flexible Model-to-Model Transformation Templates: An Application
to ATL”. JOT 2012.
Task next
* SETask
R following 0..5
SETask
following 0..5
Task next
*
W
26
MORE FLEXIBLE
BINDINGS
Concepts express a
particular design choice on
how structure is organized
Different meta-models may
implement the same
structure differently
• Association as
intermediate class
• Enumerate as subclases
• etc.
binding
Task
name: String
initial: boolean
next
*
Activity
ident: String
InitialActivity
FlowEdge
from
to
27
BINDING ADAPTERS
Elements in the concept are variables
• Allow binding them to expressions: adapters
Adapters resolve the heterogeneities between the concept and
the meta-model
They induce an adaptation of the transformation
Sánchez Cuadrado, Guerra, de Lara. “A Component Model for Model Transformations”. IEEE
Trans. Software Eng. 2014.
de Lara, Guerra. “Towards the flexible reuse of model transformations: A formal approach
based on graph transformation”. JLAMP 83(5-6). 427-458 (2014)
rule Task2Place {
from t : Pr!Task
to p : PN!Place (
tokens <- if t.initial
then 1 else 0
endif )}
28
Task
initial: boolean
next
*
Concept
Activity
InitialActivity
Flow
Edge
from
to
Task  Activity
Task.initial  if (self.oclIsKindOf(InitialActivity)) then
true else false endif
Task.next  FlowEdge.allInstances()->
select(e|e.from=self)->
collect(to)
Meta-model
typed on
helper context Pr!Activity
def: initial : Boolean =
if (…) then true else
false endif;
rule Task2Place {
from t : Pr!Activity
to p : PN!Place (
tokens <- if t.initial
then 1 else 0
endif )}
typed on
adaptation
ON THE ROLE OF
CONCEPTS…
Aren’t concepts characterizing a set of “suitable”
meta-models for the transformation?
Isn’t that exactly what meta-models do (for
models)?
Concepts as meta-meta-models
Rely on typing: no need to adapt the
transformation
29
30
Reuse
through multi-
level
modelling
Language families as instances of a
common meta-model
MULTI-LEVEL BASED
REUSE
31
Process Modelling
Software Process
Modelling Language
Educational
Modelling Language
Software Process
Models
Educational
Models
de Lara, Guerra, Sánchez Cuadrado. “Model-driven engineering with domain specific
meta-modelling languages”. SoSyM 2015 (Springer).
32
MULTI-LEVEL BASED
GENERICITY
Transformations can be
defined at the top meta-level
Applicable to instances of
all languages in the family
Process Modelling
Software Process
Modelling Language
Educational
Modelling Language
Software Process
Models
Educational
Models
…
Transformation
defined on
applicableto
33
MULTI-LEVEL BASED
GENERICITY
Task
Kind
Gateway
Kind
Seq Par
src
tar
*
*
Test: TaskKindCoding:TaskKind
T2C: Seq
C2T: Seq
src tar
srctar
data:
Coding
unitDt:
Test
gui:
Coding
: C2T
src
tar
: T2C
tar
src
«conf»
«conf» data:
Coding
unitDT:
Test
gui:
Coding
rule Task2Place
transform t : Level0!TaskKind
to p : Place
{
...
}
....
defined on
rule Task2Place
transform t : Level0!TaskKind
to p : Place
{
...
}
....
34
MULTI-LEVEL BASED
GENERICITY
data:
Coding
unitDT:
Test
gui:
Coding
rule Coding2Place
transform t : Coding
to p : Place
{…}
rule Test2Place
transform t : Test
to p : Place
{…}
defined
on
data:
Coding
unitDt:
Test
gui:
Coding
: C2T
src
tar
: T2C
tar
src
«conf»
Task
Kind
Gateway
Kind
Seq Par
src
tar
*
*
Test: TaskKindCoding:TaskKind
T2C: Seq
C2T: Seq
src tar
srctar
«conf»
35
MULTI-LEVEL VS CONCEPT-
BASED GENERICITY
Concept-based Genericity
Multi-level-based Genericity
• A posteriori binding: meta-
models may exist first.
• Adapters and hybrid concepts
to solve heterogeneities.
• A priori: meta-meta-model
should exist first.
• Ability to apply an operation
several meta-levels below.
• Domain-Specific meta-
modelling.
36
CAN WE GET THE BEST OF
BOTH APPROACHES?
• A posteriori binding:
meta-models may exist
first.
• Adapters or Hybrid
concepts to solve
heterogeneities.
• Independence of the
transformation
language
Concept-based reuse Multi-level reuse
37
CAN WE GET THE BEST OF
BOTH APPROACHES?
• A posteriori binding:
meta-models may exist
first.
• Adapters to solve
heterogeneities.
• Independence of the
transformation
language
Concept-based reuse Multi-level reuse
Let’s make the typing relation:
• A-posteriori
• As flexible as adapters
38
Reuse
through a-
posteriori
typing
A-POSTERIORI TYPING
39
A more flexible typing mechanism for MDE
Decouple instantiation from classification
• Interfaces in object-oriented programming
• Roles in role-based programming languages
Allow dynamic typing and multiple classifiers for objects
Type and instance-level reclassification specifications
de Lara, Guerra. A Posteriori Typing for Model-Driven Engineering: Concepts, Analysis, and
Applications. ACM Trans. Softw. Eng. Methodol. 25 (4) 31:1-31:60 (2017)
CONSTRUCTIVE VS
A-POSTERIORI TYPING
40
Task
start: Date
duration: int
name: String
review: Task
start= 8/5/15
duration= 30
name= “rev”
creation «instance of»
Measurable
quantity: int
Schedulable
date: Date
review: Task
Tasks meta-model
model
Scheduling MM Measuring MM
model
«instance of» «instance of»
start= 8/5/15
duration= 30
name= “rev”
«Schedulable,Measurable»
Constructive typing A-posteriori typing
Constructive typing A-posteriori typing
SPECIFYING AP TYPINGS
AT THE TYPE-LEVEL
41
Schedulable
date: Date
span: double
review: Task
Tasks meta-model ( MMC )
start= 8/5/15
/months= 1
duration= 30
name= “rev”
Scheduling MM ( MMR )
Task
start: Date
duration: int
name: String
Typing Specification
Task  Schedulable
self.start  date
/months: double=self.duration/30  span
«Schedulable»
«date»
«span»
creation «instance of»
(constructive)
«instance of»
(a-posteriori)
• Derived attributes (months) defined in the typing
specification.
• Typing rules: ensure syntactic correctness
TYPE-LEVEL AP TYPING
42
date: Date
span: double
writing: Task
start= 15/3/15
duration= 90
name= “wrt”
review: Task
start= 8/5/15
duration= 30
name= “rev”
Schedulable
Scheduling MM (MMR)
Instance model of Tasks ( MMC )
«instance of»
(a-posteriori)
“Scheduling glasses”
Operations
review:
Schedulable
date= 8/5/15
span= 1
{review, writing}
{1, 3}
Schedulable.allInstances()
writing:
Schedulable
date= 15/3/15
span= 3
Schedulable.allInstances()->
collect(span)
SPECIFYING AP TYPINGS AT
THE INSTANCE LEVEL
43
date: Date
span: double
writing: Task
start= 15/3/15
duration= 90
name= “wrt”
review: Task
start= 8/5/15
/months= 1
duration= 30
name= “rev”
«Schedulable»
«date»
«instance of»
(a-posteriori)
Schedulable
Scheduling MM (MMR)
Typing Specification
Task.allInstances()->select(duration<80)
 Schedulable
self.start  date
/months: double=self.duration/30  span
Instance model of Tasks ( MMC )
«span»
• Typing defined by queries.
• Derived attributes defined by queries as well.
INSTANCE-LEVEL AP TYPING
44
Operations
date: Date
span: double
writing: Task
start= 15/3/15
duration= 90
name= “wrt”
review: Task
start= 8/5/15
duration= 30
name= “rev”
Schedulable
Scheduling MM (MMR)
Instance model of Tasks ( MMC )
«instance of»
(a-posteriori)
review: Schedulable
date= 8/5/15
span= 1
Schedulable.allInstances()->
collect(span)
{review}
{1}
Schedulable.allInstances()
“Scheduling glasses”
INSTANCE-LEVEL AP TYPING
45
Operations
date: Date
span: double
writing: Task
start= 15/3/15
duration= 60
name= “wrt”
review: Task
start= 8/5/15
duration= 30
name= “rev”
Schedulable
Scheduling MM (MMR)
Instance model of Tasks ( MMC )
«instance of»
(a-posteriori)
review:
Schedulable
date= 8/5/15
span= 1
Schedulable.allInstances()->
collect(span)
{review, writing}
{1, 2}
Schedulable.allInstances()
“Scheduling glasses”
writing:
Schedulable
date= 15/3/15
span= 2
Activity  Task
ident  name
/init : boolean =
self.oclsKindOf(InitialActivity)  initial
/follow: Task[*] = FlowEdge.allInstances()->
select(e|e.from=self)->
collect(e|e.to)  next
EXAMPLE
46
Task
name: String
initial: boolean
next
*
Activity
ident: String
InitialActivity
FlowEdge
from
to
A-POSTERIORI TYPING AS A
TRANSFORMATION
47
Task
name: String
initial: boolean
next
Place
Transitionid: String
tokens: int
inps
outs
*
*
task2PN
Task.allInstances()  Place
name  id
/toks : int = if (self.initial) then 1 else 0  tokens
Task.allInstances()->select(t|t.next.isDefined())  Transition
/prevs : Task[*] = Set{self}  inps
/nexts : Task[*] = Set{self.next}  outs
0..1
A-POSTERIORI TYPING AS A
TRANSFORMATION
48
Place
Transitionid: String
tokens: int
inps
outs
*
*
t1:Task
name=“t1”
initial=false
name=“t2”
initial=true
:next
name=“t3”
initial=false
:next
t2:Task
t3:Task
Task
name: String
initial: boolean
next
0..1
task2PN
A-POSTERIORI TYPING AS A
TRANSFORMATION
49
Place
Transitionid: String
tokens: int
inps
outs
*
*
«Place»
«Place, Transition»
«Place, Transition»
«id»
«id»
«id»
Task
name: String
initial: boolean
next
0..1
task2PN
t1:Task
name=“t1”
initial=false
name=“t2”
initial=true
:next
name=“t3”
initial=false
:next
t2:Task
t3:Task
A-POSTERIORI TYPING AS A
TRANSFORMATION
50
Place
Transitionid: String
tokens: int
inps
outs
*
*
t2:Task
t3:Task
«Transition»
«Transition»
«outs»
«outs»
«inps»
«inps»
Task
name: String
initial: boolean
next
0..1
task2PN
«Place»
«Place»
«id»
«id»name=“t2”
initial=true
name=“t3”
initial=false
t2:Task
t3:Task
«Place»
«id»
t1:Task
name=“t1”
initial=false
T l
support
51
BENTŌ:
CONCEPT-BASED REUSE FOR ATL
Adaptation of ATL transformations according to the binding
Support for refactoring meta-models into concepts
52
Sánchez Cuadrado, Guerra, de Lara. “A Component Model for Model Transformations”. IEEE TSE 2014
Sánchez Cuadrado, Guerra, de Lara. “Reusable Model Transformation Components with bentō”. ICMT’ 15
// Model
Tasks someTasks {
Task t0 {
start = "30/04/2015";
duration = 30;
name = "coding";
}
}
METADEPTH
53
Multi-level textual modelling
Concepts
• Over every Epsilon language
• Hybrid concepts
A-posteriori typing
• Over every Epsilon language
Analysis of type-level specs
• Integration with the USE validator
• Bidirectional reclassification
• Reclassification totality and surjectivity
// Meta-model
Model Tasks {
Node Task {
start : Date;
duration : int;
name : String;
}
}
CONCEPT-BASED
REUSE
54
concept SimpleTasks(&M,
&T,
&initial)
{
Model &M {
Node &T {
&initial : boolean;
name : String;
}
}
}
bind SimpleTasks(
SEProcess,
SEProcess::SETask,
SEProcess::SETask.isInitial
)
<<some operation>>
rule Task2Place
transform task : Source!&T
to place : Target!Place
{
place.name := task.name;
if (task.&initial=true)
place.tokens:=1
else
place.tokens:=0
}
ETL transformation
55
Model ProcessModel@2 {
Node Task {
name@1 : String[0..1];
initial : boolean = false;
}
}
ProcessModel SoftwareProcess {
Task Analysis {
name = “reqs, analysis”;
}
}
SoftwareProcess aSoftProcess{
Analysis a {
initial = true;
}
}
@model(potency=0)
rule Task2Place
transform task : Source!Task
to place : Target!Place
{
place.name := task.name;
if (task.initial=true)
place.tokens:=1
else
place.tokens:=0
}
ETL transformation
MULTI-LEVEL BASED
REUSE
56
type Factory PetriNet {
Conveyor::parts > Place::tokens,
Generator::outps > Transition::outs, Terminator::inps > Transition::ins,
Assembler::inps > Transition::ins, Assembler::outps > Transition::outs,
}
A-POSTERIORI TYPINGS
Transformations defined over Petri nets can be reused “as is” for
Factory
• Provide an AP typing from Factory to Petri nets
• Factory models become typed as Petri nets
57
// EOL excerpt of the simulator
operation Transition enabled() : Boolean {
return self.ins.forAll(p| p.tokens.size()>0);
}
operation step() : Boolean {
var enabled : Set(Transition) := Transition.all.select( t | t.enabled());
... // fire one random Transition from enabled
}
A-POSTERIORI TYPINGS
CONCLUSIONS
58
Lower entry-level to MDE to make it more widely used
Approaches to reuse model transformations in MDE
• Concept-based
• Ideas from generic programming
• Automates ad-hoc reuse
• Multi-level modelling
• Families of languages
• Independent of transformation language
• A-posteriori typing
• Provide additional types via retyping specifications
• Improve model-adaptation based reuse
FUTURE WORK
59
Product-Lines based reuse
• With Salay, Chechik (UoT)
• Analysis
Requirement models as the interface of transformations
• More powerful than concepts
Exploit a-posteriori typing in MDE
• Multiple typings for MDE
• Retypings as bx transformations
Unified approach?
THANKS!
Juan.deLara@uam.es
60
http://www.miso.es
joint work with
E. Guerra and J. Sánchez Cuadrado
@miso_uam

More Related Content

What's hot

Analysis and design of algorithms part2
Analysis and design of algorithms part2Analysis and design of algorithms part2
Analysis and design of algorithms part2Deepak John
 
Introduction to Algorithms
Introduction to AlgorithmsIntroduction to Algorithms
Introduction to AlgorithmsVenkatesh Iyer
 
Algorithms lecture 3
Algorithms lecture 3Algorithms lecture 3
Algorithms lecture 3Mimi Haque
 
(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...
(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...
(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...Frank Nielsen
 
TIME EXECUTION OF DIFFERENT SORTED ALGORITHMS
TIME EXECUTION   OF  DIFFERENT SORTED ALGORITHMSTIME EXECUTION   OF  DIFFERENT SORTED ALGORITHMS
TIME EXECUTION OF DIFFERENT SORTED ALGORITHMSTanya Makkar
 
Lecture 2 data structures and algorithms
Lecture 2 data structures and algorithmsLecture 2 data structures and algorithms
Lecture 2 data structures and algorithmsAakash deep Singhal
 
Design and Analysis of algorithms
Design and Analysis of algorithmsDesign and Analysis of algorithms
Design and Analysis of algorithmsDr. Rupa Ch
 
Integrative Parallel Programming in HPC
Integrative Parallel Programming in HPCIntegrative Parallel Programming in HPC
Integrative Parallel Programming in HPCVictor Eijkhout
 
Dsp manual completed2
Dsp manual completed2Dsp manual completed2
Dsp manual completed2bilawalali74
 
Matlab programming project
Matlab programming projectMatlab programming project
Matlab programming projectAssignmentpedia
 
Algorithms Lecture 2: Analysis of Algorithms I
Algorithms Lecture 2: Analysis of Algorithms IAlgorithms Lecture 2: Analysis of Algorithms I
Algorithms Lecture 2: Analysis of Algorithms IMohamed Loey
 
asymptotic analysis and insertion sort analysis
asymptotic analysis and insertion sort analysisasymptotic analysis and insertion sort analysis
asymptotic analysis and insertion sort analysisAnindita Kundu
 
Cupdf.com introduction to-data-structures-and-algorithm
Cupdf.com introduction to-data-structures-and-algorithmCupdf.com introduction to-data-structures-and-algorithm
Cupdf.com introduction to-data-structures-and-algorithmTarikuDabala1
 
Design & Analysis of Algorithms Lecture Notes
Design & Analysis of Algorithms Lecture NotesDesign & Analysis of Algorithms Lecture Notes
Design & Analysis of Algorithms Lecture NotesFellowBuddy.com
 

What's hot (19)

Analysis and design of algorithms part2
Analysis and design of algorithms part2Analysis and design of algorithms part2
Analysis and design of algorithms part2
 
Introduction to Algorithms
Introduction to AlgorithmsIntroduction to Algorithms
Introduction to Algorithms
 
Algorithms lecture 3
Algorithms lecture 3Algorithms lecture 3
Algorithms lecture 3
 
Model checker for NTCC
Model checker for NTCCModel checker for NTCC
Model checker for NTCC
 
(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...
(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...
(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...
 
TIME EXECUTION OF DIFFERENT SORTED ALGORITHMS
TIME EXECUTION   OF  DIFFERENT SORTED ALGORITHMSTIME EXECUTION   OF  DIFFERENT SORTED ALGORITHMS
TIME EXECUTION OF DIFFERENT SORTED ALGORITHMS
 
Lecture 2 data structures and algorithms
Lecture 2 data structures and algorithmsLecture 2 data structures and algorithms
Lecture 2 data structures and algorithms
 
Design and Analysis of algorithms
Design and Analysis of algorithmsDesign and Analysis of algorithms
Design and Analysis of algorithms
 
Integrative Parallel Programming in HPC
Integrative Parallel Programming in HPCIntegrative Parallel Programming in HPC
Integrative Parallel Programming in HPC
 
Dsp manual completed2
Dsp manual completed2Dsp manual completed2
Dsp manual completed2
 
Matlab programming project
Matlab programming projectMatlab programming project
Matlab programming project
 
Algorithms Lecture 2: Analysis of Algorithms I
Algorithms Lecture 2: Analysis of Algorithms IAlgorithms Lecture 2: Analysis of Algorithms I
Algorithms Lecture 2: Analysis of Algorithms I
 
asymptotic analysis and insertion sort analysis
asymptotic analysis and insertion sort analysisasymptotic analysis and insertion sort analysis
asymptotic analysis and insertion sort analysis
 
CPP07 - Scope
CPP07 - ScopeCPP07 - Scope
CPP07 - Scope
 
Cupdf.com introduction to-data-structures-and-algorithm
Cupdf.com introduction to-data-structures-and-algorithmCupdf.com introduction to-data-structures-and-algorithm
Cupdf.com introduction to-data-structures-and-algorithm
 
Matlab
Matlab Matlab
Matlab
 
Design & Analysis of Algorithms Lecture Notes
Design & Analysis of Algorithms Lecture NotesDesign & Analysis of Algorithms Lecture Notes
Design & Analysis of Algorithms Lecture Notes
 
Fundamentals of matlab programming
Fundamentals of matlab programmingFundamentals of matlab programming
Fundamentals of matlab programming
 
An Efficient and Parallel Abstract Interpreter in Scala — First Algorithm
An Efficient and Parallel Abstract Interpreter in Scala — First AlgorithmAn Efficient and Parallel Abstract Interpreter in Scala — First Algorithm
An Efficient and Parallel Abstract Interpreter in Scala — First Algorithm
 

Similar to Model Transformation Reuse

Approaches to Model Transformation Reuse: from Concepts to A-posteriori typing
Approaches to Model Transformation Reuse: from Concepts to A-posteriori typingApproaches to Model Transformation Reuse: from Concepts to A-posteriori typing
Approaches to Model Transformation Reuse: from Concepts to A-posteriori typingmiso_uam
 
Automatic Task-based Code Generation for High Performance DSEL
Automatic Task-based Code Generation for High Performance DSELAutomatic Task-based Code Generation for High Performance DSEL
Automatic Task-based Code Generation for High Performance DSELJoel Falcou
 
Deep Dive Into Catalyst: Apache Spark 2.0’s Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0’s OptimizerDeep Dive Into Catalyst: Apache Spark 2.0’s Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0’s OptimizerDatabricks
 
Deep Dive Into Catalyst: Apache Spark 2.0'S Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0'S OptimizerDeep Dive Into Catalyst: Apache Spark 2.0'S Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0'S OptimizerSpark Summit
 
OpenMP tasking model: from the standard to the classroom
OpenMP tasking model: from the standard to the classroomOpenMP tasking model: from the standard to the classroom
OpenMP tasking model: from the standard to the classroomFacultad de Informática UCM
 
Madeo - a CAD Tool for reconfigurable Hardware
Madeo - a CAD Tool for reconfigurable HardwareMadeo - a CAD Tool for reconfigurable Hardware
Madeo - a CAD Tool for reconfigurable HardwareESUG
 
SparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDsSparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDsDatabricks
 
Feature engineering pipelines
Feature engineering pipelinesFeature engineering pipelines
Feature engineering pipelinesRamesh Sampath
 
Testing Model Transformations
Testing Model TransformationsTesting Model Transformations
Testing Model Transformationsmiso_uam
 
9781285852744 ppt ch12
9781285852744 ppt ch129781285852744 ppt ch12
9781285852744 ppt ch12Terry Yoast
 
02 functions, variables, basic input and output of c++
02   functions, variables, basic input and output of c++02   functions, variables, basic input and output of c++
02 functions, variables, basic input and output of c++Manzoor ALam
 
Code Difference Visualization by a Call Tree
Code Difference Visualization by a Call TreeCode Difference Visualization by a Call Tree
Code Difference Visualization by a Call TreeKamiya Toshihiro
 
Basic concept of MATLAB.ppt
Basic concept of MATLAB.pptBasic concept of MATLAB.ppt
Basic concept of MATLAB.pptaliraza2732
 
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...Raffi Khatchadourian
 

Similar to Model Transformation Reuse (20)

Approaches to Model Transformation Reuse: from Concepts to A-posteriori typing
Approaches to Model Transformation Reuse: from Concepts to A-posteriori typingApproaches to Model Transformation Reuse: from Concepts to A-posteriori typing
Approaches to Model Transformation Reuse: from Concepts to A-posteriori typing
 
Automatic Task-based Code Generation for High Performance DSEL
Automatic Task-based Code Generation for High Performance DSELAutomatic Task-based Code Generation for High Performance DSEL
Automatic Task-based Code Generation for High Performance DSEL
 
Deep Dive Into Catalyst: Apache Spark 2.0’s Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0’s OptimizerDeep Dive Into Catalyst: Apache Spark 2.0’s Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0’s Optimizer
 
Deep Dive Into Catalyst: Apache Spark 2.0'S Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0'S OptimizerDeep Dive Into Catalyst: Apache Spark 2.0'S Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0'S Optimizer
 
Object Oriented Programming using C++ - Part 5
Object Oriented Programming using C++ - Part 5Object Oriented Programming using C++ - Part 5
Object Oriented Programming using C++ - Part 5
 
S emb t13-freertos
S emb t13-freertosS emb t13-freertos
S emb t13-freertos
 
Javascript.ppt
Javascript.pptJavascript.ppt
Javascript.ppt
 
OpenMP tasking model: from the standard to the classroom
OpenMP tasking model: from the standard to the classroomOpenMP tasking model: from the standard to the classroom
OpenMP tasking model: from the standard to the classroom
 
Madeo - a CAD Tool for reconfigurable Hardware
Madeo - a CAD Tool for reconfigurable HardwareMadeo - a CAD Tool for reconfigurable Hardware
Madeo - a CAD Tool for reconfigurable Hardware
 
MDE in Practice
MDE in PracticeMDE in Practice
MDE in Practice
 
SparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDsSparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDs
 
Feature engineering pipelines
Feature engineering pipelinesFeature engineering pipelines
Feature engineering pipelines
 
Testing Model Transformations
Testing Model TransformationsTesting Model Transformations
Testing Model Transformations
 
9781285852744 ppt ch12
9781285852744 ppt ch129781285852744 ppt ch12
9781285852744 ppt ch12
 
02 functions, variables, basic input and output of c++
02   functions, variables, basic input and output of c++02   functions, variables, basic input and output of c++
02 functions, variables, basic input and output of c++
 
Code Difference Visualization by a Call Tree
Code Difference Visualization by a Call TreeCode Difference Visualization by a Call Tree
Code Difference Visualization by a Call Tree
 
Basic concept of MATLAB.ppt
Basic concept of MATLAB.pptBasic concept of MATLAB.ppt
Basic concept of MATLAB.ppt
 
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
 
3 Function & Storage Class.pptx
3 Function & Storage Class.pptx3 Function & Storage Class.pptx
3 Function & Storage Class.pptx
 
EEDC Programming Models
EEDC Programming ModelsEEDC Programming Models
EEDC Programming Models
 

More from miso_uam

Model-driven engineering for AR
Model-driven engineering for ARModel-driven engineering for AR
Model-driven engineering for ARmiso_uam
 
Capone.pdf
Capone.pdfCapone.pdf
Capone.pdfmiso_uam
 
MLE_keynote.pdf
MLE_keynote.pdfMLE_keynote.pdf
MLE_keynote.pdfmiso_uam
 
Scientific writing
Scientific writingScientific writing
Scientific writingmiso_uam
 
Facets_UCM
Facets_UCMFacets_UCM
Facets_UCMmiso_uam
 
Máster en Métodos Formales en Ingeniería Informática
Máster en Métodos Formales en Ingeniería InformáticaMáster en Métodos Formales en Ingeniería Informática
Máster en Métodos Formales en Ingeniería Informáticamiso_uam
 
Analysing-MMPLs
Analysing-MMPLsAnalysing-MMPLs
Analysing-MMPLsmiso_uam
 
Miso-McGill
Miso-McGillMiso-McGill
Miso-McGillmiso_uam
 
MDE-experiments
MDE-experimentsMDE-experiments
MDE-experimentsmiso_uam
 

More from miso_uam (20)

Model-driven engineering for AR
Model-driven engineering for ARModel-driven engineering for AR
Model-driven engineering for AR
 
Capone.pdf
Capone.pdfCapone.pdf
Capone.pdf
 
MLE_keynote.pdf
MLE_keynote.pdfMLE_keynote.pdf
MLE_keynote.pdf
 
Multi21
Multi21Multi21
Multi21
 
MLMPLs
MLMPLsMLMPLs
MLMPLs
 
Scientific writing
Scientific writingScientific writing
Scientific writing
 
Facets_UCM
Facets_UCMFacets_UCM
Facets_UCM
 
SLE_MIP08
SLE_MIP08SLE_MIP08
SLE_MIP08
 
mtATL
mtATLmtATL
mtATL
 
Máster en Métodos Formales en Ingeniería Informática
Máster en Métodos Formales en Ingeniería InformáticaMáster en Métodos Formales en Ingeniería Informática
Máster en Métodos Formales en Ingeniería Informática
 
Analysing-MMPLs
Analysing-MMPLsAnalysing-MMPLs
Analysing-MMPLs
 
Facets
FacetsFacets
Facets
 
kite
kitekite
kite
 
MTPLs
MTPLsMTPLs
MTPLs
 
Miso-McGill
Miso-McGillMiso-McGill
Miso-McGill
 
Miso
MisoMiso
Miso
 
DSLcomet
DSLcometDSLcomet
DSLcomet
 
SICOMORO
SICOMOROSICOMORO
SICOMORO
 
ReusingMT
ReusingMTReusingMT
ReusingMT
 
MDE-experiments
MDE-experimentsMDE-experiments
MDE-experiments
 

Recently uploaded

SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
cpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptcpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptrcbcrtm
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 

Recently uploaded (20)

SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
cpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptcpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.ppt
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 

Model Transformation Reuse

  • 1. TRANSFORMATION REUSE IN MODEL-DRIVEN ENGINEERING McMaster CS Seminar. Jan 22 2018. Juan de Lara joint work with Esther Guerra and Jesús Sánchez Cuadrado Modelling&Software Engineering Research Group http://miso.es @miso_uam
  • 2. MODEL DRIVEN ENGINEERING (MDE) Increase the level of abstraction in software development Models are actively used to • Describe the problem… • Simulate/verify/test… • Generate code for the final application Move from the solution space (code-centric) to the problem space • Higher levels of productivity and quality • Less accidental details 2
  • 3. MODEL DRIVEN ENGINEERING (MDE) For specific domains • Avoid coding the same solutions over and over • Families of applications Domain-Specific Modelling Languages (DSLs) Code Generator • Modelling, validation and automatic generation of telephony services 3
  • 4. BENEFITS OF MDE Increase productivity • Domain-Specific instead of General Purpose languages • Reported productivity increases in the order of 20-30% [WH14] Automation • Avoid repetitive tasks Higher level of abstraction • Domain models vs low-level coding • More intentional, easier to analyse • Less accidental details End-user development • By Domain-Specific Languages 4 Whittle, Hutchinson, Rouncefield. “The state of practice in model-driven engineering”. IEEE Software 31(3): 79-85 (2014)
  • 5. DRAWBACKS OF MDE High initial investment • Meta-models • Modelling environments • Transformations • Code generators • Simulators • Model-to-Model transformations 5 Model Code Modeli Modeli+1 Model Model’ Meta- model Meta- model Meta- models Meta- modelt«iOf» «iOf» «iOf» «iOf» «iOf» Code generation In-place transformation Model-to-model trasformation
  • 6. OUR GOAL 6 Make MDE more widely applicable by reducing its required initial investment MDE artefacts (transformations, code generators, editors) are defined over specific meta-models • Difficult to reuse for other related meta-models How to avoid creating (essentially) the same transformation for different meta-models?
  • 7. IN THE REST OF THIS TALK… 7 Current practice of “reuse” • Ad-hoc reuse (clone and own) • Explicit model adaptation Three different approaches to reuse • Concepts • Multi-level modelling • A-posteriori typing Tool support Conclusions and future work
  • 8. EXAMPLE: PROCESS MODELS TO PETRI NETS 8 Task name: String initial: boolean next * Place Transitionid: String tokens: int inps outs * *
  • 9. 9 press wait cross start start press wait cross Task name: String initial: boolean next * Place Transitionid: String tokens: int inps outs * * EXAMPLE: PROCESS MODELS TO PETRI NETS task2PN
  • 11. 11 TRANSFORMATION (ATL) rule Task2Place { from t : Process!Task to p : PN!Place ( id <- t.name, tokens <- if t.initial then 1 else 0 endif ) } rule next2Transition { from t1 : Process!Task, t2 : Process!Task (t1.next->includes(t2)) to tr : PN!Transition ( inps <- t1, outs <- t2 ) } …
  • 12. REUSE FOR ANOTHER META-MODEL 12 Task name: String initial: boolean next * Place Transitionid: String tokens: int inps outs * * Activity ident: String InitialActivity task2PN FlowEdge from to
  • 13. 13 rule Task2Place { from t : Process!Task to p : PN!Place ( id <- t.name, tokens <- if t.initial then 1 else 0 endif ) } rule next2Transition { from t1 : Process!Task, t2 : Process!Task (t1.next->includes(t2)) to tr : PN!Transition ( inps <- t1, outs <- t2 ) } … AD-HOC REUSE (CLONE&OWN)
  • 14. AD-HOC REUSE (CLONE&OWN) 14 rule Task2Place { from t : Process!Activity to p : PN!Place ( id <- t.ident, tokens <- if t.oclIsTypeOf(Process!InitialActivity) then 1 else 0 endif ) } rule next2Transition { from t1 : Process!Activity, t2 : Process!Activity (Process!FlowEdge.allInstances()->exist(e | e.from=t1 and e.to=t2)) to tr : PN!Transition ( inps <- t1, outs <- t2 ) }
  • 15. AD-HOC REUSE (CLONE&OWN) 15 rule Task2Place { from t : Process!Activity to p : PN!Place ( name <- t.ident, tokens <- if t.oclIsTypeOf(Process!InitialActivity) then 1 else 0 endif ) } rule next2Transition { from t1 : Process!Activity, t2 : Process!Activity (Process!FlowEdge.allInstances()->exist(e | e.from=t1 and e.to=t2)) to tr : PN!Transition ( inps <- t1, outs <- t2 ) } • Complex and error prone • Repetitive • Does not scale to large transformations
  • 16. EXPLICIT MODEL ADAPTATION 1616 Task name: String initial: boolean next * Place Transitionid: String tokens: int inps outs * * Activity ident: String InitialActivity task2PN FlowEdge from to activity2task;task2PN activity2task
  • 17. MOTIVATION 17 rule Activity2Task { from t : Activities!Activity to p : Process!Task ( id <- t.ident, initial <- t.oclIsKindOf(Activities!InitialActivity), next <- Activities!FlowEdge.allInstances()-> select (e | e.from = t)-> collect(e | e.to ) ) } t: InitialActivity ident=“a0” p: Task name=“a0” initial=true pl: Place name=“a0” tokens=1 activity2task task2PN
  • 18. MOTIVATION 18 rule Activity2Task { from t : Activities!Activity to p : Process!Task ( name <- t.ident, initial <- t.oclIsKindOf(Activities!InitialActivity), next <- Activities!FlowEdge.allInstances()-> select (e | e.from = t)-> collect(e | e.to ) ) } • Three models involved, complicates traceability • Two transformations: less efficient • May require a transformation back to the initial model
  • 20. Automate ad-hoc copy-adaptation: CONCEPT-BASED REUSE 20 Concept Msrc Mtar from to «conforms to» «conforms to» Template execution MMsrc Instantiated template to binding MMtar HOT Transformation template definition from Final user Transformation developer (with reuse) Transformation developer (for reuse) 1 2 3 4 • Transformations defined over “concepts” • Binding to concrete meta-model • Automated transformation adaptation Sánchez Cuadrado, Guerra, de Lara. “A Component Model for Model Transformations”. IEEE Trans. Software Eng. 2014.
  • 21. 21 STRUCTURAL CONCEPTS Structural Concepts. • They gather the structure needed from meta-models for the transformation to be applicable. • They have the form of a meta- model as well. SimpleTask concept Task name: String initial: boolean next * Their elements are treated as variables, which need to be bound to elements in specific meta-models. Interface of the transformation • No superflous elements • No extra complexity • Transformations become as simple as possible
  • 22. 22 REUSABLE TRANSFORMATIONS Transformations defined using the types of the concept. L R=NAC t:Task name=n t:Task name=n :Place id=n tokens=t.initial?1:0 t1:Task t2:Task :next p1:Place p2:Place t1:Task t2:Task :next p1:Place p2:Place :Transition :inps :outs L R=NAC
  • 23. 23 BINDING Concept binding: • Bind each element in the concept to an element in the meta-model. Task SETask name  id initial  isInitial next  following Binding SETaskEngineer Coding Testing actors * Software Engineering processes Design SimpleTask concept Task name: String initial: boolean next * Analysis id: String isInitial: boolean following 0..5
  • 24. ADAPTATION The transformation gets automatically adapted Similar to template instantiation in generic programming 24 t:SETask id=n t:SETask id=n :Place id=n tokens=t.isInitial?1:0 t1:SETask t2:SETask :following p1:Place p2:Place t1:SETask t2:SETask :following p1:Place p2:Place :Transition :inps :outs
  • 25. IS THE RESULTING TRANSFORMATION CORRECT? Yes, by following some rules: Rules for the binding • Cardinalities • Composition, features, subtyping, etc Depends on what you do with the concept • Read only (e.g., for M2M transformation) • Write (e.g., for in-place transformation) 25 SETaskTask SETaskTask Concept Meta-modelbinding R W Sánchez Cuadrado, Guerra, de Lara. “Flexible Model-to-Model Transformation Templates: An Application to ATL”. JOT 2012. Task next * SETask R following 0..5 SETask following 0..5 Task next * W
  • 26. 26 MORE FLEXIBLE BINDINGS Concepts express a particular design choice on how structure is organized Different meta-models may implement the same structure differently • Association as intermediate class • Enumerate as subclases • etc. binding Task name: String initial: boolean next * Activity ident: String InitialActivity FlowEdge from to
  • 27. 27 BINDING ADAPTERS Elements in the concept are variables • Allow binding them to expressions: adapters Adapters resolve the heterogeneities between the concept and the meta-model They induce an adaptation of the transformation Sánchez Cuadrado, Guerra, de Lara. “A Component Model for Model Transformations”. IEEE Trans. Software Eng. 2014. de Lara, Guerra. “Towards the flexible reuse of model transformations: A formal approach based on graph transformation”. JLAMP 83(5-6). 427-458 (2014)
  • 28. rule Task2Place { from t : Pr!Task to p : PN!Place ( tokens <- if t.initial then 1 else 0 endif )} 28 Task initial: boolean next * Concept Activity InitialActivity Flow Edge from to Task  Activity Task.initial  if (self.oclIsKindOf(InitialActivity)) then true else false endif Task.next  FlowEdge.allInstances()-> select(e|e.from=self)-> collect(to) Meta-model typed on helper context Pr!Activity def: initial : Boolean = if (…) then true else false endif; rule Task2Place { from t : Pr!Activity to p : PN!Place ( tokens <- if t.initial then 1 else 0 endif )} typed on adaptation
  • 29. ON THE ROLE OF CONCEPTS… Aren’t concepts characterizing a set of “suitable” meta-models for the transformation? Isn’t that exactly what meta-models do (for models)? Concepts as meta-meta-models Rely on typing: no need to adapt the transformation 29
  • 31. Language families as instances of a common meta-model MULTI-LEVEL BASED REUSE 31 Process Modelling Software Process Modelling Language Educational Modelling Language Software Process Models Educational Models de Lara, Guerra, Sánchez Cuadrado. “Model-driven engineering with domain specific meta-modelling languages”. SoSyM 2015 (Springer).
  • 32. 32 MULTI-LEVEL BASED GENERICITY Transformations can be defined at the top meta-level Applicable to instances of all languages in the family Process Modelling Software Process Modelling Language Educational Modelling Language Software Process Models Educational Models … Transformation defined on applicableto
  • 33. 33 MULTI-LEVEL BASED GENERICITY Task Kind Gateway Kind Seq Par src tar * * Test: TaskKindCoding:TaskKind T2C: Seq C2T: Seq src tar srctar data: Coding unitDt: Test gui: Coding : C2T src tar : T2C tar src «conf» «conf» data: Coding unitDT: Test gui: Coding rule Task2Place transform t : Level0!TaskKind to p : Place { ... } .... defined on
  • 34. rule Task2Place transform t : Level0!TaskKind to p : Place { ... } .... 34 MULTI-LEVEL BASED GENERICITY data: Coding unitDT: Test gui: Coding rule Coding2Place transform t : Coding to p : Place {…} rule Test2Place transform t : Test to p : Place {…} defined on data: Coding unitDt: Test gui: Coding : C2T src tar : T2C tar src «conf» Task Kind Gateway Kind Seq Par src tar * * Test: TaskKindCoding:TaskKind T2C: Seq C2T: Seq src tar srctar «conf»
  • 35. 35 MULTI-LEVEL VS CONCEPT- BASED GENERICITY Concept-based Genericity Multi-level-based Genericity • A posteriori binding: meta- models may exist first. • Adapters and hybrid concepts to solve heterogeneities. • A priori: meta-meta-model should exist first. • Ability to apply an operation several meta-levels below. • Domain-Specific meta- modelling.
  • 36. 36 CAN WE GET THE BEST OF BOTH APPROACHES? • A posteriori binding: meta-models may exist first. • Adapters or Hybrid concepts to solve heterogeneities. • Independence of the transformation language Concept-based reuse Multi-level reuse
  • 37. 37 CAN WE GET THE BEST OF BOTH APPROACHES? • A posteriori binding: meta-models may exist first. • Adapters to solve heterogeneities. • Independence of the transformation language Concept-based reuse Multi-level reuse Let’s make the typing relation: • A-posteriori • As flexible as adapters
  • 39. A-POSTERIORI TYPING 39 A more flexible typing mechanism for MDE Decouple instantiation from classification • Interfaces in object-oriented programming • Roles in role-based programming languages Allow dynamic typing and multiple classifiers for objects Type and instance-level reclassification specifications de Lara, Guerra. A Posteriori Typing for Model-Driven Engineering: Concepts, Analysis, and Applications. ACM Trans. Softw. Eng. Methodol. 25 (4) 31:1-31:60 (2017)
  • 40. CONSTRUCTIVE VS A-POSTERIORI TYPING 40 Task start: Date duration: int name: String review: Task start= 8/5/15 duration= 30 name= “rev” creation «instance of» Measurable quantity: int Schedulable date: Date review: Task Tasks meta-model model Scheduling MM Measuring MM model «instance of» «instance of» start= 8/5/15 duration= 30 name= “rev” «Schedulable,Measurable» Constructive typing A-posteriori typing Constructive typing A-posteriori typing
  • 41. SPECIFYING AP TYPINGS AT THE TYPE-LEVEL 41 Schedulable date: Date span: double review: Task Tasks meta-model ( MMC ) start= 8/5/15 /months= 1 duration= 30 name= “rev” Scheduling MM ( MMR ) Task start: Date duration: int name: String Typing Specification Task  Schedulable self.start  date /months: double=self.duration/30  span «Schedulable» «date» «span» creation «instance of» (constructive) «instance of» (a-posteriori) • Derived attributes (months) defined in the typing specification. • Typing rules: ensure syntactic correctness
  • 42. TYPE-LEVEL AP TYPING 42 date: Date span: double writing: Task start= 15/3/15 duration= 90 name= “wrt” review: Task start= 8/5/15 duration= 30 name= “rev” Schedulable Scheduling MM (MMR) Instance model of Tasks ( MMC ) «instance of» (a-posteriori) “Scheduling glasses” Operations review: Schedulable date= 8/5/15 span= 1 {review, writing} {1, 3} Schedulable.allInstances() writing: Schedulable date= 15/3/15 span= 3 Schedulable.allInstances()-> collect(span)
  • 43. SPECIFYING AP TYPINGS AT THE INSTANCE LEVEL 43 date: Date span: double writing: Task start= 15/3/15 duration= 90 name= “wrt” review: Task start= 8/5/15 /months= 1 duration= 30 name= “rev” «Schedulable» «date» «instance of» (a-posteriori) Schedulable Scheduling MM (MMR) Typing Specification Task.allInstances()->select(duration<80)  Schedulable self.start  date /months: double=self.duration/30  span Instance model of Tasks ( MMC ) «span» • Typing defined by queries. • Derived attributes defined by queries as well.
  • 44. INSTANCE-LEVEL AP TYPING 44 Operations date: Date span: double writing: Task start= 15/3/15 duration= 90 name= “wrt” review: Task start= 8/5/15 duration= 30 name= “rev” Schedulable Scheduling MM (MMR) Instance model of Tasks ( MMC ) «instance of» (a-posteriori) review: Schedulable date= 8/5/15 span= 1 Schedulable.allInstances()-> collect(span) {review} {1} Schedulable.allInstances() “Scheduling glasses”
  • 45. INSTANCE-LEVEL AP TYPING 45 Operations date: Date span: double writing: Task start= 15/3/15 duration= 60 name= “wrt” review: Task start= 8/5/15 duration= 30 name= “rev” Schedulable Scheduling MM (MMR) Instance model of Tasks ( MMC ) «instance of» (a-posteriori) review: Schedulable date= 8/5/15 span= 1 Schedulable.allInstances()-> collect(span) {review, writing} {1, 2} Schedulable.allInstances() “Scheduling glasses” writing: Schedulable date= 15/3/15 span= 2
  • 46. Activity  Task ident  name /init : boolean = self.oclsKindOf(InitialActivity)  initial /follow: Task[*] = FlowEdge.allInstances()-> select(e|e.from=self)-> collect(e|e.to)  next EXAMPLE 46 Task name: String initial: boolean next * Activity ident: String InitialActivity FlowEdge from to
  • 47. A-POSTERIORI TYPING AS A TRANSFORMATION 47 Task name: String initial: boolean next Place Transitionid: String tokens: int inps outs * * task2PN Task.allInstances()  Place name  id /toks : int = if (self.initial) then 1 else 0  tokens Task.allInstances()->select(t|t.next.isDefined())  Transition /prevs : Task[*] = Set{self}  inps /nexts : Task[*] = Set{self.next}  outs 0..1
  • 48. A-POSTERIORI TYPING AS A TRANSFORMATION 48 Place Transitionid: String tokens: int inps outs * * t1:Task name=“t1” initial=false name=“t2” initial=true :next name=“t3” initial=false :next t2:Task t3:Task Task name: String initial: boolean next 0..1 task2PN
  • 49. A-POSTERIORI TYPING AS A TRANSFORMATION 49 Place Transitionid: String tokens: int inps outs * * «Place» «Place, Transition» «Place, Transition» «id» «id» «id» Task name: String initial: boolean next 0..1 task2PN t1:Task name=“t1” initial=false name=“t2” initial=true :next name=“t3” initial=false :next t2:Task t3:Task
  • 50. A-POSTERIORI TYPING AS A TRANSFORMATION 50 Place Transitionid: String tokens: int inps outs * * t2:Task t3:Task «Transition» «Transition» «outs» «outs» «inps» «inps» Task name: String initial: boolean next 0..1 task2PN «Place» «Place» «id» «id»name=“t2” initial=true name=“t3” initial=false t2:Task t3:Task «Place» «id» t1:Task name=“t1” initial=false
  • 52. BENTŌ: CONCEPT-BASED REUSE FOR ATL Adaptation of ATL transformations according to the binding Support for refactoring meta-models into concepts 52 Sánchez Cuadrado, Guerra, de Lara. “A Component Model for Model Transformations”. IEEE TSE 2014 Sánchez Cuadrado, Guerra, de Lara. “Reusable Model Transformation Components with bentō”. ICMT’ 15
  • 53. // Model Tasks someTasks { Task t0 { start = "30/04/2015"; duration = 30; name = "coding"; } } METADEPTH 53 Multi-level textual modelling Concepts • Over every Epsilon language • Hybrid concepts A-posteriori typing • Over every Epsilon language Analysis of type-level specs • Integration with the USE validator • Bidirectional reclassification • Reclassification totality and surjectivity // Meta-model Model Tasks { Node Task { start : Date; duration : int; name : String; } }
  • 54. CONCEPT-BASED REUSE 54 concept SimpleTasks(&M, &T, &initial) { Model &M { Node &T { &initial : boolean; name : String; } } } bind SimpleTasks( SEProcess, SEProcess::SETask, SEProcess::SETask.isInitial ) <<some operation>> rule Task2Place transform task : Source!&T to place : Target!Place { place.name := task.name; if (task.&initial=true) place.tokens:=1 else place.tokens:=0 } ETL transformation
  • 55. 55 Model ProcessModel@2 { Node Task { name@1 : String[0..1]; initial : boolean = false; } } ProcessModel SoftwareProcess { Task Analysis { name = “reqs, analysis”; } } SoftwareProcess aSoftProcess{ Analysis a { initial = true; } } @model(potency=0) rule Task2Place transform task : Source!Task to place : Target!Place { place.name := task.name; if (task.initial=true) place.tokens:=1 else place.tokens:=0 } ETL transformation MULTI-LEVEL BASED REUSE
  • 56. 56 type Factory PetriNet { Conveyor::parts > Place::tokens, Generator::outps > Transition::outs, Terminator::inps > Transition::ins, Assembler::inps > Transition::ins, Assembler::outps > Transition::outs, } A-POSTERIORI TYPINGS
  • 57. Transformations defined over Petri nets can be reused “as is” for Factory • Provide an AP typing from Factory to Petri nets • Factory models become typed as Petri nets 57 // EOL excerpt of the simulator operation Transition enabled() : Boolean { return self.ins.forAll(p| p.tokens.size()>0); } operation step() : Boolean { var enabled : Set(Transition) := Transition.all.select( t | t.enabled()); ... // fire one random Transition from enabled } A-POSTERIORI TYPINGS
  • 58. CONCLUSIONS 58 Lower entry-level to MDE to make it more widely used Approaches to reuse model transformations in MDE • Concept-based • Ideas from generic programming • Automates ad-hoc reuse • Multi-level modelling • Families of languages • Independent of transformation language • A-posteriori typing • Provide additional types via retyping specifications • Improve model-adaptation based reuse
  • 59. FUTURE WORK 59 Product-Lines based reuse • With Salay, Chechik (UoT) • Analysis Requirement models as the interface of transformations • More powerful than concepts Exploit a-posteriori typing in MDE • Multiple typings for MDE • Retypings as bx transformations Unified approach?
  • 60. THANKS! Juan.deLara@uam.es 60 http://www.miso.es joint work with E. Guerra and J. Sánchez Cuadrado @miso_uam