SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
Sander Vermolen
    Eelco Visser



                                       Software 
                                       Language 
                                       Evolution


            This research was supported by NWO/JACQUARD project
                                          
            638.001.610, MoDSE: Model­Driven Software Evolution.
     
Data 
    Models



              
     
     
User
       name          ::   varchar
       email         ::   tinytext


    Page
       title         :: varchar
       author         User
       content       :: text




                  
User
       name       bob 
       email      b.johnson@mail.com

    Page
       title      "The first page"
       content    "Hello world"
       author     bob




        
Version history




     
User                             User
       name      ::   varchar           name       ::   varchar
       email     ::   tinytext          email      ::   tinytext

    Page                             Page
       title     :: varchar             title      ::   varchar
       content   :: text
       author     User

                                     Revision
                                        page          Page
                                        revisionText :: text
                                        author        User




                                  
User                                 User
       name       bob                       name           bob 
       email      b.johnson@...             email          b.johnson@...

    Page 1                               Page 1
       title      "The first page"          title          "The first page"
       content    "Hello world"
       author     bob
                                         Revision 1
                                            page               {page 1}
                                            revisionText       "Hello world"
                                            author             bob




                                      
Coupled Data Evolution




               
...

  $dbh->bz_add_column('attachments', 'submitter_id', {TYPE => 'INT3', NOTNULL => 1}, 0);
  $dbh->bz_rename_column('bugs_activity', 'when', 'bug_when');
  _add_bug_vote_cache(); _update_product_name_definition(); _add_bug_keyword_cache();
  $dbh->bz_add_column('profiles', 'disabledtext', {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, '');
  _populate_longdescs(); _update_bugs_activity_field_to_fieldid();

  if (!$dbh->bz_column_info('bugs', 'lastdiffed')) {
         $dbh->bz_add_column('bugs', 'lastdiffed', {TYPE =>'DATETIME'});
         $dbh->do('UPDATE bugs SET lastdiffed = NOW()');
  }

  _add_unique_login_name_index_to_profiles();
  $dbh->bz_add_column('profiles', 'mybugslink', {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'});
  _update_component_user_fields_to_ids();
  $dbh->bz_add_column('bugs', 'everconfirmed', {TYPE => 'BOOLEAN', NOTNULL => 1}, 1);
  $dbh->bz_add_column('products', 'maxvotesperbug',
                          {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '10000'});
  $dbh->bz_add_column('products', 'votestoconfirm', {TYPE => 'INT2', NOTNULL => 1}, 0);
  _populate_milestones_table();
  $dbh->bz_alter_column('bugs', 'target_milestone', {TYPE => 'varchar(20)', NOTNULL => 1, DEFAULT => "'---'"});
  $dbh->bz_alter_column('milestones', 'value', {TYPE => 'varchar(20)', NOTNULL => 1});
  _add_products_defaultmilestone();

  if (!$dbh->bz_index_info('cc', 'cc_bug_id_idx') || !$dbh->bz_index_info('cc', 'cc_bug_id_idx')->{TYPE}) {
         $dbh->bz_drop_index('cc', 'cc_bug_id_idx');
         $dbh->bz_add_index('cc', 'cc_bug_id_idx', {TYPE => 'UNIQUE', FIELDS => [qw(bug_id who)]});
  }
  if (!$dbh->bz_index_info('keywords', 'keywords_bug_id_idx') || !$dbh->bz_index_info('keywords',
  'keywords_bug_id_idx')->{TYPE}) {
         $dbh->bz_drop_index('keywords', 'keywords_bug_id_idx');
         $dbh->bz_add_index('keywords', 'keywords_bug_id_idx', {TYPE => 'UNIQUE', FIELDS => [qw(bug_id
  keywordid)]});
  }

  ...                                                      
Evolving
    Data Models



      
     
8 Basic Transformations



    add or remove entity         add or remove property




    change name of entity       change name of property




    change type of set           change type of property




                             
add
          Revision
             page             Page
             author           User




    add
          revisionText       ::   text




                          
     
Revision
            revisionText   :: text




    at    Entity Revision  /  Property page
    add   revisionText :: text




                       
Revision
             revisionText   :: text




    at     Entity Revision  /  Property page
    add    revisionText :: text
    from   page.content



                        
at         Entity Page
    add        Revision


           ;

    at         Entity Revision  /  Property page
    add        revisionText :: text
    from       page.content



                           
Evolving
            Data Models




    8 Basic transformations

    Syntax for the transformations

    Positioning language




    Specify data model evolutions



                                      
Data
    Migration



      
     
Technical Domain



     WebDSL


    Stratego/XT




                             Java
                      Java Persistence API

                  Object Transformation Library

                                 
at       Entity Page
    remove   author




    transform (Page) to (Page) {
       DropAttribute("author");
    }



                            
at     Entity Revision  /  Property page
    add    revisionText :: text
    from   page.content




    transform (Page) to (Revision) {
       AddAttribute("revisionText", 
                         getPage().getContent() )
    }


                              
But wait, there’s more!




    More abstract transformations

    Type conversions

    Java type generation




                   
Data
    Migration




                 
Heterogeneous
    Coupled Evolution



       
     
     
Horizontal Generalization
              Domain




                 
     
Lists

     More types

    Abstract types




          
Vertical Generalization
        Conformance level
                
Heterogeneous 
         Coupled Evolution 
                 of
        Software Languages



          Evolving Software Language
          Data Model




           Software 
           Data
     
A Generic
    Architecture



      
     
     
     
Domain Specific 
          Transformation Language 
                   (DSTL)



        Transformation Interpreter




           Software Migration



     
SDF              SDF




          Stratego




              
Lists                               [...]

    Entity*          ­> DataM




    "add" Entity    ­> LocalTransformation
    "remove"        ­> LocalTransformation



                       
Lexicals                            ''...''

    Id "::" Type      ­> Prop




    "substitute" Id   ­> LocalTransformation




                       
Multiple productions                ­>*

    "int"            ­> Type
    "bool"           ­> Type
    Id               ­> Type
    "set of" Type    ­> Type



    "substitute" Type ­> LocalTransformation




                       
Type checking                       .../...



    "at" APath LocalTransformation ­> Transformation




                            
Software Language 
            Evolution                     Heterogeneous coupled evolution




Generic architecture
   DSTL generation
   Evolution interpreter generation
   Automatic migration




                                       
                                             Application to data models
Software 
                                Language 
                                Evolution


                                  
    This research was supported by NWO/JACQUARD project
     638.001.610, MoDSE: Model­Driven Software Evolution.
     
Present & Future


      Evolution detection

      Validation

      Usability

      Abstractions




                             
Related work



     Focus on single domain

        Meta modeling
           [7, 23, 17, 10]
        DSLs
           [23]
        Data base schemas
           [15,4,2,8,1]



                         

Mais conteúdo relacionado

Mais procurados

Java Development with MongoDB
Java Development with MongoDBJava Development with MongoDB
Java Development with MongoDBScott Hernandez
 
An introduction to CouchDB
An introduction to CouchDBAn introduction to CouchDB
An introduction to CouchDBDavid Coallier
 
Couchdb: No SQL? No driver? No problem
Couchdb: No SQL? No driver? No problemCouchdb: No SQL? No driver? No problem
Couchdb: No SQL? No driver? No problemdelagoya
 
Storing tree structures with MongoDB
Storing tree structures with MongoDBStoring tree structures with MongoDB
Storing tree structures with MongoDBVyacheslav
 
Schema Design with MongoDB
Schema Design with MongoDBSchema Design with MongoDB
Schema Design with MongoDBrogerbodamer
 
Symfony2 from the Trenches
Symfony2 from the TrenchesSymfony2 from the Trenches
Symfony2 from the TrenchesJonathan Wage
 
Doctrine MongoDB Object Document Mapper
Doctrine MongoDB Object Document MapperDoctrine MongoDB Object Document Mapper
Doctrine MongoDB Object Document MapperJonathan Wage
 
Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Guillaume Laforge
 
Data Modeling for the Real World
Data Modeling for the Real WorldData Modeling for the Real World
Data Modeling for the Real WorldMike Friedman
 
Breaking The Monotony
Breaking The MonotonyBreaking The Monotony
Breaking The MonotonyNaresh Jain
 
Annotations in PHP: They Exist
Annotations in PHP: They ExistAnnotations in PHP: They Exist
Annotations in PHP: They ExistRafael Dohms
 
Mongoid in the real world
Mongoid in the real worldMongoid in the real world
Mongoid in the real worldKevin Faustino
 
Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Karsten Dambekalns
 
Couchdb List and Show Introduction
Couchdb List and Show IntroductionCouchdb List and Show Introduction
Couchdb List and Show IntroductionOliver Kurowski
 
Symfony Day 2010 Doctrine MongoDB ODM
Symfony Day 2010 Doctrine MongoDB ODMSymfony Day 2010 Doctrine MongoDB ODM
Symfony Day 2010 Doctrine MongoDB ODMJonathan Wage
 
Webinar: Data Modeling Examples in the Real World
Webinar: Data Modeling Examples in the Real WorldWebinar: Data Modeling Examples in the Real World
Webinar: Data Modeling Examples in the Real WorldMongoDB
 

Mais procurados (17)

Json
JsonJson
Json
 
Java Development with MongoDB
Java Development with MongoDBJava Development with MongoDB
Java Development with MongoDB
 
An introduction to CouchDB
An introduction to CouchDBAn introduction to CouchDB
An introduction to CouchDB
 
Couchdb: No SQL? No driver? No problem
Couchdb: No SQL? No driver? No problemCouchdb: No SQL? No driver? No problem
Couchdb: No SQL? No driver? No problem
 
Storing tree structures with MongoDB
Storing tree structures with MongoDBStoring tree structures with MongoDB
Storing tree structures with MongoDB
 
Schema Design with MongoDB
Schema Design with MongoDBSchema Design with MongoDB
Schema Design with MongoDB
 
Symfony2 from the Trenches
Symfony2 from the TrenchesSymfony2 from the Trenches
Symfony2 from the Trenches
 
Doctrine MongoDB Object Document Mapper
Doctrine MongoDB Object Document MapperDoctrine MongoDB Object Document Mapper
Doctrine MongoDB Object Document Mapper
 
Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012
 
Data Modeling for the Real World
Data Modeling for the Real WorldData Modeling for the Real World
Data Modeling for the Real World
 
Breaking The Monotony
Breaking The MonotonyBreaking The Monotony
Breaking The Monotony
 
Annotations in PHP: They Exist
Annotations in PHP: They ExistAnnotations in PHP: They Exist
Annotations in PHP: They Exist
 
Mongoid in the real world
Mongoid in the real worldMongoid in the real world
Mongoid in the real world
 
Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3
 
Couchdb List and Show Introduction
Couchdb List and Show IntroductionCouchdb List and Show Introduction
Couchdb List and Show Introduction
 
Symfony Day 2010 Doctrine MongoDB ODM
Symfony Day 2010 Doctrine MongoDB ODMSymfony Day 2010 Doctrine MongoDB ODM
Symfony Day 2010 Doctrine MongoDB ODM
 
Webinar: Data Modeling Examples in the Real World
Webinar: Data Modeling Examples in the Real WorldWebinar: Data Modeling Examples in the Real World
Webinar: Data Modeling Examples in the Real World
 

Destaque

Library of Coupled Operators
Library of Coupled OperatorsLibrary of Coupled Operators
Library of Coupled OperatorsSander Vermolen
 
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionIn a Rocket
 
How to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media PlanHow to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media PlanPost Planner
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting PersonalKirsty Hulse
 
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika AldabaLightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldabaux singapore
 

Destaque (7)

Library of Coupled Operators
Library of Coupled OperatorsLibrary of Coupled Operators
Library of Coupled Operators
 
AGROVOC: FAO’s multilingual thesaurus as a building block for linked open data
AGROVOC: FAO’s multilingual thesaurus as a building block for linked open dataAGROVOC: FAO’s multilingual thesaurus as a building block for linked open data
AGROVOC: FAO’s multilingual thesaurus as a building block for linked open data
 
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming Convention
 
How to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media PlanHow to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media Plan
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting Personal
 
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika AldabaLightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
 
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job? Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
 

Semelhante a Software Language Evolution

Linguistic Abstraction for the Web
Linguistic Abstraction for the WebLinguistic Abstraction for the Web
Linguistic Abstraction for the WebEelco Visser
 
Cross-Platform Native Mobile Development with Eclipse
Cross-Platform Native Mobile Development with EclipseCross-Platform Native Mobile Development with Eclipse
Cross-Platform Native Mobile Development with EclipsePeter Friese
 
Building DSLs with the Spoofax Language Workbench
Building DSLs with the Spoofax Language WorkbenchBuilding DSLs with the Spoofax Language Workbench
Building DSLs with the Spoofax Language WorkbenchEelco Visser
 
CIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM SitesCIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM SitesICF CIRCUIT
 
OrientDB introduction - NoSQL
OrientDB introduction - NoSQLOrientDB introduction - NoSQL
OrientDB introduction - NoSQLLuca Garulli
 
AMD - Why, What and How
AMD - Why, What and HowAMD - Why, What and How
AMD - Why, What and HowMike Wilcox
 
Terrastore - A document database for developers
Terrastore - A document database for developersTerrastore - A document database for developers
Terrastore - A document database for developersSergio Bossa
 
Building a Gigaword Corpus (PyCon 2017)
Building a Gigaword Corpus (PyCon 2017)Building a Gigaword Corpus (PyCon 2017)
Building a Gigaword Corpus (PyCon 2017)Rebecca Bilbro
 
Tornado - different Web programming
Tornado - different Web programmingTornado - different Web programming
Tornado - different Web programmingDima Malenko
 
What is WebDAV - uploaded by Murali Krishna Nookella
What is WebDAV - uploaded by Murali Krishna NookellaWhat is WebDAV - uploaded by Murali Krishna Nookella
What is WebDAV - uploaded by Murali Krishna Nookellamuralikrishnanookella
 
PDC Video on C# 4.0 Futures
PDC Video on C# 4.0 FuturesPDC Video on C# 4.0 Futures
PDC Video on C# 4.0 Futuresnithinmohantk
 
VelocityGraph Introduction
VelocityGraph IntroductionVelocityGraph Introduction
VelocityGraph IntroductionMats Persson
 
Managing Social Content with MongoDB
Managing Social Content with MongoDBManaging Social Content with MongoDB
Managing Social Content with MongoDBMongoDB
 
George Thiruvathukal, User Experiences with Plone Content Management
George Thiruvathukal, User Experiences with Plone Content Management George Thiruvathukal, User Experiences with Plone Content Management
George Thiruvathukal, User Experiences with Plone Content Management webcontent2007
 
Rails vs Web2py
Rails vs Web2pyRails vs Web2py
Rails vs Web2pyjonromero
 
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPT
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPTHSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPT
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPTAAFREEN SHAIKH
 

Semelhante a Software Language Evolution (20)

Linguistic Abstraction for the Web
Linguistic Abstraction for the WebLinguistic Abstraction for the Web
Linguistic Abstraction for the Web
 
IN4308 Lecture 3
IN4308 Lecture 3IN4308 Lecture 3
IN4308 Lecture 3
 
Cross-Platform Native Mobile Development with Eclipse
Cross-Platform Native Mobile Development with EclipseCross-Platform Native Mobile Development with Eclipse
Cross-Platform Native Mobile Development with Eclipse
 
Building DSLs with the Spoofax Language Workbench
Building DSLs with the Spoofax Language WorkbenchBuilding DSLs with the Spoofax Language Workbench
Building DSLs with the Spoofax Language Workbench
 
CIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM SitesCIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM Sites
 
OrientDB introduction - NoSQL
OrientDB introduction - NoSQLOrientDB introduction - NoSQL
OrientDB introduction - NoSQL
 
AMD - Why, What and How
AMD - Why, What and HowAMD - Why, What and How
AMD - Why, What and How
 
Terrastore - A document database for developers
Terrastore - A document database for developersTerrastore - A document database for developers
Terrastore - A document database for developers
 
Building a Gigaword Corpus (PyCon 2017)
Building a Gigaword Corpus (PyCon 2017)Building a Gigaword Corpus (PyCon 2017)
Building a Gigaword Corpus (PyCon 2017)
 
Tornado - different Web programming
Tornado - different Web programmingTornado - different Web programming
Tornado - different Web programming
 
Real World MVC
Real World MVCReal World MVC
Real World MVC
 
What is WebDAV - uploaded by Murali Krishna Nookella
What is WebDAV - uploaded by Murali Krishna NookellaWhat is WebDAV - uploaded by Murali Krishna Nookella
What is WebDAV - uploaded by Murali Krishna Nookella
 
PDC Video on C# 4.0 Futures
PDC Video on C# 4.0 FuturesPDC Video on C# 4.0 Futures
PDC Video on C# 4.0 Futures
 
MeteorJS Introduction
MeteorJS IntroductionMeteorJS Introduction
MeteorJS Introduction
 
VelocityGraph Introduction
VelocityGraph IntroductionVelocityGraph Introduction
VelocityGraph Introduction
 
Play framework
Play frameworkPlay framework
Play framework
 
Managing Social Content with MongoDB
Managing Social Content with MongoDBManaging Social Content with MongoDB
Managing Social Content with MongoDB
 
George Thiruvathukal, User Experiences with Plone Content Management
George Thiruvathukal, User Experiences with Plone Content Management George Thiruvathukal, User Experiences with Plone Content Management
George Thiruvathukal, User Experiences with Plone Content Management
 
Rails vs Web2py
Rails vs Web2pyRails vs Web2py
Rails vs Web2py
 
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPT
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPTHSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPT
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPT
 

Software Language Evolution

  • 1. Sander Vermolen Eelco Visser Software  Language  Evolution This research was supported by NWO/JACQUARD project     638.001.610, MoDSE: Model­Driven Software Evolution.
  • 2.    
  • 3. Data  Models    
  • 4.    
  • 5.    
  • 6. User name :: varchar email :: tinytext Page title :: varchar author  User content :: text    
  • 7. User name bob  email  b.johnson@mail.com Page title "The first page" content  "Hello world" author bob    
  • 9. User User name :: varchar name :: varchar email :: tinytext email :: tinytext Page Page title :: varchar title :: varchar content :: text author  User Revision page  Page revisionText :: text author  User    
  • 10. User User name bob  name bob  email  b.johnson@... email  b.johnson@... Page 1 Page 1 title "The first page" title "The first page" content  "Hello world" author bob Revision 1 page {page 1} revisionText "Hello world" author bob    
  • 12. ... $dbh->bz_add_column('attachments', 'submitter_id', {TYPE => 'INT3', NOTNULL => 1}, 0); $dbh->bz_rename_column('bugs_activity', 'when', 'bug_when'); _add_bug_vote_cache(); _update_product_name_definition(); _add_bug_keyword_cache(); $dbh->bz_add_column('profiles', 'disabledtext', {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, ''); _populate_longdescs(); _update_bugs_activity_field_to_fieldid(); if (!$dbh->bz_column_info('bugs', 'lastdiffed')) { $dbh->bz_add_column('bugs', 'lastdiffed', {TYPE =>'DATETIME'}); $dbh->do('UPDATE bugs SET lastdiffed = NOW()'); } _add_unique_login_name_index_to_profiles(); $dbh->bz_add_column('profiles', 'mybugslink', {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'}); _update_component_user_fields_to_ids(); $dbh->bz_add_column('bugs', 'everconfirmed', {TYPE => 'BOOLEAN', NOTNULL => 1}, 1); $dbh->bz_add_column('products', 'maxvotesperbug', {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '10000'}); $dbh->bz_add_column('products', 'votestoconfirm', {TYPE => 'INT2', NOTNULL => 1}, 0); _populate_milestones_table(); $dbh->bz_alter_column('bugs', 'target_milestone', {TYPE => 'varchar(20)', NOTNULL => 1, DEFAULT => "'---'"}); $dbh->bz_alter_column('milestones', 'value', {TYPE => 'varchar(20)', NOTNULL => 1}); _add_products_defaultmilestone(); if (!$dbh->bz_index_info('cc', 'cc_bug_id_idx') || !$dbh->bz_index_info('cc', 'cc_bug_id_idx')->{TYPE}) { $dbh->bz_drop_index('cc', 'cc_bug_id_idx'); $dbh->bz_add_index('cc', 'cc_bug_id_idx', {TYPE => 'UNIQUE', FIELDS => [qw(bug_id who)]}); } if (!$dbh->bz_index_info('keywords', 'keywords_bug_id_idx') || !$dbh->bz_index_info('keywords', 'keywords_bug_id_idx')->{TYPE}) { $dbh->bz_drop_index('keywords', 'keywords_bug_id_idx'); $dbh->bz_add_index('keywords', 'keywords_bug_id_idx', {TYPE => 'UNIQUE', FIELDS => [qw(bug_id keywordid)]}); }   ...  
  • 13. Evolving Data Models    
  • 14.    
  • 15. 8 Basic Transformations add or remove entity add or remove property change name of entity change name of property change type of set change type of property    
  • 16. add Revision page  Page author  User add revisionText :: text    
  • 17.    
  • 18. Revision revisionText :: text at Entity Revision  /  Property page add revisionText :: text    
  • 19. Revision revisionText :: text at Entity Revision  /  Property page add revisionText :: text from page.content    
  • 20. at Entity Page add Revision ; at Entity Revision  /  Property page add revisionText :: text from page.content    
  • 21. Evolving Data Models 8 Basic transformations Syntax for the transformations Positioning language Specify data model evolutions    
  • 22. Data Migration    
  • 23.    
  • 24. Technical Domain WebDSL Stratego/XT Java Java Persistence API Object Transformation Library    
  • 25. at Entity Page remove author transform (Page) to (Page) { DropAttribute("author"); }    
  • 26. at Entity Revision  /  Property page add revisionText :: text from page.content transform (Page) to (Revision) { AddAttribute("revisionText",  getPage().getContent() ) }    
  • 27. But wait, there’s more! More abstract transformations Type conversions Java type generation    
  • 28. Data Migration    
  • 29. Heterogeneous Coupled Evolution    
  • 30.    
  • 31.    
  • 33.    
  • 34. Lists More types Abstract types    
  • 35. Vertical Generalization Conformance level    
  • 36. Heterogeneous  Coupled Evolution  of Software Languages Evolving Software Language Data Model Software  Data    
  • 37. A Generic Architecture    
  • 38.    
  • 39.    
  • 40.    
  • 41. Domain Specific  Transformation Language  (DSTL) Transformation Interpreter Software Migration    
  • 42. SDF SDF Stratego    
  • 43. Lists [...] Entity* ­> DataM "add" Entity    ­> LocalTransformation "remove"        ­> LocalTransformation    
  • 44. Lexicals ''...'' Id "::" Type ­> Prop "substitute" Id ­> LocalTransformation    
  • 45. Multiple productions ­>* "int" ­> Type "bool" ­> Type Id ­> Type "set of" Type ­> Type "substitute" Type ­> LocalTransformation    
  • 46. Type checking .../... "at" APath LocalTransformation ­> Transformation    
  • 47. Software Language  Evolution Heterogeneous coupled evolution Generic architecture DSTL generation Evolution interpreter generation Automatic migration     Application to data models
  • 48. Software  Language  Evolution     This research was supported by NWO/JACQUARD project 638.001.610, MoDSE: Model­Driven Software Evolution.
  • 49.    
  • 50. Present & Future Evolution detection Validation Usability Abstractions    
  • 51. Related work Focus on single domain Meta modeling [7, 23, 17, 10] DSLs [23] Data base schemas [15,4,2,8,1]