<?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>0012-7353</journal-id>
<journal-title><![CDATA[DYNA]]></journal-title>
<abbrev-journal-title><![CDATA[Dyna rev.fac.nac.minas]]></abbrev-journal-title>
<issn>0012-7353</issn>
<publisher>
<publisher-name><![CDATA[Universidad Nacional de Colombia]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0012-73532012000200010</article-id>
<title-group>
<article-title xml:lang="en"><![CDATA[DEFINITION OF A SEMANTIC PLATAFORM FOR AUTOMATED CODE GENERATION BASED ON UML CLASS DIAGRAMS AND DSL SEMANTIC ANNOTATIONS]]></article-title>
<article-title xml:lang="es"><![CDATA[DEFINICIÓN DE UNA PLATAFORMA SEMÁNTICA PARA LA GENERACIÓN AUTOMÁTICA DE CÓDIGO BASADA EN DIAGRAMAS DE CLASES UML Y ANOTACIONES SEMÁNTICAS EN UN DSL]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[MUÑETÓN]]></surname>
<given-names><![CDATA[ANDRÉS]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[ZAPATA]]></surname>
<given-names><![CDATA[CARLOS]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Pontificia Bolivariana  ]]></institution>
<addr-line><![CDATA[Medellín ]]></addr-line>
</aff>
<aff id="A02">
<institution><![CDATA[,Universidad Nacional de Colombia  ]]></institution>
<addr-line><![CDATA[Medellín ]]></addr-line>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>04</month>
<year>2012</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>04</month>
<year>2012</year>
</pub-date>
<volume>79</volume>
<numero>172</numero>
<fpage>94</fpage>
<lpage>100</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S0012-73532012000200010&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S0012-73532012000200010&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S0012-73532012000200010&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="en"><p><![CDATA[In this paper, we propose a semantic service platform for implementing the steps of a semantic- and model-driven architecture (MDA)-based method for automated code generation. The code generation is achieved by semantically relating operations in unified modeling language (UML) class diagrams with implemented operations. The relationship among operations is achieved by finding implemented operations with the same post-condition of the operation under implementation. The resultant code is a sequence of invocations to the implemented operations which, acting as a whole, achieve the post-condition of the operation under implementation. Semantics is specified by means of a domain-specific language (DSL), also defined in this paper. Services of the platform and the method are shown in execution in a case study.]]></p></abstract>
<abstract abstract-type="short" xml:lang="es"><p><![CDATA[En este trabajo se propone una plataforma semántica de servicios que implementan los pasos de un método para la generación automática de código. El método se basa en información semántica y en MDA (model-driven architecture). La generación de código se logra relacionando semánticamente operaciones en diagramas de clases en UML (unified modeling language) con operaciones implementadas. La relación entre operaciones se hace consultando operaciones implementadas que tengan la misma postcondición de la operación bajo implementación. El código resultante es una secuencia de invocaciones a operaciones implementadas que, en conjunto, alcancen la postcondición de la operación bajo implementación. La semántica se especifica mediante un DSL (domain-specific language), también definido en este artículo. Los servicios de la plataforma y el método se prueban mediante un caso de estudio.]]></p></abstract>
<kwd-group>
<kwd lng="en"><![CDATA[Code generation]]></kwd>
<kwd lng="en"><![CDATA[automation]]></kwd>
<kwd lng="en"><![CDATA[MDA]]></kwd>
<kwd lng="en"><![CDATA[semantic]]></kwd>
<kwd lng="en"><![CDATA[platform]]></kwd>
<kwd lng="en"><![CDATA[software engineering]]></kwd>
<kwd lng="es"><![CDATA[Generación de código]]></kwd>
<kwd lng="es"><![CDATA[automatización]]></kwd>
<kwd lng="es"><![CDATA[MDA]]></kwd>
<kwd lng="es"><![CDATA[semántica]]></kwd>
<kwd lng="es"><![CDATA[plataforma]]></kwd>
<kwd lng="es"><![CDATA[ingeniería de software]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <p align="center"><font size="4" face="Verdana, Arial, Helvetica, sans-serif"><b>DEFINITION  OF A SEMANTIC PLATAFORM FOR AUTOMATED CODE GENERATION BASED ON UML CLASS  DIAGRAMS AND DSL SEMANTIC ANNOTATIONS</b></font></p>     <p align="center"><i><font size="3"><b><font face="Verdana, Arial, Helvetica, sans-serif">DEFINICI&Oacute;N DE UNA PLATAFORMA SEM&Aacute;NTICA PARA LA GENERACI&Oacute;N  AUTOM&Aacute;TICA DE C&Oacute;DIGO BASADA EN DIAGRAMAS DE CLASES UML Y ANOTACIONES SEM&Aacute;NTICAS  EN UN DSL</font></b></font></i></p>     <p align="center">&nbsp;</p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>ANDR&Eacute;S MU&Ntilde;ET&Oacute;N</b>    <br>   <i>M.Sc, Universidad Pontificia Bolivariana, Medell&iacute;n, <a href="mailto:andres.muneton@upb.edu.co">andres.muneton@upb.edu.co</a></i></font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>CARLOS ZAPATA</b>    <br>   <i>Ph.D. Universidad Nacional de Colombia, Medell&iacute;n, <a href="mailto:cmzapata@unal.edu.co">cmzapata@unal.edu.co</a></i></font></p>     <p align="center">&nbsp;</p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>Received for review July 6<sup>th</sup>, 2011, accepted November 12<sup>th</sup>, 2011, final version January, 11<sup>th</sup>, 2012</b></font></p>     <p>&nbsp;</p> <hr>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>ABSTRACT:</b> In this paper, we propose a semantic service platform for implementing the steps of a semantic- and model-driven architecture (MDA)-based method for automated code generation. The code generation is achieved by semantically relating operations in unified modeling language (UML) class diagrams with implemented operations. The relationship among operations is achieved by finding implemented operations with the same post-condition of the operation under implementation. The resultant code is a sequence of invocations to the implemented operations which, acting as a whole, achieve the post-condition of the operation under implementation. Semantics is specified by means of a domain-specific language (DSL), also defined in this paper. Services of the platform and the method are shown in execution in a case study. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>KEYWORDS:</b> Code generation, automation, MDA, semantic, platform, software engineering.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>RESUMEN:</b> En este trabajo se propone una plataforma sem&aacute;ntica de servicios que implementan los pasos de un m&eacute;todo para la generaci&oacute;n autom&aacute;tica de c&oacute;digo. El m&eacute;todo se basa en informaci&oacute;n sem&aacute;ntica y en MDA (model-driven architecture). La generaci&oacute;n de c&oacute;digo se logra relacionando sem&aacute;nticamente operaciones en diagramas de clases en UML (unified modeling language) con operaciones implementadas. La relaci&oacute;n entre operaciones se hace consultando operaciones implementadas que tengan la misma postcondici&oacute;n de la operaci&oacute;n bajo implementaci&oacute;n. El c&oacute;digo resultante es una secuencia de invocaciones a operaciones implementadas que, en conjunto, alcancen la postcondici&oacute;n de la operaci&oacute;n bajo implementaci&oacute;n. La sem&aacute;ntica se especifica mediante un DSL (domain-specific language), tambi&eacute;n definido en este art&iacute;culo. Los servicios de la plataforma y el m&eacute;todo se prueban mediante un caso de estudio. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>PALABRAS CLAVE:</b> Generaci&oacute;n de c&oacute;digo, automatizaci&oacute;n, MDA, sem&aacute;ntica, plataforma, ingenier&iacute;a de software.</font></p> <hr>     <p>&nbsp;</p>     <p><b><font size="3" face="Verdana, Arial, Helvetica, sans-serif">1. INTRODUCTION</font></b></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Automation in software development is a very important topic of research and application. By using automated activities, the development process makes the team more agile so that they may spend time in more crucial activities besides manual processes. In other words, automation supports the engineering approach to software development. Some examples of automated activities in software development are: generating source codes, testing (e.g., unit and user acceptance tests [1]), integrating [2], and delivering [3]. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Current code generation proposals exhibit some problems: They still offer partial results or they are too formal to be fully implemented and useful for the industry. Three main sets of proposals have been identified: code generation from graph models, code generation from formal representations, and code generation from a mixture of graph and textual expressions. Purely graph-based approaches [4-5] have limitations due to the expressiveness flaws of graph languages. On the other hand, formal proposals use formal languages to specify every aspect of the system and, consequently, generate the entire code [6]. Also, formal languages are hard to learn and apply. Finally, some researchers have opted for a combination of models and textual specifications [7-8]. However, these proposals are too close to the platform or suitable only for a very specific domain.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Zapata and Mu&ntilde;et&oacute;n [9] have proposed a basic method for code generation from the UML meta-model instances and semantic annotations. With this method, the code is intended to be generated by using a set of transformation rules defined by Mu&ntilde;et&oacute;n et al. [10] and database single-semantic operations like &quot;insert,&quot; &quot;update,&quot; and &quot;delete.&quot; </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In this paper, we propose a semantic platform for automated code generation. This platform improves the previous method of Zapata and Mu&ntilde;et&oacute;n [9] in supporting more complex operations by using a model-driven architecture (MDA)-based structure and including steps that are more formal.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">This paper is structured as follows: In the next section, we give an overview of proposals and platforms for code generation. Then, in Sections 3 and 4 we present the improved method of code generation, and a semantic platform that implements this method, respectively. Section 5 shows an example of the application of the method in the platform, and finally, conclusions and future work are stated.</font></p>     <p>&nbsp;</p>     <p><b><font size="3" face="Verdana, Arial, Helvetica, sans-serif">2. RELATED WORK</font></b></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">From a state-of-the-art review in code generation, three main sets of proposals have been identified: code generation from graph models, code generation from formal representations, and code generation from a mixture of graph and textual expressions-both in formal representations or using domain-specific languages (DSLs). This section presents some approaches for each type. At the end of the section, we will discuss the main issues concerning these approaches.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">There are several proposals for accomplishing automatic code generation by using graph transformations, most of them under the MDA scope. Cooper et al. [4] allow code generation from models to aspects in AspectJ, a java implementation of aspect-oriented programming (AOP). The transformation among models is accomplished by means of Extensible Markup Language (XML) specifications and meta-models of XML and AspectJ. The code is generated from the XML specifications and the aspects are controlled in the system by throwing and handling exceptions. Nassar et al. [5] propose a method for code generation by merging use-case-based view point models, logic, component, and deployment. The models are stereotyped according to elements of VUML (View-based Unified Modeling Language) and, then, transformed into code by using predefined rules specified in the ATLAS Transformation Language (ATL). The aim of the generated code is to manage the different views of the system, excluding business logic. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In contrast to graph transformation approaches, some proposals use a formal language as a source model for code generation. They use formal languages due to their well-defined semantic. This is the case of PADL2Java [6], which defines transformation rules to generate code in Java from specifications in an algebraic formal language called PADL. The system is completely specified on PADL, easing the process for generating both structural and behavioral codes. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Finally, some researchers have opted for a combination of models and textual specifications, and the benefits of both. Fang [7] combines modeling patterns and action semantic with MDA to create applications for a specific platform, called EJB. Patterns and platform are expressed with UML and action semantic representations. The latter is based on the UML meta-model. Although the use of meta-models could allow for the extension of the method to other platforms, the strong link between patterns and the platform could make this step difficult. Also, in some cases the code obtained from patterns is structural and not behavioral. S&aacute;nchez et al. [8] shows a graphic DSL for the home automation domain. The structure of the DSL is composed of so-called functional units, common functionalities on the domain (e.g., light power on/off or lighting level regulation associated to services like dimmers and timers.) A program with DSL consists of a sequence of services and its actions. The code generated is fully executable due to the defined behavior exhibited by every functional unit, which acts as a code template. The DSL has an internal XML representation, the main source of the transformation rules. The proposal is domain-platform independent because its structure is flexible enough to allow for the implementation of new services and functional units in several devices and platforms. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The use of formal specifications for modeling the code generation process has some drawbacks. Designers and developers are accustomed to use graph models, especially in UML-the de facto standard for modeling-and, additionally, formal languages could be harder to learn and apply. Also, the need for writing the entire code of the system in a source model is a negative factor, no matter whether the code was written using a formal language or the benefits of it. On the other hand, purely graphical approaches have limitations too, due to the flaws of graph languages. Despite its evolution to languages closer to code-UML, for example-it is still difficult to express any aspect of a system with enough level of detail for code generation. The recent approaches show that MDA is still in a stage of development, especially in core aspects such as the platform independent model (PIM)-to-platform specific model (PSM) transformation. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The principal flaw of the aforementioned proposals is related to behavioral code-the code of the methods-which is not generated or predefined as a template. Formal methods have exceptions to this fact, because they can generate the entire code of a system, but starting from a complete source code in a formal language. DSLs act as alternatives, but the approaches analyzed are either too close to the platform or they are suitable only for a very specific domain. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The following sections show a novel approach for code generation which combines UML graphs and semantic annotations. This improvement allows for one to generate structural and behavioral codes and uses a DSL for making the annotations easy enough to learn and understand for developers, designers, and business stakeholders.</font></p>     ]]></body>
<body><![CDATA[<p>&nbsp;</p>     <p><b><font size="3" face="Verdana, Arial, Helvetica, sans-serif">3. METHOD FOR THE CODE GENERATION BY MEANS OF SEMANTIC RELATIONSHIPS</font></b></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The proposed method for code generation is based on MDA, as it considers the PIM and PSM models. Also, the Meyer design by contract [11] is included, especially the use of pre- and post-conditions to represent the semantic of operations. The pre-conditions of an operation are the restrictions for executing it, while post-conditions are the properties of the state of the system immediately after the execution of the operation. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In addition to the aforementioned properties, in this method we introduce semantic annotations for model-to-model and model-to-platform relationships, specified in a DSL. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The steps of the method are: (i) PIM model creation; (ii) solution-independent semantics (SIS) annotation to PIM; (iii) solution-specific semantics (SES) annotation to PIM; (iv) relationship settlement between the semantically annotated PIM and the platform; and (v) code generation. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The first step of the method is the creation of the PIM model. Since the model-to-code transformation rules act on instances of the UML meta-model, PIM must be a well-formed class diagram. Next, in step two, the intention of each operation is expressed with a solution independent semantic (SIS)-similar to the programming-by-intention initiative-in which the developer starts writing sentences for expressing the objective he/she expects to reach, instead of specifying how it could be reached [12]. Then, the intention is the &quot;what&quot; and the solution is the &quot;how&quot; of the operation. In contrast, SES of the PIM+SES construction, or step three, expresses a concrete solution for the operations of the models; in this step, the model is still independent of the implementation platform. Both steps two and three act independently of each other. Consequently, they could be executed in any order. In the next step, the model semantically specified is related to the platform for allowing code generation. This step requires a target platform with semantic specifications to be accomplished, and the rules defined by Mu&ntilde;et&oacute;n et al. [10]. The connection between PIM and PSM is a variation of MDA because no transformation rules are needed, but a relationship between models. Section 6 illustrates this with a case study. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A formal representation of the method is: </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">cg: Msem, Psem &rarr; C</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">where &quot;Msem = (Msis, Mses)&quot;, is the semantic specified model, &quot;Psem&quot; is the platform with its semantic specification, &quot;C&quot; is the set of the generated code, and &quot;bg&quot; is the behavioral code generation function. Given this, &quot;bg&quot; can be represented as: </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">bg: {mop1, mop2, mop3, ..., mopn}, {pop1, pop2, pop3, ..., popm} &rarr; {Iop1, Iop2, Iop3, ..., Iopn}</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">where &quot;mop&quot;i is an operation of the semantic model, &quot;pop&quot;i an operation of the platform, and &quot;Iop&quot;i is the set of implementations of operation i. &quot;Iop&quot;i is defined as a finite sequence of invocations to implemented operations of domain or platform: </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Iopi=(invoke(op1), invoke(op2), invoke(op3),..., invoke(opn)</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Semantic annotations of &quot;Msem&quot; and &quot;Psem&quot; are specified by using a DSL, whose Extended Backus-Naur Form (EBNF) is given below: </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">semantic = 'SIS' | 'SES', 'to', identifier,':','precondition=', empty | assertion, 'postcondition=',assertion;    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">assertion = subject, space, predicate, space, object;    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">subject = instantiation | identifier;    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">predicate = 'in' | 'not-in' | 'type-of' ;    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">object = 'Collection' | dbtable;    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">instantiation = identifier, '(', [arguments], '):', type;    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">identifier = letter, {letter | capitalizedLetter};    ]]></body>
<body><![CDATA[<br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">type = capitalizedLetter, {letter | capitalizedLetter};    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">arguments = identifier, {',', identifier};    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">dbtable = 'DB(table=', identifier, ')';    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">letter = 'a'..'z';    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">capitalizedLetter = 'A'..'Z';    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">space = ' ';    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">empty = '';</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A semantic specification has two assertions: a &quot;pre-condition&quot; and a &quot;post-condition.&quot; An &quot;assertion&quot; is composed by three elements: &quot;subject,&quot; &quot;predicate,&quot; and &quot;object.&quot; In this paper, the domain of the DSL is restricted by the predicates: &quot;in,&quot; &quot;not-in,&quot; and &quot;type-of.&quot; Also, we use operations to add and remove elements on collections and to insert and update records of a database table.</font></p>     <p>&nbsp;</p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>4. SEMANTIC COMPUTING PLATFORM FOR AUTOMATIC CODE GENERATION</b></font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In this section we present the platform architecture for allowing the implementation of the method introduced in the previous section. The structure is based on the semantic computing architecture [13] that considers five core layers and two transversal ones: security and management. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Each layer in the platform has a concrete objective reached by services, which are intended to have a general purpose in the original proposal. The data to be processed in the platform are analyzed and converted to semantics in the information analysis layer. These semantics are related to the content in the next layer of semantic integration. With the output of this layer, the services of the semantic services layer can perform activities; e.g., generate code. A set of services could be related to create a more powerful service by means of the service integration layer. Finally, there are services in a semantic interface layer for allowing a natural interaction with the final user.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#fig01">Figure 1</a> shows the semantic computing architecture with concrete services for code generation: SIS analyzer, SES analyzer, integrator, and code generator. Furthermore, two repositories of code were added: a code corpus and the API. In this paper, we are only focusing on the central components of the platform, excluding the management and security layers.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig01"></a><img src="/img/revistas/dyna/v79n172/a10fig01.gif">    <br>   Figure 1. </b>Semantic platform with services for automated code generation, adapted from [13]</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The representation of the DSL sentences can be easily understood by the final user, because the services of the semantic analysis layer make a syntactic analysis, without using an interface of interaction. This is why there are no services in the semantic interface layer.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The services of the semantic integration layer allow for the implementation of steps (ii), (iii), and (iv) of the code generation method. The models and the semantic integrator service match models with semantics and other models. This is the case of the PIM+SIS and PIM+SES relationships. The platform-specific constructions are achieved by the code corpus service and the semantic API service, which are related to code repositories.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">There are two types of code generation services: domain operation and platform operation code generators. The domain operation code generator produces the code of the signature of the user model operations and the code of the body. (This task is carried out with the help of the platform operation code generators). For each platform operation there is a code generator.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Finally, the service integration layer coordinates the interaction of the platform services.</font></p>     <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>5. CASE STUDY</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In this section we show an implementation of the method presented in Section 4 by means of a case study based on the process of an invoice. An invoice has one or more details, and each detail has a product and a quantity. An invoice has three operations-addDetail, deleteDetail, and save-which add a detail to the invoice details, delete a detail from the details of the invoice, and save the invoice in database, respectively.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>5.1. PIM Model Creation    <br>   </b>According to the method, the first step is to create a PIM model. <a href="#fig02">Figure 2</a> shows a class diagram that acts as the PIM of the invoice case study.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig02"></a><img src="/img/revistas/dyna/v79n172/a10fig02.gif">    <br>   Figure 2.</b> PIM diagram for the case study</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>5.2. PIM and SIS Relationship    <br>   </b>Next, a semantic-independent solution is assigned to the PIM in order to obtain the PIM+SIS model. This is specified by using the DSL as seen in <a href="#fig02">Fig. 2</a>.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SIS to addDetail:    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=detail(product, quantity):Detail not in details    ]]></body>
<body><![CDATA[<br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=detail(product, quantity) in details</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The previous SIS specifies the intention of addDetail: &quot;to add a detail to the details.&quot;</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>5.3. PIM and SES Relationship    <br>   </b></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In this step, a semantic specific to the solution is used to specify that &quot;details&quot; is intended to be a collection. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SES to ddDetail:    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=details typeof Collection</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SES relates the operation with a solution, not with the platform. Then, collection is not a concrete platform class, but a grouping of data items.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>5.4. Platform Relationship    <br>   </b></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The combination of SIS and SES for the addDetail operation is the semantic: &quot;addDetail must add a detail, which is an object composed by a product and a quantity, in a collection called details.&quot;</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Once this semantic is obtained, the next step is focused on finding an implemented operation whose contract could be related with the contract of &quot;addDetail.&quot; In this case, the operation is the &quot;add&quot; of the Java platform. The post-condition of &quot;add&quot; is &quot;e in :Collection&quot;, an abstract representation for adding elements into a specific collection. The relationship between semantics is more clear if &quot;e&quot; is replaced by detail(product, quantity), and :Collection by details.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SES to add:    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=e in :Collection</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>5.5. Code Generation    <br>   </b></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Finally, the code is generated from the previous relationships. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">void addDetail(Product product, int quantity){    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Detail detail=new Detail(product, quantity);    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">details.add(detail);    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">}</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The code is generated according to the transformation rules defined by Zapata and Mu&ntilde;et&oacute;n [9]. The body of &quot;addDetail&quot; is an invocation of &quot;add&quot; operation. This sentence is generated by a code generator service associated with the &quot;add&quot; operation.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The code for saving an invoice and removing a detail is generated in a similar way.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The semantic specification of &quot;deteleDetail&quot; and the generated code are:</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SIS to removeDetail:    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=detail(product,quantity):Detail in details    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=detail(product,quantity):Detail notin details</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SES to removeDetails:    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=details typeof Collection</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The full semantic of &quot;deleteDetail&quot; is &quot;deleteDetail must remove a detail of the collection details.&quot; The &quot;remove&quot; operation of the java.util.Collection interface has a contract that matches the deleteDetail semantic:</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SES to remove:    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=e in :Collection    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=e notin :Collection</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The generated code is: </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">public void deleteDetail(Product product, int quantity){    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Detail detail=new Detail(product,quantity);    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">details.remove(detail);    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">}</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The method for code generation checks the existence of the identifiers generated in the code. In the case of &quot;addDetail&quot; and &quot;deleteDetail,&quot; the &quot;detail&quot; object has to be created because it does not exist as an argument of the operation.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Nowadays it is uncommon to write the entire code to interact with the database. The main reason is the existence of a lot of frameworks and tools that hide this code from the programmer by automatically generating the source code. This is the case of hibernate or the Java Persistence API. However, in this work we decide to show, due to pragmatic aspects, the semantic specification of the &quot;save&quot; operation.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SIS to save:    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=invoice:Invoice notin invoices    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=invoice:Invoice in invoices</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SES to save:    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=invoices typeof DB(table=invoices)</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The full semantic for the &quot;save&quot; operation is: &quot;save must insert a detail, and object composed by a product and a quantity, in a database table called invoices&quot;. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The platform &quot;execute&quot; operation has a contract that match the save contract. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SES to execute:    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=    ]]></body>
<body><![CDATA[<br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=e in DB(table=es)</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The code generated for save is: </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">void save(){    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Connection con=DriverManager.getConnection();    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">PreparedStatement ps=con.preparedStatement();    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">ps.execute();    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">}</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The code generation is still incomplete. Parameters of some operations, such as getConnection() and preparedStatatement(), are not obtained. Consequently, the save operation is not executable and it may be considered for future work.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">The semantic specifications of the operations invoked in the body of &quot;save&quot; are: </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SES to preparedStatement:    ]]></body>
<body><![CDATA[<br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=:PreparedStatement is void    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=:PreparedStatement isnot void    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">SES to getConnection:    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">precondition=:Connection is void    <br>   </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">postcondition=:Connection isnot void</font></p>     <p>&nbsp;</p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>6. CONCLUSIONS AND FUTURE WORK</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">In this paper we have proposed a set of services, structured on a semantic platform, to generate the code of operations from UML class diagrams. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A method for code generation was also proposed. The method is based on MDA and Meyer's Design by Contract. Instead of diagram transformations, such as MDA, the method relates to models by using semantic annotations. The semantic annotations have two types: solution-independent and solution-dependent. The former allows for one to specify the intention of the operation, avoiding technical aspects, which are indicated with the solution specific semantic. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">To facilitate the semantic specification of the operations, a DSL was defined. The DSL is easy to learn and apply, allowing for its use by technical and non-technical members of the development team.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">As future work, the method for code generation must be improved by considering the arguments of the platform operations in the generated code. The bodies of such operations require the use of conditionals and loops, and the addition of error handling.</font></p>     <p>&nbsp;</p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>REFERENCES </b></font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>[1]</b> Crispin, L. and Gregory, J., Agile Testing: A practical Guides for Testers and Agile Teams, Addison-Wesley Professional, Boston, MA, 2009.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000156&pid=S0012-7353201200020001000001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[2]</b> Duvall, P., Matyas, S. and Glover, A., Continuous Integration: Improving Software Quality and Reducing Risk, Addison-Wesley Professional, Boston, MA, 2007.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000157&pid=S0012-7353201200020001000002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[3]</b> Humble, J. and Farley, D., Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation, Addison-Wesley Professional; 1 edition. Boston, MA, 2010.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000158&pid=S0012-7353201200020001000003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[4]</b> Bennett, J., Cooper, K. and Dai, L., Aspect-oriented model-driven skeleton code generation: A graph-based transformation approach, Science of Computer Programming, 75, pp. 689-725, 2010.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000159&pid=S0012-7353201200020001000004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[5]</b> Nassar, M., Anwar, A., Ebersold, S., Elasri, B., Coulette, B. and Kriouile, A., Code Generation in VUML Profile: A Model Driven Approach, IEEE/ACS International Conference on Computer Systems and Applications, pp. 412 – 419, 2009.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000160&pid=S0012-7353201200020001000005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[6]</b> Bontà, E. and Bernardo, M., PADL2Java: A Java Code Generator for Process Algebraic Architectural Descriptions, IEEE/ACS International Conference on Computer Systems and Applications, pp. 412 – 419, 2009.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000161&pid=S0012-7353201200020001000006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[7]</b> Cheng, f. MDA Implementation Based on Patterns and Action Semantics, Third International Conference on Information and Computing, 25-28, 2010.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000162&pid=S0012-7353201200020001000007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[8]</b> S&aacute;nchez, P., Jim&eacute;nez, M., Rosique, F., &Aacute;lvarez, B. and Iborra, A., A framework for developing home automation systems: From requirements to code, The Journal of Systems and Software. Vol. 84, pp. 1008–1021, 2011.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000163&pid=S0012-7353201200020001000008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[9]</b> Zapata, C.M. and Mu&ntilde;et&oacute;n, A., Generaci&oacute;n del cuerpo de los m&eacute;todos a partir de la sem&aacute;ntica de las operaciones del diagrama de clases, Revista Ingenier&iacute;a e Investigaci&oacute;n. Vol 28, No. 3, pp. 58-63. 2008.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000164&pid=S0012-7353201200020001000009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[10]</b> Mu&ntilde;et&oacute;n, A., Zapata, C.M. and Arango, F., Reglas para la Generaci&oacute;n Autom&aacute;tica de C&oacute;digo Definidas Sobre Metamodelos Simplificados de los Diagramas de Clases, Secuencias y M&aacute;quina de Estados de UML 2.0, Dyna, Vol. 74, No. 153, pp. 267-283, 2007.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000165&pid=S0012-7353201200020001000010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[11]</b> Meyer, B., Object-Oriented Software Construction, Prentice Hall, Santa Barbara, California, 1997.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000166&pid=S0012-7353201200020001000011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[12]</b> Martin, R., Clean Code: A Handbook of Agile Software Craftsmanship, Prentice Hall, Boston, MA, 2008.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000167&pid=S0012-7353201200020001000012&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[13]</b> Sheu. P., Semantic Computing, Wiley-IEEE Press, 2010. </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000168&pid=S0012-7353201200020001000013&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --> ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Crispin]]></surname>
<given-names><![CDATA[L.]]></given-names>
</name>
<name>
<surname><![CDATA[Gregory]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<source><![CDATA[Agile Testing: A practical Guides for Testers and Agile Teams]]></source>
<year>2009</year>
<publisher-loc><![CDATA[Boston^eMA MA]]></publisher-loc>
<publisher-name><![CDATA[Addison-Wesley Professional]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Duvall]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
<name>
<surname><![CDATA[Matyas]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
<name>
<surname><![CDATA[Glover]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<source><![CDATA[Continuous Integration: Improving Software Quality and Reducing Risk]]></source>
<year>2007</year>
<publisher-loc><![CDATA[Boston^eMA MA]]></publisher-loc>
<publisher-name><![CDATA[Addison-Wesley Professional]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Humble]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Farley]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
</person-group>
<source><![CDATA[Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation]]></source>
<year>2010</year>
<edition>1 edition</edition>
<publisher-loc><![CDATA[Boston^eMA MA]]></publisher-loc>
<publisher-name><![CDATA[Addison-Wesley Professional]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Bennett]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Cooper]]></surname>
<given-names><![CDATA[K.]]></given-names>
</name>
<name>
<surname><![CDATA[Dai]]></surname>
<given-names><![CDATA[L.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Aspect-oriented model-driven skeleton code generation: A graph-based transformation approach]]></article-title>
<source><![CDATA[Science of Computer Programming]]></source>
<year>2010</year>
<volume>75</volume>
<page-range>689-725</page-range></nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Nassar]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Anwar]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[Ebersold]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
<name>
<surname><![CDATA[Elasri]]></surname>
<given-names><![CDATA[B.]]></given-names>
</name>
<name>
<surname><![CDATA[Coulette]]></surname>
<given-names><![CDATA[B.]]></given-names>
</name>
<name>
<surname><![CDATA[Kriouile]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Code Generation in VUML Profile: A Model Driven Approach]]></article-title>
<source><![CDATA[]]></source>
<year>2009</year>
<conf-name><![CDATA[ IEEE/ACS International Conference on Computer Systems and Applications]]></conf-name>
<conf-loc> </conf-loc>
<page-range>412 - 419</page-range></nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Bontà]]></surname>
<given-names><![CDATA[E.]]></given-names>
</name>
<name>
<surname><![CDATA[Bernardo]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[PADL2Java: A Java Code Generator for Process Algebraic Architectural Descriptions]]></article-title>
<source><![CDATA[]]></source>
<year>2009</year>
<conf-name><![CDATA[ IEEE/ACS International Conference on Computer Systems and Applications]]></conf-name>
<conf-loc> </conf-loc>
<page-range>412 - 419</page-range></nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Cheng]]></surname>
<given-names><![CDATA[f.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[MDA Implementation Based on Patterns and Action Semantics]]></article-title>
<source><![CDATA[]]></source>
<year>2010</year>
<conf-name><![CDATA[ Third International Conference on Information and Computing]]></conf-name>
<conf-loc> </conf-loc>
<page-range>25-28</page-range></nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Sánchez]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
<name>
<surname><![CDATA[Jiménez]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Rosique]]></surname>
<given-names><![CDATA[F.]]></given-names>
</name>
<name>
<surname><![CDATA[Álvarez]]></surname>
<given-names><![CDATA[B.]]></given-names>
</name>
<name>
<surname><![CDATA[Iborra]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A framework for developing home automation systems: From requirements to code]]></article-title>
<source><![CDATA[The Journal of Systems and Software]]></source>
<year>2011</year>
<volume>84</volume>
<page-range>1008-1021</page-range></nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Zapata]]></surname>
<given-names><![CDATA[C.M.]]></given-names>
</name>
<name>
<surname><![CDATA[Muñetón]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<article-title xml:lang="es"><![CDATA[Generación del cuerpo de los métodos a partir de la semántica de las operaciones del diagrama de clases]]></article-title>
<source><![CDATA[Revista Ingeniería e Investigación]]></source>
<year>2008</year>
<volume>28</volume>
<numero>3</numero>
<issue>3</issue>
<page-range>58-63</page-range></nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Muñetón]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[Zapata]]></surname>
<given-names><![CDATA[C.M.]]></given-names>
</name>
<name>
<surname><![CDATA[Arango]]></surname>
<given-names><![CDATA[F.]]></given-names>
</name>
</person-group>
<article-title xml:lang="es"><![CDATA[Reglas para la Generación Automática de Código Definidas Sobre Metamodelos Simplificados de los Diagramas de Clases: Secuencias y Máquina de Estados de UML 2.0]]></article-title>
<source><![CDATA[Dyna]]></source>
<year>2007</year>
<volume>74</volume>
<numero>153</numero>
<issue>153</issue>
<page-range>267-283</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[Meyer]]></surname>
<given-names><![CDATA[B.]]></given-names>
</name>
</person-group>
<source><![CDATA[Object-Oriented Software Construction]]></source>
<year>1997</year>
<publisher-loc><![CDATA[Santa Barbara^eCalifornia California]]></publisher-loc>
<publisher-name><![CDATA[Prentice Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Martin]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<source><![CDATA[Clean Code: A Handbook of Agile Software Craftsmanship]]></source>
<year>2008</year>
<publisher-loc><![CDATA[Boston^eMA MA]]></publisher-loc>
<publisher-name><![CDATA[Prentice Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Sheu]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
</person-group>
<source><![CDATA[Semantic Computing: Wiley-IEEE Press]]></source>
<year>2010</year>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
