Evolving( DynamicSo/wareProductLines€¦ · Tomcat Jetty SQL NoSQL Variability (Model Application...

Preview:

Citation preview

Evolving  Dynamic  So/ware  Product  Lines

Clément  Quinton,  Luciano  Baresi

EASSy,  September  7-­‐10,  2015  -­‐  Japan

So/ware  Product  Lines

3

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Variability  Model

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@onConfigura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Deriva@on

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Domain  Engineering

Applica@on  Engineering

So/ware  Product  Lines

3

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Variability  Model

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@onConfigura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Deriva@on

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Design  Time Run@me

Domain  Engineering

Applica@on  Engineering

Dynamic  So/ware  Product  Lines

4

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@onConfigura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Deriva@on

Domain  Engineering

Applica@on  EngineeringDesign  Time Run@me

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Variability  Model

Dynamic  So/ware  Product  Lines

5

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@onConfigura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Deriva@on

Domain  Engineering

Applica@on  EngineeringDesign  Time Run@me

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Variability  Model

Dynamic  So/ware  Product  Lines

5

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@onConfigura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Deriva@on

Domain  Engineering

Applica@on  EngineeringDesign  Time Run@me

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Adapta@onReconfigura@on

Variability  Model

Dynamic  So/ware  Product  Lines

6

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@onConfigura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Deriva@on

Domain  Engineering

Applica@on  EngineeringDesign  Time Run@me

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Adapta@onReconfigura@on

Variability  Model

Dynamic  So/ware  Product  Lines

6

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@onConfigura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Deriva@on

Domain  Engineering

Applica@on  EngineeringDesign  Time Run@me

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Adapta@onReconfigura@on

Variability  Model

Why  DSPL  for  Adap@ve  Systems?

7

optionalmandatory

alternative

or

Legend

[1..4] cardinalityApplication

Server

Jelastic

Database

SQL NoSQL

MySQL

MariaDBPostgreSQL

MongoDB CouchDB

GlassFish

Jetty

[1..8]

NginxLanguage

PHP

TomEE+

Tomcat

7.0 6.0

Java

7 6

Tomcat'7.0'⟶'Java'7[2,*]'Applica6on'Server'⟶'Nginx

Why  DSPL  for  Adap@ve  Systems?

7

-­‐ Adapta3on  capabili3es  are  modeled  (boundaries!)

optionalmandatory

alternative

or

Legend

[1..4] cardinalityApplication

Server

Jelastic

Database

SQL NoSQL

MySQL

MariaDBPostgreSQL

MongoDB CouchDB

GlassFish

Jetty

[1..8]

NginxLanguage

PHP

TomEE+

Tomcat

7.0 6.0

Java

7 6

Tomcat'7.0'⟶'Java'7[2,*]'Applica6on'Server'⟶'Nginx

Why  DSPL  for  Adap@ve  Systems?

7

-­‐ Adapta3on  capabili3es  are  modeled  (boundaries!)

optionalmandatory

alternative

or

Legend

[1..4] cardinalityApplication

Server

Jelastic

Database

SQL NoSQL

MySQL

MariaDBPostgreSQL

MongoDB CouchDB

GlassFish

Jetty

[1..8]

NginxLanguage

PHP

TomEE+

Tomcat

7.0 6.0

Java

7 6

Tomcat'7.0'⟶'Java'7[2,*]'Applica6on'Server'⟶'Nginx

Why  DSPL  for  Adap@ve  Systems?

7

-­‐ Adapta3on  capabili3es  are  modeled  (boundaries!)

-­‐ Automated  reasoning  on  (re)configura3ons  

optionalmandatory

alternative

or

Legend

[1..4] cardinalityApplication

Server

Jelastic

Database

SQL NoSQL

MySQL

MariaDBPostgreSQL

MongoDB CouchDB

GlassFish

Jetty

[1..8]

NginxLanguage

PHP

TomEE+

Tomcat

7.0 6.0

Java

7 6

Tomcat'7.0'⟶'Java'7[2,*]'Applica6on'Server'⟶'Nginx

Why  DSPL  for  Adap@ve  Systems?

7

-­‐ Adapta3on  capabili3es  are  modeled  (boundaries!)

-­‐ Automated  reasoning  on  (re)configura3ons  

optionalmandatory

alternative

or

Legend

[1..4] cardinalityApplication

Server

Jelastic

Database

SQL NoSQL

MySQL

MariaDBPostgreSQL

MongoDB CouchDB

GlassFish

Jetty

[1..8]

NginxLanguage

PHP

TomEE+

Tomcat

7.0 6.0

Java

7 6

Tomcat'7.0'⟶'Java'7[2,*]'Applica6on'Server'⟶'Nginx

8

‘’Design evolution is absolutely inevitable‘’

Kent  Beck,  The  Inevitability  of  Evolu?on,  IEEE  SoAware,  2010

Evolu@on  of  Dynamic  So/ware  Product  Lines

9

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@onConfigura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Deriva@on

Domain  Engineering

Applica@on  EngineeringDesign  Time Run@me

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Adapta@onReconfigura@on

Variability  Model

10

Example

Design  Time Run@me

optional mandatory

alternative

or [0..20] cardinality

attribute

Postgres

Hobby Standard

Name: #ConType: int Value: [0..20]

Heroku

Hobby

Name: #ConType: int Value: [0..20]

10

Example

Design  Time Run@me

optional mandatory

alternative

or [0..20] cardinality

attribute

Postgres

Hobby Standard

Name: #ConType: int Value: [0..20]

Heroku

Hobby

Name: #ConType: int Value: [0..20]

10

Example

Design  Time Run@me

optional mandatory

alternative

or [0..20] cardinality

attribute

Postgres

Hobby Standard

Name: #ConType: int Value: [0..20]

Heroku

PgBouncer pg:kill Largerplan

limits #Of

kills oneOf

switch to

Adaptation options

Hobby

Name: #ConType: int Value: [0..20]

10

Example

Design  Time Run@me

optional mandatory

alternative

or [0..20] cardinality

attribute

Postgres

Hobby Standard

Name: #ConType: int Value: [0..20]

Heroku

PgBouncer pg:kill Largerplan

limits #Of

kills oneOf

switch to

Adaptation options

Hobby

Name: #ConType: int Value: [0..20]

Postgres

Hobby Standard

Name: #ConType: int Value: [0..20]

Heroku

2013

10

Example

Design  Time Run@me

optional mandatory

alternative

or [0..20] cardinality

attribute

Postgres

Hobby Standard

Name: #ConType: int Value: [0..20]

Heroku

Hobby

Name: #ConType: int Value: [0..20]

Postgres

Hobby Standard

Name: #ConType: int Value: [0..20]

Heroku

2013

11

Example

Design  Time Run@me

optional mandatory

alternative

or [0..20] cardinality

attribute

Postgres

Hobby Standard

Name: #ConType: int Value: [0..20]

Heroku

Hobby

Name: #ConType: int Value: [0..20]

Postgres

Hobby Standard

Name: #ConType: int Value: [0..20]

Heroku

2013

32 bits 64 bits

Dynamic  So/ware  Product  Lines

12

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@onConfigura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Deriva@on

Domain  Engineering

Applica@on  EngineeringDesign  Time Run@me

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Adapta@onReconfigura@on

Variability  Model

Dynamic  So/ware  Product  Lines

12

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

Configura@onConfigura@on

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Deriva@on

Domain  Engineering

Applica@on  EngineeringDesign  Time Run@me

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Adapta@onReconfigura@on

Variability  Model

13

Example

Design  Time Run@me

optional mandatory

alternative

or [0..20] cardinality

attribute

Hobby

Name: #ConType: int Value: [0..20]

Postgres

Hobby Standard

Heroku

Hobby32 bits

Standard32 bits

Artifacts repository

13

Example

Design  Time Run@me

optional mandatory

alternative

or [0..20] cardinality

attribute

Hobby

Name: #ConType: int Value: [0..20]

Postgres

Hobby Standard

Heroku

Postgres

Hobby Standard

Heroku

Hobby32 bits

Hobby64 bits

Standard32 bits

Standard64 bits

Artifacts repository Hobby32 bits

Standard32 bits

Standard 64 ⟶ ¬ Hobby 32

13

Example

Design  Time Run@me

optional mandatory

alternative

or [0..20] cardinality

attribute

Hobby

Name: #ConType: int Value: [0..20]

Postgres

Hobby Standard

Heroku

Postgres

Hobby Standard

Heroku

Hobby64 bits

Standard64 bits

Hobby32 bits

Standard32 bits

Standard 64 ⟶ ¬ Hobby 32

Name: #ConType: int Value: [0..20]

PgBouncer pg:kill Largerplan

limits #Of

kills oneOf

switch to

Adaptation options

32 bits

The  problem:  consistency

14

Two  dimensions:  Space  and  Time

Space

15

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Problem    Space

Variability  Model

Solu@on    Space

Space

15

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Problem    Space

Variability  Model

Solu@on    Space

A

B C

D E

mandatory

alternative

Space

15

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Problem    Space

Variability  Model

Solu@on    Space

A

B C

D E

mandatory

alternative

Space

15

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Problem    Space

Variability  Model

Solu@on    Space

A

B C

D E

mandatory

alternative

E  is  a  dead  feature

Space

15

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Problem    Space

Variability  Model

Solu@on    Space

A

B

C

D

E

A

B C

D E

mandatory

alternative

A ⟶ BA ⟶ CC ⟶ DC ⟶ E

Space

15

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Problem    Space

Variability  Model

Solu@on    Space

A

B

C

D

E

A

B C

D E

mandatory

alternative

A ⟶ BA ⟶ CC ⟶ DC ⟶ E

F

F ⟶ CF ⟶ ¬ E

Space

15

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Problem    Space

Variability  Model

Solu@on    Space

A

B

C

D

E

A

B C

D E

mandatory

alternative

A ⟶ BA ⟶ CC ⟶ DC ⟶ E

F

F ⟶ CF ⟶ ¬ E

Space

15

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Problem    Space

Variability  Model

Solu@on    Space

Incompa3bili3es  between  -­‐  packages  (e.g.  Linux)  -­‐  plugins  (e.g.  Eclipse)

A

B

C

D

E

A

B C

D E

mandatory

alternative

A ⟶ BA ⟶ CC ⟶ DC ⟶ E

F

F ⟶ CF ⟶ ¬ E

Space

15

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Problem    Space

Variability  Model

Solu@on    Space

A

B

C

D

E

A

B C

D E

mandatory

alternative

A ⟶ BA ⟶ CC ⟶ DC ⟶ E

Space

15

Application Server

Cloud

Database

SQL NoSQLTomcat Jetty

So/ware  Ar@facts

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

{"id":&"SensApp",&&"nodeTypes":&[{&"id":&"t14micro",

& &&&&&&&&"os":&"GNULinux",& &&&&&&&&&… }&],

&&"artefactTypes":&[{"id":&"NoSQL",&"retrieval":&"wget&http://cloudml.org/services/nosql.sh",&"deployment":&"sudo&nosql.sh",&"provides":&[{&"id":&"NoSQLDB"&}]&&},

{"id":&"Jetty",&"retrieval":&"wget&http://cloudml.org/services/jetty.sh",&"deployment":&"sudo&jetty.sh",&"provides":&[{&"id":&"JettyContainer"&}]&&},&{"id":&"SensApp",&…&"deployment":&"sudo&sensapp.sh",&"requires":&[{&"id":&"JettyContainer"&},&& &&&&&&&&&&&&{&"id":&"NoSQLDB"&}]&&}]

}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...

Problem    Space

Variability  Model

Solu@on    Space

A

B

C

D

E

A

B C

D E

mandatory

alternative

A ⟶ BA ⟶ CC ⟶ DC ⟶ E

Time

16Design  Time Run@me

A

B

C

A

B

C

optional

Time

16Design  Time Run@me

A

B

C

A

B

CA

B

optional

Adaptation ruleif condition then C

Time

16Design  Time Run@me

A

B

C

A

B

A

B

C

A

B

C

A

B

optional

Adaptation ruleif condition then C

Time

16Design  Time Run@me

A

B

C

A

B

A

B

C

A

B

C

A

B

condition is met

optional

Adaptation ruleif condition then C

Time

16Design  Time Run@me

A

B

C

A

B

A

B

C

A

B

C

A

B

condition is met

?

optional

Adaptation ruleif condition then C

then

Time

16Design  Time Run@me

A

B

C

A

B

A

B

C

A

B

C

A

B

condition is met

?

optional

Adaptation ruleif condition then C

then

- something else- nothing

It  depends

17

CPS

Sensor

A_Light

On Off

Actuator

S_Light

It  depends

17

CPS

Sensor

A_Light

On Off

Actuator

S_Light

CPS

Sensor

A_Light

On Off

Actuator

S_Light

luminosity  <  40  lumens  —>  turnLightOn()  (ac3vates  the  On  feature)

optionalfeaturealternativefeature

mandatoryfeature

It  depends

17

CPS

Sensor

A_Light

On Off

Actuator

S_Light

CPS

Sensor

A_Light

On Off

Actuator

S_Light

luminosity  <  40  lumens  —>  turnLightOn()  (ac3vates  the  On  feature)

optionalfeaturealternativefeature

mandatoryfeature

It  depends

17

CPS

Sensor

A_Light

On Off

Actuator

S_Light

CPS

Sensor

A_Light

On Off

Actuator

S_Light

Soft Fullluminosity  <  40  lumens  —>  turnLightOn()  

(ac3vates  the  On  feature)

optionalfeaturealternativefeature

mandatoryfeature

It  depends

17

Automated  evolu@on  (based  on  rules,  default  solver  choice)  Manual  evolu@on  (user  choice)

CPS

Sensor

A_Light

On Off

Actuator

S_Light

CPS

Sensor

A_Light

On Off

Actuator

S_Light

Soft Fullluminosity  <  40  lumens  —>  turnLightOn()  

(ac3vates  the  On  feature)

optionalfeaturealternativefeature

mandatoryfeature

It  depends

18

CPS

Sensor

A_Light

On Off

Actuator

S_Light

CPS

Sensor

A_Light

On Off

Actuator

S_Light

luminosity  <  40  lumens  —>  turnLightOn()  (ac3vates  the  On  feature)

optionalfeaturealternativefeature

mandatoryfeature

It  depends

18

CPS

Sensor

A_Light

On Off

Actuator

S_Light

CPS

Sensor

A_Light

On Off

Actuator

S_Light

Kitchen LivingRoom

luminosity  <  40  lumens  —>  turnLightOn()  (ac3vates  the  On  feature)

optionalfeaturealternativefeature

mandatoryfeature

It  depends

18

CPS

Sensor

A_Light

On Off

Actuator

S_Light

CPS

Sensor

A_Light

On Off

Actuator

S_Light

Kitchen LivingRoom

luminosity  <  40  lumens  —>  turnLightOn()  (ac3vates  the  On  feature)

Automated  evolu@on  (based  on  rules,  default  solver  choice)  Manual  evolu@on  (user  choice)

optionalfeaturealternativefeature

mandatoryfeature

It  depends

19

CPS

Sensor

A_Light

On Off

Actuator

S_Light

CPS

Sensor

A_Light

On Off

Actuator

S_Light

luminosity  <  40  lumens  —>  turnLightOn()  (ac3vates  the  On  feature)

optionalfeaturealternativefeature

mandatoryfeature

It  depends

19

CPS

Sensor

A_Light

On Off

Actuator

S_Light

CPS

Sensor

A_Light

On Off

Actuator

S_Light

Soft Full

luminosity  <  40  lumens  —>  turnLightOn()  (ac3vates  the  On  feature)

optionalfeaturealternativefeature

mandatoryfeature

It  depends

19

CPS

Sensor

A_Light

On Off

Actuator

S_Light

CPS

Sensor

A_Light

On Off

Actuator

S_Light

Manual  evolu@on  only

Soft Full

luminosity  <  40  lumens  —>  turnLightOn()  (ac3vates  the  On  feature)

optionalfeaturealternativefeature

mandatoryfeature

To  sum  up

20

The  adapta@on  rules  must  evolve  to  maintain  the  DSPL  consistency

To  sum  up

20

The  adapta@on  rules  must  evolve  to  maintain  the  DSPL  consistency

But  it’s  not  an  easy  task!

To  sum  up

20

The  adapta@on  rules  must  evolve  to  maintain  the  DSPL  consistency

But  it’s  not  an  easy  task!

Modeling  and  Valida?ng  Dynamic  Adapta?on,  MODELS  2009

To  sum  up

20

The  adapta@on  rules  must  evolve  to  maintain  the  DSPL  consistency

But  it’s  not  an  easy  task!

Modeling  and  Valida?ng  Dynamic  Adapta?on,  MODELS  2009

How  to  detect?

Our  idea

21

Run@me  elements

CPS

Sensor Actuator

S_Light

Configuration: A_Light ⟶ S_LightAdaptation: S_Light.luminosity < 40 ⟶ On

Name: luminosityType: int Value: __ lumens

Auto Manual

A_Light

On Off

Current  and  Future  Work

22

Current  and  Future  Work

22

controldynamic

reconfiguration

Current  and  Future  Work

22

controldynamic

reconfiguration

Current  and  Future  Work

22

controldynamic

reconfiguration

Current  and  Future  Work

22

listensto changes

controldynamic

reconfiguration

Current  and  Future  Work

22

listensto changes

uses

controldynamic

reconfiguration

Current  and  Future  Work

22

listensto changes

updates

uses

updatescontroldynamic

reconfiguration

Current  and  Future  Work

22

listensto changes

updates

usestriggers

updatescontroldynamic

reconfiguration

Current  and  Future  Work

22

listensto changes

updates

usestriggers

updates

uses

controldynamic

reconfiguration

Current  and  Future  Work

22

listensto changes

updates

usestriggers

updates

usesanalyzes

analyzes

controldynamic

reconfiguration

analyzes

Current  and  Future  Work

22

listensto changes

updates

usestriggers

updates

usesanalyzes

analyzes

triggerscontroldynamic

reconfiguration

analyzes

Current  and  Future  Work

22

listensto changes

updates

usestriggers

updates

usesanalyzes

analyzes

triggerscontroldynamic

reconfiguration

analyzes

Current  and  Future  Work

22

listensto changes

updates

usestriggers

updates

usesanalyzes

analyzes

triggerscontroldynamic

reconfiguration

analyzes

Current  and  Future  Work

22

listensto changes

updates

usestriggers

updates

usesanalyzes

analyzes

triggerscontroldynamic

reconfiguration

analyzes

Current  and  Future  Work

22

listensto changes

updates

usestriggers

updates

usesanalyzes

analyzes

triggerscontroldynamic

reconfiguration

analyzes

Current  and  Future  Work

22

listensto changes

updates

usestriggers

updates

usesanalyzes

analyzes

triggerscontroldynamic

reconfiguration

analyzes

Human  in  the  loop!

Conclusion

23

• DSPL  must  evolve  while  systems  are  running  

-­‐ Systems  cannot  be  stopped  

• Need  for  tools/approaches  dealing  with  

-­‐ Consistency  maintenance  

-­‐ Uncertainty  

-­‐ History  

-­‐ Proac3ve  adapta3ons

Ques@ons  /  Comments  ?

24

Thank  you!

Recommended