<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
    <title>Project-Team:TRISKELL</title>
    <link rel="stylesheet" href="../static/css/raweb.css" type="text/css"/>
    <meta name="description" content="Research Program - Model&#10;Driven Engineering for Distributed Software"/>
    <meta name="dc.title" content="Research Program - Model&#10;Driven Engineering for Distributed Software"/>
    <meta name="dc.subject" content=""/>
    <meta name="dc.publisher" content="INRIA"/>
    <meta name="dc.date" content="(SCHEME=ISO8601) 2013-01"/>
    <meta name="dc.type" content="Report"/>
    <meta name="dc.language" content="(SCHEME=ISO639-1) en"/>
    <meta name="projet" content="TRISKELL"/>
  </head>
  <body>
    <div class="tdmdiv">
      <div class="logo">
        <a href="http://www.inria.fr">
          <img style="align:bottom; border:none" src="../static/img/icons/logo_INRIA-coul.jpg" alt="Inria"/>
        </a>
      </div>
      <div class="TdmEntry">
        <div class="tdmentete">
          <a href="uid0.html">Project-Team Triskell</a>
        </div>
        <span>
          <a href="uid1.html">Members</a>
        </span>
      </div>
      <div class="TdmEntry">Overall Objectives<ul><li><a href="./uid3.html">Introduction</a></li><li><a href="./uid6.html">Highlights of the Year</a></li></ul></div>
      <div class="TdmEntry">Research Program<ul><li class="tdmActPage"><a href="uid11.html&#10;&#9;&#9;  ">Model
Driven Engineering for Distributed Software</a></li></ul></div>
      <div class="TdmEntry">Application Domains<ul><li><a href="uid26.html&#10;&#9;&#9;  ">Application Domains</a></li></ul></div>
      <div class="TdmEntry">Software and Platforms<ul><li><a href="uid28.html&#10;&#9;&#9;  ">
        Kermeta
      </a></li><li><a href="uid53.html&#10;&#9;&#9;  ">
        Kevoree
      </a></li><li><a href="uid73.html&#10;&#9;&#9;  ">
        FAMILIAR
      </a></li></ul></div>
      <div class="TdmEntry">New Results<ul><li><a href="uid85.html&#10;&#9;&#9;  ">Support for Reverse Engineering and Maintaining Feature Models</a></li><li><a href="uid86.html&#10;&#9;&#9;  ">Feature Model Extraction from Large Collections of Informal Product Descriptions</a></li><li><a href="uid87.html&#10;&#9;&#9;  ">On Product Comparison Matrices and Variability Models</a></li><li><a href="uid88.html&#10;&#9;&#9;  ">Generating Counterexamples of Model-based Software Product Lines: An Exploratory Study</a></li><li><a href="uid89.html&#10;&#9;&#9;  ">Composing your Compositions of Variability Models</a></li><li><a href="uid90.html&#10;&#9;&#9;  ">Extraction and Evolution of Architectural Variability Models in Plugin-based Systems</a></li><li><a href="uid91.html&#10;&#9;&#9;  ">FAMILIAR: A Domain-Specific Language for Large Scale Management of Feature Models</a></li><li><a href="uid92.html&#10;&#9;&#9;  ">Web Configurators</a></li><li><a href="uid93.html&#10;&#9;&#9;  ">Separating Concerns in Feature Models</a></li><li><a href="uid94.html&#10;&#9;&#9;  ">Bridging the Chasm between Executable Metamodeling and Models of Computation</a></li><li><a href="uid95.html&#10;&#9;&#9;  ">Reifying Concurrency for Executable Metamodeling</a></li><li><a href="uid96.html&#10;&#9;&#9;  ">Using Model Types to Support Contract-Aware Model Substitutability</a></li><li><a href="uid97.html&#10;&#9;&#9;  ">Variability Support in Domain-Specific Language Development</a></li><li><a href="uid98.html&#10;&#9;&#9;  ">Automatically Searching for Metamodel Well-Formedness Rules in Examples and Counter-Examples</a></li><li><a href="uid99.html&#10;&#9;&#9;  ">Building Modular and Efficient DSLs: Mashup of Meta-Languages and its Implementation in the Kermeta Language Workbench</a></li><li><a href="uid100.html&#10;&#9;&#9;  ">On the Globalization of Modeling Languages</a></li><li><a href="uid101.html&#10;&#9;&#9;  ">Automating the Maintenance of Non-functional System Properties using Demonstration-based Model Transformation</a></li><li><a href="uid102.html&#10;&#9;&#9;  ">Improving Reusability and Automation in Software Process Lines</a></li><li><a href="uid103.html&#10;&#9;&#9;  ">Towards Trust-Aware and Self-Adaptive Systems</a></li><li><a href="uid104.html&#10;&#9;&#9;  ">SOA Antipatterns: an Approach for their Specification and Detection</a></li><li><a href="uid105.html&#10;&#9;&#9;  ">Automated Measurement of Models of Requirements</a></li><li><a href="uid106.html&#10;&#9;&#9;  ">Empirical Evidence of Large-Scale Diversity in API Usage of Object-Oriented Software</a></li><li><a href="uid107.html&#10;&#9;&#9;  ">Efficient high-level abstractions for web programming</a></li><li><a href="uid108.html&#10;&#9;&#9;  ">Exploring Optimal Service Compositions in Highly Heterogeneous and Dynamic Service-Based Systems</a></li></ul></div>
      <div class="TdmEntry">Bilateral Contracts and Grants with Industry<ul><li><a href="uid110.html&#10;&#9;&#9;  ">VaryMDE</a></li><li><a href="uid113.html&#10;&#9;&#9;  ">Sodifrance</a></li><li><a href="uid118.html&#10;&#9;&#9;  ">Zenexity</a></li><li><a href="uid121.html&#10;&#9;&#9;  ">Technology transfer</a></li></ul></div>
      <div class="TdmEntry">Partnerships and Cooperations<ul><li><a href="uid123.html&#10;&#9;&#9;  ">National Initiatives</a></li><li><a href="uid147.html&#10;&#9;&#9;  ">European Initiatives</a></li><li><a href="uid203.html&#10;&#9;&#9;  ">International Initiatives</a></li><li><a href="uid230.html&#10;&#9;&#9;  ">International Research Visitors</a></li></ul></div>
      <div class="TdmEntry">Dissemination<ul><li><a href="uid253.html&#10;&#9;&#9;  ">Scientific Animation</a></li><li><a href="uid289.html&#10;&#9;&#9;  ">Teaching - Supervision - Juries</a></li></ul></div>
      <div class="TdmEntry">
        <div>Bibliography</div>
      </div>
      <div class="TdmEntry">
        <ul>
          <li>
            <a id="tdmbibentmajor" href="bibliography.html">Major publications</a>
          </li>
          <li>
            <a id="tdmbibentyear" href="bibliography.html#year">Publications of the year</a>
          </li>
          <li>
            <a id="tdmbibentfoot" href="bibliography.html#References">References in notes</a>
          </li>
        </ul>
      </div>
    </div>
    <div id="main">
      <div class="mainentete">
        <div id="head_agauche">
          <small><a href="http://www.inria.fr">
	    
	    Inria
	  </a> | <a href="../index.html">
	    
	    Raweb 
	    2013</a> | <a href="http://www.inria.fr/en/teams/triskell">Presentation of the Project-Team TRISKELL</a> | <a href="http://www.irisa.fr/triskell/home_html-en">TRISKELL Web Site
	  </a></small>
        </div>
        <div id="head_adroite">
          <table class="qrcode">
            <tr>
              <td>
                <a href="triskell.xml">
                  <img style="align:bottom; border:none" alt="XML" src="../static/img/icons/xml_motif.png"/>
                </a>
              </td>
              <td>
                <a href="triskell.pdf">
                  <img style="align:bottom; border:none" alt="PDF" src="IMG/qrcode-triskell-pdf.png"/>
                </a>
              </td>
              <td>
                <a href="../triskell/triskell.epub">
                  <img style="align:bottom; border:none" alt="e-pub" src="IMG/qrcode-triskell-epub.png"/>
                </a>
              </td>
            </tr>
            <tr>
              <td/>
              <td>PDF
</td>
              <td>e-Pub
</td>
            </tr>
          </table>
        </div>
      </div>
      <!--FIN du corps du module-->
      <br/>
      <div class="bottomNavigation">
        <div class="tail_aucentre">
          <a href="./uid6.html" accesskey="P"><img style="align:bottom; border:none" alt="previous" src="../static/img/icons/previous_motif.jpg"/> Previous | </a>
          <a href="./uid0.html" accesskey="U"><img style="align:bottom; border:none" alt="up" src="../static/img/icons/up_motif.jpg"/>  Home</a>
          <a href="./uid26.html" accesskey="N"> | Next <img style="align:bottom; border:none" alt="next" src="../static/img/icons/next_motif.jpg"/></a>
        </div>
        <br/>
      </div>
      <div id="textepage">
        <!--DEBUT2 du corps du module-->
        <h2>Section: 
      Research Program</h2>
        <h3 class="titre3">Model
Driven Engineering for Distributed Software</h3>
        <p>Objects, design patterns, software components, contracts, aspects,
models, UML, product lines
</p>
        <a name="uid12"/>
        <h4 class="titre4">Software Product Lines</h4>
        <p>It is seldom the case nowadays that we can any longer deliver software systems
with the assumption that one-size-fits-all. We have to handle many variants
accounting not only for differences in product functionalities (range of
products to be marketed at different prices), but also for differences in
hardware (e.g.; graphic cards, display capacities, input devices), operating
systems, localization, user preferences for GUI (“skins”). Obvioulsy, we do
not want to develop from scratch and independantly all of the variants the
marketing department wants. Furthermore, all of these variant may have many
successive versions, leading to a two-dimensional vision of product-lines.</p>
        <a name="uid13"/>
        <h4 class="titre4">Object-Oriented Software Engineering</h4>
        <p>The object-oriented approach is now widespread for the analysis, the design,
and the implementation of software systems. Rooted in the idea of modeling
(through its origin in Simula), object-oriented analysis, design and
implementation takes into account the incremental, iterative and evolutive
nature of software development <a href="./bibliography.html#triskell-2013-bid1">[80]</a> , <a href="./bibliography.html#triskell-2013-bid2">[78]</a> : large software system
are seldom developed from scratch, and maintenance activities represent a large
share of the overall development effort.</p>
        <p>In the object-oriented standard approach, objects are instances of classes. A class
encapsulates a single abstraction in a modular way. A class is both <i>closed</i>,
in the sense that it can be readily instanciated and used by clients objects,
and <i>open</i>, that is subject to extensions through inheritance  <a href="./bibliography.html#triskell-2013-bid3">[82]</a> .</p>
        <a name="uid14"/>
        <h4 class="titre4">Design Pattern</h4>
        <p>Since by definition objects are simple to design and understand, complexity in
an object-oriented system is well known to be in the <i>collaboration</i>
between objects, and large systems cannot be understood at the level of classes
and objects. Still these complex collaborations are made of recurring patterns,
called design patterns. The idea of systematically identifying and documenting design patterns as autonomous
entities was born in the late 80's. It was brought into the mainstream by such people as
Beck, Ward, Coplien, Booch, Kerth, Johnson, etc. (known as the Hillside Group).
However the main event in this emerging field was the publication, in 1995, of the
book <i>Design Patterns: Elements of Reusable Object Oriented Software</i> by
the so-called Gang of Four (GoF), that is E. Gamma, R. Helm, R.
Johnson and J. Vlissides  <a href="./bibliography.html#triskell-2013-bid4">[79]</a> .
Today, design patterns are widely accepted as useful tools for guiding
and documenting the design of object-oriented software systems. Design patterns
play many roles in the development process. They provide a common vocabulary
for design, they reduce system complexity by naming and defining abstractions,
they constitute a base of experience for building reusable software, and they
act as building blocks from which more complex designs can be built.
Design patterns can be considered reusable micro-architectures that contribute
to an overall system architecture. Ideally, they capture the intent behind a
design by identifying the component objects, their collaborations, and the
distribution of responsibilities. One of the challenges addressed in the
Triskell project is to develop concepts and tools to allow their formal
description and their automatic application.</p>
        <a name="uid15"/>
        <h4 class="titre4">Component</h4>
        <p>The object concept also provides the basis for <i>software components</i>, for which Szyperski's definition  <a href="./bibliography.html#triskell-2013-bid5">[88]</a>  is
now generally accepted, at least in the industry:</p>
        <blockquote>
          <p class="bold">
            <i>A software component is a unit of composition with contractually
specified interfaces and explicit context dependencies only. A software
component can be deployed independently and is subject to composition by
third party.</i>
          </p>
        </blockquote>
        <p>Component based software relies on assemblies of components. Such
assemblies rely in turn on
fundamental mechanisms such as precise definitions of the mutual
responsability of partner components, interaction means between
components and their non-component environment and runtime support
(e.g. .Net, <span class="smallcap">ejb </span>, Corba Component Model <span class="smallcap">ccm </span>, <span class="smallcap">OSGI </span> or Fractal).</p>
        <p>Components help reducing costs by allowing reuse of application frameworks and
components instead of redeveloping applications from scratch (product line
approach). But more important, components offer the possibility to radically
change the behaviors and services offered by an application by substitution or
addition of new components, even a long time after deployment. This has a major
impact of software lifecycle, which should now handle activities such as the
design of component frameworks, the design of reusable components as deployment
units, the validation of component compositions coming from various origins
and the component life-cycle management.</p>
        <p>Empirical methods without real component composition
models have appeared during the emergence of a real component industry (at
least in the Windows world). These methods are now clearly the cause of untractable validation and
of integration problems that can not be transposed to more critical systems (see for
example the accidental destruction of Ariane 501  <a href="./bibliography.html#triskell-2013-bid6">[81]</a> ).</p>
        <p>Providing solutions for formal component composition models and for verifiable
quality (notion of <i>trusted components</i>) are especially relevant
challenges. Also the methodological impact of component-based development (for
example within the maturity model defined by the <span class="smallcap">sei </span>)
is also worth attention.</p>
        <a name="uid16"/>
        <h4 class="titre4">Contracts</h4>
        <p>Central to this trusted component notion is the idea of <i>contract</i>. A
software contract captures mutual requirements and benefits among stake-holder
components, for example between the client of a service and its suppliers
(including subcomponents). Contracts strengthen and deepen interface
specifications. Along the lines of abstract data type theory, a common way of
specifying software contracts is to use boolean assertions called pre- and
post-conditions for each service offered, as well as class invariants for
defining general consistency properties. Then the contract reads as follows:
The client should only ask a supplier for a service in a state where the class
invariant and the precondition of the service are respected. In return, the
supplier promises that the work specified in the post-condition will be done,
and the class invariant is still respected. In this way rights and obligations
of both client and supplier are clearly delineated, along with their
responsibilities. This idea was first implemented in the Eiffel
language  <a href="./bibliography.html#triskell-2013-bid7">[83]</a>  under the name <i>Design by Contract</i>, and is now
available with a range of expressive power into several other programming
languages (such as Java) and even in the Unified Modeling Language (UML) with
the Object Constraint Language (OCL)  <a href="./bibliography.html#triskell-2013-bid8">[89]</a> .
However, the classical predicate based contracts are not enough to
describe the requirements of modern applications. Those applications
are distributed, interactive and they rely on resources with
random quality of service.
We have shown that classical contracts can be extended to take care of
synchronization and extrafunctional properties of services (such as
throughput, delays, etc)  <a href="./bibliography.html#triskell-2013-bid9">[77]</a> .</p>
        <a name="idp140525789273424"/>
        <h4 class="titre4">Models and Aspects</h4>
        <p>As in other sciences, we are increasingly resorting to modelling to
master the complexity of modern software
development. According to Jeff Rothenberg,</p>
        <blockquote>
          <p class="bold">
            <i>Modeling, in the
broadest sense, is the cost-effective use of something in place of something
else for some cognitive purpose. It allows us to use something that is simpler,
safer or cheaper than reality instead of reality for some purpose. A model
represents reality for the given purpose; the model is an abstraction of
reality in the sense that it cannot represent all aspects of reality. This
allows us to deal with the world in a simplified manner, avoiding the
complexity, danger and irreversibility of reality.</i>
          </p>
        </blockquote>
        <p>So modeling is not just about expressing a solution at a higher abstraction
level than code. This has been useful in the past (assembly languages
abstracting away from machine code, 3GL abstracting over assembly languages,
etc.) and it is still useful today to get a holistic view on a large C++
program. But modeling goes well beyond that.</p>
        <p>Modeling is indeed one of the touchstone of any scientific activity (along
with validating models with respect to experiments carried out in the real
world). Note by the way that the specificity of engineering is that engineers
build models of artefacts that usually do not exist yet (with the ultimate
goal of building them).</p>
        <p>In engineering, one wants to break down a complex system into as many models
as needed in order to address all the relevant concerns in such a way that
they become understandable enough. These models may be expressed with a
general purpose modeling language such as the Unified Modeling
Language (UML), or with Domain Specific
Languages when it is more appropriate.</p>
        <p>Each of these models can be seen as the abstraction of an aspect of reality
for handling a given concern. The provision of effective means for handling
such concerns makes it possible to establish critical trade-offs early on in
the software life cycle, and to effectively manage variation points in the
case of product-lines.</p>
        <p>Note that in the Aspect Oriented Programming community, the notion of aspect
is defined in a slightly more restricted way as the modularization of a
cross-cutting concern. If we indeed have an
already existing “main” decomposition paradigm (such as object orientation),
there are many classes of concerns for which clear allocation into modules is
not possible (hence the name “cross-cutting”). Examples include both
allocating responsibility for providing certain kinds of functionality (such
as login) in a cohesive, loosely coupled fashion, as well as handling many non-functional
requirements that are inherently cross-cutting e.g.; security, mobility,
availability, distribution, resource management and real-time constraints.</p>
        <p>However now that aspects become also popular outside of the mere programming
world  <a href="./bibliography.html#triskell-2013-bid10">[87]</a> , there is a growing acceptance for a wider
definition where an aspect is a concern that can be modularized. The
motivation of these efforts is the systematic identification, modularization,
representation, and composition of these concerns, with the ultimate goal of
improving our ability to reason about the problem domain and the corresponding
solution, reducing the size of software model and application code,
development costs and maintenance time.</p>
        <a name="idp140525789281584"/>
        <h4 class="titre4">Design and Aspect Weaving</h4>
        <p>So really modeling is the activity of separating concerns in the problem
domain, an activity also called <i>analysis</i>. If solutions to these
concerns can be described as aspects, the design process can then be
characterized as a weaving of these aspects into a detailed design model (also
called the solution space).
This is not new: this is actually what designers have been effectively doing
forever. Most often however, the various aspects are not <i>explicit</i>, or
when there are, it is in the form of informal descriptions. So the task of the
designer is to do the weaving in her head more or less at once, and then
produce the resulting detailed design as a big tangled program (even if one
decomposition paradigm, such as functional or object-oriented, is used).
While it works pretty well for small problems, it can become a major headache
for bigger ones.</p>
        <p>Note that the real challenge here is not on how to design the system to take a
particular aspect into account: there is a huge design know-how in industry for
that, often captured in the form of Design Patterns (see above). Taking into
account more than one aspect as the same time is a little bit more tricky, but
many large scale successful projects in industry are there to show us that
engineers do ultimately manage to sort it out.</p>
        <p>The real challenge in a product-line context is that the engineer wants to be
able to change her mind on which version of which variant of any particular
aspect she wants in the system. And she wants to do it cheaply, quickly and
safely. For that, redoing by hand the tedious weaving of every aspect is not
an option.</p>
        <a name="idp140525789285776"/>
        <h4 class="titre4">Model Driven Engineering</h4>
        <p>Usually in science, a model has a different nature that the thing it models
("do not take the map for the reality" as Sun Tse put it many centuries
ago). Only in software and in linguistics a model has the same nature as the
thing it models. In software at least, this opens the possibility to
automatically derive software from its model. This property is well known from
any compiler writer (and others), but it was recently made quite popular
with an OMG initiative called the Model Driven Architecture (MDA).
This requires that models are
no longer informal, and that the weaving process is itself described as
a program (which is as a matter of facts an executable meta-model) manipulating
these models to produce a detailed design that can ultimately be transformed
to code or at least test suites.</p>
        <p>The OMG has built a meta-data management framework to support the MDA. It is
mainly based on a unique M3 “meta-meta-model” called the Meta-Object Facility
(MOF) and a library of M2 meta-models, such as the UML (or SPEM for software
process engineering), in which the user can base his M1 model.</p>
        <p>The MDA core idea is that it should be possible to capitalize on
platform-independent models (PIM), and more or less automatically derive
platform-specific models (PSM) –and ultimately code– from PIM through model
transformations. But in some business areas involving fault-tolerant,
distributed real-time computations, there is a growing concern that the added
value of a company not only lies in its know-how of the business domain (the
PIM) but also in the design know-how needed to make these systems work in the
field (the transformation to go from PIM to PSM). Reasons making it complex to
go from a simple and stable business model to a complex implementation include:</p>
        <ul>
          <li>
            <p class="notaparagraph"><a name="uid17"> </a>Various modeling languages used beyond UML,</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid18"> </a>As many points of views as stakeholders,</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid19"> </a>Deliver software for (many) variants of a platform,</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid20"> </a>Heterogeneity is the rule,</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid21"> </a>Reuse technical solutions across large product lines (e.g. fault
tolerance, security, etc.),</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid22"> </a>Customize generic transformations,</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid23"> </a>Compose reusable transformations,</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid24"> </a>Evolve and maintain transformations for 15+ years.</p>
          </li>
        </ul>
        <p>This wider context is now known as Model Driven Engineering.</p>
      </div>
      <!--FIN du corps du module-->
      <br/>
      <div class="bottomNavigation">
        <div class="tail_aucentre">
          <a href="./uid6.html" accesskey="P"><img style="align:bottom; border:none" alt="previous" src="../static/img/icons/previous_motif.jpg"/> Previous | </a>
          <a href="./uid0.html" accesskey="U"><img style="align:bottom; border:none" alt="up" src="../static/img/icons/up_motif.jpg"/>  Home</a>
          <a href="./uid26.html" accesskey="N"> | Next <img style="align:bottom; border:none" alt="next" src="../static/img/icons/next_motif.jpg"/></a>
        </div>
        <br/>
      </div>
    </div>
  </body>
</html>
