<!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>Refactoring Design Patterns from Object-Oriented to Aspect-Oriented in Eclipse</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Daniele Contarino University of Catania Viale A. Doria 6</institution>
          ,
          <addr-line>95125 Catania</addr-line>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <fpage>11</fpage>
      <lpage>15</lpage>
      <abstract>
        <p>-Nowadays, Aspect-Oriented programming is used benefits of the latter one, can be a very long and expensive for industrial software systems. However, many useful Object- job. It could also produce human-related mistakes. Therefore, Oriented systems have been developed and are still in use and several approaches have been proposed to assist refactoring apamraadnigumal tpoorAtinspgecotf-Obriigenptreodje(cAtsO)froomne,Ombjaekcitn-Ogrtiehnetemd o(sOtOo)f systems, from detecting the portions of code that need to be Design Patterns (DP), may prove a costly and time-consuming improved [8]-[11], to carry out some transformation on the process. This paper proposes a practical approach for auto- code [12], [13]. Moreover, extensive research work has been matically converting OO code to AO code, specifically for the performed for identifying design patterns [14], [15], which in implementation of DPs. The solution comprises two essential turn can help understand and improve the code. sAtOepsc:odreec.oTghneitnio,ntwoof etxhaemDpPlesinofODOP cSoidnegleatnodn caonndveCrsoimonpoisnittoe This paper proposes to assist finding the portions of code implementations on the Eclipse IDE with Eclipse Java Develop- that can be refactored and to transfom such found portions. ment Tools (JDT) are given. This allows us to save time and reduce errors, requiring human Index Terms-Design Patterns, Aspect-Oriented programming, intervention only for custom DPs. Given a software project, Recognition, Code replace, Separation of concerns our idea would be to have a tool able to:</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>I. INTRODUCTION</p>
      <p>
        Design Patterns are an essential resource for developing
software systems of any size. The Design Patterns (DPs) are
the result of several years of fieldwork by senior software
engineers. They allow us to save time when designing an
application. However, many DPs have some crosscutting code
(e.g. DP Observer) or inject code in a different concern (e.g.
DP Singleton). Aspect-Oriented programming [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] solves the
crosscutting code problem by moving such a code in separate
modules or aspects. A concern is a specific concept or goal;
the concerns can be domain or core concerns. Usually, in
OO programming the core concerns are represented by main
classes, then there are other non-domain or system concerns.
In OO systems the latter concerns are crosscutting, while in
AO systems they are aspects, as e.g. logging systems, user
session checker, etc.
      </p>
      <p>
        Design Patterns in AO systems [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]–[
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] improve code
reusability, reduce the software complexity, by extracting and
separating the business logic code and the DP feature or
nondomain concerns [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Furthermore, the AO versions of
DPs are more reusable, since a single aspect can be used for
all the application classes needing it, and reduce the lines of
code, both for the business logic and the DP portions. This
allows the developer to focus more on models and less on the
interactions between the classes. Moreover, the same aspect
can be reused without changes on other software systems.
      </p>
      <p>Unfortunately, carrying out a refactoring from the OO to AO
paradigm for medium or large software systems, for having the</p>
    </sec>
    <sec id="sec-2">
      <title>Copyright c 2016 held by the authors.</title>
      <p>Recognise the used DPs;
Identify the classes the DP implements;
Create the aspects related with the found DP;
Delete the DP features from the OO version of the code
and make appropriate changes to transform the code.</p>
      <p>Therefore, a tool has been implemented with the said goals.
The chosen development environment is Eclipse; this choice
was motivated both for its widespread use in the enterprise
environments and its internal flexible support. This allows
building plugins that can easily perform parsing, checking and
changing of the existing application code.</p>
      <p>The use of aspects, hence the substantial replacement of
crosscutting code, helps us to separate the domain concerns
(business logic) from non-domain concerns (DP logic).
However, some metadata, as Java annotations used to tag the class
with the role for a specific DP will be used, as a kind of link
for the two parts.</p>
      <p>II. BACKGROUND CONCEPTS AND TOOLS</p>
      <sec id="sec-2-1">
        <title>A. Design Patterns</title>
        <p>Design patterns are as the developer “utility knives”. They
represent a set of best practices conceived by experienced OO
software developers; and are solutions for general problems
that happen during the software development. DPs describe
a given scenario. For example, Singleton DP lets us use a
single object in all the application; the developers know this
technique with the name Singleton, independently from the
language and platform used. Learning DPs helps the
unexperienced developers to solve severals problems that otherwise
would require the help of a senior software engineer.</p>
        <p>IMethod represents a method;
IField represents an attribute.</p>
        <p>III. DP RECOGNITION AND CONVERSION PROCESS
Each DP is described by:
1) name;
2) goal;
3) occurring problem;
4) solution offered;
5) effects.</p>
        <p>In 1994 one of the most widespread used DP collection
was published by four authors (also called “Gang of Four”).</p>
        <p>
          It describes 23 patterns divided in three categories: Creational,
Structural and Behavioral patterns [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ].
        </p>
        <p>
          The recognition of design patterns implemented inside a
Java software system is carried out by observing the OO
features of a DP, hence looking for their typical “signature” in
a software system. One of the most used techniques consists
of analysing the classes and finding relationships such as
implements or extends [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ], [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ], [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ]. In this way we can
B. Aspect-Oriented programming determine the class hierarchy and check whether it matches
        </p>
        <p>
          The Aspect-Oriented Programming is a programming that of a DP. Every DP has a typical structure and we propose
paradigm that allows crosscutting concerns to be separated into to search for three features. Our recognition algorithm can
modules called aspects [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]. We use in our project the AspectJ make use of the following.
technology with Java [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. In AspectJ, an aspect consists of Match with known specific classes or interfaces. This
Join Point: is a point inside the application execution (e.g. technique is used for DP Observer search, i.e. one of the
method invocation, method return, method execution, relevant application class has to implement the Observer
object creation, exception, fields access). In this point it interface and another one has to inherit from the
Observusually interferes a cross-cutting concern or rather the able class, which is included in the JDK standard library.
aspect. Such a class and an interface are well known and can be
Pointcut: is the tool that selects the Join Point based by identified from the analysis of the application code.
the context and the rule specified as the definition. Match an interface with the classes that implement it.
Advice: like a method, it executes a code when a join Starting from a given application, we get all interfaces.
point is selected by a pointcut. We observe where they are implemented and the behavior
AspectJ is an extension for Java SDK. AspectJ is a prepro- of the classes that implement the same interface. In case
cessor that integrates the cross-cutting concerns into Java code. of DP Composite it will be useful to get the list of
It converts the Pointcuts and Advices into Object-Oriented classes that implement a given interface. We will check
code before that the Java code is compiled in bytecode. if a specific class contains a list of attributes having as a
type the same interface (a list of leafs). Other examples
C. Eclipse JDT where this feature is used include: DP Factory Method
        </p>
        <p>Eclipse Java Development Tools (JDT) is a tool suite for and DP Abstract Factory: we search an interface that have
developing Java applications that can manipulate Java source a method whose return type is another interface.
code. For this reason, JDT is a fundamental package of Eclipse Match some attributes and/or methods. Some DPs are
IDE, and is used by several Eclipse plugins. characterized by the presence of some specific attributes</p>
        <p>JDT package is made of three items: Java Models, Search or properties concerning the methods (or the
construcEngine and Abstract Syntax Tree (AST). Our developed tool tors). E.g. DP Singleton has a private constructor, a
is a plug-in that uses the Eclipse JDT for recognizing and private static attribute of the same type of the class
editing the Java Eclipse projects and the Eclipse UI library for and a static method that returns an object of the same
integrating with the IDE (context menu, message box, etc.). type of the class. A similar recognition can be done for</p>
        <p>Eclipse UI gave us the project in a Java Model represen- Flyweight, Proxy, Object Pool (with a single Creator, like
tation. We then can create the handles that can be attached Singleton).
to the context menu in the Package Explorer of Eclipse. The The recognition process can be optimized if, during the
handles catch the selected project (as IJavaProject) and pass process, each class will collect all the useful features for
it to our (individual) DP converter. identification.</p>
        <p>Within the Eclipse JDT library the following main classes More specifically, class SearchPattern has been used to
have been used. perform searches. It takes as input a IJavaElement instance,
IWorkspace represents Eclipse workspace; (which is an Eclipse supertype for IJavaProject, IMethod,
IJavaProject represents a single Java project; IPackageFragment, IPackageFragmentRoot, IType) on which
IPackageFragmentRoot represents a collection of re- a search has to be performed, and an int representing the
sources (e.g. a folder or a library); matching mode (e.g. we could be searching for the
iniIPackageFragment represents a sub-package inside a tialisation of a reference or the use of a reference, in the
project; method body). Class SearchRequestor holds found items, and
ICompilationUnit represents a file with Java source code; interface IJavaSearchScope define where the search should be
IType represents a class; performed.</p>
      </sec>
      <sec id="sec-2-2">
        <title>A. Recognition</title>
      </sec>
      <sec id="sec-2-3">
        <title>B. Conversion</title>
        <p>To convert OO design patterns into AO versions, we proceed
in two stages:</p>
        <p>Deleting the OO features related to the design patterns
and/or reshaping of classes, attributes and methods;
Creating the aspects.</p>
        <p>After having recognized all the involved different classes of
a project in Eclipse IDE, one or more “.aj” files implementing
the DP are generated. They customize some different fields
by using the class names. We use the Eclipse JDT to realize
these stages. It allows us to write aspect code as simple text.
Moreover, if we want to change an existing code we will use
a more powerful tool that is the Abstract Syntax Tree (AST).
This one parses the Java code in a XML tree and vice versa.
This allows us to operate directly at the rows where we need
the code changes.</p>
        <p>IV. PROPOSED TOOLKIT</p>
        <p>We created a toolkit that provides us with support for
recognizing and converting DPs. The main steps are as follows:
Analysis of the existing code and search classes that
implements a given DP;
Creation of the object that will perform the conversion;
Creation of the aspects;</p>
        <p>Changing the analysed code.</p>
        <p>The toolkit declares the previous steps (abstract methods)
and imposes them as a guide to the various refactoring. It
applies the appropriate changes to the code.</p>
      </sec>
      <sec id="sec-2-4">
        <title>A. Implemented Classes</title>
        <p>The following describes the main classes implementing
our toolbox. Class AspectPrototype supports the
generation of an aspect, and holds the name of the aspects
as well as the constituting portions, such as pointcuts,
advices, etc., and the name of the file and package
holding the code. The main methods for building such
portions of code are: addAttribute(), addPointcut(),
addAdvice(), addMethod(), and the last three take as
input some strings representing name, parameters, and body.</p>
        <p>Class AspectDesignerPattern is abstract and defines
the methods that have to be implemented to recognise and
convert a DP. Such a class holds the name of the classes,
package, project, which have to be processed; moreover, it
has methods searching features on the code, deleting portions
of the found code, and creating portions of the new code. The
main steps performed are described in more detail below.</p>
        <p>Method createAspect() creates a custom aspect for the
found class; uses AspectPrototype class having the
internal elements expected for an aspect (pointcuts, advice,
attributes, etc.) and writes the code in the .aj file into the
indicated package.</p>
        <p>Method replaceCode() deletes and/or modify all the
portions of code characterizing a given DP in OO paradigm.</p>
        <p>Class SingletonModifier is a specialisation for the
namesake DP and recognises and convert a Singleton DP from
OO to AO version. It holds an instance of AspectPrototype
to generate the correspondent aspect; an instance of IMethod
represents the constructor and another instance representing
the getInstance() method typical of a Singleton. An instance of
IField is also representative of the static attribute implemented
in a Singleton class. The main methods implement the code
for finding an implementation of Singleton within a class, to
identify constructor and the static method, and to search and
remove the invocation of static methods in classes using the
Singleton.</p>
        <p>Class SingletonHandler gives the possibility to
connect the Eclipse environment with the proposed toolkit. It is
an implementation of IObjectActionDelegate interface, having
method run(), which will be called upon the click on the
selected project. Such a class holds an instance representing
the Eclipse shell, so that messages can be shown. The main
additional method is responsible to call the methods provided
by class SingletonModifier, in order to recognise and
convert portions of code.</p>
        <p>Class SingletonSearchEngine is a subclass of class
AbstractSearchEngine and is used to find the calls to
static methods.</p>
        <p>Class CompositeModifier recognises and converts DP
Composite from OO version to AO version. It mainly holds
an instance of AspectPrototype in order to generate
and write an appropriate aspect, realising the AO version, a
reference to class playing as Component, a list of references
for the classes playing as Child (Leaf) and the Composite. The
main methods implement the logic to search for application
classes implementing Composite DP.</p>
        <p>V. RECOGNITION RULES</p>
      </sec>
      <sec id="sec-2-5">
        <title>A. Singleton DP</title>
        <p>The Singleton DP is a successful DP and developers are
using it regularly. Now, our application will be concerned
with the recognition and rewriting of the code, so that the
AO version will be produced. In the recognition process,
our algorithm consider three features that distinguish the DP
Singleton, as follows.</p>
        <p>It exists a single private constructor;
it exists a public static method that returns some object
having the same type as the hosting class;
it exists a private static attribute of the same type of the
hosting class.</p>
        <p>If a class satisfies the previous conditions, this will be
represented as an instance of SingletonModifier, which implements
the functionality of the abstract class AspectDesignerPattern.</p>
        <p>Code in Listing 1 shows the main steps of the identification.</p>
        <p>Then, once the class has been identified, it is constructed the
relative aspect and replaced its code. In the end, the old parts
of a Singleton class are deleted, i.e. the attributes and methods
typical of the DP, and then the aj file is written.</p>
        <p>After conversion of a Singleton class MyClass, all calls
like</p>
        <p>MyClass uniqueObject = MyClass.getInstance();
will be replaced by:
MyClass uniqueObject = new MyClass();</p>
        <p>The client will see MyClass as a usual class (not a
Singleton DP), however all the instantiations return the same the interface and all classes recognized will be stored in an
}
}
}
}
instance of MyClass.
public final class SingletonModifier extends</p>
        <p>AspectDesignerPattern {
private static IMethod getOnlyPrivateConstructor(</p>
        <p>IMethod[] methods) throws JavaModelException {
int numOfPrivateConstructors = 0;
int privateConstructorsIndex = -1;
for (int i=0; i &lt; methods.length; i++)
if (methods[i].isConstructor() &amp;&amp;</p>
        <p>Flags.isPrivate(methods[i].getFlags())) {
numOfPrivateConstructors++;
privateConstructorsIndex = i;
}
if (numOfPrivateConstructors != 1) return null;
return methods[privateConstructorsIndex];
private static IMethod getInstanceMethod(</p>
        <p>IMethod[] methods, String className) throws</p>
        <p>JavaModelException {
for (int i=0; i &lt; methods.length; i++)
if (methods[i].getReturnType().</p>
        <p>compareTo("Q"+className+";") == 0 &amp;&amp;
Flags.isPublic(methods[i].getFlags()) &amp;&amp;
Flags.isStatic(methods[i].getFlags()))
return methods[i];
return null;
private static IField getInstanceAttribute(
IField[] fields, String className) throws</p>
        <p>JavaModelException {
for (int i=0; i &lt; fields.length; i++)
if (fields[i].getTypeSignature().</p>
        <p>compareTo("Q"+className+";") == 0 &amp;&amp;
Flags.isStatic(fields[i].getFlags()))
return fields[i];
return null;
class, as a class implementing the Component interface.</p>
        <p>As for Singleton recognition, if a group of classes
implement a specific interface that satisfies the previous conditions,
instance of CompositeModifier.</p>
        <p>Code in Listing 2 shows the implementation of the above.
public final class CompositeModifier extends</p>
        <p>AspectDesignerPattern {
public static AspectDesignerPattern[] getDesignerPattern(</p>
        <p>IJavaProject prj) {
ArrayList&lt;IType&gt; leaves = new ArrayList&lt;IType&gt;();
ArrayList&lt;IType&gt; composites = new ArrayList&lt;IType&gt;();
Vector&lt;Composite&gt; compositeDP = new Vector&lt;Composite&gt;();
Hashtable&lt;IType,IField&gt; c=new Hashtable&lt;IType,IField&gt;();
if (prj == null) return null;
ArrayList&lt;IType&gt; listInterface = new ArrayList&lt;IType&gt;();
IPackageFragment[] pks = prj.getPackageFragments();
for (IPackageFragment pack : pks)
for (ICompilationUnit jf : pack.getCompilationUnits())
for (IType classStub : jf.getTypes())
if (Flags.isInterface(classStub.getFlags()))
listInterface.add(classStub);
AspectSearchEngine se = new AspectSearchEngine(prj);
for (IType intf : listInterface) {
se.search(intf, IJavaSearchConstants.IMPLEMENTORS,
SearchPattern.R_ERASURE_MATCH |
SearchPattern.R_CASE_SENSITIVE);
Reference[] matches = se.getReferences();
if (matches.length == 0) continue;
Vector&lt;IType&gt; listType = new
Vector&lt;IType&gt;(Arrays.asList(se.getUsingType(matches)));
Iterator&lt;IType&gt; listTypeIterator = listType.iterator();
while (listTypeIterator.hasNext()) {
IType classStub = listTypeIterator.next();
boolean subjFound = false;
IField[] attributes = classStub.getFields();
for (IField a : attributes)
if (Composite.isDynamicList(a.getTypeSignature(),</p>
        <p>intf.getElementName())) {
composites.add(classStub);
listTypeIterator.remove();
c.put(classStub, a);
subjFound = true;
break;
}
if (!subjFound) {
leaves.add(classStub);
listTypeIterator.remove();
}
}
if (leaves.size() &gt; 0)
compositeDP.add(new Composite(prj, intf,
composites, leaves, c));
}
AspectDesignerPattern[] adp = new
AspectDesignerPattern[compositeDP.size()];
compositeDP.toArray(adp);
return adp;
}
}</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Listing 2. Methods inspecting the characteristics for Composite DP</title>
      <p>After conversion, the list of Component instances hold</p>
      <p>VI. CONCLUSION</p>
      <p>After years of research, AOP begins to propose itself as a
valid means for developing applications outside the academic
context. However, for the last twenty years the development</p>
    </sec>
    <sec id="sec-4">
      <title>Listing 1. Methods inspecting the characteristics for Singleton DP</title>
      <sec id="sec-4-1">
        <title>B. Composite DP</title>
        <p>The Composite DP allows developers to use a set of items
as a single object through the implementation of a common
interface. Every object can be a node (the element have a
pointer to another Composite object) or a leaf (object that
implements the concrete operation). For example: the I/O disk
operation over folder or file can be processed in the same
way (e.g. move, copy and rename). The folder contains one
or more folders or files. The client (e.g. the explorer GUI) will
Component).
tion of DP, we:</p>
        <p>As performed for the Singleton DP, our algorithm consider
three feature that distinguish the Composite DP. For
recogniget all interfaces of a project;
handle the folder (Composite) and the files (Leaf) likewise (as
inside the Composite class will be removed.
for each interface, search all classes that implements it;
of software systems has undergone exponential growth that
obtained the class list of each interface, search: (i) the
does not permit an immediate exchange of technology. Our
Composite class as a class that holds a list of type
work provides an approach that identifies parts of the code
that can be refactored from OO to AO version. The already
well-formed and strong applications, thanks to twenty years
of experience on DPs, give us the opportunity to pass to the
aspect version. It maintains the advantages of the latter and is
enriched by the AO modularity.</p>
        <p>An important step during refactoring is the recognition of
the used DPs and the identification of associated classes. We
have identified three categories of recognition based on some
typical signatures of DP.</p>
        <p>Our future work aims at collecting the features of all DPs at
once from the application under analysis and recognise one or
more DPs on the basis of the presence of all the characteristics
required by the DP. Only after recognition of all the DPs the
creation of the aspect code and the replacement of the OO
code will be performed.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>G.</given-names>
            <surname>Kiczales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Lamping</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mendhekar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Maeda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Lopes</surname>
          </string-name>
          ,
          <string-name>
            <surname>J.-M. Loingtier</surname>
            , and
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Irwin</surname>
          </string-name>
          , “
          <article-title>Aspect-oriented programming,” in Proceedings of ECOOP, ser</article-title>
          .
          <source>LNCS</source>
          , vol.
          <volume>1241</volume>
          . Springer,
          <year>1997</year>
          , pp.
          <fpage>220</fpage>
          -
          <lpage>242</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>J.</given-names>
            <surname>Hannemann</surname>
          </string-name>
          and G. Kiczales, “
          <article-title>Design pattern implementation in Java and AspectJ</article-title>
          ,”
          <source>in Proceedings of OOPSLA</source>
          , vol.
          <volume>37</volume>
          . ACM,
          <year>2002</year>
          , pp.
          <fpage>161</fpage>
          -
          <lpage>173</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>R.</given-names>
            <surname>Giunta</surname>
          </string-name>
          , G. Pappalardo, and E. Tramontana, “Aodp:
          <article-title>Refactoring code to provide advanced aspect-oriented modularization of design patterns,”</article-title>
          <source>in Proceedings of ACM Symposium on Applied Computing (SAC)</source>
          ,
          <source>Riva del Garda</source>
          , Italy,
          <year>March 2012</year>
          , pp.
          <fpage>1243</fpage>
          -
          <lpage>1250</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4] --, “
          <article-title>Aspects and annotations for controlling the roles application classes play for design patterns</article-title>
          ,”
          <source>in Proceedings of IEEE Asia-Pacific Software Engineering Conference (APSEC)</source>
          ,
          <source>Ho Chi Minh</source>
          , Vietnam,
          <year>December 2011</year>
          , pp.
          <fpage>306</fpage>
          -
          <lpage>314</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5] --, “
          <article-title>Superimposing roles for design patterns into application classes by means of aspects,”</article-title>
          <source>in Proceedings of ACM Symposium on Applied Computing (SAC)</source>
          ,
          <source>Riva del Garda</source>
          , Italy,
          <year>March 2012</year>
          , pp.
          <fpage>1866</fpage>
          -
          <lpage>1868</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6] --, “
          <article-title>Using aspects and annotations to separate application code from design patterns</article-title>
          ,”
          <source>in Proceedings of ACM Symposium on Applied Computing (SAC)</source>
          , Sierre, Switzerland,
          <year>March 2010</year>
          , pp.
          <fpage>2183</fpage>
          -
          <lpage>2189</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>A.</given-names>
            <surname>Calvagna</surname>
          </string-name>
          and E. Tramontana, “
          <article-title>Delivering dependable reusable components by expressing and enforcing design decisions,” in Proceedings of IEEE Computer Software</article-title>
          and Applications
          <string-name>
            <surname>Conference (COMPSAC) Workshop</surname>
            <given-names>QUORS</given-names>
          </string-name>
          , Kyoto, Japan,
          <year>July 2013</year>
          , pp.
          <fpage>493</fpage>
          -
          <lpage>498</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>F.</given-names>
            <surname>Banno`</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Marletta</surname>
          </string-name>
          , G. Pappalardo, and E. Tramontana, “
          <article-title>Tackling consistency issues for runtime updating distributed systems</article-title>
          ,”
          <source>in Proceedings of IEEE International Symposium on Parallel &amp; Distributed Processing, Workshops and Phd Forum (IPDPSW)</source>
          , Atlanta, Georgia,
          <string-name>
            <surname>US</surname>
          </string-name>
          ,
          <year>2010</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>8</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>G.</given-names>
            <surname>Pappalardo</surname>
          </string-name>
          and E. Tramontana, “
          <article-title>Suggesting extract class refactoring opportunities by measuring strength of method interactions</article-title>
          ,”
          <source>in Proceedings of IEEE Asia Pacific Software Engineering Conference (APSEC)</source>
          , Bangkok, Thailand,
          <year>December 2013</year>
          , pp.
          <fpage>105</fpage>
          -
          <lpage>110</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>E.</given-names>
            <surname>Tramontana</surname>
          </string-name>
          , “
          <article-title>Automatically characterising components with concerns and reducing tangling,” in Proceedings of IEEE Computer Software</article-title>
          and Applications
          <string-name>
            <surname>Conference (COMPSAC) Workshop</surname>
            <given-names>QUORS</given-names>
          </string-name>
          , Kyoto, Japan,
          <year>July 2013</year>
          , pp.
          <fpage>499</fpage>
          -
          <lpage>504</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>M.</given-names>
            <surname>Mongiovi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Giannone</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Fornaia</surname>
          </string-name>
          , G. Pappalardo, and E. Tramontana, “
          <article-title>Combining static and dynamic data flow analysis: a hybrid approach for detecting data leaks in Java applications</article-title>
          ,”
          <source>in Proceedings of ACM Symposium on Applied Computing (SAC)</source>
          , Salamanca, Spain,
          <year>2015</year>
          , pp.
          <fpage>1573</fpage>
          -
          <lpage>1579</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>M.</given-names>
            <surname>Fowler</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Beck</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Brant</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Opdyke</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Roberts</surname>
          </string-name>
          ,
          <article-title>Refactoring: Improving the Design of Existing Code</article-title>
          . Addison-Wesley,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>J.</given-names>
            <surname>Kerievsky</surname>
          </string-name>
          , Refactoring to patterns. Addison-Wesley,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>N.</given-names>
            <surname>Tsantalis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Chatzigeorgiou</surname>
          </string-name>
          , G. Stephanides, and
          <string-name>
            <given-names>S.</given-names>
            <surname>Halkidis</surname>
          </string-name>
          , “
          <article-title>Design Pattern Detection Using Similarity Scoring,”</article-title>
          <source>IEEE Transactions on Software Engineering</source>
          , vol.
          <volume>32</volume>
          , no.
          <issue>11</issue>
          , pp.
          <fpage>896</fpage>
          -
          <lpage>909</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>J.</given-names>
            <surname>Dong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Sun</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zhao</surname>
          </string-name>
          , “
          <article-title>Design pattern detection by template matching</article-title>
          ,”
          <source>in Proceedings of ACM Symposium on Applied Computing (SAC)</source>
          ,
          <year>2008</year>
          , pp.
          <fpage>765</fpage>
          -
          <lpage>769</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>E.</given-names>
            <surname>Gamma</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Helm</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Johnson</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Vlissides</surname>
          </string-name>
          , Design Patterns:
          <article-title>Elements of Reusable Object-Oriented Software</article-title>
          .
          <source>Addison-Wesley</source>
          ,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>R.</given-names>
            <surname>Laddad</surname>
          </string-name>
          , AspectJ in Action. Grennwich, Conn.: Manning Publications Co.,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>G.</given-names>
            <surname>Pappalardo</surname>
          </string-name>
          and E. Tramontana, “
          <article-title>Automatically discovering design patterns and assessing concern separations for applications,”</article-title>
          <source>in Proceedings of ACM Symposium on Applied Computing (SAC)</source>
          , Dijon, France,
          <year>April 2006</year>
          , pp.
          <fpage>1591</fpage>
          -
          <lpage>1596</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>J.</given-names>
            <surname>Dong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zhao</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Sun</surname>
          </string-name>
          , “
          <article-title>A matrix-based approach to recovering design patterns</article-title>
          ,
          <source>” IEEE Transactions on Systems, Man and Cybernetics</source>
          ,
          <string-name>
            <surname>Part</surname>
            <given-names>A</given-names>
          </string-name>
          :
          <article-title>Systems and Humans</article-title>
          , vol.
          <volume>39</volume>
          , no.
          <issue>6</issue>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>