<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Towards a Unifying Approach for Performance-Driven Software Model Refactoring</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Davide Arcelli</string-name>
          <email>davide.arcelli@univaq.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Vittorio Cortellessa</string-name>
          <email>vittorio.cortellessa@univaq.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Daniele Di Pompeo</string-name>
          <email>dipompeodaniele@gmail.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Dipartimento di Ingegneria e Scienze dell'Informazione e Matematica Università degli Studi dell'Aquila 67100 L'Aquila</institution>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Performance is a pervasive quality attribute of software systems. Since it plays a key role in the success of many projects, it is important to introduce approaches aimed at satisfying performance requirements from the early phases of software life-cycle. However, this is a complex problem, because a large gap exists between performance analysis results and the feedback expected by software designers. Some approaches proposed in the last few years aim at reducing such gap, based on automated Model-Driven Engineering techniques, but they are fragmented across different paradigms, languages and metamodels. The goal of this paper is to work towards an approach that enables performance problems detection and solution within an unique supporting environment. We rely on the Epsilon platform, which provides an ecosystem of task-specific languages, interpreters, and tools for MDE. We describe the approach that we are implementing, and we show how some of these languages nicely fit the needs of a unifying paradigm for performance-driven software model refactoring.</p>
      </abstract>
      <kwd-group>
        <kwd>Model-Driven Engineering</kwd>
        <kwd>Software Refactoring</kwd>
        <kwd>Software Performance Engineering</kwd>
        <kwd>Performance Antipatterns</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Over the last decade, research has highlighted the importance of integrating
performance analysis in the software development process. Performance is a crucial
quality attribute of many software systems, but it is a complex and pervasive
property difficult to study. If performance targets are not met, then a variety
of negative consequences (such as user unsatisfaction, lost income, etc.) can
impact on significant parts of a project [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. These factors motivate the activities of
modeling and analyzing performance of software systems early in the life-cycle,
by reasoning on predictive quantitative results.
      </p>
      <p>Despite the amount of model-based performance analysis techniques that
have been proposed in the last few years, the identification of performance
problems is still critical, because the results of performance analysis (i.e., mean
values, variances, and probability distributions) are difficult to be interpreted and
translated into software feedback (i.e., design alternatives) improving system
performance.</p>
      <p>Figure 1 illustrates a typical model-based performance analysis process aimed
at detecting and removing performance problems. Shaded boxes represent
process activities, whereas white boxes represent artifacts.</p>
      <p>The process starts with an initial (performance-annotated) Software Model,
which represents an abstraction of the system under analysis. Performance
annotations are meant to add specific information necessary for performance analysis,
such as the incoming workload, service demands, etc. A Performance Model (e.g.,
Petri Net, Queuing Network) is obtained through model transformation from a
performance-annotated software model, and it is solved analytically (in most of
the cases) or by simulation during the Performance Model Solution step, which
carries out performance indices of interest, e.g., mean response times, throughput
distributions, and utilizations.</p>
      <p>
        This represents the forward path of the process. Well-founded model-driven
approaches have been introduced in this path for inducing automation in all
steps [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], whereas there is a clear lack of automation in the backward path,
namely the Result Interpretation &amp; Feedback Generation box that shall bring
the analysis results back to the software model in order to build a new software
model showing better performance.
      </p>
      <p>The backward path takes place in case performance indices do not meet the
requirements. In such case performance analysis results have to be interpreted
in order to detect performance problems. Then solutions (i.e., model refactoring)
have to be applied to remove problems.</p>
      <p>
        The contribution of this paper concerns the backward path of the process, and
it consists of a first step towards building an approach that enables performance
problems detection and solution within an unique supporting environment [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. To
this aim, we rely on some task-specific languages of the Epsilon Platform [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] to
implement the Result Interpretation &amp; Feedback Generation step. In particular,
we exploit their main characteristic, i.e., the possibility of defining (i) declarative
conditions that can be used to notify the user about performance problems
occurrences, and (ii) imperative blocks that support software model refactoring
based on violations of those conditions.
      </p>
      <p>The paper is organized as follows. Section 2 provides a background on the
main ingredients of this work, i.e., performance antipatterns and the Epsilon
platform. Section 3 reviews related work. Section 4 represents the core of this
paper, that is how to exploit the Epsilon platform to achieve our goal, and finally
Section 5 concludes the paper.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Background</title>
      <p>In this section we provide the background of this work, i.e. Performance
Antipatterns and the Epsilon platform.
2.1</p>
      <sec id="sec-2-1">
        <title>Performance Antipatterns</title>
        <p>
          Since more than a decade, Performance Antipatterns [
          <xref ref-type="bibr" rid="ref5 ref6">5,6</xref>
          ] revealed to be strong
support for performance-driven software model refactoring, since they have been
used to: (i) “codify” the knowledge and experience of analysts by describing
potentially bad design patterns that have negative effects on performance of
software systems, and (ii) remove such negative effects through refactoring actions.
        </p>
        <p>
          Performance antipatterns have been originally defined in natural language
[
          <xref ref-type="bibr" rid="ref7 ref8 ref9">7,8,9</xref>
          ]. In [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] a formal technology-independent interpretation has been
provided, based on first-order logic rules, that defines a set of system properties
under which a performance antipattern occurs in a software model. A specific
characteristic of performance antipatterns is that they contain numerical
parameters that represent thresholds referring to either performance indices (e.g., high
device utilization) or design features (e.g., many interface operations) [
          <xref ref-type="bibr" rid="ref11 ref12">11,12</xref>
          ].
        </p>
        <p>Figure 2 provides an UML-like graphical representation of the Pipe &amp; Filter
(PaF) antipattern, which occurs when the slowest filter in a “pipe and filter”
architecture causes the system to have unacceptable throughput. In Figure 2a,
the slowest filter is represented by the Operation Op and its execution causes a
bottleneck in the Interaction S, which shows a throughput lower than a certain
threshold. This is due to the Operation Op, owned by a Component C, that has
resource demands (computation, storage, bandwidth) larger than corresponding
thresholds. The Component C is manifested by an Artifact A which is deployed
to a Node N showing a mean utilization util which is greater than a certain
threshold.</p>
        <p>A solution to a PaF antipattern occurrence (see Figure 2b) consists of moving
the slowest filter to an ad-hoc software component deployed to a specific node.
This refactoring is aimed at reducing the utilization of the node where the
component owning the largest filter is deployed, and at increasing the throughput
of the involved service. In Figure 2b, the Operation Op representing the slowest
filter is moved to a new Component Cnew, which is manifested by a new Artifact
Anew deployed on a new Node Nnew.</p>
        <p>(a) PaF occurrence.
(b) A PaF solution.
Epsilon stands for Extensible Platform of Integrated Languages for mOdel
maNagement. It is a platform for building consistent and interoperable task-specific
languages for model management tasks such as model transformation, code
generation, model comparison, merging, refactoring and validation.</p>
        <p>Epsilon currently provides eigth languages, and for each language
Eclipsebased development tools and an interpreter that can execute programs written
in that language are provided.</p>
        <p>The Epsilon ecosystem provides an infrastructure suitable for implementing
our antipattern-based software model refactoring approach in several ways. In
fact, Epsilon Validation Language (EVL), Epsilon Wizard Language (EWL),
and Epsilon Pattern Language (EPL), allow to define declarative conditions (i.e
guard and/or check) and imperative blocks (i.e., do) that have to be executed
if the conditions are not satisfied. This paradigm matches with the concept of
detection and solution of performance antipatterns: the declarative conditions
codifies antipatterns, whereas in the imperative blocks refactoring actions that
might lead to antipatterns solution are codified. The different execution
semantics of the three languages mentioned above allow to provide different automated
support to the user (see Section 4).
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Related Work</title>
      <p>
        The problem of model (and metamodel) refactoring has been largely investigated
in the last few years, and the refactoring criteria span from usability through
modifiability up to evolution needs [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. However, few approaches deal with
performance-driven model refactoring.
      </p>
      <p>
        The work in [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] presents the ArchE framework that assists the software
architect during the design to create architectures that meet quality requirements.
However, defined rules are limited to improve modifiability only. A simple
performance model is used to predict performance metrics for the new system with
improved modifiability.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] a technique for automatic refactoring a Service-Oriented Architecture
(SOA) design model by applying a design pattern and for propagating the
incremental changes to its Layered Queuing Network (LQN) performance model
is introduced. In this paper we take the opposite direction, in that we refactor
software models by removing performance antipatterns rather than introducing
patterns. In addition, we work for a unifying approach that is not bounded to
any paradigm (such as SOA) or performance model (such as LQN).
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], two specific EMF-based languages are integrated for model
refactoring. Due to the multi-view nature of performance antipatterns, we target
models describing software components, their interactions, and their deployment,
whereas the approach in [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] mainly considers classes and their interactions, i.e.
models that are closer to the code. Moreover, in [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] only design quality
attributes and metrics are taken into account, whereas we target performance, i.e.
a pervasive software quality attribute that involves more unpredictable metrics.
4
      </p>
    </sec>
    <sec id="sec-4">
      <title>Refactoring Approach</title>
      <p>In this section, we describe our approach in some detail. The main idea is
illustrated in Figure 3. The approach is centered on three performance antipatterns
detection and solution engines, providing different interactive support to the
designer, based on EPL, EVL, and EWL. The designer selects the engine to use
in order to perform refactoring sessions starting from an initial software model,
i.e. M0, which conforms to a metamodel M M and is given as input to the
selected engine. During a refactoring session, a number of new refactored models,
i.e., M1, .., Mn−1, are created, until a software model that satisfies performance
requirements is obtained, i.e. Mn. Note that, for each engine, with respect to the
metamodel M M which the software model conforms to, the performance expert
has to build the basic knowledge, i.e. KMM , manually. This means that she has
to write the EPL/EVL/EWL code that implements performance antipatterns
occurring conditions and refactorings that can be applied to remove them.
4.1</p>
      <sec id="sec-4-1">
        <title>Sample Implementation for the PaF Antipattern</title>
        <p>1 The implementation can be found at http://www.di.univaq.it/davide.arcelli/
resources/projects/Epsilon4PAs.rar.
(a) Excerpt of an EPL pattern for PaF. (b) Refactoring session with EPL.</p>
        <p>Fig. 4: EPL refactoring engine.
(a) Excerpt of an EVL pattern for PaF. (b) Refactoring session with EVL.</p>
        <p>Fig. 5: EVL refactoring engine.
(a) Excerpt of an EWL pattern for PaF. (b) Refactoring session with EWL.</p>
        <p>Fig. 6: EWL refactoring engine.</p>
        <p>Figure 7 graphically shows an EVL-based model refactoring. The upper side
of the figure illustrates an excerpt of a performance-annotated software model,
focusing on its Static and Deployment views, expressed as a UML Component
and a Deployment Diagram, respectively. Under these diagrams, their tree-based
textual representations within the Eclipse UML perspective are shown. After
executing an antipattern detection step that uses the EVL engine of our approach,
several actions are proposed to remove the detected antipatterns (see the popup
in the middle of Figure 7). When the refactoring application is completed, a
new model is obtained (see the bottom of the figure), where antipatterns have
been removed. In the example of Figure 7, a detected occurrence of the Pipe and
Filter antipattern is removed by applying the solution described in Section 2.1.
4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Sample Designer Support for the PaF Antipattern</title>
        <p>The kind of support that our approach provides strictly depends on the execution
semantics of the specific languages of the Epsilon ecosystem. The three languages
that we consider in this paper allow to provide the following kind of refactoring
sessions to the user.</p>
        <p>Batch refactoring sessions (see Figure 4b): implemented as EPL patterns
(see Figure 4a), they allow to execute the series of antipattern detection and
refactoring specified in the corresponding .epl file. In case of iterative mode, the
process is repeated until no more antipattern occurrences have been found or
until the specified maximum number of iterations has been reached.</p>
        <p>EPL provides the most limiting support to the designer, due to the fact that,
in presence of two or more EPL patterns matching on identical conditions in the
same .epl file, it is not possible to determine which pattern will be chosen by
the Epsilon engine. For this reason, we assume that two EPL patterns matching
on identical conditions cannot exist in the same .epl file. As a consequence, each
antipattern can be codified only as one EPL pattern, thus limiting the solution
to the unique randomly-chosen refactoring.</p>
        <p>User-driven multiple refactoring sessions (see Figure 5b): implemented
as EVL critiques (see Figure 5a), they allow to execute interactive antipattern
detection and refactoring sessions, where antipattern occurrences are firstly
detected on the software model, and a number of available refactorings (i.e. EVL
fixes) are then selected by the user. Each selection immediately triggers the
application of a refactoring on a temporary version of the software model. When
the user stops the refactorng session, the temporary software model is finalized.</p>
        <p>In the context of performance antipatterns detection and solution, we can
assume that, even if more possible solutions are available for the same
antipattern, they do not depend one each other (otherwise they could be collapsed into
an unique refactoring). Moreover, since each refactoring is aimed at solving a
detected antipattern occurrence, we can assume that the designer selects at most
only one refactoring to apply for each detected occurrence.</p>
      </sec>
      <sec id="sec-4-3">
        <title>User-driven single refactoring sessions (see Figure 6b): implemented</title>
        <p>as EWL wizards (see Figure 6a), they are directly integrated in the
Eclipse</p>
        <p>Fig. 7: Example of model refactoring effect in Epsilon.
based modeling environment of the user (e.g., Papyrus2), thus automatically
detecting performance antipattern occurrences whenever an element is selected
in the modeling environment. They also enable solutions among which the user
can select the one to apply immediately on the software model, thus carrying
out a refactored one. At this point, the refactoring session is terminated, and a
new one might start.</p>
        <p>Differently from EPL patterns, two EWL wizards matching on identical
conditions can exist in the corresponding .ewl file. As a result, similarly to EVL,
more than one solution can be enabled with EWL.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Conclusion and Future Work</title>
      <p>In this paper, we have proposed a first step towards an approach that embeds
performance antipatterns detection and solution within an unique supporting
environment. In the context of the Epsilon platform, which provides an ecosystem
of task-specific languages, interpreters and tools for MDE activities, we have
selected EPL, EVL, and EWL as basis for three engines that provide different
kinds of support to performance-driven software model refactoring.</p>
      <p>Several aspects have been discussed in this paper and some other ones have
been just mentioned. However, we need to work on them in the near future.</p>
      <p>So far, we have implemented occurring conditions and refactorings for four
performance antipatterns over twelve existing ones. Hence, we aim at extending
our work to other performance antipatterns. Beside this, two next steps ahead
in process automation, aimed at reducing redundant coding effort, shall be: (i)
generating code from antipattern formulations, and (ii) porting the code among
the three considered languages.</p>
      <p>Finally, for sake of a future vision, we like to mention two long-term goals.</p>
      <p>Metamodel-independence. In general, our approach is
metamodel-independent, in the sense that its founding idea works for any modeling notation.
However, we have experimented it on UML software models profiled with the
MARTE profile. Nevertheless, several other performance-oriented modeling
languages exist, e.g., Palladio and Æmilia. With this respect, we intend to enlarge
the spectrum of modeling notations addressed by our approach. The approach
shall be based on a pivot language (i.e., a DSL transparent to the final user)
representing a neutral notation, whose constructs can be mapped to the ones of
other modeling languages.</p>
      <p>
        Threshold values. As discussed in [
        <xref ref-type="bibr" rid="ref11 ref12">11,12</xref>
        ], thresholds cannot be avoided in
the performance antipatterns definition, and their multiplicity and estimation
accuracy heavily influence both detection and refactoring activities. With this
respect, we aim at extending our approach by introducing heuristics for assigning
values to antipattern thresholds. Such heuristics would also assign probability
and effectiveness values to detected antipattern occurrences and available
refactoring actions, respectively, as discussed in [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
2 https://www.eclipse.org/papyrus/
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>C.</given-names>
            <surname>Smith</surname>
          </string-name>
          , “
          <article-title>Introduction to software performance engineering: Origins and outstanding problems,” in Formal Methods for Performance Evaluation, ser</article-title>
          .
          <source>Lecture Notes in Computer Science</source>
          . Springer,
          <year>2007</year>
          , vol.
          <volume>4486</volume>
          , pp.
          <fpage>395</fpage>
          -
          <lpage>428</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>H.</given-names>
            <surname>Koziolek</surname>
          </string-name>
          , “
          <article-title>Performance evaluation of component-based software systems: A survey,” Perform</article-title>
          . Eval., vol.
          <volume>67</volume>
          , no.
          <issue>8</issue>
          , pp.
          <fpage>634</fpage>
          -
          <lpage>658</lpage>
          , Aug.
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>D.</given-names>
            <surname>Arcelli</surname>
          </string-name>
          and
          <string-name>
            <given-names>V.</given-names>
            <surname>Cortellessa</surname>
          </string-name>
          , “
          <article-title>Assisting Software Designers to Identify and Solve Performance Problems</article-title>
          ,” in
          <source>First International Workshop on the Future of Software Architecture Design Assistants (FoSADA)</source>
          ,
          <source>WICSA and CompArch</source>
          <year>2015</year>
          , Montréal, Canada, CA, May
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>D.</given-names>
            <surname>Kolovos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Rose</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Paige</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Garcıa-Domınguez</surname>
          </string-name>
          , “
          <article-title>The epsilon book</article-title>
          ,
          <source>” Structure</source>
          , vol.
          <volume>178</volume>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>10</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>W. J. Brown</surname>
          </string-name>
          , R. C. Malveau,
          <string-name>
            <given-names>H. W.</given-names>
            <surname>McCormick</surname>
          </string-name>
          , III, and
          <string-name>
            <given-names>T. J.</given-names>
            <surname>Mowbray</surname>
          </string-name>
          , AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis. John Wiley &amp; Sons, Inc.,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>C. U.</given-names>
            <surname>Smith</surname>
          </string-name>
          and
          <string-name>
            <given-names>L. G.</given-names>
            <surname>Williams</surname>
          </string-name>
          , “
          <article-title>Software performance antipatterns,”</article-title>
          <source>in Proc. of the 2nd ACM International Workshop on Software and Performance. ACM</source>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7. --, “
          <article-title>Software Performance AntiPatterns; Common Performance Problems and</article-title>
          their Solutions,” in CMG Conference,
          <year>2001</year>
          , pp.
          <fpage>797</fpage>
          -
          <lpage>806</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8. --, “
          <article-title>New software performance antipatterns: More ways to shoot yourself in the foot</article-title>
          ,” in CMG Conference,
          <year>2002</year>
          , pp.
          <fpage>667</fpage>
          -
          <lpage>674</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9. --, “
          <article-title>More new software antipatterns: Even more ways to shoot yourself in the foot</article-title>
          ,” in CMG Conference,
          <year>2003</year>
          , pp.
          <fpage>717</fpage>
          -
          <lpage>725</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>V.</given-names>
            <surname>Cortellessa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. Di</given-names>
            <surname>Marco</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Trubiani</surname>
          </string-name>
          , “
          <article-title>An approach for modeling and detecting software performance antipatterns based on first-order logics</article-title>
          ,
          <source>” Software and Systems Modeling</source>
          , vol.
          <volume>13</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>391</fpage>
          -
          <lpage>432</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>D.</given-names>
            <surname>Arcelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Cortellessa</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Trubiani</surname>
          </string-name>
          , “
          <article-title>Influence of numerical thresholds on model-based detection and refactoring of performance antipatterns</article-title>
          ,” First Workshop on Patterns Promotion and
          <string-name>
            <surname>Anti-patterns Prevention</surname>
          </string-name>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12. --, “
          <article-title>Experimenting the influence of numerical thresholds on model-based detection and refactoring of performance antipatterns,” ECEASST</article-title>
          , vol.
          <volume>59</volume>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <given-names>D.</given-names>
            <surname>Tamzalit</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Schätz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Pierantonio</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Deridder</surname>
          </string-name>
          , “
          <article-title>Introduction to the sosym theme issue on models and evolution,” Software and System Modeling</article-title>
          , vol.
          <volume>13</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>621</fpage>
          -
          <lpage>623</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14. A.
          <string-name>
            <surname>Diaz-Pace</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          <string-name>
            <surname>Kim</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          <string-name>
            <surname>Bass</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Bianco</surname>
            , and
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Bachmann</surname>
          </string-name>
          , “
          <article-title>Integrating QualityAttribute Reasoning Frameworks in the ArchE Design Assistant,” in Quality of Software Architectures, Models and Architectures, ser</article-title>
          .
          <source>LNCS</source>
          ,
          <year>2008</year>
          , vol.
          <volume>5281</volume>
          , pp.
          <fpage>171</fpage>
          -
          <lpage>188</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <given-names>N.</given-names>
            <surname>Mani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. C.</given-names>
            <surname>Petriu</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C. M.</given-names>
            <surname>Woodside</surname>
          </string-name>
          , “
          <article-title>Studying the Impact of Design Patterns on the Performance Analysis of Service Oriented Architecture,”</article-title>
          <source>in EUROMICRO Conference on Software Engineering and Advanced Applications</source>
          ,
          <year>2011</year>
          , pp.
          <fpage>12</fpage>
          -
          <lpage>19</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>T.</given-names>
            <surname>Arendt</surname>
          </string-name>
          and G. Taentzer, “
          <article-title>Integration of smells and refactorings within the eclipse modeling framework</article-title>
          ,
          <source>” in Fifth Workshop on Refactoring Tools</source>
          <year>2012</year>
          , WRT '
          <volume>12</volume>
          ,
          <year>2012</year>
          , pp.
          <fpage>8</fpage>
          -
          <lpage>15</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <given-names>D.</given-names>
            <surname>Arcelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Cortellessa</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Trubiani</surname>
          </string-name>
          , “
          <article-title>Performance-based software model refactoring in fuzzy contexts</article-title>
          ,” in Fundamental Approaches to Software Engineering,
          <year>2015</year>
          , pp.
          <fpage>149</fpage>
          -
          <lpage>164</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>