Model-Driven Program Transformation of a Large Avionics Application Jeff Gray, Jing Zhang, Yuehua Lin, Suman Roychoudhury, Hui Wu, Rajesh Sudarsan, Aniruddha.

Slides:



Advertisements
Similar presentations
Aspect Oriented Programming. AOP Contents 1 Overview 2 Terminology 3 The Problem 4 The Solution 4 Join point models 5 Implementation 6 Terminology Review.
Advertisements

Model-Driven Aspect Adaptation To Support Modular Software Evolution Ph.D. Defense Jing Zhang Committee.
Presented by: Thabet Kacem Spring Outline Contributions Introduction Proposed Approach Related Work Reconception of ADLs XTEAM Tool Chain Discussion.
Automatic Verification of Component-Based Real-Time CORBA Applications Gabor Madl Sherif Abdelwahed
Francisco Hernandez, Purushotham Bangalore, Jeff Gray, and Kevin Reilly Department of Computer and Information Sciences University of Alabama at Birmingham.
Automated Analysis and Code Generation for Domain-Specific Models George Edwards Center for Systems and Software Engineering University of Southern California.
UML CASE Tool. ABSTRACT Domain analysis enables identifying families of applications and capturing their terminology in order to assist and guide system.
Model Driven Architecture (MDA) Partha Kuchana. Agenda What is MDA Modeling Approaches MDA in a NutShell MDA Models SDLC MDA Models (an Example) MDA -
Architectural Design Principles. Outline  Architectural level of design The design of the system in terms of components and connectors and their arrangements.
Modified from Sommerville’s originalsSoftware Engineering, 7th edition. Chapter 8 Slide 1 System models.
Verifying Distributed Real-time Properties of Embedded Systems via Graph Transformations and Model Checking Gabor Madl
Whole Platform Tesi di Dottorato di: RICCARDO SOLMI Università degli Studi di Bologna Facoltà di scienze matematiche, fisiche e naturali Corso di Dottorato.
1 FM Overview of Adaptation. 2 FM RAPIDware: Component-Based Design of Adaptive and Dependable Middleware Project Investigators: Philip McKinley, Kurt.
Mining Metamodels From Instance Models: The MARS System Faizan Javed Department of Computer & Information Sciences, University of Alabama at Birmingham.
1 An introduction to design patterns Based on material produced by John Vlissides and Douglas C. Schmidt.
CoSMIC: An MDA Tool Suite for Application Deployment and Configuration Tao Lu, Emre Turkay Aniruddha Gokhale, Douglas Schmidt
GReAT: Graph Rewriting And Transformation Presenter: Yuehua Lin 2/17/04, Tuesday Slides help from Aditya Agrawal
Software Engineering Muhammad Fahad Khan
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 18 Slide 1 Software Reuse.
1 Legacy System Evolution through Model-Driven Program Transformation Funded by the DARPA Information Exploitation Office (DARPA/IXO), under the Program.
Katanosh Morovat.   This concept is a formal approach for identifying the rules that encapsulate the structure, constraint, and control of the operation.
Levels of Independence in Aspect-Oriented Modeling Workshop on Model-driven Approaches to Middleware Applications Development June 17, 2003 Jeff Gray,
A Generative and Model Driven Framework for Automated Software Product Generation Wei Zhao Advisor: Dr. Barrett Bryant Computer and Information Sciences.
Yu SunUniversity of Alabama at Birmingham PAR Works Jeff Gray University of Alabama Montpellier, France July 3rd, 2013 This research is supported.
Copyright 2002 Prentice-Hall, Inc. Chapter 1 The Systems Development Environment 1.1 Modern Systems Analysis and Design.
Institute for Software Integrated Systems Vanderbilt University Constraint-Based Embedded Program Composition PI: Ted Bapty Sandeep Neema, Andy Gokhale,
1 Chapter 2 The Process. 2 Process  What is it?  Who does it?  Why is it important?  What are the steps?  What is the work product?  How to ensure.
An Introduction to Software Architecture
Introduction to MDA (Model Driven Architecture) CYT.
Assessing the Suitability of UML for Modeling Software Architectures Nenad Medvidovic Computer Science Department University of Southern California Los.
E-R Modeler: A Database Modeling Toolkit for Eclipse Hui Wu wuh -at- cis.uab.edu Academic Advisor : Dr. Jeff Gray gray -at-
Alignment of ATL and QVT © 2006 ATLAS Nantes Alignment of ATL and QVT Ivan Kurtev ATLAS group, INRIA & University of Nantes, France
Generating a Generator Jeff Gray University of Alabama at Birmingham Department of Computer and Information Sciences gray (at) cis.uab.edu
Reviewing Recent ICSE Proceedings For:.  Defining and Continuous Checking of Structural Program Dependencies  Automatic Inference of Structural Changes.
Basic Concepts Software Architecture. What is Software Architecture? Definition: – A software architecture is the set of principal design decisions about.
Validated Model Transformation Tihamér Levendovszky Budapest University of Technology and Economics Department of Automation and Applied Informatics Applied.
UDM An Infrastructure for Implementing Domain-Specific Modeling Languages Endre Magyari, Arpad Bakay, Andras Lang, Tamas Paka, Attila Vizhanyo, Aditya.
Computer Emergency Notification System (CENS)
Quality of Service-Driven Requirements Analyses for Component Composition: A Two- Level Grammar++ Approach Shih-Hsi Liu 1, Fei Cao 1, Barrett R. Bryant.
Replicators: Transformations to Address Model Scalability Jeff Gray, Yuehua Lin, Jing Zhang, Steve Nordstrom, Aniruddha Gokhale, Sandeep Neema, and Swapna.
Reconciling the Boeing PCES OEP with CCM Component Structure John Hatcliff (slide maker and talk giver)
1 Research Directions Towards Software Maintenance, Adaptation and Modernization Grammar-based Software Technology - Spring 2006 Programming Lang. Seminar.
Generative Programming. Automated Assembly Lines.
1 Introduction to Software Engineering Lecture 1.
Semantic Foundations for Model-Integrated Computing A panel at the First OMG MIC Workshop Arlington, VA October 14, 2004 Jeff Gray, University of Alabama.
Software Engineering Prof. Ing. Ivo Vondrak, CSc. Dept. of Computer Science Technical University of Ostrava
Dr. Douglas C. Schmidt, Dr. Aniruddha S. Gokhale, Bala Natarajan, Jeff Parsons, Tao Lu, Boris Kolpackov, Krishnakumar Balasubramanian, Arvind Krishna,
Investigating Survivability Strategies for Ultra-Large Scale (ULS) Systems Vanderbilt University Nashville, Tennessee Institute for Software Integrated.
CoSMIC: Tool-suite for Weaving Deployment & Configuration Crosscutting Concerns of CCM-based DRE Systems Dr. Aniruddha Gokhale (PI) Institute for Software.
Architecture-Driven Context-Specific Middleware Specializations for Distributed Real-time and Embedded Systems Akshay Dabholkar, and Aniruddha Gokhale.
1. 2 Preface In the time since the 1986 edition of this book, the world of compiler design has changed significantly 3.
Generative Approaches for Application Tailoring of Mobile Devices Victoria M. Davis, Dr. Jeff Gray (UAB) and Dr. Joel Jones (UA) Portions of this research.
A Generative Approach to Model Interpreter Evolution Jing Zhang, Jeff Gray, and Yuehua Lin {zhangj, gray, cis.uab.edu Dept. of Computer & Information.
Weaving a Debugging Aspect into Domain-Specific Language Grammars SAC ’05 PSC Track Santa Fe, New Mexico USA March 17, 2005 Hui Wu, Jeff Gray, Marjan Mernik,
1 Model-based Aspect Weaver Construction Suman Roychoudhury Frédéric Jouault Jeff Gray {roychous, jouault, cis.uab.edu This project is supported.
Aniruddha Gokhale and Jeff Gray Institute for Software Integrated Systems (ISIS) Vanderbilt University Software Composition and Modeling Laboratory University.
1 Technical & Business Writing (ENG-715) Muhammad Bilal Bashir UIIT, Rawalpindi.
Review of Parnas’ Criteria for Decomposing Systems into Modules Zheng Wang, Yuan Zhang Michigan State University 04/19/2002.
Automating Software Evolution through Model-Driven Engineering Troy University 8 th Annual Computer Science Colloquium on Information Technology April.
Generating Aspect Code from Models OOPSLA 2002 Workshop on Generative Techniques in the Context of the MDA November 5 th, 2002 Seattle, WA This work is.
A Model Transformation Approach to Automated Model Construction and Evolution Yuehua Lin Jeff Gray Department of.
Institute for Software Integrated Systems Vanderbilt University Constraint-Based Embedded Program Composition PI: Ted Bapty Sandeep Neema, Jeff Gray Institute.
Towards A QoS Modeling and Modularization Framework for Component-based Systems Sumant Tambe* Akshay Dabholkar Aniruddha Gokhale Amogh Kavimandan (Presenter)
CS223: Software Engineering
CoSMIC: An MDA Tool Suite for Distributed Real-time and Embedded Systems Aniruddha Gokhale, Tao Lu, Emre Turkay, Balachandran Natarajan, Jeff Parsons,
Sumant Tambe* Akshay Dabholkar Aniruddha Gokhale
A Graphical Modeling Environment for the
The Extensible Tool-chain for Evaluation of Architectural Models
A Generative Approach to Model Interpreter Evolution
Model Comparison: A Key Challenge for Transformation Testing and Version Control in Model Driven Software Development Yuehua Lin, Jing Zhang, Jeff Gray.
Presentation transcript:

Model-Driven Program Transformation of a Large Avionics Application Jeff Gray, Jing Zhang, Yuehua Lin, Suman Roychoudhury, Hui Wu, Rajesh Sudarsan, Aniruddha Gokhale, Sandeep Neema, Feng Shi, Ted Bapty Funded by the DARPA Information Exploitation Office (DARPA/IXO), under the Program Composition for Embedded Systems (PCES) program Dept. Computer and Information Sciences - University of Alabama at Birmingham Institute for Software Integrated Systems – Vanderbilt University GPCE 2004 – Vancouver, BC

Outline of Presentation Model-Driven Legacy Evolution Software Transformation Two-Level Aspect Weaving Motivation Case Study and Video Example Model-Driven Program Transformation DMS Xform Rules Key Characteristics

Two-Dimensions of Transformation/Translation Horizontal transformation  Transformation within the same level of abstraction  E.g., Model transformation, code refactoring Vertical translation  Translation, or synthesis, between layers of abstraction  E.g., Model interpreters, reverse engineering ComputePosition C++ ComputePosition with Locking C++ Vertical transformation needed!!! NavDisplay C++

Legacy Source Legacy Models Legacy Models’ Meta-model Defines Legacy Source’ Defines Describe ∆M∆M ∆S∆S Evolution of Legacy Models and Code ∆ M : The changes made to the legacy models ∆ S : The changes reflected in the legacy source

Bold Stroke Product Line Background Context  Mission-control software for Boeing military aircraft (e.g., F-18 E/F, Harrier, UCAV) under development since 1995  CORBA event-based systems  Thousands of components implemented in over a million lines of C++ code Key Challenges  Difficult to evolve the underlying source representation to address new requirements; impossible to determine, a priori, all of the future adaptation requests  Difficult to migrate the source representation to newer component models

Embedded Systems Modeling Language ESML  Developed at Vanderbilt/ISIS as a DSML for GME; Large models of Bold Stroke in ESML  Multiple views of an embedded system: Components; Component Interaction; Component Configuration  Captures the interactions among components via an event channel. System timers and their frequencies are also specified  Integration with other tools to provide simulation and model checking.  Model interpreters generate various artifacts from models (e.g., XML configuration files that are loaded by Bold Stroke at startup)

Locking in a Bold Stroke Component void BM__PushPullComponentImpl::Update (const UUEventSet& events) { UM__GUARD_EXTERNAL_REGION(GetExtPushLock()); BM_CompInstrumentation::EventConsumer (GetId(), "Update", events); unsigned int tempData1 = GetId().GetGroupId(); unsigned int tempData2 = GetId().GetItemId(); //* REMOVED: code for implementing Real-time Event Channel UM__GUARD_INTERNAL_REGION; data1_ = tempData1; data2_ = tempData2; }

Problems with Macro Customization General Problem  Anticipated adaptation is not always feasible Consequences  New components: Developer of new components must remember to add the appropriate extensions in specific places  New concerns: Manual adaptation typically needed in many components to add new adaptation points to address new requirements  “Null” values are required for those configurations not needing the adaptation

Our Approach General Idea  Use “aspects” to insert configuration concerns (e.g., external/internal locking) as an alternative to explicit placement  From ESML models, generate the appropriate transformations where needed Problem  How to parse and execute transformations on “legacy languages”? Solution  Utilize a mature program transformation engine

Design Maintenance System or Enhancement Analysis and DMS Language Definitions Tool Definition Source Codes p==0 Rules Migration ParseAnalyze DMSTransformFormat Syntax (Parsing + PrettyPrinting), Symbol Table Construction Available: C++, C, Java, Delphi, COBOL, JavaScript, many others…. Analysis Rules Transformation Rules Sequencing (Metaprograms)

Justification of the tools used Why Models?  Ability to generate multiple artifacts from the same models, which can be fed into tools that offer added value (e.g., model checkers and simulators)  Shield domain expert from lower-level transformations Why DMS?  Past experience and collaboration with vendor  Provides a mature C++ parser and transformation  Our research focus is not in the business of developing lexers/parsers

Model-Driven Program Transformation DMS Transformation Rules Interpreter Updated models Common/Project Library of Legacy Source Code void BM__PushPullComponentImpl::Update (const UUEventSet& events) { BM__ComponentInstrumentation::EventConsumer(GetId(), "Update", events); unsigned int tempData1 = GetId().GetGroupId(); unsigned int tempData2 = GetId().GetItemId(); std::vector ::iterator devIter = devices_.begin(); std::vector ::iterator endIter = devices_.end(); for (; devIter != endIter; ++devIter) { BM__ClosedComponent* component = *devIter; const UUIdentifier& id = component->GetId(); if (idInEventSet(id, events)) { const BM__ClosedFunctionalFacet& facet = component->ProvideClosedFunctionalFacet(); BM__ComponentInstrumentation::SendDirectCall(GetId(), "Update", component->GetId(), "GetData1"); tempData1 += facet.GetData1(); BM__ComponentInstrumentation::SendDirectCall(GetId(), "Update", component->GetId(), "GetData2"); tempData2 += facet.GetData2(); } } data1_ = tempData1; data2_ = tempData2; } Transformed Legacy Source void BM__PushPullComponentImpl::Update (const UUEventSet& events) { UM__GUARD_EXTERNAL_REGION(GetExternalPushLock()); BM__ComponentInstrumentation::EventConsumer(GetId(), "Update", events); unsigned int tempData1 = GetId().GetGroupId(); unsigned int tempData2 = GetId().GetItemId(); std::vector ::iterator devIter = devices_.begin(); std::vector ::iterator endIter = devices_.end(); for (; devIter != endIter; ++devIter) { BM__ClosedComponent* component = *devIter; const UUIdentifier& id = component->GetId(); if (idInEventSet(id, events)) { const BM__ClosedFunctionalFacet& facet = component->ProvideClosedFunctionalFacet(); BM__ComponentInstrumentation::SendDirectCall(GetId(), "Update", component->GetId(), "GetData1"); tempData1 += facet.GetData1(); BM__ComponentInstrumentation::SendDirectCall(GetId(), "Update", component->GetId(), "GetData2"); tempData2 += facet.GetData2(); } } UM__GUARD_INTERNAL_REGION; log.add(“data1_=”+data1_); data1_ = tempData1; data2_ = tempData2; log.add(“data2_=”+data2_); } Ensures causal connection between model changes and the underlying source code of the legacy system Large-scale adaptation across multiple source files that are driven by minimal changes to the model properties Model interpreters generate transformation rules to modify source

Case Study: A black box data recorder Requirement: Record the state information of the aircraft according to polices defined in a model Under different stages of development, a concern may need to be adjusted based on different contexts e.g., testing on the ground vs. in-flight recording Ability to rapidly explore design alternatives representing different policies default base domain Cpp~VisualCpp6. pattern LogStmt() : statement = "log.add(\"data1_=\" + data1_); ". pattern LogOnMethodAspect(s:statement_seq): statement_seq = " { \s } \LogStmt\(\) ". pattern Update(id:identifier): qualified_id = "\id :: Update". rule log_on_Update(ret:decl_specifier_seq, id:identifier, p:parameter_declaration_clause, s: statement_seq): function_definition -> function_definition = "\ret \Update\(\id\) (\p) { \s } " -> "\ret \Update\(\id\) (\p) { \LogOnMethodAspect\(\s\) }" if ~[modsList:statement_seq.s matches "\:statement_seq \LogOnMethodAspect\(\modsList\)"]. rule log_on_Update_cv(ret:decl_specifier_seq, id:identifier, p:parameter_declaration_clause, s: statement_seq, cv: cv_qualifier_seq): function_definition - > function_definition = "\ret \Update\(\id\) (\p) \cv { \s } " -> "\ret \Update\(\id\) (\p) \cv { \LogOnMethodAspect\(\s\) }" if ~[modsList:statement_seq.s matches "\:statement_seq \LogOnMethodAspect\(\modsList\)"]. pattern getData1_(id:identifier): qualified_id = "\id :: getData1_". rule log_on_getData1_(ret:decl_specifier_seq, id:identifier, p:parameter_declaration_clause, s: statement_seq): function_definition -> function_definition = "\ret \getData1_\(\id\) (\p) { \s } " -> "\ret \getData1_\(\id\) (\p) { \LogOnMethodAspect\(\s\) }" if ~[modsList:statement_seq.s matches "\:statement_seq \LogOnMethodAspect\(\modsList\)"]. rule log_on_getData1__cv(ret:decl_specifier_seq, id:identifier, p:parameter_declaration_clause, s: statement_seq, cv: cv_qualifier_seq): function_definition - > function_definition = "\ret \getData1_\(\id\) (\p) \cv { \s } " -> "\ret \getData1_\(\id\) (\p) \cv { \LogOnMethodAspect\(\s\) }" if ~[modsList:statement_seq.s matches "\:statement_seq \LogOnMethodAspect\(\modsList\)"]. public ruleset applyrules = { log_on_Update, log_on_Update_cv, log_on_getData1_, log_on_getData1__cv }. Generated from Model interpreter

Program Transformation to Add LogOnExit (DMS) default base domain Cpp~VisualCpp6. pattern LogStmt(): statement = "log.add(\"data1_=\" + data1_);". pattern LogOnMethodExitAspect(s: statement_seq): statement_seq = "\s \LogStmt\(\)". pattern JoinPoint(id:identifier): qualified_id = "\id :: Update". rule insert_log_on_method_exit(id:identifier, s:statement_seq, p:parameter_declaration_clause): function_definition -> function_definition = "void \JoinPoint\(\id\)(\p) {\s} " -> "void \JoinPoint\(\id\)(\p) {\LogOnMethodExitAspect\(\s\)}" if ~[modsList:statement_seq. s matches "\:statement_seq \LogOnMethodExitAspect\(\modsList\)"]. public ruleset applyrules={insert_log_on_method_exit}.

Transformed Code fragment

Multiple Levels of Hierarchy Replicated Structures Context Sensitive Another Challenge: Crosscutting Constraints in Real-Time/Embedded Models Challenge: Crosscutting in Models  Base models become constrained to capture a particular design  Concerns that are related to some global property are dispersed across the model A B cde B cde F B cde Changeability??? Crosscutting Constraints GME Model Modeling Aspect Weaved Model //show("Data fields exist. Add two concurrency atoms."); //add the first concurrency atom concurrencyAtom1 := addAtom("Concurrency", "InternalLock"); concurrencyAtom1.setAttribute("Enable", "1");// "1" is true, "0" is false concurrencyAtom1.setAttribute("LockType", "Thread Mutex"); concurrencyAtom1.setAttribute("LockStrategy", "Internal Locking"); //add the second concurrency atom concurrencyAtom2 := addAtom("Concurrency", "ExternalLock"); concurrencyAtom2.setAttribute("Enable", "1");// "1" is true, "0" is false concurrencyAtom2.setAttribute("LockType", "Thread Mutex"); concurrencyAtom2.setAttribute("LockStrategy", "External Locking"); Solution: Model Weaving  C-SAW is an aspect-oriented weaver at the modeling level

Model Transformation to Add LogOnExit (C-SAW) strategy logDataAtoms() 1.{ 2. atoms()->select(a | a.kindOf() == "Data")->AddLog(); 3.} strategy AddLog() 1.{ declare parentModel : model; declare dataAtom, logAtom : atom; dataAtom := self; parentModel := parent(); logAtom:= parentModel.addAtom("Log", "LogOnMethodExit"); logAtom.setAttribute("Kind", "On Method Exit"); logAtom.setAttribute("MethodList", "Update"); parentModel.addConnection("AddLog", logAtom, dataAtom); 1.} aspect Start() 1.{ rootFolder().findFolder("ComponentTypes").models(). select(m|m.name().endWith("Impl"))->logDataAtoms(); 1.}

1.Model weaving to explore design alternatives more rapidly Design decisions crosscut model hierarchy Difficult to change models to new configuration Design decisions captured as higher level policy strategies and weaved into models 2.Model driven program transformation Ensures causal connection between model changes and represented source code of legacy system Assists in legacy evolution from new properties specified in models Model interpreters generate transformation rules to modify source 3. Video: Bold Stroke Application Apply original Bold Stroke C++ source code and generated transformation rules to DMS; result is a transformed version of Bold Stroke that is consistent with the model specification void BM__PushPullComponentImpl::Update (const UUEventSet& events) { BM__ComponentInstrumentation::EventConsumer(GetId(), "Update", events); unsigned int tempData1 = GetId().GetGroupId(); unsigned int tempData2 = GetId().GetItemId(); std::vector ::iterator devIter = devices_.begin(); std::vector ::iterator endIter = devices_.end(); for (; devIter != endIter; ++devIter) { BM__ClosedComponent* component = *devIter; const UUIdentifier& id = component->GetId(); if (idInEventSet(id, events)) { const BM__ClosedFunctionalFacet& facet = component- >ProvideClosedFunctionalFacet(); BM__ComponentInstrumentation::SendDirectCall(GetId(), "Update", component- >GetId(), "GetData1"); tempData1 += facet.GetData1(); BM__ComponentInstrumentation::SendDirectCall(GetId(), "Update", component- >GetId(), "GetData2"); tempData2 += facet.GetData2(); } data1_ = tempData1; data2_ = tempData2; } void BM__PushPullComponentImpl::Update (const UUEventSet& events) { UM__GUARD_EXTERNAL_REGION(GetExternalPushLock()); BM__ComponentInstrumentation::EventConsumer(GetId(), "Update", events); unsigned int tempData1 = GetId().GetGroupId(); unsigned int tempData2 = GetId().GetItemId(); std::vector ::iterator devIter = devices_.begin(); std::vector ::iterator endIter = devices_.end(); for (; devIter != endIter; ++devIter) { BM__ClosedComponent* component = *devIter; const UUIdentifier& id = component->GetId(); if (idInEventSet(id, events)) { const BM__ClosedFunctionalFacet& facet = component->ProvideClosedFunctionalFacet(); BM__ComponentInstrumentation::SendDirectCall(GetId(), "Update", component->GetId(), "GetData1"); tempData1 += facet.GetData1(); BM__ComponentInstrumentation::SendDirectCall(GetId(), "Update", component->GetId(), "GetData2"); tempData2 += facet.GetData2(); } UM__GUARD_INTERNAL_REGION; log.add(“data1_=”+data1_); data1_ = tempData1; data2_ = tempData2; log.add(“data2_=”+data2_); } DMS Xform Rules Base C++ Source Code Transformed C++ Code GME Model Modeling Aspect Two-Level Aspect Weaving Weaved Model //show("Data fields exist. Add two concurrency atoms."); //add the first concurrency atom concurrencyAtom1 := addAtom("Concurrency", "InternalLock"); concurrencyAtom1.setAttribute("Enable", "1");// "1" is true, "0" is false concurrencyAtom1.setAttribute("LockType", "Thread Mutex"); concurrencyAtom1.setAttribute("LockStrategy", "Internal Locking"); //add the second concurrency atom concurrencyAtom2 := addAtom("Concurrency", "ExternalLock"); concurrencyAtom2.setAttribute("Enable", "1");// "1" is true, "0" is false concurrencyAtom2.setAttribute("LockType", "Thread Mutex"); concurrencyAtom2.setAttribute("LockStrategy", "External Locking");

Video Two-level weaving flight data recorder

Conclusion Benefits  The model-driven program transformation technique is a generative approach for transforming large legacy systems from domain-specific models  It provides widespread adaptations across multiple source files according to the evolving model features Primary Limitation  The current MDPT interpreters are domain-specific and tied to a fixed set of concerns; to address new concerns, the model interpreter needs to be modified Future work  Generalization of the process for supporting legacy system evolution using MDPT  Investigation of related standards, such as the OMG ADM/KDM

For More Information… Contains papers, downloads, video demos Two-Level Aspect Weaving Demo of C-SAW and Model-Driven Program Transformation Thursday, 12:30pm-1:15pm Courtyard Related demo: Wednesday, 3:30; Thu 11:30

Backup Slides

Generalization of the control flow for the MDPT process