<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>0120-6230</journal-id>
<journal-title><![CDATA[Revista Facultad de Ingeniería Universidad de Antioquia]]></journal-title>
<abbrev-journal-title><![CDATA[Rev.fac.ing.univ. Antioquia]]></abbrev-journal-title>
<issn>0120-6230</issn>
<publisher>
<publisher-name><![CDATA[Facultad de Ingeniería, Universidad de Antioquia]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0120-62302013000300011</article-id>
<title-group>
<article-title xml:lang="en"><![CDATA[Component-Based Java Legacy Code Refactoring]]></article-title>
<article-title xml:lang="es"><![CDATA[Refactorización Basada en Componentes de Código Java Legado]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Arboleda]]></surname>
<given-names><![CDATA[Hugo]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
<xref ref-type="aff" rid="A03"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Paz]]></surname>
<given-names><![CDATA[Andrés]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Royer]]></surname>
<given-names><![CDATA[Jean-Claude]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Icesi  ]]></institution>
<addr-line><![CDATA[Cali ]]></addr-line>
<country>Colombia</country>
</aff>
<aff id="A02">
<institution><![CDATA[,ASCOLA Group  ]]></institution>
<addr-line><![CDATA[Nantes ]]></addr-line>
<country>France</country>
</aff>
<aff id="A03">
<institution><![CDATA[,Universidad Icesi  ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>09</month>
<year>2013</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>09</month>
<year>2013</year>
</pub-date>
<numero>68</numero>
<fpage>104</fpage>
<lpage>114</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S0120-62302013000300011&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S0120-62302013000300011&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S0120-62302013000300011&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="en"><p><![CDATA[Component-Based Software Engineering (CBSE) claims to improve software modularisation and to embed architectural concerns. Refactoring Java legacy code with CBSE in mind requires first assessing the compliance of legacy code with component programming principles. This paper presents a portfolio of rules to assess the compliance of Java legacy code with the Communication Integrity (CI) property, which is one of the major strengths of the CBSE approach. These rules are proposed with the objective of identifying implicit component types and thus provide a measure of the componentisation of an application. In order to help developers and legacy code maintainers when refactoring their applications, along with the rules, this work leads to define a set of refactoring actions. Additionally, the results of testing, comparing and analysing the outputs of refactoring several Java applications are also presented.]]></p></abstract>
<abstract abstract-type="short" xml:lang="es"><p><![CDATA[La Ingeniería de Software Basada en Componentes (CBSE) pretende mejorar la modularización del software y la inserción de preocupaciones arquitecturales. Refactorizar código Java legado con CBSE en mente requiere evaluar primero el cumplimiento del código legado con los principios de la programación por componentes. En este artículo presentamos un portafolio de reglas para evaluar el cumplimiento de la propiedad de Integridad de Comunicación en código Java legado; esta propiedad es una de las mayores fortalezas del enfoque CBSE. Proponemos estas reglas para identificar tipos componente y así proveer una medida de la construcción de componentes CBSE de una aplicación. Con el objetivo de ayudar a los desarrolladores y al personal responsable del mantenimiento de código legado cuando se hace necesario refactorizar sus aplicaciones, nuestro trabajo nos lleva a definir un conjunto de acciones de refactorización. En este artículo también presentamos resultados de pruebas, comparaciones y análisis de las salidas logradas luego de refactorizar varias aplicaciones Java.]]></p></abstract>
<kwd-group>
<kwd lng="en"><![CDATA[Component based programming]]></kwd>
<kwd lng="en"><![CDATA[communication integrity]]></kwd>
<kwd lng="en"><![CDATA[Java]]></kwd>
<kwd lng="en"><![CDATA[refactoring]]></kwd>
<kwd lng="es"><![CDATA[Programación basada en componentes]]></kwd>
<kwd lng="es"><![CDATA[integridad de comunicación]]></kwd>
<kwd lng="es"><![CDATA[Java]]></kwd>
<kwd lng="es"><![CDATA[refactorización]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <font face="Verdana" size="2">      <p align="right"><b>ART&Iacute;CULO ORIGINAL</b></p>     <p align="right">&nbsp;</p>     <p align="center"><font size="4"> <b>Component-Based Java Legacy Code Refactoring</b></font></p>     <p align="center">&nbsp;</p>     <p align="center"><font size="3"> <b>Refactorizaci&oacute;n Basada en Componentes de C&oacute;digo Java Legado</b></font></p>     <p align="center">&nbsp;</p>     <p align="center">&nbsp;</p>     <p> <i><b>Hugo Arboleda<sup>1*</sup>, Andr&eacute;s Paz<sup>1</sup>, Jean-Claude Royer<sup>2</sup></b></i></p>       <p><sup>1</sup>I2T  Group, Universidad Icesi Calle 18 No. 122-135. Cali, Colombia. </p>      ]]></body>
<body><![CDATA[<p><sup>2</sup>ASCOLA Group, Mines de Nantes - INRIA 4 Rue A. Kastler. 44307. Nantes,  France.</p>      <p><sup>*</sup>Autor  de correspondencia: tel&eacute;fono: + 57 + 2 + 55 52 334 ext. 8035, fax: + 57 + 2 +  55 51 745, correo electr&oacute;nico: <a href="mailto:hfarboleda@icesi.edu.co">hfarboleda@icesi.edu.co</a> (H. Arboleda)</p>      <p>&nbsp;</p>     <p align="center">(Recibido el 19 de octubre  de 2012. Aceptado el 5 de agosto de 2013)</p>     <p align="center">&nbsp;</p>     <p align="center">&nbsp;</p> <hr noshade size="1">      <p><font size="3"><b>Abstract</b></font></p>      <p>Component-Based Software Engineering (CBSE) claims to  improve software modularisation and to embed architectural concerns.  Refactoring Java legacy code with CBSE in mind requires first assessing the  compliance of legacy code with component programming principles. This paper  presents a portfolio of rules to assess the compliance of Java legacy code with  the  <i>Communication Integrity</i> (CI) property, which is one of the major strengths of the  CBSE approach. These rules are proposed with the objective of identifying  implicit <i>component types</i>  and thus provide a measure of the <i>componentisation</i> of an application. In order  to help developers and legacy code maintainers when refactoring their applications,  along with the rules, this work leads to define a set of refactoring actions.  Additionally, the results of testing, comparing and analysing the outputs of  refactoring several Java applications are also presented.</p>       <p><i>Keywords:</i> Component based programming, communication integrity, Java, refactoring</p>  <hr noshade size="1">      <p><font size="3"><b>Resumen</b></font></p>     ]]></body>
<body><![CDATA[<p>La Ingenier&iacute;a de Software Basada  en Componentes (CBSE) pretende mejorar la modularizaci&oacute;n del software y la  inserci&oacute;n de preocupaciones arquitecturales. Refactorizar c&oacute;digo Java legado  con CBSE en mente requiere evaluar primero el cumplimiento del c&oacute;digo legado  con los principios de la programaci&oacute;n por componentes. En este art&iacute;culo  presentamos un portafolio de reglas para evaluar el cumplimiento de la  propiedad de  Integridad de Comunicaci&oacute;n en  c&oacute;digo Java legado; esta propiedad es una de las mayores fortalezas del enfoque  CBSE. Proponemos estas reglas para identificar tipos componente y as&iacute; proveer una medida de la construcci&oacute;n de  componentes CBSE de una aplicaci&oacute;n. Con el objetivo de ayudar a los  desarrolladores y al personal responsable del mantenimiento de c&oacute;digo legado  cuando se hace necesario refactorizar sus aplicaciones, nuestro trabajo nos  lleva a definir un conjunto de acciones de refactorizaci&oacute;n. En este art&iacute;culo  tambi&eacute;n presentamos resultados de pruebas, comparaciones y an&aacute;lisis de las  salidas logradas luego de refactorizar varias aplicaciones Java.</p>      <p><i>Palabras clave: </i>Programaci&oacute;n basada en componentes, integridad de comunicaci&oacute;n, Java, refactorizaci&oacute;n</p>  <hr noshade size="1">      <p>&nbsp;</p>     <p><font size="3"><b>Introduction</b></font></p>      <p>Component Based Software Engineering (CBSE) &#91;1&#93; is a  software engineering approach concerned with software architecture,  modularisation and separation of concerns. The approach promotes the principle  of making the architectural decisions explicit; it allows checking of  architectural constraints and the use of strict programming principles such as  the  <i>Communication Integrity</i> (CI) property &#91;2, 3&#93;. Such a property states that two  components can only communicate if a communication channel has been previously  defined between them, i.e. there are no hidden communication channels. In software  development, architectural erosion is the <i>''progressive  gap observed between the planned and the actual architecture of a software  system as implemented by its source code''</i> &#91;4&#93; and it appears as a side  effect when software systems are maintained and the system finally violates the  original architectural intents &#91;5-7&#93;. The CI property allows designers to  explicitly specify and automatically check some architectural decisions, thus  actively limiting the chances of architecture erosion.</p>       <p>This paper considers the problem of refactoring Java legacy  code in order to generate component based software applications that satisfy  the CI property. As part of previous work a first catalogue of rules to  discover  <i>component types</i> in  Java legacy code is presented in &#91;8&#93;; a set of refactoring actions in order to  convert, when possible, discovered <i>data types</i> into <i>component types</i> is presented in &#91;9&#93;. This  paper highlights three technical contributions besides the general approach.  First, a refined catalogue of rules to detect CI violations according to a  light Java component model. Second, an advanced set of refactoring actions in  order to solve the CI rule violations. Finally, in order to help developers and  legacy code maintainers when refactoring their applications, advanced tool  support for automatically identifying <i>component types</i>. Two software applications  were developed, each one implementing a group of rules; it provides  alternatives to discover <i>components</i> respecting <i>fully or partially</i> the CI property.</p>       <p>The remainder of this paper is organised as follows. First,  the background for this study and the description of the main elements of the  reference model. Then, in Components Qualification the list and explanation of  the rules used in the tool to prevent communication integrity violations in  Java legacy code. Subsequently, in Component Extraction Results, are presented  two rule sets and their applications in several open-source projects. The  Refactoring Process presents a list of refactoring actions. Finally, related  work and conclusions are presented, including a summary of our contribution and  future work.</p>        <p>&nbsp;</p>       <p><font size="3"><b>Background</b></font></p>      <p><b><i>Reference component model</i></b></p>        ]]></body>
<body><![CDATA[<p>There are many proposed models that implement the main CBSE  principles. The authors focus on models with interface and hierarchical  composition, leaving aside the notion of ports and connectors. In &#91;10&#93; several  component definitions are discussed, the present work was based on the  definition given in &#91;11&#93;. This definition implies that: <i>i)</i> a software component is a  unit,  <i>ii)</i> it  specifies an interface (or interfaces) of services it provides, <i>iii)</i> it specifies context  dependencies, and <i>iv)</i> it may be part of a larger composite component. A  composite component is built from other components; a component that is not a  composite is called a primitive component. As in &#91;12, 13&#93;, it is valuable to  consider the notion of <i>subtyping</i> as a formal way to organise types in the applications.</p>       <p>In the refactoring approach a strict component model with a  straightforward implementation in Java is considered. The underlying component  model relies on the assumptions that component types <i>i)</i> are true types, which means  they can be instantiated to generate components, <i>ii)</i> communicate via a strict  message passing policy based on method calls, <i>iii)</i> can be either concrete or  abstract component types, <i>iv)</i> support subtyping, and <i>v)</i> composites are built from a  class structure containing subcomponents.</p>      <p><b><i>The communication integrity property</i></b></p>        <p>In  order to illustrate the CI property, consider Listing 1, an excerpt of an  application exposed in &#91;14&#93;. In the Primitive class the getIt() method allows access  to the otherPart attribute from the outside. Thus, according to the CI  property, the OtherPart class cannot be considered as a component type since it  can be accessed from outside its enclosing parent. Assuming that Primitive is a  component type, the setIt(...) method enables communication between Primitive  instances and the otherPart argument, hence it could also violate the CI  property. The Composite class has a public field, which is an array of Data  instances. Thus, one can access these Data instances from objects holding  Composite instances. According to the CI property, the Data class is considered  as a data type because it can be accessed from outside its enclosing parent,  the Composite. This is also true for the SubData class, which is considered as  a data type because of polymorphism. The data part attribute is enclosed in a  data type thus it can be indirectly accessed from everywhere in the program and  it should also be considered as a data type. In the Composite class the getIt()  method is private. If one restricts its uses to this or super then the  Primitive instance cannot escape from its enclosing parent. Thus, the Primitive  class can be considered as a component type. Similarly, the Composite class is  considered as a component type since there is no possible violation of the CI  property. As this simple example shows, the effects of these rules are complex  and difficult to predict. A tool is required to help designers understand their  applications to software projects.</p>      <p><img src="/img/revistas/rfiua/n68/n68a11i00a.gif"></p>      <p><b><i>Discovering components from Java Code</i></b></p>      <p>Since the present work considers the static analysis of  source code, one cannot extract the exact dynamic information about components,  as only the information of types is examined. The set of types (classes,  interfaces, generics) in the Java source code is called the <i>types of  interest</i>. The  component model recognises data types (<i>DTypes</i>) and component types (<i>CTypes</i>). An instance of a <i>CType</i> is a component, while a <i>value</i> is an instance of a <i>DType</i>. The types of interest are a  disjunction of two sets, <i>DTypes</i>, <i>CTypes</i> and <i>ETypes</i>, the latter are the external types to the project under  study. The  <i>composition structure</i> of a type is defined as the types of its fields or  attributes. The authors consider the maximal structure, that is, all the  defined attributes and the inherited ones are collected, but the super private  fields are not considered since, in Java, they cannot be accessed in the subclasses.  A  <i>visible</i>  member in a type is a public or default member, and conversely private and  protected ones are called non visible. For component types, an additional  constraint is added: non-visible members can only be called on this and super.  A  <i>service</i>  is a visible method. A method <i>signature</i> is defined by a name, typed parameters and resulting type  (as usual the authors use void for procedures). <i>Provided services</i> are all the available  services defined in the type. The <i>required services</i> of a given type are those  methods that are defined in another type and are called in the source code of  the considered type. Communications occur dynamically when a component requires  the service of another component; a communication link denotes such a  communication. There is a <i>communication channel</i> between the two component  types if a block of code of the source component type contains a call to a  method of the target component type. <i>Subtyping  relationships</i> are  computed from the two Java subtyping relationships: extends and implements.</p>      <p>&nbsp;</p>      <p><font size="3"><b>Components qualification</b></font></p>        <p>The principles and rules presented in this article mostly  come from ArchJava &#91;12&#93;, but have been modified and extended. ArchJava is a  language extension to Java that seeks to integrate a software's architecture  with its implementation. As in the ArchJava language, the present work avoids  hidden communications that have been established via data sharing, see  AliasJava &#91;15&#93; for a solution, and ignores the use of the Java reflection API.  A source code analyser has been created, which is able to identify violations  of our CI rules in Java code and then to classify in <i>DType</i> or <i>CType</i> the types of interest that  were found.</p>      ]]></body>
<body><![CDATA[<p><b><i>The communication integrity rules</i></b></p>       <p>The CI rules, described below, prevent subcomponents from  escaping their enclosing parent component and are used to distinguish <i>DType</i> from <i>CType</i> in Java legacy code.</p>       <p><i>Rule. Wrong Signatures:</i></p>       <p>1-a) Types passed as parameters of, or returned by,  services enclosed in <i>CTypes</i> or <i>DType</i>s are <i>DType</i>s; the service signature is qualified as a wrong signature.</p>       <p>1-b) The rule 1-a also applies to any constructor,  regardless of its modifier.</p>       <p>1-c)&nbsp;&nbsp; Non-visible methods can have component types in their signatures,  as long as they are called on this or super.</p>       <p><i>Rule. Composition:</i></p>       <p>2-a) Types occurring in the  structure of  <i>DType</i>s are <i>DType</i>s.</p>       <p>2-b) Types in visible fields of <i>CTypes</i> are <i>DType</i>s since their instances are  publicly available.</p>       <p>2-c) Types in static fields of <i>CTypes</i> are <i>DType</i>s since their instances are  shared by several instances.</p>       ]]></body>
<body><![CDATA[<p>2-d) <i>CTypes</i> can have non-static and non-visible fields of <i>CTypes</i> but they should only be  accessed  via this or  super, to prevent components escaping from their parent components.</p>       <p><em>Rule. Subtyping:</em></p>       <p>3-a) Subtypes of <i>DType</i>s are <i>DType</i>s. This follows from rule 1-a,  since instances of the subtype could be used as parameters or result, using  polymorphism resulting from subtyping.</p>       <p>3-b) Exception: The above rule does not apply for <i>ETypes</i> since it is convenient to  extend existing libraries. The communication integrity property can be lost  when inheriting from external data types. Inherited methods, required  redefinitions or downcastings are possible problems. To provide a better  checking in case of extending external types is still an open problem &#91;16&#93;. One  restricted way is to check for suspicious downcasts (see below).</p>       <p>1-c) <i>DType</i>s can be a subtype of <i>CTypes</i>, but if it inherits from an  inner class, rule 5-a should apply on the subtype.</p>       <p><i>Rule. Arrays and Generics:</i></p>       <p>4-a) Actual types of arrays  and generics in services are <i>DType</i>s.</p>       <p>4-b) Actual types of arrays and generics in visible and  static field declarations are <i>DType</i>s.</p>       <p>4-c) The rule 4-b also applies to non visible fields of <i>DType</i>s (from 2-a).</p>       <p>4-d) Formal parameters of generics in the case of generic  realisation used as a superclass or super interface are <i>DType</i>s (from 4-a).</p>       ]]></body>
<body><![CDATA[<p>4-e) In addition to 4-d: The  subclasses and implementations of the generic realisation (from rule 3-a) are <i>DType</i>s.</p>       <p><i>Rule. Nested Classes:</i></p>       <p>5-a) Parent classes with <i>DType</i> inner classes are <i>DType</i>s. If an inner class is a <i>DType</i>, one of its instances could  escape from its context and could allow access to the enclosing component  reference itself.</p>       <p><i>Rule. Exception Classes:</i></p>       <p>6-a) Exception types are <i>DType</i>s. This is a strict and  pragmatic rule.</p>       <p><i>Rule. Enumeration Classes:</i> An enumeration class (enum)  defines a public class with a set of public constants.</p>       <p>7-a) Enumeration classes are <i>DTypes</i>.</p>       <p>&nbsp; </p>       <p><font size="3"><b>Component extraction results</b> </font></p>          <p>The rules defined in the previous section could at first  seem strict. In order to ''relax'' the component extraction and the  refactoring processes, two different sets are defined, which are concerned to  particular and well-defined interests. By using each set of rules separately  some concerns can be considered and others ignored as proof of the usability of  the presented approach and tool support. This also helps maintenance engineers  perform incremental refactoring.</p>          ]]></body>
<body><![CDATA[<p><b><i>The ISEC Set</i></b></p>         <p>The ISEC set does not check the wrong constructor  signatures. To restrict constructors is a major issue in OO programming; this  set of rules allows component types in constructors, which enables in fact a  violation of the communication integrity property. This set does not consider  the use of the static modifiers for fields and class members in the source code  under study. These static modifiers are considered not so important in OOP and  CBSE applications. Finally, the wrong signatures are checked on services of <i>CTypes</i> and <i>DTypes</i>. This last point was to  simplify both the checking process and the refactoring process. Since the set  is stricter on  <i>DTypes</i>,  it is easier to convert a <i>DType</i> into a <i>CType</i>. This set includes the rules 2-a, 2-d, 3-*, 4-a, 4-c, 4-d,  4-e, 6-a; including 1-a, 1-c for all types, and 1-c, 2-b, 2-c, 4-b, 5-a for  those without the static cases.</p>          <p><b><i>The AJ Set</i></b></p>         <p>The AJ set includes the rules for checking all static  modifiers and the rule for checking wrong constructors. The idea is to include  a more complete set of rules but still checking wrong signatures on services of <i>CType</i>s and <i>DType</i>s. This set includes the rules  2-*, 3-*, 4-*, 5-a, 6-a; including 1-* for all types.</p>          <p>&nbsp;</p>       <p><font size="3"><b>Experiments</b> </font></p>          <p>The two tools implementing each set of rules were run on  several examples of various sizes, coming from different repositories and  illustrating different application domains. The examples can be found on  SourceForge &#91;17&#93; (e.g. Metrics), and some others on the Jakarta Project &#91;18&#93;  (e.g. REGEXP). Some specific applications (e.g. MineSweeper, Javacalc) were  also collected, and some others (e.g. JavaCompExt, NIM game, and  simplification) were designed by the authors of this work. The tools were run  on over 20 examples, ranging from simple examples of 100 Lines Of Code (LOC) to  real size applications of 230 KLOC (thousands of lines of code).</p>         <p>The percentage of component types relative to the total  number of types (<i>%R = #CTypes/ (#CTypes+#DTypes)</i>) gives a partial evaluation of  the CBSE quality relevant in the context of this work. As a preliminary remark,  types respecting the sets of CI rules were found in every application tested,  even in traditional OOP applications. The main entry types of the applications,  the main class, test classes or top layer classes, are often considered as  component types. The main reason for this is that any other types in the  application do not use them, and if they are designed in a good object-oriented  manner they are not responsible for violations of the CI rules.</p>         <p>For some applications, which were designed with CBSE in  mind, the results are better in terms of number of discovered <i>CTypes</i>. For instance, the  CoCoMe-OASIS &#91;19&#93; has a ratio of 57%, It was designed with an explicit  architecture and implemented with a component-based approach. However, for some  others, which claim to be CBSE applications, the results are poor in terms of  number of discovered <i>CTypes</i> (for instance, COCOME-RCOS with a ratio of 31%). There are  various reasons for this bad score. The first is that the component models  which are often used as a reference to develop the applications are not  compliant with our component model, for example in relation to the concept of  hierarchical components and the implementation of composites. Another reason is  that designers and programmers violate the CI property and/or do not respect  the initial architecture.</p>         <p>Although our component model is not compatible with all the  existing component model implementations, the CI property, which is the base of  our approach, is compliant with some other implementations like event-oriented  programming. The use of message-oriented middleware, like Java Message Service,  is compatible with our approach. In message oriented middleware the information  is communicated via events, which are instances of classes encapsulating  information. Nevertheless, the event types are analysed and qualified correctly  according to the rules. One example was the CoCoME-impl project, which uses  JMS.</p>        ]]></body>
<body><![CDATA[<p>&nbsp;</p>      <p><font size="3"><b>The refactoring process</b> </font></p>  	       <p>Several small and middle-sized applications were processed,  and target plain Java source code, which can be tested to verify their  behaviour: NimI, NimF, Javacalc, Simplification, MineSweeper (a detailed  refactoring conducted with the ISEC rule set is described in &#91;8&#93;), Regexp,  Metrics, JavaCompExt. This set of projects represents a total of almost 20  KLOC.</p>         <p>The main objective was to remove violations of the CI rules  on some of the types of interest, transforming them from <i>DTypes</i> into <i>CTypes</i>. These applications are  generally provided without explicit component architecture, and the refactoring  process generally does not target a specific architecture.</p>      <p><b><i>Refactoring actions</i></b></p> 	     <p>During the refactoring of the applications several  recurrent actions to fix CI rule violations were processed. The actions  described below are intended to restructure the applications under study by  removing violations of the CI rules while preserving the original behaviour.</p>         <p><i>Wrong constructor  signature</i></p>       <p>In this case, the type (T) occurs as a parameter type of  the constructor definition and this constructor is called in its type  definition or in another type. The general method for removing wrong  constructor signatures is to erase T from the set of parameter types while  creating the T instance inside the constructor of the enclosing type. Two  situations are possible: <i>i)</i> the constructor can provide default values for the T  instance,  <i>ii)</i> the T  instance can be configured with values passed to the constructor. In either  case, this impacts on the constructor calls, which must be changed accordingly.</p>       <p><i>Wrong  sign</i></p>       <p>A general solution is to remove the need for the method  with the wrong signature by substituting its source code. Obviously this is far  from a good general solution, but it can be successful if the method is only  called once. If E = T and the method is not used outside of T then it can  become non visible (making this method private or protected). If the method is  used elsewhere or defined in a type other than T then there are two sub cases  depending if whether there is a wrong argument or a wrong resulting type.</p>      ]]></body>
<body><![CDATA[<p><i>Wrong argument  signature</i></p>       <p>The action is to replace the wrong method by a new method  without the wrong argument type, but with some new parameters available from  the T instance. The calls of this wrong method signature must be changed and an  attribute of type T must be defined in the context of the call in order to  replace the argument.</p>       <p><i>Wrong result signature</i></p>       <p>In this case one solution is to make the method non  visible, to define a local attribute of type T and to add a public void method  which sets the attribute with the method call. Complications arise since the T  value is usually accessed to provide information. Thus the full solution needs  to delegate the required services to new provided services defined in the  enclosing type.</p>       <p><i>Data type encapsulation</i> </p>       <p>In this case either the enclosing type becomes a <i>CType</i> or it is removed.</p>       <p><i>Visible field</i></p>          <p>In this case a <i>CType</i> contains a visible field of a  class, interface, array or generic type. Making the field non visible is the  recommended solution to this violation, often many public or default package  modifiers are overused. However, it can lead to other modifications if this  part is accessed outside of its enclosing type. In this case, defining  accessors adds new wrong methods and the wrong signature case above applies.</p>       <p><i>Static field</i></p>       <p>Removing the static nature and making the field non-visible  or removing this part from the enclosing type will solve this violation. However,  if the static field is intended to be shared, its type should remain as a <i>DType</i> and no refactoring actions  must be processed.</p>       ]]></body>
<body><![CDATA[<p><i>Data type subtyping</i></p>       <p>Either the super type becomes a <i>CType</i> or the subtyping link must be  removed. This action could apply to classes, interfaces or generics.</p>       <p><i>Array and generics</i></p>       <p>The general principle is to avoid <i>CType</i>s in arrays or generics  occurring in visible methods, visible or static parts or as super type. One  possibility is to change the scope modifier or the supertype link. An  alternative approach is to define a container, using a class in a compliant  CBSE way. Nevertheless, it may be difficult to respect the CI rules; this will  be discussed in future work.</p>       <p><i>Inner data type</i></p>       <p>If the inner type is a <i>DType</i> it must be refactored as a <i>CType</i> or the inner structure must  be changed. For instance the solution may be to extract the inner class from  the enclosing context, or to change to a static nested class.</p>       <p><i>Exception</i></p>       <p>To change an exception into a <i>CType</i> is to remove its exception  nature, generally acquired by inheritance from an exception class.</p>       <p><i>Enumeration</i></p>       <p>As above there is no solution without removing the enum  qualifier.</p>        ]]></body>
<body><![CDATA[<p><b><i>Refactoring with the two rule sets</i></b></p> 	      <p>The component type ratio (%R) is considered as a simple  measure of the componentisation of an application. In <a href="#Tabla1">table 1</a>, for each row,  the first line of data represents the original application, its size given by  its LOC, and the componentisation ratio (%R) obtained after processing it with  the rule set referred to in the column header. The two subsequent lines  represent two different refactoring alternatives; the first is guided by the  ISEC rule set and the second by the AJ rule set. An initial exception is the  Simplification application; due to the use of singletons and of a purely functional  style it was not possible to propose a CBSE refactoring without completely  changing the programming paradigm or introducing bad programming practises.</p>        <p align="center"><a name="Tabla1"></a><img src="/img/revistas/rfiua/n68/n68a11t01.gif" ></p>         <p>&nbsp;</p>      <p><font size="3"><b>Related work</b> </font></p>        <p>A survey about architectural degeneration is presented in  &#91;20&#93;. One approach is <i>architectural recognition</i> &#91;21&#93;, which analyses Java  source code and generates a model of information containing components and  connectors. Mendon?a and Kramer analysed the limits of some recovery tools and  identified the requirements for effective architecture recovery of legacy  systems. This is a complementary but more coarse-grained approach than  detecting potential communication integrity violations. The above survey also  discusses refactoring support in development environments, like in Eclipse &#91;22&#93;.  The refactoring actions suggested in this paper are more advanced than those  provided by such an environment. In &#91;23&#93;, the authors combine architecture  recovery and change dependency analysis, but the components they consider are  files, not true programmed components.</p>        <p>In the context of refactoring tool support is needed to  evaluate the quality of applications and to guide the restructuring process.  There is a lack of tools for assessing the quality of component-based source  code. Metrics based tools, architecture recovery tools, Java analysers and  architecture compliance tools are some immediate candidates, however, none of  them are devoted to the purpose addressed in this work (see &#91;8&#93; for a deeper  discussion).</p>        <p>ArchJava &#91;3, 8&#93; is closely related to the present work. The  latter introduces new rules for checking generics, enumerations, and  exceptions. The main difference regarding the refactoring process is that the  present work defines an inference system mining for data types in pure Java  code and propagating this information along inheritance and composition, and  coping with most ofthe Java features. The approach addressed in this paper  makes explicit, more rigorous and automated, the distinction between ordinary  classes (for data structure) and component types.</p>        <p>In &#91;12, 18&#93;, ArchJava is claimed to be incremental, which  is found true within certain and well defined limits. The incremental  refactoring process in ArchJava only considers <i>i)</i> to choose a class, <i>ii)</i> transform it into a component  type and then  <i>iii)</i>  use the compiler and check the violations of the communication integrity rules.  This is a coarse-grained restructuring, and communication integrity enforcement  can fail for several reasons as discussed with the rule sets exposed in this  work. Discarding the generic, exception and enumeration rules, more  fine-grained situations were also identified where CI violations can occur and  the refactoring actions to solve them, than the ArchJava approach. For  instance, the concept of wrong signature is crucial in the analysis and the  refactoring process of a Java application.</p>        <p><a href="#Tabla2">Table 2</a> presents a comparative summary between the features  of our approach and those of the approaches we have mentioned.</p>            ]]></body>
<body><![CDATA[<p align="center"><a name="Tabla2"></a><img src="/img/revistas/rfiua/n68/n68a11t02.gif" ></p>            <p>&nbsp;</p>      <p><font size="3"><b>Conclusion</b> </font></p>        <p>The Communication Integrity (CI) property is an approach to  maintain the software architecture's consistency of CBSD applications. However,  the CI property has not been significantly used in refactoring processes  besides the formal analysis and practical experiences from ArchJava. The present work proposes in this context a catalogue of rules to ensure the CI  property in Java legacy code according to a light, Java component model.  Several differences with ArchJava can be noted. The approach presented in this  paper considers strict static checking, fine-grained detection of components  and small refactoring steps. A fine&shy;grained and incremental approach helps  ensure the refactoring steps are reliable. New rules for subtyping, generics,  exception and enumerations are also considered. Groupings of our rules were tested  in two rule sets to compare their applicability in identifying and  distinguishing data types from component types.</p>        <p>Experiments were conducted on more than 40 projects, which  showed consistency in the qualification of components. To further complete the  present work, a set of refactoring actions is provided with the intent of  removing the CI rules violations in Java legacy code and, thus, to increment  the componentisation ratio. In this regard, our experiments with our two sets  of rules throw useful information, particular to each set of rules, in order to  guide the selection of the refactoring actions to apply. In an in- depth  analysis of several projects, some limits of the approach were identified. For  instance, the fact that pure functional programming is not compliant with it.</p>        <p>The respect of the communication property can bring some  value in evaluating and refactoring Java applications. However, this is not a  simple task and tools with a good set of rules are required. The present study  shows that there are still some improvements to be done with component types in  constructors. Simplifying some rules is also possible, as demonstrated with the  prohibition of component types in data type signatures. Future work in this  setting will focus on the tool support built to provide assistance for the  qualification of component types, and the theoretical side of this work and  will consider questions such as: what degree of safety these rules ensure.</p>          <p>&nbsp;</p>      <p><font size="3"><b>References</b> </font></p>       <!-- ref --><p>1. N. Medvidovic, R. Taylor.  ''A Classification and Comparison Framework for Softwar Architecture  Description Languages''. <i>IEEE Transactions on Software Engineering</i>. Vol. 26. 2000. pp. 70-93.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000131&pid=S0120-6230201300030001100001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        ]]></body>
<body><![CDATA[<!-- ref --><p>2. C. Luckham,  J. Kenney, L. Augustin, J. Vera, D. Bryan, W. Mann. ''Specification and  Analysis of System Architecture Using Rapide''. <i>IEEE Transactions  on Software Engineering</i>. Vol. 21. 1995.pp. 336-355.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000133&pid=S0120-6230201300030001100002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>3. J. Aldrich, C. Chambers, D.  Notkin.  <i>ArchJava: connecting software architecture to implementation</i>. Proceedings of the 24<sup>th</sup>  International Conference on Software Engineering (ICSE'02). Orlando, FL, USA. 2002.  pp. 187-197.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000135&pid=S0120-6230201300030001100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>4. R. Terra,  M. Valente, K. Czarnecki, R. Bigonha. <i>Recommending  Refactorings to Reverse Software Architecture Erosion</i>. 16<sup>th</sup> European  Conference on Software Maintenance and Reengineering (CSMR). Szeged, Hungary.  2012. pp. 335-340.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000137&pid=S0120-6230201300030001100004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>5. D. Perry, A. Wolf.  ''Foundations for the Study of Software Architecture''. <i>Software  Engineering Notes</i>. Vol.  17. 1992. pp. 40-52.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000139&pid=S0120-6230201300030001100005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>6. J. van Gurp, J.  Bosch.''Design Erosion: Problems &amp; Causes''. <i>Journal of  Systems and Software</i>. Vol. 61. 2002. pp. 105-119.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000141&pid=S0120-6230201300030001100006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        ]]></body>
<body><![CDATA[<!-- ref --><p>7. M. Lindvall, D. Muthig.  ''Bridging the Software Architecture Gap''. <i>IEEE Compute</i>. Vol. 41. 2008. pp. 98-10.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000143&pid=S0120-6230201300030001100007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>8. H. Arboleda, J. Royer. <i>Component types  qualification in Java legacy code driven by communication integrity rules</i>. Proceedings of the 4<sup>th</sup>  India Software Engineering Conference (ISEC'11). New York, NY, USA. 2011. pp.  155-164.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000145&pid=S0120-6230201300030001100008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>9. H. Arboleda, J. Royer. <i>Java Component  Refactoring Based on Communication Integrity Violations</i>. 9<sup>th</sup> Belgian-Netherlands  Software Evolution Seminar. Lille, France. 2010. pp. 115-129.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000147&pid=S0120-6230201300030001100009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>10. I. Crnkovic, S. Sentilles,  A. Vulgarakis, M. Chaudron. ''A Classification Framework for Software  Component Models.'' <i>IEEE Transactions on Software Engineering</i>. Vol. 37. 2011. pp. 593-615.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000149&pid=S0120-6230201300030001100010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>11. J. Bosch,  C. Szyperski, W. Weck. <i>Component- Oriented Programming</i>. European Conference on  Object-Oriented Programming (ECOOP) Workshops 2003. Darmstadt, Germany. 2003.  pp. 34-49.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000151&pid=S0120-6230201300030001100011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        ]]></body>
<body><![CDATA[<!-- ref --><p>12. J. Aldrich, C. Chambers,  D. Notkin.  <i>Architectural Reasoning in ArchJava</i>. Proceedings Eureopean Conference on Onject-Oriented  Programming (ECOOP) 2002. M&aacute;laga, Spain. 2002. Vol. 2374. pp. 334-367.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000153&pid=S0120-6230201300030001100012&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>13. M. da  Silva, P. de Castro, C. Rubira. <i>A java component  Model for Envolving Software Systems</i>. 18<sup>th</sup> IEEE  International conference on Automated Software Engineering (ASE). Montreal,  Canada. 2003. pp. 327-330.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000155&pid=S0120-6230201300030001100013&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>14. J. Gosling, B. Joy, G.  Steele, G. Bracha. <i>The Java Language Specification</i>. 3<sup>rd</sup>  ed. Ed. Addison-Wesley. Santa Clara, California, USA. 2005. pp. 175-248.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000157&pid=S0120-6230201300030001100014&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --> </p>        <!-- ref --><p>15. J. Aldrich, C. Chambers. <i>Ownership  Domains: Separating Aliasing Policy from Mechanism</i>. Object- Oriented Programming  European Conference (ECOOP'04). 2004. Vol. 3086. pp. 1-25.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000159&pid=S0120-6230201300030001100015&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>16. M. Abi, J. Aldrich, W.  Coelho.''A case study in re-engineering to enforce architectural control  flow and data sharing.'' <i>Journal of Systems and Software</i>. Vol. 80. 2007.pp. 240-264.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000161&pid=S0120-6230201300030001100016&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        ]]></body>
<body><![CDATA[<!-- ref --><p>17. Slashdot Media.  <i>SourceForge</i>. Available: <a href="http://sourceforge.net/"target="_blank">http://sourceforge.net/</a>. Accessed in october 18,  2012.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000163&pid=S0120-6230201300030001100017&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>18. The Apache Software  Foundation. <i>The Apache Jakarta Project</i>. Available: <a href="http://jakarta.apache.org/"target="_blank">http://jakarta.apache.org/</a>. Accessed in october 18,  2012.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000165&pid=S0120-6230201300030001100018&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>19. A. Cansado, D. Caromel, L.  Henrio, E. Madelaine, M. Rivera, E. Salageanu. ''A Specification Language  for Distributed Components Implemented in {GCM}/ ProActive''. <i>CoCoME</i>. Vol. 5153. 2007. pp. 418-448.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000167&pid=S0120-6230201300030001100019&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>20. L. Hochstein, M. Lindvall.  ''Combating architectural degeneration: a survey''. <i>Information &amp;  Software Technology</i>. Vol. 47. 2005. pp. 643-656.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000169&pid=S0120-6230201300030001100020&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>21. N. Mendon&ccedil;a,  J. Kramer. ''Requirements for an effective architecture recovery  framework''.  <i>Joint proceedings of the second international software architecture workshop  (ISAW-2) and international workshop on multiple perspectives in software  development (Viewpoints '96) on SIGSOFT '96 workshops</i>. ACM. New York, NY,  USA. 1996. pp. 101-105.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000171&pid=S0120-6230201300030001100021&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        ]]></body>
<body><![CDATA[<!-- ref --><p>22. D. Gallardo. <i>Refactoring for  everyone</i>.  IBM developerWorks Technical library. 2003. Available: <a href="http://www.ibm.com/developerworks/library/os-ecref/"target="_blank">http://www.ibm.com/developerworks/library/os-ecref/</a>. Accessed in october 18,  2012.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000173&pid=S0120-6230201300030001100022&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>        <!-- ref --><p>23. C. Stringfellow, C. Amory,  D. Potnuri, A. Andrews, M. Georg. ''Comparison of software architecture  reverse engineering methods''. Information &amp;  <i>Software Technology</i>. Vol. 48. 2006. pp. 484-487.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000175&pid=S0120-6230201300030001100023&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>          <p>&nbsp;</p>     <p>&nbsp;</p>     <p>&nbsp;</p>     <p>&nbsp;</p>    </font>     ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Medvidovic]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
<name>
<surname><![CDATA[Taylor]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A Classification and Comparison Framework for Softwar Architecture Description Languages]]></article-title>
<source><![CDATA[IEEE Transactions on Software Engineering]]></source>
<year>2000</year>
<volume>26</volume>
<page-range>70-93</page-range></nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Luckham]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Kenney]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Augustin]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Vera]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Bryan]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Mann]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Specification and Analysis of System Architecture Using Rapide]]></article-title>
<source><![CDATA[IEEE Transactions on Software Engineering]]></source>
<year>1995</year>
<volume>21</volume>
<page-range>336-355</page-range></nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Aldrich]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Chambers]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Notkin]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<source><![CDATA[ArchJava: connecting software architecture to implementation]]></source>
<year></year>
<conf-name><![CDATA[24th International Conference on Software Engineering (ICSE'02)]]></conf-name>
<conf-date>2002</conf-date>
<conf-loc>Orlando FL</conf-loc>
<page-range>187-197</page-range></nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Terra]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Valente]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Czarnecki]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Bigonha]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<source><![CDATA[Recommending Refactorings to Reverse Software Architecture Erosion]]></source>
<year></year>
<conf-name><![CDATA[16th European Conference on Software Maintenance and Reengineering (CSMR)]]></conf-name>
<conf-date>2012</conf-date>
<conf-loc>Szeged </conf-loc>
<page-range>335-340</page-range></nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Perry]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Wolf]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Foundations for the Study of Software Architecture]]></article-title>
<source><![CDATA[Software Engineering Notes]]></source>
<year>1992</year>
<volume>17</volume>
<page-range>40-52</page-range></nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[van Gurp]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Bosch]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Design Erosion: Problems & Causes]]></article-title>
<source><![CDATA[Journal of Systems and Software]]></source>
<year>2002</year>
<volume>61</volume>
<page-range>105-119</page-range></nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Lindvall]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Muthig]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Bridging the Software Architecture Gap]]></article-title>
<source><![CDATA[IEEE Compute]]></source>
<year>2008</year>
<volume>41</volume>
<page-range>98-10</page-range></nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Arboleda]]></surname>
<given-names><![CDATA[H]]></given-names>
</name>
<name>
<surname><![CDATA[Royer]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Component types qualification in Java legacy code driven by communication integrity rules]]></source>
<year></year>
<conf-name><![CDATA[4th India Software Engineering Conference (ISEC'11)]]></conf-name>
<conf-date>2011</conf-date>
<conf-loc>New York NY</conf-loc>
<page-range>155-164</page-range></nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Arboleda]]></surname>
<given-names><![CDATA[H]]></given-names>
</name>
<name>
<surname><![CDATA[Royer]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Java Component Refactoring Based on Communication Integrity Violations]]></source>
<year></year>
<conf-name><![CDATA[9th Belgian-Netherlands Software Evolution Seminar]]></conf-name>
<conf-date>2010</conf-date>
<conf-loc>Lille </conf-loc>
<page-range>115-129</page-range></nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Crnkovic]]></surname>
<given-names><![CDATA[I]]></given-names>
</name>
<name>
<surname><![CDATA[Sentilles]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Vulgarakis]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Chaudron]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A Classification Framework for Software Component Models]]></article-title>
<source><![CDATA[IEEE Transactions on Software Engineering]]></source>
<year>2011</year>
<volume>37</volume>
<page-range>593-615</page-range></nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Bosch]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Szyperski]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Weck]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
</person-group>
<source><![CDATA[Component- Oriented Programming]]></source>
<year></year>
<conf-name><![CDATA[ European Conference on Object-Oriented Programming (ECOOP) Workshops 2003]]></conf-name>
<conf-date>2003</conf-date>
<conf-loc>Darmstadt </conf-loc>
<page-range>34-49</page-range></nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Aldrich]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Chambers]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Notkin]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<source><![CDATA[Architectural Reasoning in ArchJava]]></source>
<year></year>
<volume>2374</volume>
<conf-name><![CDATA[ Eureopean Conference on Onject-Oriented Programming (ECOOP) 2002]]></conf-name>
<conf-date>2002</conf-date>
<conf-loc>Málaga </conf-loc>
<page-range>334-367</page-range></nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[da Silva]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[de Castro]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Rubira]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
</person-group>
<source><![CDATA[A java component Model for Envolving Software Systems]]></source>
<year></year>
<conf-name><![CDATA[18th IEEE International conference on Automated Software Engineering (ASE)]]></conf-name>
<conf-date>2003</conf-date>
<conf-loc>Montreal </conf-loc>
<page-range>327-330</page-range></nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gosling]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Joy]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
<name>
<surname><![CDATA[Steele]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[Bracha]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
</person-group>
<source><![CDATA[The Java Language Specification]]></source>
<year>2005</year>
<edition>3rd</edition>
<page-range>175-248</page-range><publisher-loc><![CDATA[Santa Clara^eCalifornia California]]></publisher-loc>
<publisher-name><![CDATA[. Addison-Wesley]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Aldrich]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Chambers]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
</person-group>
<source><![CDATA[Ownership Domains: Separating Aliasing Policy from Mechanism]]></source>
<year></year>
<volume>3086</volume>
<conf-name><![CDATA[ Object- Oriented Programming European Conference (ECOOP'04)]]></conf-name>
<conf-date>2004</conf-date>
<conf-loc> </conf-loc>
<page-range>1-25</page-range></nlm-citation>
</ref>
<ref id="B16">
<label>16</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Abi]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Aldrich]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Coelho]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A case study in re-engineering to enforce architectural control flow and data sharing]]></article-title>
<source><![CDATA[Journal of Systems and Software]]></source>
<year>2007</year>
<volume>80</volume>
<page-range>240-264</page-range></nlm-citation>
</ref>
<ref id="B17">
<label>17</label><nlm-citation citation-type="">
<collab>Slashdot Media</collab>
<source><![CDATA[SourceForge]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B18">
<label>18</label><nlm-citation citation-type="">
<collab>The Apache Software Foundation</collab>
<source><![CDATA[The Apache Jakarta Project]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B19">
<label>19</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Cansado]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Caromel]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Henrio]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Madelaine]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Rivera]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Salageanu]]></surname>
<given-names><![CDATA[E.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A Specification Language for Distributed Components Implemented in {GCM}/ ProActive]]></article-title>
<source><![CDATA[CoCoME]]></source>
<year>2007</year>
<volume>5153</volume>
<page-range>418-448</page-range></nlm-citation>
</ref>
<ref id="B20">
<label>20</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Hochstein]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Lindvall]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Combating architectural degeneration: a survey]]></article-title>
<source><![CDATA[Information & Software Technology]]></source>
<year>2005</year>
<volume>47</volume>
<page-range>643-656</page-range></nlm-citation>
</ref>
<ref id="B21">
<label>21</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Mendonça]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
<name>
<surname><![CDATA[Kramer]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Requirements for an effective architecture recovery framework]]></source>
<year></year>
<conf-name><![CDATA[ Joint proceedings of the second international software architecture workshop (ISAW-2) and international workshop on multiple perspectives in software development (Viewpoints '96) on SIGSOFT '96 workshops. ACM]]></conf-name>
<conf-date>1996</conf-date>
<conf-loc>New York NY</conf-loc>
<page-range>101-105</page-range></nlm-citation>
</ref>
<ref id="B22">
<label>22</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gallardo]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<source><![CDATA[Refactoring for everyone]]></source>
<year>2003</year>
<publisher-name><![CDATA[IBM developerWorks Technical library]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B23">
<label>23</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Stringfellow]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Amory]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Potnuri]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Andrews]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Georg]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Comparison of software architecture reverse engineering methods]]></article-title>
<source><![CDATA[Information & Software Technology]]></source>
<year>2006</year>
<volume>48</volume>
<page-range>484-487</page-range></nlm-citation>
</ref>
</ref-list>
</back>
</article>
