60
ttp://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC Software Explorer Software Explorer and Language Archeologist and Language Archeologist University University of of Grenoble Grenoble Looking from the past ... Looking from the past ... to build the future to build the future

Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

Embed Size (px)

Citation preview

Page 1: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Jean-Marie FavreJean-Marie Favre Software ExplorerSoftware Explorer

and Language Archeologistand Language Archeologist

University University of Grenobleof Grenoble

Looking from the past ... to build the Looking from the past ... to build the futurefuture

Page 2: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

MessagesMessages

Metamodels are first class entities (MDE)Metamodels are first class entities (MDE) Metaware is everywhereMetaware is everywhere Metamodels are keys to Reverse EngineeringMetamodels are keys to Reverse Engineering Reverse Engineering is key to Model Driven Reverse Engineering is key to Model Driven

EngineeringEngineering

... Read the paper(s)... Read the paper(s)

Page 3: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

WCRE 2004 DELFT MMIV BCwww-adele.imag.fr/~jmfavre

Page 4: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodelIEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e .oclIsKindOf(Mapplet))and let maplets = e lement.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e .oclIsKindOf(TransformsIn))element->forall( e | e .oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf

: ElementOf

: ConformsTo

: IsTransformedIn

: Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Page 5: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Metaware Reverse Metaware Reverse EngineeringEngineering

Metaware Reverse Metaware Reverse EngineeringEngineering

MetaModel-Driven Reverse MetaModel-Driven Reverse EngineeringEngineering

MetaModel-Driven Reverse MetaModel-Driven Reverse EngineeringEngineering

MetaModel-Driven Architecture MetaModel-Driven Architecture RecoveryRecovery

MetaModel-Driven Architecture MetaModel-Driven Architecture RecoveryRecovery

Page 6: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Metaware Reverse Metaware Reverse EngineeringEngineering

Metaware Reverse Metaware Reverse EngineeringEngineering

Metaware Reverse Engineering

Page 7: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Metaware Reverse Metaware Reverse EngineeringEngineering

Metaware Reverse Metaware Reverse EngineeringEngineering

Metaware Reverse Engineering

Page 8: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Metaware Reverse Metaware Reverse EngineeringEngineering

Metaware Reverse Metaware Reverse EngineeringEngineering

Metaware Reverse Engineering

Page 9: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

CaCaccOphOphooNyNy : :

MetaModel-Driven MetaModel-Driven

Software Architecture Software Architecture

ReconstructionReconstruction

CaCaccOphOphooNyNy : :

MetaModel-Driven MetaModel-Driven

Software Architecture Software Architecture

ReconstructionReconstruction

OMG Standard for Model Driven

Architecture

MetaModel-DrivenMetaModel-Driven

IEEE Standard for Software

Architecture

IEEE IEEE 14711471

Software ArchitectureSoftware Architecture

Standard Terminology for Reverse Engineering

ReconstructionReconstruction

Page 10: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Another companion paperAnother companion paper

Page 11: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Symphony vs. CaSymphony vs. CaccOphOphooNy ?Ny ?

Page 12: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Symphony and CaSymphony and CaccOphOphooNy : Ny : Same GoalsSame Goals

Page 13: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Symphony and CaSymphony and CaccOphOphooNy : Ny : Same GoalsSame Goals

Page 14: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

NOKIA

SIEMENS

DASSAULT SYSTEMES

Symphony and CaSymphony and CaccOphOphooNy : Ny : Experiences Experiences DistilledDistilled

Page 15: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Symphony or CaSymphony or CaccOphOphooNy ?Ny ?

Page 16: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Symphony or CaSymphony or CaccOphOphooNy ?Ny ?

Just ask what is software architecture?Just ask what is software architecture?

165 definitions of "software architecture"[SEI]

"Architecture is a domain where everybody disagree with everybody"

[SETRA2004 speaker]

Page 17: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

CacOphoNy, CacOphoNy, no Symphonyno Symphony

Software architectureSoftware architecture

is about controlled Cais about controlled CaccOphOphooNyNy

"Whether something is part of the architecture is entirely based on whether the developers think it is important. Architecture is a social construct because it doesn"t just depend on the software, but on what part of the software is considered important by group consensus."

Martin Fowler

Page 18: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Symphony vs. CaSymphony vs. CaccOphOphooNy : Ny : ApproachApproach

IEEE IEEE 14711471

IEEE IEEE 14711471

Page 19: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Symphony vs. CaSymphony vs. CaccOphOphooNy : Ny : ApproachApproach

IEEE IEEE 14711471

CacOphoNy

Page 20: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BCThis is not This is not Bézivin' Guest Bézivin' Guest TalkTalk

Everythingis a

model

HypothesisHypothesisHypothesisHypothesis

Page 21: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

HypothesisHypothesis

"Everything is a "Everything is a modelmodel""

(from Bézivin' Guest (from Bézivin' Guest Talk)Talk)

This is not Bézivin' Talk

Page 22: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

HypothesisHypothesis

"Everything is a "Everything is a modelmodel""

(from Bézivin' Guest (from Bézivin' Guest Talk)Talk)

Ceci n'est pas letableau de Magritte

Page 23: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

"Everything is a "Everything is a modelmodel""

(from Bézivin' Guest (from Bézivin' Guest Talk)Talk)

HypothesisHypothesis

Ceci n'est pas untableau de Magritte

Page 24: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Ceci n'est pas untableau de Magritte

"Everything is a "Everything is a modelmodel""

HypothesisHypothesis

Page 25: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Ceci n'est pas uneoeuvre de Kozuth

"Everything is a "Everything is a modelmodel""

HypothesisHypothesis

Page 26: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

National Research Project "Action Spécifique MDA"National Research Project "Action Spécifique MDA"

7 University + 1 Research Institute 7 University + 1 Research Institute Final report available soon at http://www-adele.imag.fr/mdaFinal report available soon at http://www-adele.imag.fr/mda

Research QuestionsResearch Questions

Foundations of Foundations of Model Driven EngineeringModel Driven Engineering?? Is MDE the next Software Engineering Is MDE the next Software Engineering

Paradigm?Paradigm? Is MDE new?Is MDE new? Why it might work this time?Why it might work this time?

Page 27: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Dassault Système (DS)Dassault Système (DS) World leader in CAD/CAMWorld leader in CAD/CAM One of the largest software companOne of the largest software companiesies in Europe in Europe Pioneer with Microsoft in component engineeringPioneer with Microsoft in component engineering

A 7 years Case Study...A 7 years Case Study...

CATIA softwareCATIA software 70 000+ classes70 000+ classes 3 000+ DLLs3 000+ DLLs 8 000+ 8 000+

"components""components" 5 000+ "interfaces"5 000+ "interfaces" 800+ "frameworks"800+ "frameworks" xxxxxx "solutions" "solutions" zzzzzz "médias"… "médias"… tttttt "products" "products"

Page 28: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Concrete Results in Reverse EngineeringConcrete Results in Reverse Engineering

Page 29: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Concrete Results in Reverse EngineeringConcrete Results in Reverse Engineering

Page 30: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

A Metamodel Driven Reverse A Metamodel Driven Reverse Engineering Env.Engineering Env.

Page 31: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

A Metamodel Driven Reverse A Metamodel Driven Reverse Engineering Env.Engineering Env.

Page 32: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

A Metamodel Driven Reverse Engineering A Metamodel Driven Reverse Engineering EnvironmentEnvironment

Page 33: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

CacOphoNy

Towards a unifying megamodelTowards a unifying megamodel

IEEE IEEE 14711471Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodelIEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDA

M0M1

M2M3

MDA MDA Pyramidal ArchitecturePyramidal Architecture

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Page 34: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

*

*descr ibedBy

*

*descr ibedBy

Metamodel Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has*

*

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy

*

*descr ibedBy

Metamodel Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has*

*

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Integrated MegamodelIntegrated Megamodel

Page 35: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

IEEE IEEE 14711471Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodelIEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDA

M0M1

M2M3

MDA MDA Pyramidal ArchitecturePyramidal Architecture

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

IEEE 1471 Std for Software ArchitectureIEEE 1471 Std for Software Architecture

Page 36: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

IEEE 1471 Std for Software ArchitectureIEEE 1471 Std for Software Architecture

frame borrowed from Jean-Bézivin

Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodel

frame borrowed from Jean-Bézivin

Page 37: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Nobody agreed about a standard definitions of architectureNobody agreed about a standard definitions of architecture Nobody really caredNobody really cared Reverse engineering environment for a large component-based Reverse engineering environment for a large component-based

software engineeringsoftware engineering

Experience distiled => Metamodel driven methodologyExperience distiled => Metamodel driven methodology

IEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est l 'Architecture

IEEE Standard for Software

Architecture

IEEE IEEE 14711471

Page 38: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

*

*descr ibedBy

*

*descr ibedBy

Metamodel Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has*

*

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy

*

*descr ibedBy

Metamodel Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has*

*

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Integrated MegamodelIntegrated Megamodel

Contribution fromContribution from

IEEE Standard for Software

Architecture

IEEE IEEE 14711471

Page 39: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Integrating MegamodelIntegrating Megamodel

IEEE IEEE 14711471Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodelIEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDA

M0M1

M2M3

MDA MDA Pyramidal ArchitecturePyramidal Architecture

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Page 40: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Integrating MegamodelIntegrating Megamodel

IEEE IEEE 14711471Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodelIEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDA

M0M1

M2M3

MDA MDA Pyramidal ArchitecturePyramidal Architecture

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Page 41: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Page 42: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

OMG' Model Driven ArchitectureOMG' Model Driven Architecture

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

Page 43: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

OMG' Model Driven ArchitectureOMG' Model Driven Architecture

Ceci est le MDA

M0M1

M2M3

Saqqara "step-pyramid" 2630 B.C, First stone building on earth

MDA MDA Pyramidal ArchitecturePyramidal Architecture

Photo by John Bodsworth

Page 44: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Ceci est le MDA

MDA MDA MegamodelMegamodel

OMG' Model Driven ArchitectureOMG' Model Driven Architecture

OMG' MDA Guide Verion 1.02

Page 45: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e .oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e .oclIsKindOf(TransformsIn))element->forall( e | e .oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Model Driven EngineeringModel Driven Engineering

http://www-adele.imag.fr/mda

Page 46: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e .oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e .oclIsKindOf(TransformsIn))element->forall( e | e .oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

Ceci est le MDE

MDE MDE MegamodelMegamodel

Page 47: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

*

*descr ibedBy

*

*descr ibedBy

Metamodel Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has*

*

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy

*

*descr ibedBy

Metamodel Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has*

*

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Integrated MegamodelIntegrated Megamodel

IEEE Standard for Software

Architecture

IEEE IEEE 14711471Contribution fromContribution from

Page 48: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Integrating MegamodelIntegrating Megamodel

IEEE IEEE 14711471Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodelIEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDA

M0M1

M2M3

MDA MDA Pyramidal ArchitecturePyramidal Architecture

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Page 49: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Integrating MegamodelIntegrating Megamodel

IEEE IEEE 14711471Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodelIEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDA

M0M1

M2M3

MDA MDA Pyramidal ArchitecturePyramidal Architecture

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Page 50: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Reverse EngineeringReverse Engineering

Ceci est la etro-ingénierie

Reverse EngineeringReverse Engineering

Page 51: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BCCeci est la etro-ingénierie

Ce n'est pas Elliot

IEEE SoftwareJanuary 1990

Page 52: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

*

*descr ibedBy

*

*descr ibedBy

Metamodel Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has*

*

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy

*

*descr ibedBy

Metamodel Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has*

*

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Integrated MegamodelIntegrated Megamodel

Page 53: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Integrating MegamodelIntegrating Megamodel

IEEE IEEE 14711471Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est l 'Architecture

IEEE 1471 IEEE 1471 MegamodelMegamodelIEEE 1471 IEEE 1471 MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDA

M0M1

M2M3

MDA MDA Pyramidal ArchitecturePyramidal Architecture

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

MDA MDA Pyramidal Architecture"Pyramidal Architecture"

Ceci est le MDA

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

Ceci est le MDE

MDE MDE MegamodelMegamodel

model *

sus *

RepresentationOfRepresentationOf

cmodel *

metamodel *

/ConformsTo

source *

target *

Mapplet

Set

Mapping

ElementOfelement *

set *

1 rangedomain 1

**

SystemDecomposedIn

* composite

* part

IsTransformedIn Denotes SemanticsTransformation

element->forall( e | e.oclIsKindOf(Mapplet))and let maplets = element.oclAsType(Set(Mapplet)) in

mapplets->forall( m | self.domain.element->includes(m.source)and self.range.element->includes(m.target))and not mapplets->exist( m2 |

m2 != m1 and m2.target = m1.target)))

confomantModel.sus->notEmpty()and metamodel =

conformantModel.set.model->asSet()

element->forall( e | e.oclIsKindOf(TransformsIn))element->forall( e | e.oclIsKindOf(TransformsIn))

element->forall( e | e.oclIsKindOf(Denotes))

Shortcuts:

: DecomposedIn

: RepresentationOf: ElementOf

: ConformsTo

: IsTransformedIn : Denotessus : systemUnderStudycmodel : conformantModele : elementc : compositep : part

MDE MDE MegamodelMegamodel

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy *

*descr ibedBy

Metamodel

Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has

**

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Page 54: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

*

*descr ibedBy

*

*descr ibedBy

Metamodel Model

Stakeholder

Concernconfor msTo

confor msTo

consistsOf

View*1

* *

consistsOf

**

has*

*

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

*

*descr ibedBy

*

*descr ibedBy

Metamodel Model

StakeholderStakeholder

Concernconfor msTo

confor msTo

consistsOf

ViewView*1

* *

consistsOf

**

has*

*

Meta-usecase

executes*

*

MetawareItem

implementedBy

ViewpointViewpointusedToCover

**

*

*

*

isBasedOn

*

AppliwareItemhandledBy

* *

Integrated MegamodelIntegrated Megamodel

Page 55: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Page 56: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Stakeholder MetaUsecaseex ecutes

**

Developer PromoteChange

ValidateChangesClusterProduct

Build

Integrator SynchWorkspaces ProductManagerRetireProduct

Metaware EngineeringMetaware Engineering

Architectural EnvironmentArchitectural Environment

Page 57: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

FramewkModule

Product

TeamGroup

Bug

TestMod

TestFwrk

TestResult

TestCase

MetamodelMeta-usecase*

isBasedOn

* *

ex ecutes*

StakeholderStakeholder

Architect

CheckDependencies

Page 58: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

FramewkModule

Product

TeamGroup

Bug

TestMod

TestFwrk

CheckDependenciesArchitectArchitect

integrated (virtual) metaware ex isting (o r legacy ) metaware

Product

Framewk

wrappers

*

*describedBy

MetamodelStakeholderStakeholder Meta-usecaseex ecutes

**

Metaw areItem

implementedBy

*

*

*

isBasedOn

*

**

Page 59: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

Future ResearchFuture Research

Meta-model Driven Reverse EngineeringMeta-model Driven Reverse Engineering Meta-model Driven VisualizationMeta-model Driven Visualization Meta-model Driven ExtractionMeta-model Driven Extraction Meta-model Driven AnalysisMeta-model Driven Analysis Operational Megamodel for Architecture RecoveryOperational Megamodel for Architecture Recovery

Operational Megamodel for Reverse EngineeringOperational Megamodel for Reverse Engineering

Operational Megamodel for Model Driven EngineeringOperational Megamodel for Model Driven Engineering......

Towards an engineering discipline for METAWARETowards an engineering discipline for METAWARE

Page 60: Http://jmfarvreWCRE DELFT MMIV BC Jean-Marie Favre Software Explorer and Language Archeologist University of Grenoble Looking from the

http://www-adele.imag.fr/~jmfarvre WCRE DELFT MMIV BC

2nd International Workshop on

Metamodels, Schemas, and Grammars for Reverse Engineering

Tomorrow