Evolving Dynamic So/ware Product Lines Clément Quinton, Luciano Baresi EASSy, September 710, 2015 Japan
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!