<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Prototizer: Agile on Steroids</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Aram Hovsepyan</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dimitri Van Landuyt</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>CODIFIC aram@codific.eu</string-name>
        </contrib>
      </contrib-group>
      <abstract>
        <p>The model-driven software development (MDSD) vision has booked signi cant advances in the past decades. MDSD was said to be very promising in tackling the \wicked" problems of software engineering in general. However, a decade later MDSD is still far from becoming widely recognized within the mainstream software development. At the same time Agile software development methodologies are widely considered as the way to go. This is counter-intuitive as MDSD seems to be the right methodology to boost Agile approaches. From Agile software development perspective, design models are a waste. In this experience report, we present Prototizer, a tool based on modeldriven software engineering that could boost the Agile vision. We present a validation of Prototizer on a recent case study and discuss the main lessons learned throughout the past years.</p>
      </abstract>
      <kwd-group>
        <kwd>agile software development</kwd>
        <kwd>minimum viable product</kwd>
        <kwd>model-driven development process</kwd>
        <kwd>prototizer</kwd>
        <kwd>lean entrepreneurship</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Given the advances in hardware technology, software development in general is
becoming an increasingly complex activity. For about a decade the model-driven
software development (MDSD) vision has seemed very promising in e ciently
tackling the essential complexities of the software development process [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. The
MDSD vision, primarily focused on the vertical separation of concerns, aims
at reducing the gap between problem and software implementation domains
through the use of models that describe complex systems at di erent abstraction
levels and from a variety of perspectives. Automated code generation, claimed to
be one of the most valuable assets of MDSD, allows us to translate these models
instantaneously into code. Strangely, MDSD is still far from becoming accepted
within the mainstream software development [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>As opposed to MDSD, Agile methodologies are currently considered to be
the best practices within software development. The spectrum of agile
methodologies is very broad. The core principles are typically focused on fast iteration
cycles, responsiveness to change, early customer involvement, \good design", etc.
Agile approaches aim at reducing the waste of big up-front analysis, planning
and documentation. Nonetheless, even the most code-centric agile
methodologies suggest the use and evolution of design models for communication and
documentation purposes. From this perspective, it is our strong belief that MDSD
is a necessary building block within a mature agile methodology. Introducing a
lightweight MDSD within Agile methodologies could further reduce the waste,
enforce a good design, aid with rapid prototyping and increase customer
involvement. Indeed, if we use models for representing software design, we might
as well use them as software artefacts, rather than merely a communication and
documentation tool.</p>
      <p>In this experience report, we present Prototizer, an MDSD supporting tool
that could be used within any Agile software development process. Prototizer
embraces only a small part of the MDSD philosophy, namely using models as
rst-class citizens and generating partial code from these models. Nevertheless,
this small part is the enabler of the true Agile vision. Over the course of the past
ve years, we have developed more than ten di erent bespoke CRM/ERP
webbased software systems using Prototizer. More importantly, we are still
maintaining and expanding these software systems using Prototizer. In this paper,
we present one of these systems.</p>
      <p>The remainder of the paper is structured as follows. In section 2, we
provide essential background information on agile software development and model
driven software development. We also describe the problem statement in detail.
In sections 3 and 4, we present our solution and its application on a recent
case-study. Section 5 provides a brief evaluation of Prototizer. Finally, section 6
concludes this paper.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Agile vs. Models</title>
      <p>This section provides a brief overview of agile and MDSD methodologies by
focussing on the key concepts that are in the core of the two paradigms.
2.1</p>
      <sec id="sec-2-1">
        <title>Agile Software Development</title>
        <p>
          Agile software development is a rather overloaded term and many existing
approaches claim to be agile. The most well-known approaches in literature include
eXtreme Programming (XP) [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ], Scrum [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], Feature Driven Development (FDD)
[
          <xref ref-type="bibr" rid="ref5">5</xref>
          ], Kanban [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ], Dynamic systems development method [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ], DevOps [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]. Despite
their intrinsic di erences, which are out of the scope for this paper, all agile
approaches are focused on concepts such as adaptive planning, evolutionary
development, early delivery, continuous improvement, etc. More importantly, agile
has become a synonym of lean, i.e., reducing waste and focusing on e ciency.
This means that the heavyweight planning, documentation, software
architecture and design phases are reduced signi cantly. Fast iteration cycles (referred
to as timeboxes or sprints) with a duration of weeks or even days resulting in a
completely implemented, validated and veri ed subset of requirements is a
central theme in all agile approaches [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. Nonetheless, even the most code-centric
agile approaches advocate the use of design models [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. While models are used
for documentation and communication purposes, established agile approaches
advice the use of UML and do not exclude the use of \complex models using
speci c notations" [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. It is our strong belief that a lightweight MDSD process
can substantially increase the added value of agile approaches. Keeping
models up-to-date requires a substantial rigor and therefore is highly challenging in
an agile context. In our view, fully automated, but partial code generation will
provide instant prototyping highly praised within agile.
2.2
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>Models</title>
        <p>
          Similar to agile, model-driven software development (MDSD) also covers a
relatively broad spectrum of ideas, techniques and tools. Despite their di erences,
we believe two key ideas are essential within most MDSD approaches.
Code generation Code generation is a central selling point behind MDSD
[
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. Code generation is instantaneous and saves time for the developers3. Code
generation improves the source code quality as generated code can be tailored
to follow best coding practices and can be considered to be bug-free [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. Finally,
this instant code generation enables developers to play with the solution and
quickly deliver prototypes of the nal system. Fast prototyping enables early
validation that is a central theme in agile approaches.
        </p>
      </sec>
      <sec id="sec-2-3">
        <title>Models as primary software development artefacts The models within a</title>
        <p>
          MDSD approach are no longer a mere piece of documentation, but actually an
essential software development artefact. Indeed, models have to be precise and
complete as they are fed to a code generator. As a result, models are always
up-to-date with the source code that makes them a valuable \lingua franca"
between the stakeholders. Software systems developed using MDSD are less likely
to evolve to a spaghetti-like systems where only the developers can manage to
nd their way [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ].
2.3
        </p>
      </sec>
      <sec id="sec-2-4">
        <title>Problem Statement</title>
        <p>It is our strong belief that there are two key obstacles that prevent MDSD from
entering the mainstream software development and supporting the currently
prevalent agile software development processes.</p>
        <p>
          Rigid Code Generators. Typically, in a MDSD approach the code is
generated based on a template (e.g., Eclipse JET) or a script that is a programming
language on its own (e.g., Acceleo [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]). One of the essential problems in MDSD
3 Throughout this work we only consider the MDSD vision where the code generation
is partial. Concretely, this means that the developers will typically generate the
overall structure and the behaviour will be manually programmed by the developer.
is that these templates/scripts are claimed to be reusable. In extreme cases, out
of the box generators are created and published, such as "THE Java code
generator", "THE C code generator", etc. It is unlikely that two di erent software
development rms will be happy with the same generator. Unfortunately, the
existing generators are often too rigid. It could be very challenging to quickly edit
the already messy and complex code generation templates. Finally, code
generators must support iterative development, hence, the manually written code
should not be rewritten by the automated code generation. Although MDSD
research has always stressed the importance of this issue, its solution is far from
trivial. The concept of a \protected code section" seems to solve the problem at
a rst glance, however it is not clear how to properly use them.
Steep Learning Curve. Even the most simple MDSD approach has a rather
steep learning curve. We believe that the main cause is that MDSD approaches
often try to oversell and become too heavyweight [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. For a developer who is
new to MDSD and only has a rather super uous understanding of UML class
diagrams it would be extremely di cult to join the models club. There is a lack
of simple lightweight MDSD success stories the potential followers could start
playing with. Once again, the technology providers typically try to provide
readyto-use generators, rather than focusing on the mechanisms on how to modify the
existing generators or create new generators. As a result, even the early adopters
are unable to step into the world only the technology providers understand.
        </p>
        <p>In the next section, as early adopter we present our toolset that we have
created based on existing MDSD technologies.
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Prototizer</title>
      <p>We refer to Prototizer as the toolset that enables the model-driven and agile
software development process. In this section we describe both the process we
follow as well as the toolset itself.
3.1</p>
      <sec id="sec-3-1">
        <title>Prototizer Software Development Process and Toolchain</title>
        <p>Requirements Analysis This phase refers to both business requirements
analysis as well as their translation into the technical requirements analysis. This
activity is done using a more traditional approach, i.e., by using a text editor.</p>
        <p>Requirements</p>
        <p>Analysis
Software Architecture</p>
        <p>Design</p>
        <p>Detailed Design</p>
        <p>Validation
(Acceptance)</p>
        <p>Verification
(Integration Tests)
Verification (Unit</p>
        <p>Tests)</p>
        <p>Prototizer</p>
        <p>Implementation
Software Architecture Design This phase de nes the architecture of the
overall software system. The software architecture is created in UML by the
means of component/connector and deployment diagrams. Currently, we do
not leverage the software architecture explicitly in the code generation.
Detailed Design This phase describes the detailed UML class diagram that is
further used for code generation.</p>
        <p>Implementation Our rm mainly leverages the PHP Zend Framework as an
underlying platform. However, virtually any programming language and
platform can be used for the implementation.</p>
      </sec>
      <sec id="sec-3-2">
        <title>Veri cation (Unit and Integration Tests) The veri cation phase focuses</title>
        <p>on automated unit and integration tests that are an essential part of any
systematic software development process. Given the PHP implementation
platform, we further rely on PHPUnit and Selenium WebDriver for the unit
testing and integration testing.</p>
        <p>Validation Finally, the end customer is expected to perform the validation of
the product release and o cially accept the release. This is done by using a
modern web-browser.</p>
        <p>
          The V-model is traditionally not considered to be agile, as it represents an
extension of the waterfall model. Thus, to improve the dynamics of this process
we leverage the Dynamic System Development Method (DSDM) Atern agile
project delivery framework used for software development [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. The idea behind
DSDM is to develop a solution iteratively starting from global view of the
product. Figure 2 presents the timebox concept that is a key technique in DSDM
Atern. It represents the iterative process to control the creation of the
product under development with speci c review points to ensure the quality of the
product and the e ciency of the delivery process. A more detailed description
of DSDM Atern is out of scope for this paper [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ].
3.2
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>Prototizer Tool</title>
        <p>
          Prototizer is an open-source tool implemented as an Eclipse plug-in and can
be downloaded from [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]. Prototizer is largely based on MOFScript that is an
open-source code generation technology developed by SINTEF [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]. Prototizer
transforms the input UML model into code based on a user-speci ed pluggable
and extensible cartridge. Over the years we have developed over ve di erent
generation cartridges. Each generation cartridge contains two components, i.e.,
resource copier and generation script.
        </p>
        <p>
          Resource Copier The resource copier simply copies various static resources,
such as libraries, Javascript/HTML/CSS les, into the le structure of the
project. The set of resources can be easily manipulated by the developer by
simply managing the static les within the plugin cartridge folder. These
resources are typically speci c for a certain company or even project domain.
Generation Scripts The generation scripts are used by Prototizer to
translate the UML model into code. Modifying a generation script is straightforward
as MOFScript is an imperative language syntactically similar to Java. For the
speci cs of the generation scripts we refer to the MOFScript speci cation [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ].
We leverage two complementary techniques in order to make the code generation
scripts su ciently exible when it comes to manual code re nements.
1. We use protected code sections that are placeholders for manually re ned
source code that are kept intact upon subsequent generation steps.
2. In certain cases, protected code sections could place unnecessary constraints
on the manual coding. In order to overcome this problem, we leverage the
generation gap pattern [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. The generated code is placed in abstract
superclasses that can be easily subclassed with manually written code.
4
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Case study: CODIFIX</title>
      <p>The case study presented in this paper is a simpli ed version of our own
enterprise resource planning system named CODIFIX. CODIFIX initially consisted
of a rather primitive content management system for our website. However, we
have gradually added various new modules that have introduced a substantial
set of new functionalities. In this section, we will brie y describe two of the
CODIFIX modules, i.e., the content management system and the issue tracking
system. We focus mainly on the models from which the source code is
continuously and incrementally generated. At the end of this section, we provide an
overview of the artefacts that are actually generated from the design models.
4.1</p>
      <sec id="sec-4-1">
        <title>Technology Stack</title>
        <p>CODIFIX is implemented in PHP by leveraging the Zend Framework version 2.
Note that we do not use the Doctrine framework that provides a transparent
database storage. Rather, the generation step creates the complete database API
ready to use by the developers. We also rely on client-side functionality written
by third parties in Javascript. As an underlying database we use MySQL.
4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Content Management System</title>
        <p>Figure 3, presents the class diagram of the simple content management system
(CMS) model we have designed to use for our informative website. The CMS
consists of menus (Menu) denoting the pages. Each menu has a speci c language
(Language) and can have a parent menu. The website information is represented
as contents (Content ) where each content can belong to a menu object. The
attributes of the classes and the semantics that are assigned to the model elements
and used in the generation are out of scope for this paper.</p>
      </sec>
      <sec id="sec-4-3">
        <title>4.3 Issue Tracking System</title>
        <p>Database scheme and API The complete data layer as well as the
communication API is generated by Prototizer. The database scheme is generated as
an .sql dump. We have developed a simple scripting mechanism to synchronise
the generated database scheme with the actual running database. The database
communication API is a collection of classes that allows systematic
manipulation of the database entries for each of the classes within the UML models.
We currently do not leverage on frameworks like Doctrine (the PHP version of
Hibernate) and the database communication API represents a relatively large
codebase. Typically, this part of the generated code is never modi ed manually
as the UML model within the Prototizer philosophy is semantically complete.
Model classes Each modelling entity (along with its relationships) is translated
into a corresponding PHP Class. These classes represent the models in MVC
terminology. Obviously, the classes have pre-generated list of attributes as well
as getter and setter functions. In addition, we also generate validation rules
for each attribute as de ned by its type. For instance, the order attribute in
Menu class must be an integer. The model classes are typically manually re ned,
hence, protected code sections denote the places where this can be realised. In
general, the attribute information as well as their getters and setters should
never be modi ed manually. On the other hand, methods like toString() and any
additional methods that are added by the developer are protected by Prototizer.
Controllers and views The basic features for most of our systems (including
CODIFIX) are the web-based create, retrieve, update and delete (CRUD)
interfaces to manipulate the database entities. These interfaces are also generated
by Prototizer. In MVC terminology these are the controllers and the views. The
controllers are in charge of processing the HTTP requests and constructing the
HTML views that are sent back to the web-browsers by the web-server. The
views are mainly HTML scripts with template parameters that are dynamically
instantiated by the corresponding controllers.</p>
        <p>Generated code percentage Overall, our currently running CODIFIX project
contains 17546 lines of generated PHP/HTML code from a total codebase of
22281 lines of code (including comments and white spaces). Current best
practices in Zend Framework would require one to write all this code manually.
Nonetheless, the productivity increase is limited by two factors. Firstly, not all
of the generated code is actually used. Given the ease of code generation we
generate quite a few helper functions that are not always needed and used.
Secondly, the generated code is by de nition trivial as it constitutes the repetitive
part of the code. However, writing the code manually when it can be generated
is a 100% waste of time.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Lessons Learned</title>
      <p>In the past ve years we have iteratively developed numerous custom web-based
CRM and ERP systems using Prototizer. All of these systems are still heavily
used by our customers who often submit change requests. In this section, we
provide an overview of the lessons learned within the context of our rm.
5.1</p>
      <sec id="sec-5-1">
        <title>Bene ts</title>
        <p>
          The process behind Prototizer is in line with agile and virtually any agile
framework can be plugged in as a concrete dynamics of the process. Prototizer is a
clear realization of the MDSD vision regarding the centrality of models,
instantaneously generated source code and the increased prototyping abilities. This saves
a substantial amount of time and allows our developers to focus on core problems
rather than spending time in typing code. The generated code is considered to
be bug-free as we assume the generation cartridges are bug free. Prototizer forces
the designers to create complete UML models of the system, hereby making the
communication between designers and developers in the context of the system
structure much more clear. Prototizer also enforces a speci c code structure that
is valuable especially for the less experienced developers within our rm. In our
experience, the long-term bene ts of Prototizer are even more critical. The
existence of a complete and up-to-date UML model increases the system longevity
and substantially reduces the maintenance cost. Within our rm, the cost of
maintenance (e.g., new features, change requests) often by far exceeds the
original cost of development. This is con rmed by various studies in the industry
(e.g., [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]).
5.2
        </p>
      </sec>
      <sec id="sec-5-2">
        <title>Drawbacks</title>
        <p>Virtually any code generation approach introduces additional constraints for
the developers. The protected sections where developers are expected to operate
sometimes lead to two problems. Firstly, inexperienced developers inevitably
misplace manually written code that leads to overwritten code on subsequent
iterations. While the code is not really lost (thanks to version control), such
situations involve an additional overhead. Secondly, certain manual re nements
could be relatively complicated to t within the protected sections. Developers
are sometimes forced to duplicate code in order to achieve the desired result.</p>
      </sec>
      <sec id="sec-5-3">
        <title>Evaluation</title>
        <p>From a research point of view Prototizer is not innovative. In fact, the
building blocks of Prototizer, i.e., MOFScript and EMF were stable almost a decade
ago. However, from a state-of-the-practice point of view, Prototizer is a
pragmatic answer to both problems presented in section 2.3. Generation cartridges
can be easily modi ed and new cartridges can be quickly created by example.
The resource copier requires simply moving around les and folders that are
needed for a speci c project type. MOFScript is a powerful, yet very simple
language for creating and modifying code generation scripts. Prototizer is a very
lightweight approach, only focusing on a very small subset of UML, i.e., class
diagrams. Instead of focusing on a programming language (PHP code
generator), we have created generation cartridges for a speci c framework (Zend code
generator). We believe that these aspects contribute to reducing the steepness of
the MDSD learning curve. However, we have not validated either of these claims
in a systematic fashion.
6</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>In this experience paper, we have presented Prototizer - a tool that enables
a boosted agile software development approach. Prototizer, which is based on
existing model-driven software engineering building blocks, enables the use of
the design models as actual software development artefacts, rather than mere
documentation.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. France, R.,
          <string-name>
            <surname>Rumpe</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Model-driven development of complex software: A research roadmap</article-title>
          .
          <source>In: Proceedings of the 29th ICSE, IEEE Computer Society</source>
          (
          <year>2007</year>
          )
          <volume>37</volume>
          {
          <fpage>54</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Fieber</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Regnat</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rumpe</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Assessing usability of model driven development in industrial projects</article-title>
          .
          <source>CoRR abs/1409</source>
          .6588 (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Beck</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Andres</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Extreme Programming Explained: Embrace Change (2Nd Edition)</article-title>
          . Addison-Wesley
          <string-name>
            <surname>Professional</surname>
          </string-name>
          (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Schwaber</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Beedle</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Agile Software Development with Scrum. 1st edn</article-title>
          . Prentice
          <string-name>
            <surname>Hall</surname>
            <given-names>PTR</given-names>
          </string-name>
          , Upper Saddle River, NJ, USA (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Palmer</surname>
            ,
            <given-names>S.R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Felsing</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>A Practical Guide to Feature-Driven Development. 1st edn</article-title>
          .
          <source>Pearson Education</source>
          (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Anderson</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          : Kanban. Blue Hole Press (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>DSDM</given-names>
            <surname>Consortium</surname>
          </string-name>
          <article-title>: The DSDM Atern Handbook</article-title>
          .
          <source>DSDM Consortium</source>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Httermann</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>DevOps for Developers. 1st edn</article-title>
          . Apress, Berkely, CA, USA (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Frankel</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Model Driven Architecture: Applying MDA to Enterprise Computing</article-title>
          . John Wiley &amp; Sons, Inc., New York, NY, USA (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>10. Obeo: Acceleo. (http://www.eclipse.org/acceleo)</mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>11. CODIFIC: Prototizer. (http://prototizer.com)</mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>12. SINTEF: MOFScript. (http://modelbased.net/mofscript/)</mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Fowler</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Domain Speci c Languages. 1st edn</article-title>
          . Addison-Wesley
          <string-name>
            <surname>Professional</surname>
          </string-name>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Erlikh</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Leveraging legacy system dollars for e-business</article-title>
          .
          <source>IT Professional</source>
          (
          <year>2000</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>