Version Control for Graphs as a Basis of Version Control for Models Z. Protić M. F. van Amstel...
Embed Size (px)
Transcript of Version Control for Graphs as a Basis of Version Control for Models Z. Protić M. F. van Amstel...
-
Version Control for Graphs as a Basis of Version Control for ModelsZ. ProtiM. F. van AmstelM.G.J. van den BrandT. Verhoeff
-
Problem statementDefine a generic method for version control of modelsIt should work for graph-based modelsIt should be possible to use it with existing toolsIt should be easy to use
-
SolutionRepresent all models as graphsUse state-based versioning Differences are calculated based on structure of the modelsUse the experience of the existing versioning systems (CVS, SVN) to define the functions of the model versioning system
-
Graphs used to represent modelsGraphs consist of:Labeled nodesEach node is uniquely identifiedLabeled edgesExample graph
-
Graphs used to represent modelsGraphs can be transformed to structured text.Example graphO1O2O3O4O1, O2, E1O1, O4, E2Textual representationBi-directionaltransformation
-
Graph-based model versioning system: Architecture
-
Example graph representation of a modelAB: Int
A ID1
B
Int ID2 ID3Kolovos, D.S., Di Ruscio, D., Pierantonio, A., Paige, R.F.: Different models for model matching: An analysis of approaches to support model differencing ICSE Workshop on Comparison and Versioning of Software Models (2009) 1-6
-
Graph-based model versioning system: Architecture
-
Graph-based model versioning system: Differences detectionM. F. van Amstel, M. G. J. van den Brand, Z. Protic, T. Verhoef:Graph-based calculation and representation of metamodel-independent model differencesSubmitted to FASE 2010
-
Questions ?
-
Graph Differences
-
Templating language ::= "TEMPLATE" "(" ")" "->" "[" "]""uses" ":"
::= ::= | | "," ::= | | "," ::= | ";" ::= | | | | ::= | | ::= "empty(" ")" ::= | ::= | "," | "," | ::= "[" "]" "=" "match(" "(" ")" ")" ::= "[" "]" "=" "union(" "[" "]", "[" "]" ")" ::= "[" "]" "=" "intersect(" "[" "]", "[" "]" ")" ::= "[" "]" "=" "subtract(" "[" "]", "[" "]" ")" ::= "{" "}" ::= | ::= "$" ::= | ::= ::= | ::= | ::= | | ::= "A"|"a"|...|"Z"|"z" ::= "_"|"="|":" ::= "0"|"1"|...|"9"