<?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>0717-5000</journal-id>
<journal-title><![CDATA[CLEI Electronic Journal]]></journal-title>
<abbrev-journal-title><![CDATA[CLEIej]]></abbrev-journal-title>
<issn>0717-5000</issn>
<publisher>
<publisher-name><![CDATA[Centro Latinoamericano de Estudios en Informática]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0717-50002011000300002</article-id>
<title-group>
<article-title xml:lang="en"><![CDATA[The EasySOC Project: A Rich Catalog of Best Practices for Developing Web Service Applications]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Rodriguez]]></surname>
<given-names><![CDATA[Juan Manuel]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Crasso]]></surname>
<given-names><![CDATA[Marco]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Mateos]]></surname>
<given-names><![CDATA[Cristian]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Zunino]]></surname>
<given-names><![CDATA[Alejandro]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Campo]]></surname>
<given-names><![CDATA[Marcelo]]></given-names>
</name>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,UNICEN University ISISTAN Research Institute ]]></institution>
<addr-line><![CDATA[Tandil Buenos Aires]]></addr-line>
<country>Argentina</country>
</aff>
<aff id="A02">
<institution><![CDATA[,Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)  ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>12</month>
<year>2011</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>12</month>
<year>2011</year>
</pub-date>
<volume>14</volume>
<numero>3</numero>
<fpage>2</fpage>
<lpage>2</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.edu.uy/scielo.php?script=sci_arttext&amp;pid=S0717-50002011000300002&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.edu.uy/scielo.php?script=sci_abstract&amp;pid=S0717-50002011000300002&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.edu.uy/scielo.php?script=sci_pdf&amp;pid=S0717-50002011000300002&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="en"><p><![CDATA[Abstract The Service-Oriented Computing (SOC) paradigm has gained a lot of attention in the software industry since SOC represents a novel way of architecting distributed applications. SOC is mostly materialized via Web Services, which allow developers to expose their application as building blocks for other applications by defining a clear and public interface. Although conceptually and technologically mature, SOC still lacks adequate development support from a methodological point of view. We present the EasySOC project: a catalog of guidelines to build service-oriented applications and services. This catalog synthesizes best SOC development practices that arise as a result of several years of research in fundamental SOC-related topics, namely WSDL-based technical specification, Web Service discovery and Web Service outsourcing. In addition, we describe a plug-in for the Eclipse IDE that has been implemented to simplify the utilization of the guidelines. We believe that the practical nature of the guidelines, the empirical evidence that supports them, and the availability of IDE-integrated tools that enforces them will help software practitioners to rapidly exploit our ideas for building real SOC applications.]]></p></abstract>
<abstract abstract-type="short" xml:lang="es"><p><![CDATA[El paradigma de Computación Orientada a Servicios (COS) ha ganado mucha atención en la industria del software dado que COS representa una manera novedosa para diseñar aplicaciones distribuidas. COS es mayoritariamente materializado vía Servicios Web, lo cual permite a los desarrolladores exponer sus aplicaciones como piezas básicas para otras aplicaciones, por medio de la definición de una interfaz clara y pública. Aunque COS es conceptualmente y tecnológicamente maduro, todavía carece del soporte adecuado desde un punto de vista metodológico. Presentamos el proyecto EasySOC: un catálogo de guías para construir servicios y aplicaciones orientadas a servicios. Este catálogo sintetiza mejores prácticas que surgen como el resultado de varios años de investigación en tópicos fundamentales de COS, como son las descripciones de servicios basadas en WSDL, el descubrimiento de servicios Web, y la tercerización de servicios Web. Adicionalmente, describimos un plug-in para el ambiente de desarrollo (IDE) Eclipse que ha sido implementado para simplificar la utilización de las guías. Creemos que la naturaleza pragmática de las guías, la evidencia empírica que las respalda, y la disponibilidad de una herramienta integrada a un IDE, ayudará a que los profesionales de software rápidamente aprovechen nuestras ideas para construir aplicaciones COS reales.]]></p></abstract>
<kwd-group>
<kwd lng="en"><![CDATA[service-oriented computing]]></kwd>
<kwd lng="en"><![CDATA[service-oriented development guidelines]]></kwd>
<kwd lng="en"><![CDATA[web services]]></kwd>
<kwd lng="en"><![CDATA[WSDL anti-patterns]]></kwd>
<kwd lng="en"><![CDATA[web service discovery]]></kwd>
<kwd lng="en"><![CDATA[web service consumption]]></kwd>
<kwd lng="es"><![CDATA[computación orientada a servicios]]></kwd>
<kwd lng="es"><![CDATA[guías para el desarrollo orientado a servicios]]></kwd>
<kwd lng="es"><![CDATA[servicios web]]></kwd>
<kwd lng="es"><![CDATA[antipatrones WSDL]]></kwd>
<kwd lng="es"><![CDATA[descubrimiento de servicios web]]></kwd>
<kwd lng="es"><![CDATA[consumo de servicios web]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <div class="maketitle">                                                                                                                                                                                                                                                                                                                                                                                                                          <b><font face="Verdana" size="4">The EasySOC Project: A Rich Catalog of Best Practices for Developing Web Service Applications</font></b><font face="Verdana" size="2"><span class="thank-mark"><a href="#tk-1"><img src="/img/revistas/cleiej/v14n3/3a021x.png" alt="* " class="math"></a></span></font>    <div class="author">   <font face="Verdana" size="2"><span class="ptmb8t-x-x-120">Juan Manuel Rodriguez, Marco Crasso, Cristian Mateos, Alejandro Zunino, Marcelo Campo</span>     <br>                        <span class="ptmr8t-x-x-120">ISISTAN Research Institute - UNICEN University,</span>     <br>                                 <span class="ptmr8t-x-x-120">Tandil, Buenos Aires, Argentina</span>     <br>              <span class="ptmr8t-x-x-120">Consejo Nacional de Investigaciones Cient&iacute;ficas y T&eacute;cnicas (CONICET)</span>     <br>                    <span class="ptmri8t-x-x-120">e-mails [jmrodri|mcrasso|cmateos|azunino]@conicet.gov.ar</span>     <br>                                   <span class="ptmri8t-x-x-120">mcampo@exa.unicen.edu.ar</span></font></div> <font face="Verdana" size="2">     <br>  </font>      <div class="date"></div>          <div class="thanks"><font face="Verdana" size="2">    ]]></body>
<body><![CDATA[<br> <a id="tk-1"></a><span class="thank-mark"><img src="/img/revistas/cleiej/v14n3/3a023x.png" alt="* " class="math"></span>This paper is an extended version of the paper presented at the XXIX International Conference of the Chilean Computer Science Society - SCCC/JCC&rsquo;10</font></div> </div>     <div class="abstract">     <div class="center"> <font face="Verdana" size="2">     <br> </font>     <p> </p>     <div class="minipage">     <div class="center"> <font face="Verdana" size="2">     <br> </font>     <p> </p>     <p><font face="Verdana" size="2"><span class="ptmb8t-">Abstract</span></font></p> </div>  <font face="Verdana" size="2">      ]]></body>
<body><![CDATA[<br> </font>     <p><font face="Verdana" size="2">The Service-Oriented Computing (SOC) paradigm has gained a lot of attention in the software industry since SOC represents a novel way of architecting distributed applications. SOC is mostly materialized via Web Services, which allow developers to expose their application as building blocks for other applications by defining a clear and public interface. Although conceptually and technologically mature, SOC still lacks adequate development support from a methodological point of view. We present the EasySOC project: a catalog of guidelines to build service-oriented applications and services. This catalog synthesizes best SOC development practices that arise as a result of several years of research in fundamental SOC-related topics, namely WSDL-based technical specification, Web Service discovery and Web Service outsourcing. In addition, we describe a plug-in for the Eclipse IDE that has been implemented to simplify the utilization of the guidelines. We believe that the practical nature of the guidelines, the empirical evidence that supports them, and the availability of IDE-integrated tools that enforces them will help software practitioners to rapidly exploit our ideas for building real SOC applications. </font> </p> </div> </div>  </div>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2"><span class="ptmb8t-">Keywords: </span>service-oriented computing, service-oriented development guidelines, web services, WSDL anti-patterns, web service discovery, web service consumption&nbsp;</font></p>     <p> <font face="Verdana" size="2">El paradigma de Computaci&oacute;n Orientada a Servicios (COS) ha ganado mucha atenci&oacute;n en la industria del software dado que COS representa una manera novedosa para dise&ntilde;ar aplicaciones distribuidas. COS es mayoritariamente materializado v&iacute;a Servicios Web, lo cual permite a los desarrolladores exponer sus aplicaciones como piezas b&aacute;sicas para otras aplicaciones, por medio de la definici&oacute;n de una interfaz clara y p&uacute;blica. Aunque COS es conceptualmente y tecnol&oacute;gicamente maduro, todav&iacute;a carece del soporte adecuado desde un punto de vista metodol&oacute;gico. Presentamos el proyecto EasySOC: un cat&aacute;logo de gu&iacute;as para construir servicios y aplicaciones orientadas a servicios. Este cat&aacute;logo sintetiza mejores pr&aacute;cticas que surgen como el resultado de varios a&ntilde;os de investigaci&oacute;n en t&oacute;picos fundamentales de COS, como son las descripciones de servicios basadas en WSDL, el descubrimiento de servicios Web, y la tercerizaci&oacute;n de servicios Web. Adicionalmente, describimos un plug-in para el ambiente de desarrollo (IDE) Eclipse que ha sido implementado para simplificar la utilizaci&oacute;n de las gu&iacute;as. Creemos que la naturaleza pragm&aacute;tica de las gu&iacute;as, la evidencia emp&iacute;rica que las respalda, y la disponibilidad de una herramienta integrada a un IDE, ayudar&aacute; a que los profesionales de software r&aacute;pidamente aprovechen nuestras ideas para construir aplicaciones COS reales.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Palabras clave: computaci&oacute;n orientada a servicios, gu&iacute;as para el desarrollo orientado a servicios, servicios web, antipatrones WSDL, descubrimiento de servicios web, consumo de servicios web&nbsp;</font></p>     <p>   <font face="Verdana" size="2">Received: 2011-03-30 Revised: 2011-10-06 Accepted: 2011-10-06 </font>    </p>     <p><font face="Verdana" size="2"><span class="titlemark">1    </span> <a id="x1-10001"></a>Introduction</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">Service-Oriented Computing (SOC)&nbsp;<a href="#c1">[1</a>]<a name="c1."></a> is a relatively new computing paradigm that has radically changed the way applications are architected, designed and implemented. SOC has mainly evolved from component-based software engineering by introducing a new kind of building block called <span class="ptmri8t-">service</span>, which represents functionality that is described, discovered and remotely consumed by using standard protocols. Service-oriented software systems started as a more flexible and cost-effective alternative for developing Web-based applications, but their usage eventually spread to gave birth to a wave of contemporary infrastructures and notions including Service-Oriented Grids and Software-As-A-Service&nbsp;[<a href="#c2">2</a>]<a name="c2."></a>.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">The common technological choice for materializing the SOC paradigm is Web Services, i.e. programs with well-defined interfaces that can be published, discovered and consumed by means of ubiquitous Web protocols&nbsp;[<a href="#c1">1</a>] (e.g. Simple Object Access Protocol (SOAP)&nbsp;[<a href="#c3">3</a>])<a name="c3."></a>. The canonical model underpinning Web Services encompasses three basic elements: service providers, service consumers and service registries (see Figure&nbsp;<a href="#x1-10011">1</a>). A service provider, such as a business or an organization, provides meta-data for each service, including a description of its technical contract in Web Service Description Language&nbsp;(WSDL)&nbsp;[<a href="#c4">4</a>]<a name="c4."></a>. WSDL is an XML-based language that allows providers to describe the functionality of their services as a set of abstract operations with inputs and outputs, and to specify the associated binding information so that consumers can actually consume the offered operations.&nbsp;</font></p>     <p> <font face="Verdana" size="2">To make their WSDL documents publicly available, providers employ a specification for service registries, called Universal Description, Discovery and Integration (UDDI), whose central purpose is the representation of meta-data about Web Services. Apart from a meta-data model, UDDI defines an inquiry Application Programming Interface&nbsp;(API), in terms of the WSDL, for discovering services. Consumers use the inquiry API to find services that match their functional needs, select one, and then consume its operations by interpreting the corresponding WSDL description. Both the model and the API are built on Web Service technologies, as the aim of the WSDL and UDDI is to offer standards to enable interoperability among applications and services across the Web. As a consequence, for example, an application implemented in a programming language can talk to a Web Service developed in another language. Ideally, such interoperability levels would allow consumers to switch among different providers of the same functionality, according to non functional requirements such as cost per service consumption, response time or availability, without modifying the applications involved. </font> </p> <hr class="figure">     <div class="figure">                                                                                                                                                                                                             <font face="Verdana" size="2">&nbsp; </font>     <p><font face="Verdana" size="2"><img src="/img/revistas/cleiej/v14n3/3a02f1.jpg">     <br>  </font>  </p>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;1: </span><span class="content">The Web Services model.</span></font></div> <font face="Verdana" size="2">     <br> &nbsp; </font>     <p>   </p> </div> <hr class="endfigure"> <font face="Verdana" size="2">     <br> </font>     <p> <font face="Verdana" size="2">Unfortunately, the promises of Web Services of guaranteeing loose coupling among applications and services, providing agility to respond to changes in requirements, offering transparent distributed computing and lowering ongoing investments are still eclipsed by the high costs of outsourcing Web Services of current approaches for service-enabling applications as well as the ineffectiveness of Web Service publication systems. On one hand, unless appropriately specified by providers, service meta-data can be counterproductive because a low-quality WSDL document tends to obscure the purpose of a service, thus hindering its adoption. For example, a WSDL document without much comment of its operations can make the associated Web Service difficult to be discovered and understood. On the other hand, service consumers often have to invest much effort into providing code to invoke discovered Web Services afterward. Moreover, the outcome of the second task is software containing service-aware code. Therefore, the software is more difficult to test and to modify during its maintenance phase especially if the service consumer wants to replace a service for another functional-equivalent service.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">In this paper, we describe EasySOC that is a set of provider and consumer guidelines for avoiding these problems. Roughly, these guidelines represent a compilation of best practices for simplifying the activities illustrated in the arcs of Figure&nbsp;<a href="#x1-10011">1</a>, while improving the quality of the artifacts implementing services and consumers&rsquo; applications. EasySOC is based on our previous research in WSDL-based technical contract design and specification&nbsp;[<a href="#c5">5</a>]<a name="c5."></a>, Web Service discovery&nbsp;[<a href="#c6">6</a>]<a name="c6."></a> and service-oriented development and programming&nbsp;[<a href="#c7">7</a>,&nbsp;<a href="#c8">8</a>]<a name="c7."></a><a name="c8."></a>.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Complementary, the contribution of this paper is to provide a uniform, conceptualized and synthesized view of these findings to provide clear and precise hints of how to adequately exploit the SOC paradigm and its related technologies regardless their usage context, i.e. when implementing services or applications. At the same time, another contribution is a concrete materialization of these hints into a software tool so as to enforce the promoted best practices. With respect to the latter, we have built a plug-in for the popular Eclipse IDE and the Java language, thus we believe our ideas can be readily employed in the software industry&nbsp;[<a href="#c9">9</a>]<a name="c9."></a>. The software can be downloaded from <a href="http://sites.google.com/site/easysoc" class="url"><span class="pcrr8tn-">http://sites.google.com/site/easysoc</span></a>.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The rest of the paper is structured as follows. The next section focuses on discussing the aforementioned guidelines, emphasizing on clarifying their scope and the development scenarios in which they are applicable. Later, Section&nbsp;<a href="#x1-80003">3</a> presents the EasySOC Eclipse plug-in and its modules. Then, Section&nbsp;<a href="#x1-130004">4</a> surveys relevant related efforts. Finally, Section&nbsp;<a href="#x1-140005">5</a> concludes the paper. </font>    </p>     <p><font face="Verdana" size="2"><span class="titlemark">2    </span> <a id="x1-20002"></a>The EasySOC project</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">Even when Web Service technologies are far more mature and reliable than they were years ago, the definition of guidelines for developing service-oriented software is still an incipient research topic. Thus, the following paragraphs present a catalog of identified best practices for SOC development, which are related to the roles and activities that are commonly performed by developers of both services and consumers&rsquo; applications. Schematically, according to the model of Figure&nbsp;<a href="#x1-10011">1</a>, two distinctive roles are established: providers and consumers. Providers are responsible for making a piece of software publicly available as a Web Service, while ensuring that such a service can be discovered and understood by third-parties. Consumers are responsible for discovering and incorporating external services into their applications, or from now on <span class="ptmri8t-">client applications</span>. Sometimes the same actors can play both roles, as occurs when developing services that need of other services to accomplish the functionality they expose.&nbsp;</font></p>     <p>   <font face="Verdana" size="2">Depending on the role(s) played by a SOC developer, there are three possible different development scenarios. Table&nbsp;<a href="#x1-20011">1</a> lists which of the EasySOC guidelines should be followed in each scenario. </font> </p>     <div class="table">                                                                                                                                                                                                             <font face="Verdana" size="2">                                                                                                                                                                                                                 <br> </font>     <p>   <font face="Verdana" size="2">   <a id="x1-20011"></a></font></p> <hr class="float">     ]]></body>
<body><![CDATA[<div class="float">                                                                                                                                                                                                                   <div class="caption"><font face="Verdana" size="2"><span class="id">Table&nbsp;1: </span><span class="content">SOC usage scenarios and the EasySOC guidelines.</span></font></div> <font face="Verdana" size="2">     <br>  </font>      <div class="pic-tabular"><font face="Verdana" size="2"><img src="/img/revistas/cleiej/v14n3/3a024x.png"></font></div>                                                                                                                                                                                                                 </div> <hr class="endfloat">    </div>          <p><font face="Verdana" size="2"><span class="titlemark">2.1    </span> <a id="x1-30002.1"></a>Guidelines for service publication</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">Broadly, service publication is an activity that comes after a particular service has been developed, or in other words, the interface and the implementation of the service have been built. Methodologically, and depending on the order in which interfaces and implementations are derived, services can be constructed either based on <span class="ptmri8t-">contract-first </span>or <span class="ptmri8t-">code-first</span>. Contract-first is a method that encourages publishers to first derive the WSDL contract of a service and then supply an implementation for it. Alternatively, with code-first, a publisher first implements a Web Service and then generates the corresponding service contract by automatically extracting and deriving the interface from the implemented code. This means that WSDL documents are not directly created by humans but are instead automatically generated via programming language-dependent tools.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Regardless of the approach employed to build services, bad practices might manifest themselves in the resulting WSDL documents. With contract-first Web Services, this usually arises as a consequence of poorly described WSDL documents supplied by developers&nbsp;<a href="#c5">[5</a>]. Moreover, with code-first Web Services, such practices result from poor implementation decisions or deficient WSDL generation tools. Precisely, Sections&nbsp;<a href="#x1-40002.1.1">2.1.1</a> and&nbsp;<a href="#x1-50002.1.2">2.1.2</a> explain the EasySOC guidelines for avoiding these bad practices when dealing with contract-first or code-first services, respectively.&nbsp;</font></p>     <p>    </p>     <p><font face="Verdana" size="2"><span class="titlemark">2.1.1    </span> <a id="x1-40002.1.1"></a>Guidelines for contract-first WSDL construction</font></p>  <font face="Verdana" size="2">      ]]></body>
<body><![CDATA[<br> </font>     <p><font face="Verdana" size="2">Many of the problems related to the efficiency of standard-compliant approaches to service discovery stem from the fact that the WSDL specification is incorrectly or partially exploited by providers. The WSDL specification allows providers to describe the service functionality as a set of <span class="ptmri8t-">port-types</span>. A port-type arranges different <span class="ptmri8t-">operations </span>whose invocation is based on exchanging <span class="ptmri8t-">messages</span>: one message with input data, other with the result, and another with error information, optionally. Port-types, operations and messages must be named with unique names. Messages consist of <span class="ptmri8t-">parts </span>that are arranged according to specific data-types defined using the XML Schema Definition&nbsp;(XSD) language. XSD offers constructors for defining simple types (e.g., integer and string), and more elaborate mechanisms for defining complex elements. Data-type definitions can be put into a WSDL document or into a separate file and imported from any WSDL document afterward. The grammar of the WSDL(note that &ldquo;?&rdquo; means optional and &ldquo;*&rdquo; means none or many.) can be summarized as follows:&nbsp; </font>    </p>     <div class="lstlisting" id="listing-1"><font face="Verdana" size="2"><span class="label"><a id="x1-4001r1"></a></span><span class="pcrr8tn-x-x-70">&lt;documentation&nbsp;....&nbsp;/&gt;?&nbsp;</span>    <br> <span class="label"><a id="x1-4002r2"></a></span><span class="pcrr8tn-x-x-70">&lt;types&gt;?&nbsp;</span>    <br> <span class="label"><a id="x1-4003r3"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&lt;documentation&nbsp;....&nbsp;/&gt;?&nbsp;</span>    <br> <span class="label"><a id="x1-4004r4"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&lt;schema&nbsp;....&nbsp;/&gt;*&nbsp;</span>    <br> <span class="label"><a id="x1-4005r5"></a></span><span class="pcrr8tn-x-x-70">&lt;/types&gt;&nbsp;</span>    <br> <span class="label"><a id="x1-4006r6"></a></span><span class="pcrr8tn-x-x-70">&lt;message&nbsp;name="nmtoken"&gt;*&nbsp;</span>    <br> <span class="label"><a id="x1-4007r7"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&lt;documentation&nbsp;....&nbsp;/&gt;?&nbsp;</span>    <br> <span class="label"><a id="x1-4008r8"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&lt;part&nbsp;name="nmtoken"&nbsp;element="qname"?&nbsp;type="qname"?/&gt;*&nbsp;</span>    ]]></body>
<body><![CDATA[<br> <span class="label"><a id="x1-4009r9"></a></span><span class="pcrr8tn-x-x-70">&lt;/message&gt;&nbsp;</span>    <br> <span class="label"><a id="x1-4010r10"></a></span><span class="pcrr8tn-x-x-70">&lt;portType&nbsp;name="nmtoken"&gt;*&nbsp;</span>    <br> <span class="label"><a id="x1-4011r11"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&lt;documentation&nbsp;....&nbsp;/&gt;?&nbsp;</span>    <br> <span class="label"><a id="x1-4012r12"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&lt;operation&nbsp;name="nmtoken"&gt;*&nbsp;</span>    <br> <span class="label"><a id="x1-4013r13"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;documentation&nbsp;....&nbsp;/&gt;?&nbsp;</span>    <br> <span class="label"><a id="x1-4014r14"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;name="nmtoken"?&nbsp;message="qname"&gt;?&nbsp;</span>    <br> <span class="label"><a id="x1-4015r15"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;documentation&nbsp;....&nbsp;/&gt;?&nbsp;</span>    <br> <span class="label"><a id="x1-4016r16"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/input&gt;&nbsp;</span>    <br> <span class="label"><a id="x1-4017r17"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;output&nbsp;name="nmtoken"?&nbsp;message="qname"&gt;?&nbsp;</span>    <br> <span class="label"><a id="x1-4018r18"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;documentation&nbsp;....&nbsp;/&gt;?&nbsp;</span>    ]]></body>
<body><![CDATA[<br> <span class="label"><a id="x1-4019r19"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/output&gt;&nbsp;</span>    <br> <span class="label"><a id="x1-4020r20"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fault&nbsp;name="nmtoken"&nbsp;message="qname"&gt;*&nbsp;</span>    <br> <span class="label"><a id="x1-4021r21"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;documentation&nbsp;....&nbsp;/&gt;?&nbsp;</span>    <br> <span class="label"><a id="x1-4022r22"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/fault&gt;&nbsp;</span>    <br> <span class="label"><a id="x1-4023r23"></a></span><span class="pcrr8tn-x-x-70">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/operation&gt;&nbsp;</span>    <br> <span class="label"><a id="x1-4024r24"></a></span><span class="pcrr8tn-x-x-70">&lt;/portType&gt;</span>   </font>        </div>  <font face="Verdana" size="2">      <br> </font>     <p> <font face="Verdana" size="2">Although the intuitive importance of properly describing services, some practices that attempt against services discoverability and understandability, such as poorly commenting offered operations or using unintelligible naming conventions, are frequently found in publicly available WSDL documents. No silver bullet can guarantee that potential consumers of a Web Service will effectively discover, understand and access it. However, we have empirically shown that a WSDL document can be improved to simultaneously address these issues by following six steps&nbsp;<a href="#c10">[10</a>]:<a name="c10."></a> </font>      </p> <ol class="enumerate1">       <li class="enumerate" id="x1-4026x1"><font face="Verdana" size="2">Separating the schema &ndash;i.e. XSD code&ndash; from the definitions of the offered operations.      </font>      </li>       <li class="enumerate" id="x1-4028x2"><font face="Verdana" size="2">Removing repeated WSDL and XSD code.      </font>      </li>       <li class="enumerate" id="x1-4030x3"><font face="Verdana" size="2">Putting error information within Fault messages and only conveying operation results within Output ones.      </font>      </li>       <li class="enumerate" id="x1-4032x4"><font face="Verdana" size="2">Replacing WSDL element names with self-explanatory names if they are cryptic.      </font>      </li>       <li class="enumerate" id="x1-4034x5"><font face="Verdana" size="2">Moving non-cohesive operations from their port-types to a new port-type.      </font>      </li>       <li class="enumerate" id="x1-4036x6"><font face="Verdana" size="2">Properly commenting the operations.</font></li>     </ol>                                                                                                                                                                                                              <font face="Verdana" size="2">                                                                                                                                                                                                                  <br> </font>     ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2">The first step means moving complex data-type definitions into a separate XSD document, and adding the corresponding import sentence into the WSDL document. However, when data-types are not going to be reused or are very simple, they can be part of the WSDL document to make it self-contained.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The second step deals with redundant code in both the WSDL document and the schema. Repeated WSDL code usually stems from port-types tied to a specific invocation protocol, whereas redundant XSD is commonly a result of data definitions bounded to a particular operation. Therefore, repeated WSDL code can be removed by defining a protocol-independent port-type. Similarly, to eliminate redundant XSD code, repeated data-types should be abstracted into a single one. Both changes require updating the references in the WSDL document to the new defined elements that replace the redundant elements.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The third step is to separate error information from output information or service invocation results. To do this, error information should be removed from Output messages and placed on Fault ones, a special construct provided by WSDL to specify errors and exceptions. Moreover, as many Fault messages as kinds of errors exist should be defined for the operations of the Web Service.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The fourth step aims to improve the representativeness of WSDL element names by renaming non-explanatory ones. Grammatically, the name of an operation should be in the form &lt;verb&gt; &ldquo;+&rdquo; &lt;noun&gt;, because an operation is essentially an action. Furthermore, message, message part and data-type names should be a noun or a noun phrase because they represent the objects on which the operation executes. Additionally, the names should be written according to common notations, and their length should be between 3-15 characters because this facilitates both automatic analysis and human reading, respectively. With respect to the former hint, the name &ldquo;theelementname&rdquo; should be rewritten for example as &ldquo;theElementName&rdquo; (camel casing).&nbsp;</font></p>     <p> <font face="Verdana" size="2">The fifth step is to place operations in different port-types based in their cohesion. To do this, the original port-type should be divided into smaller and more cohesive port-types. This step should be repeated while the new port-types are not cohesive enough.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Finally, all operations must be well commented. An operation is said to be well commented when it has a concise and explanatory comment, which describes the semantics of the offered functionality. Moreover, as WSDL allows developers to comment each part of a service description separately, then a very good practice is to place every &lt;documentation&gt; tag in the most restrictive ambit. For instance, if the comment refers to a specific operation, it should be placed in that operation.&nbsp;</font></p>     <p> <font face="Verdana" size="2">It is worth noting that, except for steps&nbsp;4 and&nbsp;6, the other steps might require to modify service implementations. Moreover, as a result of applying these guidelines, there will be two versions of a revised service description. Despite being out of the scope of this paper, some version support technique is necessary to allow service consumers that use the old service version to continue using the service until they migrate to the new version.&nbsp;</font></p>     <p>    </p>     <p><font face="Verdana" size="2"><span class="titlemark">2.1.2    </span> <a id="x1-50002.1.2"></a>Guidelines for code-first WSDL generation</font></p>  <font face="Verdana" size="2">      <br> </font>     ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2">As explained in the previous Section, by having control of the WSDL document representing a service, its provider can use six specific steps to improve the discoverability and understandability of the published service. On the other hand, when building code-first services, such control is partial because WSDL documents are automatically derived from (manually-implemented) service codes by using generation tools. Formally, a typical code-first tool performs a mapping<span class="ptmri8t-">&nbsp;T </span>: </font>    </p> <table class="equation">   <tbody>     <tr>       <td>           <center class="math-display">       <font face="Verdana" size="2">       <img src="/img/revistas/cleiej/v14n3/3a025x.png" alt="T :C &rarr; W," class="math-display"><a id="x1-5001r1"></a></font></center>       </td>       <td class="equation-label"><font face="Verdana" size="2">(1)</font></td>     </tr>   </tbody> </table>  <font face="Verdana" size="2">      <br> </font>     <p> </p>     <p>   <font face="Verdana" size="2">Mapping&nbsp;<span class="ptmri8t-">T </span>from <img src="/img/revistas/cleiej/v14n3/3a026x.png" alt="C = {M (I,R ),..,M (I,R )}        0  0     N N  N " class="math">&nbsp;or the main module implementing a service generates a WSDL document <img src="/img/revistas/cleiej/v14n3/3a027x.png" class="math"> or the software artifact describing the service. Furthermore, <span class="ptmri8t-">W</span>&nbsp;contains a <span class="ptmri8t-">port-type </span>for the service implementation class&nbsp;<span class="ptmri8t-">C</span>, having as many <span class="ptmri8t-">operations&nbsp;O </span>as public methods&nbsp;<span class="ptmri8t-">M </span>are defined in the class. Moreover, each <span class="ptmri8t-">operation </span>of&nbsp;<span class="ptmri8t-">W </span>will be associated with one input <span class="ptmri8t-">message&nbsp;I </span>and another return <span class="ptmri8t-">message</span>&nbsp;<span class="ptmri8t-">R</span>, while each <span class="ptmri8t-">message </span>conveys an XSD                                                                                                                                                                                                             type that stands for the parameters of the corresponding class method. Examples of code-first tools are WSDL.exe, Axis&rsquo; Java2WSDL and gSOAP&nbsp;[<a href="#c11">11</a>],<a name="c11."></a> which generate WSDL documents from C#, Java and C++ source code, respectively. Naturally, each tool implements&nbsp;<span class="ptmri8t-">T </span>in a particular manner mostly because of the different characteristics of the involved programming languages.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Although in this context generation tools control WSDL specification, we found that providers can indirectly avoid or reduce the impact of the abovementioned WSDL-level bad practices by following certain programming guidelines at service implementation time. It is worth noting that the guidelines are essentially aimed at Java, which is the language at which our research is currently scoped. Below we list these guidelines: </font> </p> <ol class="enumerate1">       <li class="enumerate" id="x1-5003x1"><font face="Verdana" size="2">Replacing main class and method parameter names with self-explanatory names if they are cryptic.      </font>      </li>       <li class="enumerate" id="x1-5005x2"><font face="Verdana" size="2">Moving non-cohesive methods from their classes to a new class.      </font>      </li>       <li class="enumerate" id="x1-5007x3"><font face="Verdana" size="2">Properly commenting the purpose of main classes, methods and method parameters.      </font>      </li>       <li class="enumerate" id="x1-5009x4"><font face="Verdana" size="2">Replace data-types declared as <span class="phvr8t-x-x-90">Object </span>with a concrete data-type whenever possible.</font></li>     </ol>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">Similarly to the case of the guidelines for publishing contract-first services, the first step indirectly helps in improving the representativeness of WSDL element names, which are derived from main classes and method parameters. To this end, the same actions should be taken, i.e. revising the grammar of such identifiers.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The second step, on the other hand, allows developers to improve the functional cohesion of the resulting WSDL descriptions by first checking the functional cohesion of their implementation classes. Note that refactoring a class for better cohesion might imply splitting it into several classes, which in turn depending on the generation tool being used either leads to a single WSDL document with several port-types or several WSDL documents each having a single port-type.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Moreover, the third step encourages developers to provide descriptive comments for service implementations. Like the WSDL standard, which allows developers to comment the different parts of the interface of a contract-first service, Java provides the Javadoc tool, a standard language facility that includes tags for commenting program elements.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">Finally, the fourth step means simply to specify data-types (mostly method parameters) in a precise way. Developers must avoid the use of <span class="phvr8t-x-x-90">Object </span>and instead rely on concrete data-types. In addition, data-types such as <span class="phvr8t-x-x-90">Vector</span>, <span class="phvr8t-x-x-90">List</span>, <span class="phvr8t-x-x-90">Hashtable</span>, etc., should be replaced with their generic-aware counterparts, i.e. <span class="phvr8t-x-x-90">Vector</span><img src="/img/revistas/cleiej/v14n3/3a028x.png" alt="&lt; " class="math">X<img src="/img/revistas/cleiej/v14n3/3a029x.png" alt="&gt; " class="math">, <span class="phvr8t-x-x-90">List</span><img src="/img/revistas/cleiej/v14n3/3a0210x.png" alt="&lt; " class="math">Y<img src="/img/revistas/cleiej/v14n3/3a0211x.png" alt="&gt; " class="math">, <span class="phvr8t-x-x-90">Hashtable</span><img src="/img/revistas/cleiej/v14n3/3a0212x.png" alt="&lt; " class="math">K,V<img src="/img/revistas/cleiej/v14n3/3a0213x.png" alt="&gt; " class="math">. Likewise, the generics must be instantiated with the most restrictive class/interface as well, i.e. using <span class="phvr8t-x-x-90">Vector</span><img src="/img/revistas/cleiej/v14n3/3a0214x.png" alt="&lt; " class="math"><span class="phvr8t-x-x-90">Object</span><img src="/img/revistas/cleiej/v14n3/3a0215x.png" alt="&gt; " class="math"> will produce the same negative effect in the WSDL document as simply using <span class="phvr8t-x-x-90">Vector</span>.&nbsp;</font></p>     <p>    </p>     <p><font face="Verdana" size="2"><span class="titlemark">2.2    </span> <a id="x1-60002.2"></a>Guidelines for service discovery</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">Queries play an important part in the process of service discovery since service consumers greatly benefit from generating clear and explanatory descriptions of their needs. This is because the underpinnings of UDDI-based registries rely upon the descriptiveness of the keywords conveyed in both publicly available service interfaces and queries.&nbsp;</font></p>     <p> <font face="Verdana" size="2">We have empirically proved that the source code artifacts of client applications usually carry relevant information about the functional descriptions of the potential services that can be discovered and, in turn, consumed from within applications&nbsp;[<a href="#c6">6</a>]. The idea is that developers should be focused on building the logic of their applications, while using automatic heuristics to pull out keywords standing for queries of the required services from the code implementing such applications. In this line, best practices for building an application that contains useful information about the services the application needs comprise&nbsp;[<a href="#c6">6</a>]: </font>      </p> <ol class="enumerate1">       <li class="enumerate" id="x1-6002x1"><font face="Verdana" size="2">Defining the expected interface of every application component that is planned not to be implemented, but outsourced to a Web      Service. </font>      </li>       <li class="enumerate" id="x1-6004x2"><font face="Verdana" size="2">Revising the functional cohesion between the implemented (i.e. internal) components that directly invoke, and hence depend      on the interfaces of, the components defined in&nbsp;step 1. </font>      </li>       <li class="enumerate" id="x1-6006x3"><font face="Verdana" size="2">Naming  and  commenting  each  defined  interface  and  internal  component  by  using  self-explanatory  names  and  comments,      respectively.</font></li>     </ol>                                                                                                                                                                                                              <font face="Verdana" size="2">                                                                                                                                                                                                                  <br> </font>     <p><font face="Verdana" size="2">The first step encourages developers to think of a third-party service as any other regular component providing a clear interface to its operations. The idea of defining a functional interface before knowing the actual exposed interface of a service that fulfills an expected functionality aligns with the <span class="ptmri8t-">Query-by-Example </span>approach to create queries. This approach allows a discoverer to search for an entire piece of information based on an example in the form of a selected part of that information. This concept suggests that because of the structure inherent to client applications and Web Service descriptions in WSDL, the expected interface can be seen as an example of what a consumer is looking for. This is built on the fact that, via WSDL, publishers can describe their services as object-oriented interfaces with methods and arguments. Therefore, in the context of client applications, the defined interfaces stand for <span class="ptmri8t-">examples</span>.&nbsp;</font></p>     <p>   <font face="Verdana" size="2">The second step bases on an approach for automatically augmenting the quantity of relevant information within queries called <span class="ptmri8t-">Query</span> <span class="ptmri8t-">Expansion</span>, which relies on the expansion of extracted examples by gathering information from the source code representing internal components that directly interact with the interfaces representing external services. The reasoning that supports this mechanism is that expanding queries based upon components with strongly-related and highly-cohesive operations should not only preserve, but also improve, the meaning of the original query. Therefore, the second step deals with ensuring that defined interfaces are strongly-related and highly-cohesive with those components that depend on them.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">The above two steps deal with identifying the source code parts of an application that are likely to contain relevant information for generating queries and discovering Web Services afterward. Also, a third step exists for checking that the identified code parts actually have relevant information for that purpose. Since automatic query generation heuristics gather keywords from operation names and comments present in source codes, developers should follow conventional best practices for naming and commenting their code.&nbsp;</font></p>     <p>    </p>     <p><font face="Verdana" size="2"><span class="titlemark">2.3    </span> <a id="x1-70002.3"></a>Guidelines for service consumption</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">Maintaining client applications can be a cumbersome task when they are tied to specific providers and WSDL documents. The common approach to call a Web Service from within an application is by interpreting its associated WSDL document with the help of invocation frameworks such as WSIF, CXF&nbsp;[<a href="#c12">12</a>], or the .NET Web Services Description Language Tool (WSDL.exe)(.NET WSDL.exe, <a href="http://msdn.microsoft.com/en-us/library/7h3ystb6%28v=VS.71%29.aspx" class="url"><span class="pcrr8tn-">http://msdn.microsoft.com/en-us/library/7h3ystb6(v=VS.71).aspx</span></a>). These frameworks succeed in hiding the details for invoking services, but they still fail at isolating internal components from the interfaces of the services. Consequently, applications result in a mix of pure logic and sentences for consuming Web Services that depend on their operation signatures and data-types. This approach leads to client applications that are subordinated to third-party service interfaces and must be modified and/or re-tested every time a provider introduces changes. In addition, this also hinders service replaceability, which means how easily a service could be replaced with another functionality equivalent service.&nbsp;</font></p>     <p> <font face="Verdana" size="2">In this sense, we have shown that the maintenance of service-oriented applications can be facilitated by following certain programming practices when outsourcing services&nbsp;[<a href="#c8">8</a>]: </font>      </p> <ol class="enumerate1">       <li class="enumerate" id="x1-7002x1"><font face="Verdana" size="2">Defining the expected interface of every component that is planned to be outsourced.      </font>      </li>       <li class="enumerate" id="x1-7004x2"><font face="Verdana" size="2">Adapting the actual interface of a selected service to the interface that was originally expected, i.e. the one defined in the      previous step. </font>      </li>       <li class="enumerate" id="x1-7006x3"><font face="Verdana" size="2">Seamlessly injecting adaptation code into each internal component that depends on the expected interface.</font></li>     </ol>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">Step&nbsp;1 provides a mean of shielding the internal components of an application from details related to invoking third-party services. To do this, a functionality that is planned to be implemented by a third-party service should be programmatically described as an abstract interface. Note that this is the same requirement as the first step of Section&nbsp;<a href="#x1-60002.2">2.2</a>. Accordingly, internal application components depending on such an abstractly-described functionality consume the methods exposed by its associated interface, while adhering to operation names and input/out data-types declared in it.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The second step takes place after a service has been selected. During this step, developers should provide the logic to transform the operation signatures of the actual interface of the selected service to expected the interface defined previously. For instance, if a service operation returns a list of integers, but the interface defined at step&nbsp;1 returns an array of floats, the developer should code a service adapter that performs the type conversion. By properly accomplishing steps&nbsp;1 and&nbsp;2, client components depend on neither specific service implementations nor interfaces. Therefore, from the perspective of the application logic, services that provide equivalent functionality can be transparently interchangeable at the expense of building specific adapters.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">Finally, the third step is for separating the functional code of an application from configuration aspects related to binding a client component that depends on an interface with the adapter component in charge of adapting it into a selected service. A suitable form of doing this, in terms of source code quality, involves delegating to a software layer or container the administrative task of assembling interfaces, internal components and services together.&nbsp;</font></p>     <p> <font face="Verdana" size="2">In the following section we describe a software tool, implemented as a plug-in for the Eclipse IDE, which enforces the aforementioned guidelines for developing SOC applications and Web Services written in Java.&nbsp;</font></p>     <p>    </p>     <p><font face="Verdana" size="2"><span class="titlemark">3    </span> <a id="x1-80003"></a>The EasySOC Eclipse plug-in</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">The EasySOC Eclipse plug-in comprises four modules, each one associated to the set of guidelines explained before. Sections&nbsp;<a href="#x1-90003.1">3.1</a> through&nbsp;<a href="#x1-120003.4">3.4</a> discuss the design and implementation of these modules. Although EasySOC guidelines are valid for any Web Service capable platform, it is important to notice that the EasySOC Eclipse plug-in is a software tool aimed only to the Java platform. Hence, some of the implementation details are platform dependant. However, it would be possible to implement these tools for other development platforms, such as .Net.&nbsp;</font></p>     <p>    </p>     <p><font face="Verdana" size="2"><span class="titlemark">3.1    </span> <a id="x1-90003.1"></a>The WSDL discoverability Anti-Patterns&rsquo; Detector</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">The Anti-patterns&rsquo; Detector is the EasySOC module for automatically checking whether the WSDL document depicting a Web Service technical contract conforms to the guidelines of Section&nbsp;<a href="#x1-40002.1.1">2.1.1</a>. The module bases on the fact that the goal of Section&nbsp;<a href="#x1-40002.1.1">2.1.1</a> guidelines is to avoid the occurrence of the WSDL document discoverability anti-patterns introduced in&nbsp;[<a href="#c10">10</a>] within contract-first service descriptions. Besides measuring the impact of each anti-pattern on service discovery, this study&nbsp;[<a href="#c10">10</a>] assessed the implications of anti-patterns on developers&rsquo; ability to make sense of WSDL documents. The catalog consists of eight anti-patterns and provides a name, a problem description, and a sound refactoring procedure for each anti-pattern. Although the results of the study motivate anti-patterns refactoring, manually looking for an anti-pattern in WSDL documents might be a time consuming and complex task. Thus, the Anti-patterns&rsquo; Detector comprises heuristics to automatically detect the anti-patterns in the aforementioned catalog.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">Since these heuristics are based on the anti-pattern definition, they can be classified according to the analysis required to detect the anti-patterns. In this sense, a taxonomy comprising types of anti-patterns was derived&nbsp;[<a href="#c10">10</a>]. Basically, anti-patterns can be divided into two categories: those that can be detected by analyzing only the structure of a WSDL document, and anti-patterns whose detection requires a semantic analysis of the names and comments in the WSDL document.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The heuristics to detect the first kind of anti-patterns are simple rules based on the commonest anti-pattern occurrence form. The problems related to these anti-patterns are redundant XML code for defining both data-types and port-types, data-types embedded in a WSDL document, non-commented operations, and data-types that allow transferring data of any type (<span class="ptmri8t-">Whatever types </span>in EasySOC terminology).&nbsp;</font></p>     <p> <font face="Verdana" size="2">Firstly, the rule that detects redundant port-types verifies that any pair of port-types has the same number of operations and that they are equally named. In this case, the heuristic does not verify the similarity between the messages of the port-types because they are likely to change in accord with the underlying binding protocol. Furthermore, the problem of embedded data-types is detected by checking that no external XSD document(s) are referenced from within a WSDL document. To detect lacking comments, the associated heuristic simply verifies that all the operations have a non-empty <span class="pcrr8tn-">&lt;documentation&gt; </span>tag. Finally, detecting the <span class="ptmri8t-">Whatever types </span>anti-pattern involves detecting its two forms. One form is when a data type tag is defined with the primitive type &ldquo;anyType&rdquo; indicating that any type is a valid contain for the typed tag. The other form of this anti-pattern is when a data-type definition includes an <span class="pcrr8tn-">&lt;any&gt; </span>tag, which means that any valid XML is valid at that point. Therefore, if an <span class="pcrr8tn-">&lt;any&gt; </span>tag is present or some tag have &ldquo;anyType&rdquo; as a value of its &ldquo;type&rdquo; property, this anti-pattern is said to be present in the WSDL document.&nbsp;</font></p>     <p> <font face="Verdana" size="2">As it was previously mentioned, detecting the remaining anti-patterns requires analyzing the semantics of names and comments. Basically, there are three problems that are detected by the associated heuristics: two naming issues, operations of different domains in the same port-type, and fault information within standard output messages. Firstly, our heuristic deals with names being too short or too long, using a rule to check that each name has a length between 3-30 characters is provided. In addition, our heuristic concerns name structure, i.e. message part names should be nouns or noun phrases, while operations should be named with a verb plus a noun. This is verified by using a probabilistic context free grammar parser&nbsp;[<a href="#c13">13]</a><a name="c13."></a>. For example, Figure&nbsp;<a href="#x1-90012">2</a> depicts the parsing trees of different message part names generated by the parser. The first and second names do not present problems, whereas the third name does because it starts with a verb. </font> </p> <hr class="figure">     <div class="figure">                                                                                                                                                                                                             <font face="Verdana" size="2">&nbsp; </font>     <p><font face="Verdana" size="2"><img src="/img/revistas/cleiej/v14n3/3a02f2.jpg" alt="PIC">     <br>  </font>  </p>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;2: </span><span class="content">Parsing trees of message part names.</span></font></div> <font face="Verdana" size="2">     <br> &nbsp; </font>     <p>   </p> </div> <hr class="endfigure"> <font face="Verdana" size="2">     ]]></body>
<body><![CDATA[<br> </font>     <p> <font face="Verdana" size="2">Secondly, our heuristic for determining whether two operations belong to the same domain is based on a text classification technique, because the only &ldquo;semantic&rdquo; information about an operation are its names&nbsp;(operation name and message name) and comments. In particular, the Rocchio&rsquo;s TF-IDF classifier has been selected because empirical studies have shown that it outperforms other classifiers in the Web Services area&nbsp;[<a href="#c8">8</a>]. Rocchio&rsquo;s TF-IDF represents textual information as vectors, in which each dimension stands for a term and its magnitude is the weight of the term related with the text. Having represented all the textual information of a domain as vectors, the average vector, called centroid, is built for representing the domain. Then, the domain of an operation is deduced by representing it as a vector and comparing it to each domain centroid. Lastly, the domain associated with the most similar average vector is returned as the domain of that operation.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Finally, our heuristic for detecting error information within output messages checks whether an operation has no fault message defined, and the comments or some name related with the output contains one of the following words, which are commonly related with error conditions while executing a service: <span class="ptmri8t-">error, fault, fail, exception, overflow, mistake </span>and <span class="ptmri8t-">misplay</span>.&nbsp;</font></p>     <p> <font face="Verdana" size="2">These heuristics have been experimentally validated with two real-world data-sets. The first validation was intended to empirically prove that the heuristics can effectively detect the anti-patterns. Therefore, we used the original WSDL data-set employed to assess the impact of service descriptions containing anti-patterns on service discovery&nbsp;[<a href="#c10">10</a>]. The second experiment was designed to determine (if any) what is the correlation between our anti-patterns and the metrics proposed in&nbsp;[<a href="#c14">14</a>]<a name="c14."></a>, which were obtained using two benchmarking tools, namely ParaSoft SOATest and WS-I Interoperability Testing Tools; to perform this experiment, we used the WSDL document data-set presented in&nbsp;[<a href="#c15">15</a>]<a name="c15."></a>.&nbsp;</font></p>     <p>   <font face="Verdana" size="2">The first validation showed that the heuristics have an accuracy of&nbsp;<img src="/img/revistas/cleiej/v14n3/3a0216x.png" alt="98.5%  " class="math">, on average. The methodology followed in the evaluation involved manually analyzing each WSDL document to identify the anti-patterns it has, peer-reviewing manual results afterward (at least three different people reviewed each WSDL document), automatically analyzing WSDL documents based on the proposed heuristics, and finally comparing both manual and automatic results. Achieved results are shown in Table&nbsp;<a href="#x1-90022">2</a> by using a confusion matrix. Each row of the matrix represents the number of WSDL documents that were automatically classified using the heuristic associated with a particular anti-pattern. In addition, the columns of the matrix show the results obtained manually, i.e. the number of WSDL documents that actually had each anti-pattern. Results are organized per anti-pattern, and if a WSDL document has an anti-pattern it is classified as &ldquo;Positive&rdquo;, otherwise it is classified as&nbsp;&ldquo;Negative&rdquo;. When the manual classification for a WSDL document is equal to the automatic one, it means that the heuristic accurately operates for that WSDL document. </font> </p>     <div class="table">                                                                                                                                                                                                             <font face="Verdana" size="2">                                                                                                                                                                                                                 <br> </font>     <p>   <font face="Verdana" size="2">   <a id="x1-90022"></a></font></p> <hr class="float">     <div class="float">                                                                                                                                                                                                                   <div class="caption"><font face="Verdana" size="2"><span class="id">Table&nbsp;2: </span><span class="content">Anti-pattern detection: Confusion matrixes.</span></font></div> <font face="Verdana" size="2">     ]]></body>
<body><![CDATA[<br>  </font>      <div class="pic-tabular"> <font face="Verdana" size="2"> <img src="/img/revistas/cleiej/v14n3/3a0217x.png"></font></div>                                                                                                                                                                                                                 </div> <hr class="endfloat">    </div>  <font face="Verdana" size="2">      <br> </font>     <p>   <font face="Verdana" size="2">In this experiment, we used a data-set of 392&nbsp;WSDL documents&nbsp;[<a href="#c10">10</a>]. Once each heuristic was applied on this data-set, we built the confusion matrixes. Then, we assessed the accuracy and false positive/negative rates for each matrix. The accuracy of each heuristic was computed as the number of classifications matching over the total of analyzed WSDL documents. For instance, the accuracy of the <span class="ptmri8t-">Redundant</span> <span class="ptmri8t-">data model </span>heuristic was&nbsp;<img src="/img/revistas/cleiej/v14n3/3a0218x.png" alt="--221+166- 221+2+3+166 = 0.987  " class="math">. The heuristic for detecting <span class="ptmri8t-">Low cohesive operations within the same port-type </span>anti-pattern achieved the lowest accuracy: <img src="/img/revistas/cleiej/v14n3/3a0219x.png" alt="0.775  " class="math">. One hypothesis that could explain this value relates to potential errors introduced by the classifier, thus more experiments are being conducted. Nevertheless, as mentioned before, the average accuracy for all the heuristics was&nbsp;<img src="/img/revistas/cleiej/v14n3/3a0220x.png" alt="0.958  " class="math">.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The false positive rate is the proportion of WSDL documents that an heuristic has wrongly labeled as having the corresponding anti-pattern. In opposition, the false negative rate is the percentage of WSDL documents that an heuristic has wrongly labeled as not having the corresponding anti-pattern. A false negative rate equals to&nbsp;1.0 means that a detection heuristic has missed all anti-pattern occurrences. Therefore, the lower the achieved values the better the detection effectiveness. The average false positive rate was&nbsp;<img src="/img/revistas/cleiej/v14n3/3a0221x.png" alt="0.036  " class="math">, and the average false negative rate was&nbsp;<img src="/img/revistas/cleiej/v14n3/3a0222x.png" alt="0.052  " class="math">, which we believe are encouraging.&nbsp;</font></p>     <p>   </p> <hr class="figure">     <div class="figure">                                                                                                                                                                                                             <font face="Verdana" size="2">&nbsp; </font>     <p><font face="Verdana" size="2"><img src="/img/revistas/cleiej/v14n3/3a02f3.jpg">     <br>  </font>  </p>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;3: </span><span class="content">Correlation among Anti-patterns and the Al-Masri and Mahmoud&rsquo;s quality metrics.</span></font></div> <font face="Verdana" size="2">     ]]></body>
<body><![CDATA[<br> &nbsp; </font>     <p>   </p> </div> <hr class="endfigure"> <font face="Verdana" size="2">     <br> </font>     <p> <font face="Verdana" size="2">In the second validation, we have calculated the correlation between anti-pattern occurrences and the Al-Masri and Mahmoud&rsquo;s quality metrics&nbsp;[<a href="#c14">14</a>] and data-set&nbsp;[<a href="#c15">15</a>]. This data-set consists of&nbsp;1822 Web Services that exist on the Web, and provides their associated WSDL documents and collected quality metrics. The method used to calculate this correlation was the Pearson product-moment correlation coefficient because we expected to find a direct relationship between Al-Masri and Mahmoud&rsquo;s quality metrics and the anti-patterns. The results showed that some of the Al-Masri and Mahmoud&rsquo;s quality metrics have a significant correlation with the anti-patterns, but others have not. However, when we analyzed these results, the metrics that had no correlation were response time, availability, throughput, successability, reliability, latency, WsRF and service classification (a discrete value from&nbsp;1 to&nbsp;4 representing service offering qualities). Since these are technical metrics unrelated to WSDL document quality, it is reasonable that they have no correlation with the anti-patterns. Furthermore, the metrics related to WSDL document quality proposed in&nbsp;[<a href="#c14">14</a>] are: </font>      </p> <ul class="itemize1">       <li class="itemize"><font face="Verdana" size="2">Compliance: The degree to which a WSDL document grammatically conforms to the WSDL specification.      </font>      </li>       <li class="itemize"><font face="Verdana" size="2">Best Practices: The degree to which a Web service complies with WS-I profile guidelines.      </font>      </li>       <li class="itemize"><font face="Verdana" size="2">Documentation: The amount of textual documentation in description tags including service, ports, and operations.</font></li>     </ul>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">Figure&nbsp;<a href="#x1-90033">3</a> shows the correlation between anti-pattern occurrences and measures taken according to the Al-Masri and Mahmoud&rsquo;s quality metrics. In Al-Masri and Mahmoud&rsquo;s quality metrics, low values stand for low quality, and high values stand for high quality. While, the anti-patterns&rsquo; variable are zero for not present and one for present in the WSDL document. A correlation value higher than zero means that when one variable rises, the other variable value tends also to rise. While, a correlation value lower than zero means that when one variable rises, the other variable value tends to decrease. It is important to notice that correlation values are neither too high nor too low because we are correlating a discrete-valued variable&nbsp;(anti-pattern occurrences) that cannot have a linear relation to a continue value. Finally, a correlation value near zero means that the values of the variables are independent, i.e., anti-pattern occurrences and Al-Masri and Mahmoud&rsquo;s quality metrics are not related.&nbsp;</font></p>     <p> <font face="Verdana" size="2">When the Compliance metric value is high, WSDL documents tend not to be affected by most of the anti-patterns. The exception of this is the <span class="ptmri8t-">Enclosed data-model anti-pattern</span>, for which correlation is near zero, and the <span class="ptmri8t-">Inappropriate or lacking comments </span>anti-pattern, which is a highly correlated anti-pattern. The first exception is sound because both options, having enclosed data-model or importing them from an XSD file, are WSDL compliant. While, the problems with documentation might be related to the fact that when documentation is added to a WSDL document the developer should manually modify it, which is an error-prone task.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The Best Practices metric is similar to the Compliance metric because most of the anti-patterns are negatively correlated with it. The only exceptions are <span class="ptmri8t-">Whatever types </span>and <span class="ptmri8t-">Inappropriate or lacking comments </span>anti-patterns. In this case both correlations are near zero, meaning that this metric and these anti-patterns occurrences are statistically independent. This is probably because Best Practices metric is related to WS-I guidelines that intent to improve the technical interoperability, but not the usability of a Web Service; and these anti-patterns are precisely connected to WSDL document readability and understandability.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The Documentation metric, which represents the percentage of elements in a WSDL document that contain comments, is only correlated negatively to the <span class="ptmri8t-">Inappropriate or lacking comments </span>anti-pattern. This is expected because if a developer introduces comments to a WSDL document, they are intended to be read. The other anti-patterns are either not correlated or have a positive correlation. The positive correlation might stem from that the developer must manually modify the WSDL document to improve the comments, and modifying a WSDL document is an error-prone task. </font> </p>     ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2"><span class="titlemark">3.2    </span> <a id="x1-100003.2"></a>The Service Implementation Watcher</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">The EasySOC Watcher module is intended for checking whether code-first service implementations comply with the guidelines of Section&nbsp;<a href="#x1-50002.1.2">2.1.2</a>. This module enforce good coding practices that results in better generated WSDL documents. The code quality is measured using well-known Object-Oriented&nbsp;(OO) class-level metrics, such as the Chidamber and Kemerer&rsquo;s metric catalog&nbsp;[<a href="#c16">16</a>]<a name="c16."></a> and some of our own, on a service code<span class="ptmri8t-">&nbsp;C</span>, for allowing a provider to have an estimation of how the resulting WSDL document&nbsp;<span class="ptmri8t-">W </span>will be like in terms of WSDL discoverability anti-pattern occurrences. The reader should recall that WSDL generation tools rely on a mapping&nbsp;<span class="ptmri8t-">T</span> that relates <span class="ptmri8t-">C</span>&nbsp;with&nbsp;<span class="ptmri8t-">W</span>. The approach to perform this estimation is based on a statistical analysis that shows a significant correlation among the Weighted Methods Per Class (WMC), Coupling Between Objects (CBO), and Abstract Type Count (ATC) metrics and some anti-patterns. This correlation was experimentally confirmed by using a real-world Web Service data-set.&nbsp;</font></p>     <p>   <font face="Verdana" size="2">The WMC&nbsp;[<a href="#c16">16</a>] metric counts the methods of a class. The experiments have empirically confirmed that a greater number of methods within a service implementation main class increases the probability that any pair of them are unrelated, i.e. having weak cohesion. Since <span class="ptmri8t-">T</span>-based code-first tools map each method onto an operation, a higher WMC might increase the possibility that resulting WSDL documents have low cohesive operations.&nbsp;</font></p>     <p>   <font face="Verdana" size="2">CBO&nbsp;[<a href="#c16">16</a>] counts how many methods or instance variables defined by other classes are accessed by a given class. Code-first tools based on <span class="ptmri8t-">T </span>include in resulting WSDL documents as many XSD definitions as objects are exchanged by service classes&rsquo; methods. The experiments have empirically shown that increasing the number of external objects that are accessed by service classes might increase the likelihood of data-type definitions within WSDL documents.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Finally, ATC is a metric of our own that computes the number of method parameters that do not use concrete data-types, or use Java generics with type variables instantiated with non-concrete data-types. We have defined the ATC metric after noting that some <span class="ptmri8t-">T</span>-based code-first tools map abstract data-types and badly defined generics onto xsd:any constructors, which have been identified as root causes for the <span class="ptmri8t-">Whatever types </span>anti-pattern&nbsp;[<a href="#c10">10</a>,&nbsp;<a href="#c17">17</a>]<a name="c17."></a>.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Returning to the experiment settings, the data-set consists of around&nbsp;90 different real services whose implementation was collected via two code search engines, namely the Merobase component finder (<a href="http://merobase.com" class="url"><span class="pcrr8tn-">http://merobase.com</span></a>) and the Exemplar engine&nbsp;[<a href="#c18">18</a>]<a name="c18."></a>. Merobase allows users to harvest software components from a wide variety of sources (e.g. Apache, SourceForge, and Java.net) and has the unique feature of supporting interface-driven searches, i.e. searches based on the abstract interface that a component should offer, apart from that of based on the text in its source code. On the other hand, Exemplar relies on a hybrid approach to keyword-based search that combines the benefits of textual processing and intrinsic qualities of code to mine repositories and consequently returns complete projects. Complementary, we collected projects from Google Code.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Some of the retrieved projects actually implemented Web Services, whereas other projects contained granular software components such as EJBs, which were &ldquo;servified&rdquo; to further enlarge the data-set. After collecting the components and projects, we uniformed the associated services by explicitly providing a Java interface in order to facade their implementations. Each WSDL document was obtained by feeding the Java2WSDL tool with the corresponding interface. All in all, the data-set provided the means to perform a significant evaluation in the sense that the different Web Service implementations came from real-life developers. </font> </p>     <div class="table">                                                                                                                                                                                                             <font face="Verdana" size="2">                                                                                                                                                                                                                 <br> </font>     ]]></body>
<body><![CDATA[<p>   <font face="Verdana" size="2">   <a id="x1-100013"></a></font></p> <hr class="float">     <div class="float">                                                                                                                                                                                                                   <div class="caption"><font face="Verdana" size="2"><span class="id">Table&nbsp;3: </span><span class="content">Correlation among Anti-patterns and the employed OO metrics.</span></font></div> <font face="Verdana" size="2">     <br>  </font>      <div class="pic-tabular"><font face="Verdana" size="2"><img src="/img/revistas/cleiej/v14n3/3a0223x.png"></font></div>                                                                                                                                                                                                                 </div> <hr class="endfloat">    </div>  <font face="Verdana" size="2">      <br> </font>     <p> <font face="Verdana" size="2">For the correlation analysis, we calculated the Spearman&rsquo;s rank correlation coefficient to establish the existing relations between the two kind of variables of our model, i.e. the OO metrics (independent variables) and the anti-patterns (dependent variables). The list of anti-pattern occurrence per WSDL document was obtained by using the WSDL discoverability Anti-Patterns&rsquo; Detector presented in the previous Section. Table&nbsp;<a href="#x1-100013">3</a> depicts the correlation factors among the studied OO metrics. The cell values in bold are those coefficients which are statistically significant at the 5% level, i.e. p-value <img src="/img/revistas/cleiej/v14n3/3a0224x.png" alt="&lt; " class="math"> 0.05, which is a common choice when performing statistical studies&nbsp;[<a href="#c19">19]</a><a name="c19."></a>. These correlation factors clearly show that the metrics studied are not statistically independent and, thereby, capture redundant information. In other words, if a group of variables in a data-set are strongly correlated, these variables are likely to measure the same underlying dimension&nbsp;(i.e. cohesion, complexity, coupling, etc.).&nbsp;</font></p>     <p> <font face="Verdana" size="2">The correlation among the WMC, CBO, and ATC metrics and the anti-patterns, which were found to be statistically significant for the analyzed Web Service data-set, suggests that an increment/decrement of the metric values taken on the code of a Web Service directly affects anti-pattern occurrence in its code-first generated WSDL document. Then, the Watcher module re-calculates these metrics for service implementation classes every time a class changes. Once these metrics are calculated, if metric values increase, the module assumes that the risk of generating a WSDL document having an anti-pattern has increased as well. In this case, the Watcher suggests developers to refactor their service implementation according to the steps listed in Section&nbsp;<a href="#x1-50002.1.2">2.1.2</a>.&nbsp;</font></p>     <p>   </p> <hr class="figure">     <div class="figure">                                                                                                                                                                                                             <font face="Verdana" size="2">&nbsp; </font>     ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2"><img src="/img/revistas/cleiej/v14n3/3a02f4.jpg">     <br>  </font>  </p>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;4: </span><span class="content">Anti-patterns that were mitigated by refactoring service implementations.</span></font></div> <font face="Verdana" size="2">&nbsp;    <br> </font>     <p>   </p> </div> <hr class="endfigure"> <font face="Verdana" size="2">     <br> </font>     <p> <font face="Verdana" size="2">We performed some source code refactorings driven by these OO metrics on our data-set so as to quantify the effect on anti-pattern occurrence. For the sake of representativeness, we modified the services that presented all anti-patterns at the same time, which accounted for a 30% of the entire data-set. However, some code-first tools do not allow avoiding every anti-pattern. For instance, the <span class="ptmri8t-">Enclosed data model </span>anti-pattern cannot be removed from code-first WSDL documents when using Java2WSDL or WSDL.exe.&nbsp;</font></p>     <p>   <font face="Verdana" size="2">Figure&nbsp;<a href="#x1-100024">4</a> shows the three anti-patterns that were reduced after refactoring. In a first round of refactoring, we focused on reducing WMC by splitting the services having too much operations into two or more services so that on average the metric in the refactored services represented a&nbsp;70% of the original value. This refactoring, on average, reduced in 47.26% the occurrences of <span class="ptmri8t-">Low cohesive operations in the same port-type</span> anti-pattern. At first sight, this refactoring appeared to have a collateral effect: the fall in the occurrences of the <span class="ptmri8t-">Redundant data</span> <span class="ptmri8t-">models </span>anti-pattern. However, this improvement was caused by a limitation of the Anti-Pattern Detector that does not count as an anti-pattern occurrence the case when two services define the same data-type. In contrast, if a service has 2&nbsp;operations both using the defined data-type twice, the Detector counts 2&nbsp;anti-pattern occurrences. However, after refactoring, if the service is divided in 2&nbsp;new services with one operation having the same data-type each, the Detector does not count the anti-pattern.&nbsp;</font></p>     <p> <font face="Verdana" size="2">In a second refactoring round, we focused on the ATC metric, which computes the number of parameters in a class that are declared as <span class="phvr8t-x-x-90">Object </span>or data structures &ndash;i.e. collections&ndash; that do not use Java generics. Basically, the applied refactoring was to replace arguments declared as <span class="phvr8t-x-x-90">Object </span>with a concrete data-type whenever possible. In addition, although replacing parameters declared as <span class="phvr8t-x-x-90">Vector</span>, <span class="phvr8t-x-x-90">List</span>, <span class="phvr8t-x-x-90">Hashtable</span>, etc., with their generic-aware counterparts, i.e. <span class="phvr8t-x-x-90">Vector</span><img src="/img/revistas/cleiej/v14n3/3a0225x.png" alt="&lt; " class="math">X<img src="/img/revistas/cleiej/v14n3/3a0226x.png" alt="&gt; " class="math">, <span class="phvr8t-x-x-90">List</span><img src="/img/revistas/cleiej/v14n3/3a0227x.png" alt="&lt; " class="math">Y<img src="/img/revistas/cleiej/v14n3/3a0228x.png" alt="&gt; " class="math">, <span class="phvr8t-x-x-90">Hashtable</span><img src="/img/revistas/cleiej/v14n3/3a0229x.png" alt="&lt; " class="math">K,V<img src="/img/revistas/cleiej/v14n3/3a0230x.png" alt="&gt; " class="math"> and so on would in theory be another sound refactoring, we decided to replace the former with array structures due to limitations of the WSDL generation tool used. Overall, by applying these modifications we were able to decrease the number of occurrences of the <span class="ptmri8t-">Whatever</span> <span class="ptmri8t-">types </span>anti-pattern. Aside from these benefits for WSDL document quality, this refactor is also recommended for any Java code&nbsp;[<a href="#c20">20</a>]<a name="c20."></a>. </font>    </p>     <p><font face="Verdana" size="2"><span class="titlemark">3.3    </span> <a id="x1-110003.3"></a>The Query Builder</font></p>  <font face="Verdana" size="2">      ]]></body>
<body><![CDATA[<br> </font>     <p><font face="Verdana" size="2">The EasySOC Query Builder module gathers information to build service queries from the source code of client applications. This module provides a graphical tool that guides consumers through the generation of the queries. When a consumer selects &ldquo;Find services for...&rdquo; by clicking on an interface that stands for an external service to be outsourced (see Figure&nbsp;<a href="#x1-110015">5</a> step&nbsp;1), a wizard dialog starts. The wizard uses the Eclipse JDT Search Engine(Eclipse Java Development Tools (JDT), <a href="http://www.eclipse.org/jdt" class="url"><span class="pcrr8tn-">http://www.eclipse.org/jdt</span></a>)for automatically discovering the client-side classes that depend on the interface and presents them to the user. Then, the user selects or discard the resulting classes (Figure&nbsp;<a href="#x1-110015">5</a> step&nbsp;2). Similarly, the wizard presents a list of argument classes. This list is automatically built by analyzing the interface to retrieve the class names associated with each argument. If an argument is neither primitive (e.g., int, long, double, etc.) nor provided within a built-in Java library package (e.g., Vector, ArrayList, String, etc.), it is included in the list of argument classes. Finally, those manually selected classes along with the Java interface are used as input for the text-mining process depicted in the center of Figure&nbsp;<a href="#x1-110015">5</a>. The module allows users to customize queries and test the retrieval effectiveness when using different classes as input, making query building interactive or semi-automatic. Alternatively, by clicking on the &ldquo;Finish&rdquo; button, the wizard selects all target classes on behalf of the consumer, making query expansion fully automatic. </font> </p> <hr class="figure">     <div class="figure">                                                                                                                                                                                                             <font face="Verdana" size="2">&nbsp; </font>     <p><font face="Verdana" size="2"><img src="/img/revistas/cleiej/v14n3/3a02f5.jpg">     <br>  </font>  </p>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;5: </span><span class="content">Wizard for generating service queries.</span></font></div> <font face="Verdana" size="2">     <br> &nbsp; </font>     <p>   </p> </div> <hr class="endfigure"> <font face="Verdana" size="2">     <br> </font>     <p> <font face="Verdana" size="2">We evaluated the retrieval effectiveness of the Query Builder by using the previous collection of 392&nbsp;WSDL documents to feed a service registry&nbsp;[<a href="#XISF-CrassoZC09">6</a>]. Moreover, undergraduate students played the role of service consumers in the context of the &ldquo;Service-Oriented Computing&rdquo;<a href="http://www.exa.unicen.edu.ar/%7Ecmateos/cos" class="url"><span class="pcrr8tn-">http://www.exa.unicen.edu.ar/~cmateos/cos</span></a>course of the Systems Engineering BSc. program at the Faculty of Exact Sciences (Department of Computer Science) of the UNICEN. The students were assigned an exercise consisting on deriving 30&nbsp;queries, in which each query comprised a Java interface describing the functional capabilities of a potential service. The header and the operations of each interface were commented. For those operations with non-primitive data-types as arguments, their corresponding classes were also commented. Then, for each query, the students implemented and commented the internal components that depended on the interface. This methodology allowed us to separately evaluate five combinations of different sources of terms associated with an <span class="ptmri8t-">example</span>, namely its &ldquo;Interface&rdquo;, &ldquo;Documentation&rdquo;, &ldquo;Arguments&rdquo; and &ldquo;Dependants&rdquo;. Finally, a fifth alternative was used by combining all these four sources. In this context, documentation does not refer to extra software artifacts but to textual comments embedded within the classes.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p>   <font face="Verdana" size="2">To evaluate the discovery performance resulted from employing the different sources of terms, we used the Precision-at-<span class="ptmri8t-">n</span>, Recall-at-<span class="ptmri8t-">n</span>, <span class="ptmri8t-">R</span>-precision and Normalized Recall&nbsp;(NR) information retrieval metrics. In this sense, the goal was to evaluate our Query Builder in terms of the proportion of relevant services in the retrieved list and their positions relative to non-relevant ones. We applied each metric for the 30&nbsp;queries by individually using each one of the combination of sources (a total of 150&nbsp;experiments per measure), and then we averaged the results over the 30 queries. As some of these metrics require knowing the set of all services in the collection that are relevant to a given query, we exhaustively analyzed the data-set to determine the relevant services for each query. An important characteristic regarding the evaluation is the definition of &ldquo;hit&rdquo;, i.e. when a returned WSDL document is actually relevant to the user. We judged a WSDL document as being a hit or not depending on whether its operations fulfilled the expectations previously specified in the Java code. For example, if the consumer required a Web Service for converting from Euros to Dollars, then a retrieved Web Service for converting from Yens to Dollars was not considered relevant, even though these services were strongly related. In this particular case, only Web Services for converting from Euros to Dollars were relevant. Note that this definition of hit makes the validation of our discovery mechanism very strict. Additionally, it is worth noting that for any query there are, at most, 8&nbsp;relevant services within the data-set. Besides, there are 10&nbsp;queries that have associated only one relevant service.&nbsp;</font></p>     <p>   </p> <hr class="figure">     <div class="figure">                                                                                                                                                                                                             <font face="Verdana" size="2">&nbsp; </font>     <p><font face="Verdana" size="2"><img src="/img/revistas/cleiej/v14n3/3a02f6.jpg">     <br>  </font>  </p>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;6: </span><span class="content">EasySOC Query Builder: Retrieval effectiveness.</span></font></div> <font face="Verdana" size="2">     <br> &nbsp; </font>     <p>   </p> </div> <hr class="endfigure"> <font face="Verdana" size="2">     <br> </font>     <p>   <font face="Verdana" size="2">Each bar in Figure&nbsp;<a href="#x1-110026">6</a> stands for the averaged metric results that were achieved using a particular query expansion alternative. Achieved results pointed out that by following the conventional Query-By-Example approach to build queries (the alternative named &ldquo;Interface&rdquo;) query-specific results were ranked first. When using more general, elaborated queries via the Query Expansion approach (e.g. the &ldquo;All&rdquo; alternative), the chance of including a relevant service at the top of the list decreased as the possibilities of including it before the&nbsp;<img src="/img/revistas/cleiej/v14n3/3a0231x.png" alt="  th 11  " class="math"> positions increased. All in all, for this experiment our Query Builder alleviated discovery by concentrating relevant services within a window of&nbsp;10 candidates. </font> </p>     ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2"><span class="titlemark">3.4    </span> <a id="x1-120003.4"></a>The Service Adapter</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">The Service Adapter module has been created to automatically perform the steps&nbsp;2 and&nbsp;3 for the guidelines of Section&nbsp;<a href="#x1-70002.3">2.3</a>. Once a consumer has selected a candidate service, this module performs three different tasks to adapt service interfaces and assemble internal components to it. The first task builds a proxy for the service. Second, the module builds an <span class="ptmri8t-">adapter </span>to map the interface of the proxy onto the abstract interface internal components expect. Third, the module indicates a container how to assemble internal components and adapters, which is done through Dependency Injection (DI), a popular pattern for seamlessly wiring software components together that is employed by many development frameworks. Figure&nbsp;<a href="#x1-120017">7</a> summarizes the steps that are needed to proxy, adapt, and inject services into applications or another service implementation. </font> </p> <hr class="figure">     <div class="figure">                                                                                                                                                                                                             <font face="Verdana" size="2">&nbsp; </font>     <p><font face="Verdana" size="2"><img src="/img/revistas/cleiej/v14n3/3a02f7.jpg">     <br>  </font>  </p>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;7: </span><span class="content">EasySOC steps for outsourcing services.</span></font></div> <font face="Verdana" size="2">     <br> &nbsp; </font>     <p>   </p> </div> <hr class="endfigure"> <font face="Verdana" size="2">     <br> </font>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">The current implementation of the Service Adapter module uses the Axis2 Web Service library for building service proxies, and Spring as the container supporting DI. Building a proxy with Axis2 involves giving as input the interface description of the target service (a WSDL document) to a command line tool. To setup the DI container, the names of dependant components and services must be written in an XML file. For adapting external service interfaces to the expected ones, we have designed an algorithm based on the work published in&nbsp;[<a href="#c21">21</a>]<a name="c21."></a>.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Our algorithm takes two Java interfaces as input, one is the Web Service interface and the other is the interface that the client application expects, and returns the Java code of a service adapter. To do this, it starts by detecting to which operations of the Web Service interface should be mapped the operations offered by the other. The algorithm assesses operation similarity by comparing operation names, comments, data-types and argument names. Data-type similarity is based on a pre-defined similarity table that assigns similarity values to pairs of simple data-types. The similarity between two complex data-types is calculated in a recursive way. Once a pair of operations has been determined, service adapter code is generated. The algorithm adapts simple data-types by taking advantage of type hierarchies and performing explicit conversions, i.e. castings. Complex data-types are resolved recursively as well. Clearly, not all available mismatches can be covered by the algorithm. Therefore, developers should revise the generated code.&nbsp;</font></p>     <p> <font face="Verdana" size="2">In order to quantify the source code quality resulting from employing our plug-in, we conducted a comparison with the more traditional way of consuming Web Services, in which coding the application logic comes after discovering and knowing the description of the external services to be consumed. Basically, we used these two alternatives for developing a simple, personal agenda by outsourcing services from a given data-set comprising several services offering similar functionality but exposed by different providers.&nbsp;</font></p>     <p> <font face="Verdana" size="2">After implementing the two variants, we randomly picked one service already included in the applications and we changed its provider. Then, we took metrics on the resulting source codes to have an assessment of the benefits of the EasySOC guidelines for software maintenance with respect to the traditional approach. To this end, we employed the well-known Source Lines Of Code (SLOC), Efferent Coupling (Ce), Coupling Between Objects (CBO) and Response For Class (RFC) software engineering metrics. </font> </p>     <div class="table">                                                                                                                                                                                                             <font face="Verdana" size="2">                                                                                                                                                                                                                 <br> </font>     <p>   <font face="Verdana" size="2">   <a id="x1-120024"></a></font></p> <hr class="float">     <div class="float">                                                                                                                                                                                                                   <div class="caption"><font face="Verdana" size="2"><span class="id">Table&nbsp;4: </span><span class="content">Personal agenda: Source code metrics.</span></font></div> <font face="Verdana" size="2">     <br>  </font>      ]]></body>
<body><![CDATA[<div class="pic-tabular"> <font face="Verdana" size="2"> <img src="/img/revistas/cleiej/v14n3/3a0232x.png"></font></div>                                                                                                                                                                                                                 </div> <hr class="endfloat">    </div>  <font face="Verdana" size="2">      <br> </font>     <p>   <font face="Verdana" size="2">Table&nbsp;<a href="#x1-120024">4</a> shows the resulting metrics values for the four implementations of the personal agenda: traditional, EasySOC, and two additional variants in which another provider for a service was chosen from the Web Service data-set. For convenience, we labeled each implementation with an identifier (<img src="/img/revistas/cleiej/v14n3/3a0233x.png" alt="id " class="math"> column), which will be used through the rest of the paragraphs of this section. To perform a fair comparison, a uniform formatting standard for all source codes was employed, Java import statements within compilation units were optimized, and the same tool to generate the underlying Web Service proxies was used.&nbsp;</font></p>     <p>   <font face="Verdana" size="2">From Table&nbsp;<a href="#x1-120024">4</a>, it can be seen that the variants using the same set of service providers resulted in equivalent Ce values: 7 for <img src="/img/revistas/cleiej/v14n3/3a0234x.png" alt="T1  " class="math"> and <img src="/img/revistas/cleiej/v14n3/3a0235x.png" alt="   E1  " class="math">, and 10 for <img src="/img/revistas/cleiej/v14n3/3a0236x.png" alt="T2  " class="math"> and <img src="/img/revistas/cleiej/v14n3/3a0237x.png" alt="E2  " class="math">. This means that the variants generated via our plug-in (<img src="/img/revistas/cleiej/v14n3/3a0238x.png" alt="Ex  " class="math">), did not incur in extra efferent couplings with respect to the traditional variants (<img src="/img/revistas/cleiej/v14n3/3a0239x.png" alt="Tx  " class="math">). Moreover, if we do not consider the corresponding service adapters, Ce for the EasySOC variants drops down to zero, because relying on EasySOC effectively push the code that depends on service descriptions out of the application logic. Interestingly, the lower the Ce value is, the less the dependency between the application code and the Web Service descriptions is, which simplifies service replacement.&nbsp;</font></p>     <p>   </p> <hr class="figure">     <div class="figure">                                                                                                                                                                                                             <font face="Verdana" size="2">&nbsp; </font>     <p><font face="Verdana" size="2"><img src="/img/revistas/cleiej/v14n3/3a02f8.jpg">     <br>  </font>  </p>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;8: </span><span class="content">Source Lines of Code of the different applications.</span></font></div> <font face="Verdana" size="2">     <br> &nbsp; </font>     ]]></body>
<body><![CDATA[<p>   </p> </div> <hr class="endfigure"> <font face="Verdana" size="2">     <br> </font>     <p>   <font face="Verdana" size="2">Figure&nbsp;<a href="#x1-120038">8</a> shows the resulting SLOC. Changing the provider for a random service caused the modified versions of the application to incur in a little code overhead with respect to the original versions. The non-adapter classes implemented by <img src="/img/revistas/cleiej/v14n3/3a0240x.png" alt="E1  " class="math"> were not altered by <img src="/img/revistas/cleiej/v14n3/3a0241x.png" alt="E2  " class="math"> at all, whereas in the case of the traditional approach, the incorporation of the new service provider caused the modification of 17&nbsp;lines from <img src="/img/revistas/cleiej/v14n3/3a0242x.png" alt="T1  " class="math"> (more than 7% of its code).&nbsp;</font></p>     <p> <font face="Verdana" size="2">The variants coded under EasySOC had an SLOC greater than that of the traditional variants. However, this difference was caused by the code implementing service adapters. In fact, the non-adapter code was smaller, cleaner and more compact because, unlike its traditional counterpart, it did not include statements for importing/instantiating proxy classes and handling Web Service-specific exceptions. Additionally, there are positive aspects concerning service adapters and SLOC. A large percentage of the service adapter code was generated automatically, which means programming effort was not required. Besides, changing the provider for the target service triggered the automatic generation of a new adapter skeleton, kept the application logic unmodified, and more importantly, allowed the programmer to focus on supporting the alternative service description only in the newly generated adapter class. Conversely, replacing the same service in <img src="/img/revistas/cleiej/v14n3/3a0243x.png" alt="T1  " class="math"> involved the modification of the classes from which the service was accessed (i.e. statements calling methods or data-types defined in the service interface), thus forcing the programmer to modify more code. In addition, this practice might have introduced more bugs into the already built and tested application.&nbsp;</font></p>     <p>   <font face="Verdana" size="2">CBO and RFC metrics were also computed (Figure&nbsp;<a href="#x1-120069">9</a>). Particularly, high CBO is undesirable, because it negatively affects modularity and prevents reuse. The larger the coupling between classes, the higher the sensitivity of a single change in other parts of the application, and therefore maintenance is more difficult. Hence, inter-class coupling, and specially couplings to classes representing (change-prone) service descriptions, should be kept to a minimum. Similarly, low RFC implies better testability and debuggability. In concordance with Ce, which resulted in greater values for the modified variants of the application, CBO for both the traditional approach and EasySOC exhibited increased values when changing the provider for a service. RFC, on the other hand, presented a less uniform behavior. </font> </p> <hr class="figure">     <div class="figure">                                                                                                                                                                                                                                                                                                                                                                                                                          <font face="Verdana" size="2">&nbsp; </font>     <p> <font face="Verdana" size="2"> <img src="/img/revistas/cleiej/v14n3/3a02f9.jpg"> <span class="ptmr8t-x-x-80">(a)</span> <span class="ptmr8t-x-x-80">CBO</span> &nbsp;<a id="x1-12005r2"></a> <img src="/img/revistas/cleiej/v14n3/3a02f10.jpg"> <span class="ptmr8t-x-x-80">(b)</span> <span class="ptmr8t-x-x-80">RFC</span>     <br>  </font>  </p>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;9: </span><span class="content">Coupling Between Objects and Response For Class of the different applications.</span></font></div> <font face="Verdana" size="2">     <br> &nbsp; </font>     ]]></body>
<body><![CDATA[<p>   </p> </div> <hr class="endfigure"> <font face="Verdana" size="2">     <br> </font>     <p> <font face="Verdana" size="2">As quantified by Ce, EasySOC did not reduce the amount of efferent couplings from the package implementing the application logic. Naturally, the reason of this is that the service descriptions to which <img src="/img/revistas/cleiej/v14n3/3a0244x.png" alt="Ex  " class="math"> adhere are exactly the same as <img src="/img/revistas/cleiej/v14n3/3a0245x.png" alt="Tx  " class="math">. However, the EasySOC applications reduced the CBO with respect to the traditional implementations, because the access to the various services utilized by the application, and therefore their associated data-types, is performed within several cohesive compilation units (i.e. adapters) rather than within few, more generic classes. This in turn improves reusability and testability since application logic classes do not directly depend on services.&nbsp;</font></p>     <p>   <font face="Verdana" size="2">As depicted in Figure&nbsp;<a href="#x1-120069">9</a>&nbsp;(b), this separation also helped in achieving better average RFC. Moreover, although the plain sum of the RFC values of the <img src="/img/revistas/cleiej/v14n3/3a0246x.png" alt="Ex  " class="math"> were greater compared to <img src="/img/revistas/cleiej/v14n3/3a0247x.png" alt="Tx  " class="math">, the total RFC of the classes implementing application logic (i.e. without taking into account adapter classes) were both smaller. This suggests that the pure application logic of <img src="/img/revistas/cleiej/v14n3/3a0248x.png" alt="E1  " class="math"> and <img src="/img/revistas/cleiej/v14n3/3a0249x.png" alt="E2  " class="math"> is easier to understand. In large projects, we reasonably argue that much of the source code of EasySOC applications will be application logic instead of service adapters. Therefore, preserving the understandability of this kind of code is crucial. </font> </p>     <p><font face="Verdana" size="2"><span class="titlemark">4    </span> <a id="x1-130004"></a>Related work</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">This work is somehow related to a number of preliminary methodologies that have emerged to address the demand for process guidance for SOC. These methodologies build upon existing techniques, such as EA and BPM, but also agile processes, such as XP and RUP&nbsp;[<a href="#c22">22]</a><a name="c22."></a>. The most exhaustive and complete survey on approaches to SOC-based development is the work by Kohlborn and his colleagues&nbsp;[<a href="#c23">23</a>]<a name="c23."></a>, which in turn builds upon similar previous works&nbsp;[<a href="#c22">22</a>,&nbsp;<a href="#c24">24</a>]<a name="c24."></a>. The authors have reviewed and compared&nbsp;30 service engineering methods according to several dimensions, including <span class="ptmri8t-">SOA (Service-Oriented Architecture) concept</span>, i.e. whether business-level and IT-level services are supported, <span class="ptmri8t-">life-cycle coverage</span>, or the amount of development phases that are supported, and <span class="ptmri8t-">accessibility and validity</span>, i.e. whether such efforts are well-documented and empirically validated, respectively. A business-level service is a set of actions that are performed by and reflect the actual operations of an organization. While IT-level services represent parts of a software system which can be consumed separately and support the execution of business services.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Although the reviewed methods are mostly aimed at providing guidelines at the development process level, and our work does not represent a development methodology per se, the guidelines proposed in this paper are somehow related to these methods in various respects. With regard to the SOA concept dimension, Kohlborn et al. conclude that up to&nbsp;27 approaches provide support for IT-level or software services, only&nbsp;8 methods are properly documented or publicly available, and the common approach to validation is through examples and case studies. Instead, we provide good practices for implementing loosely-coupled applications and software services. Therefore, unlike efforts such as&nbsp;[<a href="#c25">25</a>,&nbsp;<a href="#c26">26</a>]<a name="c25."></a><a name="c26."></a>, we do not address materialization of business services.&nbsp;</font></p>     <p> <font face="Verdana" size="2">With respect to the life-cycle coverage dimension, as our work prescribes well-defined steps for designing services and applications, it complements the existing methods. Specifically, we offer some proven guidelines for deriving understandable and search-effective Web Service descriptions during the service design phase. In addition, we provide guidelines for not only discovering a suitable service, but also decoupling the application for the particular service that it is consuming, which facilitates service replacement. Thus, the guidelines cover the development and maintenance phases of the applications.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Moreover, with respect to the accessibility dimension, we aim at making our best practices fully available in order to allow the SOC community and the software industry to exploit the proposed catalog of best practices, and to provide a tool set for materializing it. The tool set is publicly available for download at the project&rsquo;s Web site (<a href="http://sites.google.com/site/easysoc" class="url"><span class="pcrr8tn-">http://sites.google.com/site/easysoc</span></a>).&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">Regarding the validity dimension, it is worth remarking that the proposed guidelines have been followed to produce SOC-based software by playing both consumer and provider roles, thereby the collected empirical evidence supports that the proposed guidelines are indeed best practices. This aspect also makes our work differ from the WS-I Basic Profile&nbsp;[<a href="#c27">27</a>]<a name="c27."></a>, an industrial effort from the Web Services Interoperability Organization that comprises guidelines for structuring SOAP messages and WSDL documents according to well-defined rules. Besides, the WS-I Basic Profile puts emphasis on interoperability of Web Services and applications, while EasySOC focuses on improving discoverability and maintainability. Therefore, our guidelines and WS-I Basic Profile might be seen as complementary guidelines for Web Service design and implementation. Additionally, another point of difference between our work and efforts like&nbsp;[<a href="#c26">26</a>] is that, at least to the best of our knowledge, EasySOC is the first attempt towards a tool-aided <span class="ptmri8t-">step-by-step </span>guide for materializing both Web Services and client applications.&nbsp;</font></p>     <p>    </p>     <p><font face="Verdana" size="2"><span class="titlemark">5    </span> <a id="x1-140005"></a>Conclusions</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">The software industry is embracing the SOC paradigm as the premier approach for achieving integration as well as interoperability in heterogeneous, distributed computing environments. However, SOC presents many intrinsic challenges that both Web Service providers and consumers must unavoidable face.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Historically, catalogs of best practices have been widely recognized as a very valuable and helpful mean for software practitioners to deal with common problems in many different contexts. In this sense, this paper presented a set of concrete, proven guidelines for avoiding recurrent problems when developing Web Services and client applications. The proposed catalog is a set of 3&nbsp;guidelines comprising 16&nbsp;steps. One guideline is intended for allowing potential consumers to effectively discover, understand and access them. This guideline has two sub-guidelines. Firstly, one sub-guideline covers 6&nbsp;steps that service providers should take into consideration when exposing their services using the contract-first method. Secondly, another sub-guideline presents 4&nbsp;steps to be followed when using code-first. The other two guidelines cover aspects that service consumers should consider when discovering and consuming services. Regarding discovery, the proposed guideline consists of 3&nbsp;steps that should be followed to easily build effective queries, which alleviates consumers&rsquo; task by narrowing down the number of candidate services. With respect to service consumption, following the 3&nbsp;steps of the associated guideline results in more maintainable code within client applications, but also in those services that invoke other services to accomplish their tasks.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The practical implications of each guideline have been corroborated experimentally, which suggests that the guidelines can be conceived as being best practices and can be readily employed in the software industry. In particular, we have assessed the impact of removing WSDL discoverability anti-patterns from Web Service descriptions, by employing three registries simultaneously supporting service discovery and human consumers, who had the final word on which service is more appropriate. Results showed that improved descriptions are easier to understand than their &ldquo;raw&rdquo; counterpart&nbsp;[<a href="#c10">10]</a>. Similarly, the positive effect on service discovery of the guideline for generating and expanding queries has been also measured&nbsp;[<a href="#c6">6</a>]. Also, the implications on clients&rsquo; maintenance of the corresponding guidelines have been formally and experimentally shown in&nbsp;[<a href="#c7">7</a>] and&nbsp;[<a href="#c8">8</a>] respectively.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Clearly, building truly loose coupled client applications using the corresponding guidelines imposes a radical shift in the way such applications are developed. This means that a company willing to employ EasySOC to start producing service-oriented applications would have to invest much time in training its development team, which results in a costly start-up curve. The impact of EasySOC on the software development process itself from an engineering point of view has been empirically assessed in&nbsp;[<a href="#c9">9</a>]. Concretely, we performed further experiments to test the following hypothesis that understanding pervasive design patterns (i.e. Adapter and DI) and the "first build your application and then servify it" philosophy are the only required intellectual activities to start developing service-oriented applications with EasySOC, which should sharpen the associated learning curve. The hypothesis has been confirmed with&nbsp;45 postgraduate and undergraduate students of the Systems Engineering program at the UNICEN during 2009. Results showed that they perceived that the proposed approach is convenient and easily to adopt.&nbsp;</font></p>     <p>   <font face="Verdana" size="2">In the near future, we will conduct experiments with other students and real development teams to further validate our claims.&nbsp;</font></p>     <p>    </p>     ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2"><a id="x1-150005"></a>Acknowledgments</font></p>  <font face="Verdana" size="2">      <br> </font>     <p><font face="Verdana" size="2">We thank the SCCC&rsquo;10 chair Dr. Sergio F. Ochoa and the anonymous referees for their helpful comments to improve the paper. We also acknowledge the financial support provided by ANPCyT through grant PAE-PICT 2007-02311.&nbsp;</font></p>     <p>    </p>     <p><font face="Verdana" size="2"><a id="x1-160005"></a>References</font></p>  <font face="Verdana" size="2">      <br> </font>     <p>     </p>     <div class="thebibliography">          <p><font face="Verdana" size="2"><span class="biblabel">  <a name="c1"></a>[<a href="#c1.">1]</a> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>J.&nbsp;Erickson and K.&nbsp;Siau, &ldquo;Web Service, Service-Oriented Computing, and Service-Oriented Architecture: Separating hype from reality,&rdquo; <span class="ptmri8t-">Journal of Database Management</span>, vol.&nbsp;19, no.&nbsp;3, pp. 42&ndash;54, 2008. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel">  <a name="c2"></a>[<a href="#c2.">2</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>M.&nbsp;Campbell-Kelly, &ldquo;The rise, fall, and resurrection of software as a service,&rdquo; <span class="ptmri8t-">Communications of the ACM</span>, vol.&nbsp;52, no.&nbsp;5,     pp. 28&ndash;30, 2009. </font>     </p>           ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2"><span class="biblabel">  <a name="c3"></a>[<a href="#c3.">3</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>W3C     Consortium, &ldquo;SOAP version 1.2 part 1: Messaging framework,&rdquo; W3C Recommendation, <a href="http://www.w3.org/TR/soap12-part1" class="url">http://www.w3.org/TR/soap12-part1</a>,     Jun. 2007. </font>                                                                                                                                                                                                                 </p>           <!-- ref --><p><font face="Verdana" size="2"><span class="biblabel">  <a name="c4"></a>[<a href="#c4.">4</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>T.&nbsp;Erl, <span class="ptmri8t-">SOA Principles of Service Design</span>.    Prentice Hall, 2007.     </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel">  <a name="c5"></a>[<a href="#c5.">5</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>M.&nbsp;Crasso, J.&nbsp;M. Rodriguez, A.&nbsp;Zunino, and M.&nbsp;Campo, &ldquo;Revising WSDL documents: Why and how,&rdquo; <span class="ptmri8t-">IEEE Internet</span>     <span class="ptmri8t-">Computing</span>, vol.&nbsp;14, no.&nbsp;5, pp. 30&ndash;38, 2010. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel">  <a name="c6"></a>[<a href="#c6.">6</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>M.&nbsp;Crasso, A.&nbsp;Zunino, and M.&nbsp;Campo, &ldquo;Combining query-by-example and query expansion for simplifying Web Service discovery,&rdquo; <span class="ptmri8t-">Information Systems Frontiers</span>, 2009, to appear. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel">  <a name="c7"></a>[<a href="#c7.">7</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>C.&nbsp;Mateos, M.&nbsp;Crasso, A.&nbsp;Zunino, and M.&nbsp;Campo, &ldquo;Separation of concerns in service-oriented applications based on pervasive design patterns,&rdquo; in <span class="ptmri8t-">Web Technology Track (WT) - 25th ACM Symposium on Applied Computing (SAC &rsquo;10)</span>.    ACM     Press, 2010, pp. 2509&ndash;2513. </font>     </p>       <ul>       <li><font face="Verdana" size="2"><span class="biblabel">  <a name="c8"></a>[<a href="#c8.">8</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>M.&nbsp;Crasso, C.&nbsp;Mateos, A.&nbsp;Zunino, and M.&nbsp;Campo, &ldquo;EasySOC: Making Web Service outsourcing easier,&rdquo; <span class="ptmri8t-">Information</span>     <span class="ptmri8t-">Sciences (SI: Applications of Computational Intelligence and Machine Learning to Software Engineering)</span>, 2010.   </font>     </li>     </ul>           <p><font face="Verdana" size="2"><span class="biblabel">  <a name="c9"></a>[<a href="#c9.">9]</a> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>C.&nbsp;Mateos, M.&nbsp;Crasso, A.&nbsp;Zunino, and M.&nbsp;Campo, &ldquo;An evaluation on developer&rsquo;s acceptance of EasySOC: A development model for Service-Oriented Computing,&rdquo; in <span class="ptmri8t-">11th Argentine Symposium on Software Engineering (ASSE2010) - 39th JAIIO</span>.     SADIO, 2010. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c10"></a>[<a href="#c10.">10</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>J.&nbsp;M. Rodriguez, M.&nbsp;Crasso, A.&nbsp;Zunino, and M.&nbsp;Campo, &ldquo;Improving Web Service descriptions for effective service discovery,&rdquo; <span class="ptmri8t-">Science of Computer Programming</span>, vol.&nbsp;75, no.&nbsp;11, pp. 1001&ndash;1021, 2010. </font>     </p>           ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2"><span class="biblabel"> <a name="c11"></a>[<a href="#c11.">11</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>R.&nbsp;A. Van Engelen and K.&nbsp;A. Gallivan, &ldquo;The gsoap toolkit for web services and peer-to-peer computing networks,&rdquo; in <span class="ptmri8t-">2nd IEEE/ACM International Symposium on Cluster Computing and the Grid (CCGRID &rsquo;02)</span>.    Washington, DC, USA: IEEE     Computer Society, 2002, pp. 128&ndash;135. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c12"></a>[12] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>Apache Software Foundation, &ldquo;Apache CXF: An Open Source Service Framework,&rdquo; <a href="http://cxf.apache.org" class="url">http://cxf.apache.org</a>, 2009. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c13"></a>[13] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>I.&nbsp;Androutsopoulos and P.&nbsp;Malakasiotis, &ldquo;A survey of paraphrasing and textual entailment methods,&rdquo; <span class="ptmri8t-">Journal of Artificial</span>     <span class="ptmri8t-">Intelligence Research</span>, vol.&nbsp;38, pp. 135&ndash;187, May 2010. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c14"></a>[<a href="#c14.">14</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>E.&nbsp;Al-Masri and Q.&nbsp;H. Mahmoud, &ldquo;WSB: A broker-centric framework for quality-driven web service discovery,&rdquo; <span class="ptmri8t-">Software:</span>     <span class="ptmri8t-">Practice and Experience</span>, vol.&nbsp;40, pp. 917&ndash;941, Sep. 2010. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c15"></a>[<a href="#c15.">15</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>E.&nbsp;Al-Masri and Q.&nbsp;H. Mahmoud, &ldquo;Qos-based discovery and ranking of Web Services,&rdquo; in <span class="ptmri8t-">16th International Conference</span>     <span class="ptmri8t-">on Computer Communications and Networks (ICCCN&rsquo;07)</span>, 2007, pp. 529&ndash;534. </font>                                                                                                                                                                                                                 </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c16"></a>[<a href="#c16.">16]</a> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>S.&nbsp;Chidamber and C.&nbsp;Kemerer, &ldquo;A metrics suite for object oriented design,&rdquo; <span class="ptmri8t-">IEEE Transactions on Software Engineering</span>,     vol.&nbsp;20, no.&nbsp;6, pp. 476&ndash;493, 1994. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c17"></a>[<a href="#c17.">17</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>J.&nbsp;Pasley, &ldquo;Avoid XML schema wildcards for Web Service interfaces,&rdquo; <span class="ptmri8t-">IEEE Internet Computing</span>, vol.&nbsp;10, no.&nbsp;3, pp. 72&ndash;79,     May-June 2006. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c18"></a>[<a href="#c18.">18]</a> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>M.&nbsp;Grechanik, C.&nbsp;Fu, Q.&nbsp;Xie, C.&nbsp;McMillan, D.&nbsp;Poshyvanyk, and C.&nbsp;Cumby, &ldquo;A search engine for finding highly relevant applications,&rdquo; in <span class="ptmri8t-">32nd ACM/IEEE International Conference on Software Engineering (ICSE &rsquo;10), Cape Town, South Africa</span>.     New York, NY, USA: ACM Press, 2010, pp. 475&ndash;484. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c19"></a>[<a href="#c19.">19]</a> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>S.&nbsp;Stigler, &ldquo;Fisher and the 5% level,&rdquo; <span class="ptmri8t-">Chance</span>, vol.&nbsp;21, pp. 12&ndash;12, 2008. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c20"></a>[<a href="#c20.">20</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>E.&nbsp;E. Allen and R.&nbsp;Cartwright, &ldquo;Safe instantiation in generic java,&rdquo; <span class="ptmri8t-">Science of Computer Programming</span>, vol.&nbsp;59, no. 1-2,     pp. 26 &ndash; 37, 2006, special Issue on Principles and Practices of Programming in Java (PPPJ 2004). </font>     </p>           ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2"><span class="biblabel"> <a name="c21"></a>[<a href="#c21.">21</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>E.&nbsp;Stroulia and Y.&nbsp;Wang, &ldquo;Structural and semantic matching for assessing Web Service similarity,&rdquo; <span class="ptmri8t-">International Journal</span>     <span class="ptmri8t-">of Cooperative Information Systems</span>, vol.&nbsp;14, no.&nbsp;4, pp. 407&ndash;438, 2005. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c22"></a>[<a href="#c22.">22</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>E.&nbsp;Ramollari, D.&nbsp;Dranidis, and A.&nbsp;Simons, &ldquo;A survey of service oriented development methodologies,&rdquo; in <span class="ptmri8t-">2nd European</span>     <span class="ptmri8t-">Young Researchers Workshop on Service Oriented Computing (YR-SOC 2007)</span>, 2007. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c23"></a>[<a href="#c23.">23</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>T.&nbsp;Kohlborn, A.&nbsp;Korthaus, T.&nbsp;Chan, and M.&nbsp;Rosemann, &ldquo;Identification and analysis of business and software services - a consolidated approach,&rdquo; <span class="ptmri8t-">IEEE Transactions on Services Computing</span>, vol.&nbsp;2, no.&nbsp;1, pp. 50&ndash;64, 2009. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c24"></a>[<a href="#c24.">24</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>F.&nbsp;Kohlmann and R.&nbsp;Alt, &ldquo;Business-driven service modelling - a methodological approach from the finance industry,&rdquo; in <span class="ptmri8t-">1st</span>     <span class="ptmri8t-">International Working Conference on Business Process and Services Computing (BPSC&rsquo;07)</span>, ser. Lecture Notes in Informatics,     W.&nbsp;Abramowicz and L.&nbsp;Maciaszek, Eds., vol. 116.    GI, 2007, pp. 180&ndash;193. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c25"></a>[<a href="#c25.">25]</a> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>D.&nbsp;Flaxer and A.&nbsp;Nigam, &ldquo;Realizing business components, business operations and business services,&rdquo; in <span class="ptmri8t-">IEEE</span>     <span class="ptmri8t-">International Conference on E-Commerce Technology for Dynamic E-Business (CEC-EAST&rsquo;04)</span>.     IEEE Computer Society,     2004, pp. 328&ndash;332. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c26"></a><a href="#c26.">[26</a>] <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>M.&nbsp;Papazoglou and W.-J. van den Heuvel, &ldquo;Service-oriented design and development methodology,&rdquo; <span class="ptmri8t-">International Journal</span>     <span class="ptmri8t-">of Web Engineering and Technology</span>, vol.&nbsp;2, no.&nbsp;4, pp. 412&ndash;442, 2006. </font>     </p>           <p><font face="Verdana" size="2"><span class="biblabel"> <a name="c27"></a>[<a href="#c27.">27] </a><span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span>R.&nbsp;Chumbley, J.&nbsp;Durand, G.&nbsp;Pilz, and T.&nbsp;Rutt, &ldquo;Basic profile version 2.0,&rdquo; <a href="http://ws-i.org/profiles/BasicProfile-2.0-WGD.html" class="url">http://ws-i.org/profiles/BasicProfile-2.0-WGD.html</a>, Mar. 2010. </font>                                                                                                                                                                                                             </p>      </div>            ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Erickson]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Siau]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Web Service, Service-Oriented Computing, and Service-Oriented Architecture: Separating hype from reality]]></article-title>
<source><![CDATA[Journal of Database Management]]></source>
<year>2008</year>
<volume>19</volume>
<numero>3</numero>
<issue>3</issue>
<page-range>42-54</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[Campbell-Kelly]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[The rise, fall, and resurrection of software as a service]]></article-title>
<source><![CDATA[Communications of the ACM]]></source>
<year>2009</year>
<volume>52</volume>
<numero>5</numero>
<issue>5</issue>
<page-range>28-30</page-range></nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="book">
<collab>W3C Consortium</collab>
<source><![CDATA[SOAP version 1.2 part 1: Messaging framework]]></source>
<year>Jun.</year>
<month> 2</month>
<day>00</day>
<publisher-name><![CDATA[W3C Recommendation]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Erl]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
</person-group>
<source><![CDATA[SOA Principles of Service Design]]></source>
<year>2007</year>
<publisher-name><![CDATA[Prentice Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Crasso]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Rodriguez]]></surname>
<given-names><![CDATA[J. M]]></given-names>
</name>
<name>
<surname><![CDATA[Zunino]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Campo]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Revising WSDL documents: Why and how]]></article-title>
<source><![CDATA[IEEE Internet Computing]]></source>
<year>2010</year>
<volume>14</volume>
<numero>5</numero>
<issue>5</issue>
<page-range>30-38</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[Crasso]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Zunino]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Campo]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Combining query-by-example and query expansion for simplifying Web Service discovery]]></article-title>
<source><![CDATA[Information Systems Frontiers]]></source>
<year>2009</year>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Mateos]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Crasso]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Zunino]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Campo]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Separation of concerns in service-oriented applications based on pervasive design patterns]]></article-title>
<collab>Web Technology Track</collab>
<source><![CDATA[25th ACM Symposium on Applied Computing (SAC &#8217;10)]]></source>
<year>2010</year>
<page-range>2509-2513</page-range><publisher-name><![CDATA[ACM Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Crasso]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Mateos]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Zunino]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Campo]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<source><![CDATA[EasySOC: Making Web Service outsourcing easier: Information Sciences (SI: Applications of Computational Intelligence and Machine Learning to Software Engineering)]]></source>
<year>2010</year>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Mateos]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Crasso]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Zunino]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Campo]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An evaluation on developer&#8217;s acceptance of EasySOC: A development model for Service-Oriented Computing]]></article-title>
<source><![CDATA[11th Argentine Symposium on Software Engineering (ASSE2010): 39th JAIIO]]></source>
<year>2010</year>
<publisher-name><![CDATA[SADIO]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Rodriguez]]></surname>
<given-names><![CDATA[J. M]]></given-names>
</name>
<name>
<surname><![CDATA[Crasso]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Zunino]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Campo]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Improving Web Service descriptions for effective service discovery]]></article-title>
<source><![CDATA[Science of Computer Programming]]></source>
<year></year>
<volume>75</volume>
<numero>11</numero>
<issue>11</issue>
<page-range>1001-1021</page-range></nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Van Engelen]]></surname>
<given-names><![CDATA[R. A]]></given-names>
</name>
<name>
<surname><![CDATA[Gallivan]]></surname>
<given-names><![CDATA[K. A]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[The gsoap toolkit for web services and peer-to-peer computing networks]]></article-title>
<source><![CDATA[2nd IEEE/ACM International Symposium on Cluster Computing and the Grid: CCGRID &#8217;02]]></source>
<year>2002</year>
<page-range>128-135</page-range><publisher-loc><![CDATA[Washington^eDC DC]]></publisher-loc>
<publisher-name><![CDATA[IEEE Computer Society]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="">
<collab>Apache Software Foundation</collab>
<source><![CDATA[Apache CXF: An Open Source Service Framework]]></source>
<year>2009</year>
</nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Androutsopoulos]]></surname>
<given-names><![CDATA[I]]></given-names>
</name>
<name>
<surname><![CDATA[Malakasiotis]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A survey of paraphrasing and textual entailment methods]]></article-title>
<source><![CDATA[Journal of Artificial Intelligence Research]]></source>
<year>May </year>
<month>20</month>
<day>10</day>
<volume>38</volume>
<page-range>135-187</page-range></nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Al-Masri]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Mahmoud]]></surname>
<given-names><![CDATA[Q. H]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[WSB: A broker-centric framework for quality-driven web service discovery]]></article-title>
<source><![CDATA[Software: Practice and Experience]]></source>
<year>Sep.</year>
<month> 2</month>
<day>01</day>
<volume>40</volume>
<page-range>917-941</page-range></nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Al-Masri]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Mahmoud]]></surname>
<given-names><![CDATA[Q. H]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Qos-based discovery and ranking of Web Services]]></article-title>
<source><![CDATA[16th International Conference on Computer Communications and Networks: ICCCN&#8217;07]]></source>
<year>2007</year>
<page-range>529-534</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[Chidamber]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Kemerer]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A metrics suite for object oriented design]]></article-title>
<source><![CDATA[IEEE Transactions on Software Engineering]]></source>
<year>1994</year>
<volume>20</volume>
<numero>6</numero>
<issue>6</issue>
<page-range>476-493</page-range></nlm-citation>
</ref>
<ref id="B17">
<label>17</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Pasley]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Avoid XML schema wildcards for Web Service interfaces]]></article-title>
<source><![CDATA[IEEE Internet Computing]]></source>
<year>May-</year>
<month>Ju</month>
<day>ne</day>
<volume>10</volume>
<numero>3</numero>
<issue>3</issue>
<page-range>72-79</page-range></nlm-citation>
</ref>
<ref id="B18">
<label>18</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Grechanik]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Fu]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Xie]]></surname>
<given-names><![CDATA[Q]]></given-names>
</name>
<name>
<surname><![CDATA[McMillan]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Poshyvanyk]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Cumby]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A search engine for finding highly relevant applications]]></article-title>
<source><![CDATA[ACM/IEEE International Conference on Software Engineering: ICSE &#8217;10]]></source>
<year>2010</year>
<page-range>475-484</page-range><publisher-loc><![CDATA[^eNew York New York]]></publisher-loc>
<publisher-name><![CDATA[ACM Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B19">
<label>19</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Stigler]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[Fisher and the 5% level: Chance]]></source>
<year>2008</year>
<volume>21</volume>
<page-range>12-12</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[Allen]]></surname>
<given-names><![CDATA[E. E]]></given-names>
</name>
<name>
<surname><![CDATA[Cartwright]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Safe instantiation in generic java]]></article-title>
<source><![CDATA[Science of Computer Programming]]></source>
<year>2006</year>
<volume>59</volume>
<numero>1-2</numero>
<issue>1-2</issue>
<page-range>26 - 37</page-range></nlm-citation>
</ref>
<ref id="B21">
<label>21</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Stroulia]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Wang]]></surname>
<given-names><![CDATA[Y]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Structural and semantic matching for assessing Web Service similarity]]></article-title>
<source><![CDATA[International Journal of Cooperative Information Systems]]></source>
<year>2005</year>
<volume>14</volume>
<numero>4</numero>
<issue>4</issue>
<page-range>407-438</page-range></nlm-citation>
</ref>
<ref id="B22">
<label>22</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Ramollari]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Dranidis]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Simons]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A survey of service oriented development methodologies]]></article-title>
<source><![CDATA[2nd European Young Researchers Workshop on Service Oriented Computing: YR-SOC 2007]]></source>
<year>2007</year>
</nlm-citation>
</ref>
<ref id="B23">
<label>23</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kohlborn]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
<name>
<surname><![CDATA[Korthaus]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Chan]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
<name>
<surname><![CDATA[Rosemann]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Identification and analysis of business and software services: a consolidated approach]]></article-title>
<source><![CDATA[IEEE Transactions on Services Computing]]></source>
<year>2009</year>
<volume>2</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>50-64</page-range></nlm-citation>
</ref>
<ref id="B24">
<label>24</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kohlmann]]></surname>
<given-names><![CDATA[F]]></given-names>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
<surname><![CDATA[Abramowicz]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
<name>
<surname><![CDATA[Maciaszek]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
</person-group>
<source><![CDATA[1st International Working Conference on Business Process and Services Computing]]></source>
<year>2007</year>
<volume>116</volume>
<page-range>180-193</page-range><publisher-name><![CDATA[Lecture Notes in Informatics]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B25">
<label>25</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Flaxer]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Nigam]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Realizing business components, business operations and business services]]></article-title>
<source><![CDATA[IEEE International Conference on E-Commerce Technology for Dynamic E-Business: CEC-EAST&#8217;04]]></source>
<year>2004</year>
<page-range>328-332</page-range><publisher-name><![CDATA[IEEE Computer Society]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B26">
<label>26</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Papazoglou]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[van den Heuvel]]></surname>
<given-names><![CDATA[W.-J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Service-oriented design and development methodology]]></article-title>
<source><![CDATA[International Journal of Web Engineering and Technology]]></source>
<year></year>
<volume>2</volume>
<numero>4</numero>
<issue>4</issue>
<page-range>412-442</page-range></nlm-citation>
</ref>
<ref id="B27">
<label>27</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Chumbley]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Durand]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Pilz]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[Rutt]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
</person-group>
<source><![CDATA[Basic profile version 2.0]]></source>
<year>Mar.</year>
<month> 2</month>
<day>01</day>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
