Transcript Slide 1
A Generative Approach to
Model Interpreter Evolution
Jing Zhang, Jeff Gray, and Yuehua Lin
{zhangj, gray, liny} @ cis.uab.edu
Dept. of Computer & Information Sciences
University of Alabama at Birmingham
http://www.cis.uab.edu/softcom/
Funded by the DARPA Information Exploitation Office (DARPA/IXO), under the
Program Composition for Embedded Systems (PCES) program
Evolution of models and interpreters in
terms of meta-model changes
∆MM 1
Meta-model0
∆MM 2
Meta-model1
Define
∆MM n
Meta-modeln
Define
Based on
∆M 1
Model0
Define
∆M 2
Model1
Interpret
……
∆M n
Modeln
Interpret
∆I 1
Interpreter0
……
Interpret
∆I 2
Interpreter1
……
∆I n
∆MM: The changes made to the meta-models
∆M: The changes reflected in the domain models
∆I: The changes reflected in the model interpreters
Interpretern
Example: Old/New Metamodel and model
Example: Old/New Interpreter
CBuilderAtom *GetStartState(
CBuilderModel *StateDiagram)
{
CBuilderAtom *startstate = null;
const CBuilderAtomList *states =
StateDiagram->GetAtoms("State");
POSITION pos=states->GetHeadPosition();
while(pos)
{
CBuilderAtom *st =
states->GetNext(pos);
CBuilderConnectionList *cons =
st->GetInConnections("Transition");
if ( cons == null )
if ( startstate == null)
startstate = st;
else <<ERROR: more than one state
has no InConnections>>
}
ASSERT ( startstate !=null );
return startstate;
}
CBuilderAtom *GetStartState(
CBuilderModel *StateDiagram)
{
const CBuilderAtomList *startstates =
StateDiagram->GetAtoms("StartState");
ASSERT(startstates->GetCount()==1);
CBuilderAtom *startstate =
startstates->GetHead();
return startstate;
}
Technical Challenges
Lack of formally-written model interpreter
Lack of formal specification for metamodel transformation
Different developers may program interpreters in various ways
Hard to maintain and evolve such subjective realizations of
model interpreters
Metamodel transformation specifications must include the entire
knowledge for the underlying interpreter evolution
?
∆MM
∆I
Lack of support for parsing and invasively transforming
program source code from higher-level models.
Utilize a mature program transformation engine:
The Design Maintenance System (DMS)
Model Interpreter Evolution Architecture
(MIEA)
Modeling API’
Modeling API
void CComponent::InvokeEx(CBuilder &builder)
{
Interpreter aInterpreter;
CString fileName;
if(!aInterpreter.selectSpecAspects(fileName)) {
return; } …
}
void CComponent::InvokeEx(CBuilder &builder)
{
Interpreter aInterpreter;
CString fileName;
char *specFile=new char[fileName.GetLength()];
strcpy(specFile, fileName); ….
}
Interpreters’
Interpreters
Metamodel
Model Xform
Specification
Models’
Models
model
model
Metamodel’
Model Xform
Engine
model
model
DMS rewriting rules for evolving intepreter(1)
• Differences of names for any model entities, relationships and attributes
rule ChangeName (id:identifier):
expression_statement -> expression_statement =
"\id -> GetModels(\“State\");" -> "\id -> GetModels(\“StartState\");".
DMS rewriting rules for evolving intepreter(2)
• Differences of model types
rule ChangeModelType (id:identifier):
expression_statement -> expression_statement =
“\id -> GetAtoms(\“State\”);” -> “\id -> GetModels(\“State\”);”.
DMS rewriting rules for evolving intepreter(3)
• Differences of attribute types
rule ChangeAttrType ():
declaration_statement -> declaration _statement =
“CString Text;” -> “int Text;”.
Conclusion
Ideal Goal:
Support
the (semi)-automation of model interpreter
evolution in terms of metamodel changes and modeling API
changes
Proposed Solution:
Model Interpreter Evolution Architecture
Obstacles:
Informal model interpreter
Hard to maintain the fidelity mapping of high-level abstract
models to the low-level source code
Possible solution approaches to be investigated:
Attach program rewriting rules to the existing model
transformation specification
Develop a new high-level specification for model
transformation that can generate the rewriting rules
Investigate an intelligent model comparison technique to
generate the rules through human interactions