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
*
*
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
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;
}
}
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?