<!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>Collected Experience and Thoughts on Long Term Development of an Open Source MDE Tool</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Lars Hamann</string-name>
          <email>lhamann@informatik.uni-bremen.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Frank Hilken</string-name>
          <email>fhilken@informatik.uni-bremen.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Martin Gogolla</string-name>
          <email>gogolla@informatik.uni-bremen.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Bremen, Computer Science Department D-28334 Bremen</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>During 14 years of developing an open source model driven engineering tool at a university we collected some dos and don'ts for such projects, which we are going to describe in this paper. For example, the mentoring of students and afterwards the integration of their results need special treatments, to be able to keep a product of high quality. Beside such quality related issues, we also report on our experience with industrial cooperations. To get an idea about the amount of work that has been put into our tool, we review and visualize its history.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        In this paper, we report about the history of an open source software (OSS) tool
used in the context of model driven engineering (MDE). Started as an
implementation to validate formal semantics of the Object Constraint Language (OCL)
that was de ned in a doctoral thesis [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], ongoing development and maintenance
continuously increased the tool features, while retaining a stable core. The
acceptance of our tool USE (UML-based Speci cation Environment) [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] can be
seen by the increasing times it was downloaded. Starting with 1,500 downloads
in 2011, the number increased to 3,100 in 2012 and 4,700 in 2013. Further,
several research projects apply or integrate USE into their own application, e. g.,
the TractsTool [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] integrates USE to be able to validate model transformations or
the application of USE to describe and apply a domain speci c language (DSL)
for activity theory in requirements engineering [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. To our knowledge, several
universities also employ USE for education.
      </p>
      <p>In this paper, we highlight some of the key extension that were made to
USE during its 14 years of development. Due to the origin of USE as a research
project, we further highlight some of the speci c characteristics that apply to
open source projects at universities, e. g., experience with work of students.</p>
      <p>The rest of the paper is structured as follows: In Sect. 2 we show the di erent
areas in which USE can be applied. In Section 3 we rst describe the historical
development of USE, followed by pointing out some key extensions. The section
ends with di erent thoughts on key success factors. After taking a look to similar
OSS tools published by working groups at universities in Sect. 4 we conclude.</p>
    </sec>
    <sec id="sec-2">
      <title>Applications of USE</title>
      <sec id="sec-2-1">
        <title>Modeling with USE</title>
        <p>
          The main application of USE is to validate and verify UML models. These models
are typically used during early stages of the software development process and
focus on key parts of the designed system. This allows to exclude errors in the
design at the very beginning. As it is commonly reported, e. g. in [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ], requirements
issues are cheaper to solve at the beginning of a software development process
than at the end. If wrong requirements are implemented, a lot of rework has to
be done. Further, these misunderstood requirements may lead to an inadequate
architecture of the system, which further increases the overall costs. To be able to
validate requirements, an early formal model, which covers main aspects of the
system to be developed, can help to reduce the overall development costs. USE
supports this validation by supporting the modeling with a well-de ned subset
of UML together with nearly complete support of OCL. Models in USE can be
instantiated to be able to verify the speci cation at runtime without a complete
implementation. This allows a modeler to incrementally extend the speci cation
of a system on a formal basis without any need to make assumptions about the
infrastructure that the system is going to be built with or runs on.
        </p>
        <p>The most basic validation feature of USE is the static instantiation of a
model. By this, we mean the creation of a system state without any dynamic
behavior. In USE a system state consists of objects with their attribute values and
links between them. Using such a state, a user can verify assumptions about the
static speci cation, e. g., multiplicity, subsets, union, and rede nes constraints.
Further, it can be veri ed whether invariants are excluding the right states.
The creation of system states can be done in various ways. For exploration of a
model, the user can create objects and links in an ad hoc manner by using the
graphical user interface (GUI). This is especially useful for bigger models, as the
GUI can guide the user. For example, USE only shows commands for creating
links between selected objects for which valid associations exists. To create and
reproduce system states and to simulate dynamic behavior USE supports the
execution of a command language. During simulation, speci ed pre- and
postconditions of operations as well as transitions of state machines are validated.
2.2</p>
      </sec>
      <sec id="sec-2-2">
        <title>USE for Education</title>
        <p>During our lectures about the design of information systems, we have successfully
employed USE for more than 10 years now. One advantage of USE for education
is the possibility to learn UML and OCL in an interactive way. Students can
easily try di erent designs and get a rapid response about its correctness. For
example, its fairly easy to create system states by dragging object instances
and linking them to check de ned constraints on the y. Since USE can directly
provide feedback about the current state of each constraint, one can immediately
see, if the constraints are correct. This can be done by creating valid and invalid
instantiations and by comparing the result of the evaluation of USE to the
developer's expectations. To a given extent, the possibility to completely de ne
models in a declarative way together with the option to simulate scenarios fosters
the ability to prescind.
2.3</p>
      </sec>
      <sec id="sec-2-3">
        <title>USE as a Component</title>
        <p>
          The integration of USE as a component into other products is supported by
its two-level architecture. The user interface is decoupled from the system core,
which allows other applications to easily integrate the UML and OCL validation
capabilities of USE. This integration can be done in two di erent ways.
Products can either implement interfaces required by the USE system or they can
map their own implementations to USE instances. While the former approach
reduces the memory consumption at runtime, because no additional instances
need to be created, the implementation is more time consuming. Whereas,
using the mapping approach reverts those pros and cons. Mapping application
speci c instances to USE concepts is supported by a recently added simpli ed
application programming interface (API). In fact, it is an implementation of
the facade pattern, which reduces the learning time for integrating USE as a
library since internal details are hidden behind the facade. An example of an
application, which integrates USE as a component is the so-called XGenerator.
This model-to-text transformer is used in the context of de ning data exchange
standards for the German public authority [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ].
3
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>More than 10 Years of Development: Lessons Learned</title>
      <p>In this section we are going to take a brief tour through the history of USE. We
highlight milestones and relate them to some metrics.</p>
      <p>
        To get an overall impression on how the structure of USE has changed over
the past 14 years of development Fig. 1 and 2 visualize the internal structure of
USE as a city map [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. Each class is represented as a building in these maps,
using the number of operations as its height and the number of attributes as its
width. Packages are shown as districts surrounding their members.
      </p>
      <p>Figure 1 shows the city map of version 0.9.0 which was released in May
2000. This rst version was build out of 489 classes spread over 27 packages
with a total number of roughly 15,000 lines of code (LOC). The city map of
the current development version of USE 3.1.0 is depicted in Fig. 2. As one can
see, the city shape changed heavily over the last 14 years1. One example is the
downtown district representing the GUI related classes that can be seen at the
south of the city (see also Fig. 3). While the rst versions of USE focused on the
implementation of OCL (the eastern part of the city), little work was done on
the graphical user interface. This changed over the versions, until the previously
empty district was lled with GUI related classes. The currently not yet released
version of USE (3.1.0) now contains some 86,000 LOC and nearly 1,600 classes
distributed over 92 packages.
1 An animation of the city maps of all released versions of USE can be found online:
http://www.db.informatik.uni-bremen.de/projects/use/CodeCity.gif</p>
      <p>Plug in support</p>
      <p>State Machines
Communication Diagram</p>
      <p>
        SOIL
Generator
LOC (1000)
NOC (10)
NOP
0.9.0 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 2.0.1 2.1.0 2.2.0 2.3.0 2.3.1 2.4.0 2.5.0 2.6.1 2.6.2 3.0.0 3.0.1 3.0.3 3.1.0
Ver. 0.9.0 - 2.0.1: OCL Core Through the years 2000 and 20012 the
development of USE concentrated on the OCL core language up to version 1.4
of OCL. In parallel, a formal basis of OCL was developed and published as
a doctoral thesis [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] in 2002. In the end, USE 2.0.1 supported static and
dynamic validation as well as visualization of system states and scenarios by
providing object and sequence diagrams.
      </p>
      <p>
        Ver. 2.2.0: Generator A rst veri cation feature was added in 2005. This
generator allows to search for model instances using a language called ASSL
(A Snapshot Sequence Language) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. ASSL is a procedural language with
integrated backtracking support. One bene t of using such a language is the
possibility to guide the search for valid model instances, which reduces the
overall complexity. This extension was the result of a diploma thesis.
Ver. 2.6.1: Plug-in Architecture To support easier development of
extensions for USE, a plug-in architecture was developed by a student during his
thesis. Using plug-ins, USE can be extended and customized without
touching the core. At the end of this section, three examples of such USE plug-ins
2 Note, that the development of USE started some years before the rst public version
was made available.
      </p>
      <p>are described. Note that the plugins do not count to either the city map or
the statistics in Fig. 4.</p>
      <p>
        Ver. 3.0.0: SOIL The foundation of another milestone of USE was de ned
formally by a doctoral thesis [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] in 2010 and implemented by a student
for his diploma thesis. This extension introduced an action language called
SOIL (Simple OCL-based Imperative Language). Using SOIL, a modeler
can specify behavior using a well-de ned imperative language that could for
example be transformed to Java.
      </p>
      <sec id="sec-3-1">
        <title>Ver. 3.1.0: State Machine and Communication Diagram Beside usabil</title>
        <p>
          ity improvements, the current version of USE (2014), which is available as a
preview, added support for de ning and validating UML protocol state
machines with full OCL support [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. This allows for an easier way of de ning
behavior covering sequences of operation calls in a declarative way.
Plug-in: Model Validator Another approach of verifying models, has been
added to USE by a plug-in called model validator [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ], that was
implemented by a student for his master thesis, too. In contrast to the previously
described generator feature of USE, which applies a white-box approach for
model nding, the model validator uses a black-box approach. Only few
information, e. g., the number of instances for each class, needs to be provided
for the nding process. Given this information, the plug-in translates given
UML models including constraints into the relational logic of Kodkod [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ].
KodKod itself uses SAT-solvers to nd valid solutions that are transformed
back into valid UML structures by the plug-in.
        </p>
        <p>
          Plug-in: Monitor To apply USE for runtime veri cation, that is to verify
a concrete implementation relative to its speci cation, the so-called
USEMonitor can be applied [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. Supporting multiple target platforms using
adapters, like the Java Runtime Environment and the Mircosoft Common
Language Runtime, it can be used to connect to a running system and verify the
current state against the model-based speci cation. Further, dynamic
verication is supported by continuing the execution of the connected system,
which allows, for example, the veri cation of protocol state machines.
Plug-in: Filmstrip To improve on the applicability of the model validator, a
new plug-in has been added which performs model transformations from
models with operations specifying their behavior into model validator
compatible lmstrip models [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]. With these, it is possible to verify sequences of
operation invocations using the otherwise static model validator.
3.2
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>Thoughts on Factors of Success</title>
        <p>In this section we are going to describe what factors of success are, from our
experience, required to build and maintain a successful open source MDE tool.
We have split these factors into three groups, each covering di erent aspects of
a long-term OSS development.</p>
        <p>Technical One of the most crucial factors is, in our opinion, to provide a sound
system. This means, it should be easy to set up, to execute, and to use. Not to
forget, it should be as stable as possible. To get and to keep a stable system,
a leading architect who keeps an eye on the overall structure is essential.
In the best case, this architect is something like a geek 3. For our project,
we can state that during the time there was someone in our working group
who could be seen as a geek, the project made quantitative and qualitative
progress, whereas if no such person was present, the development was nearly
stuck.</p>
        <p>On a technical level, tests are even more essential to get and keep a product
of high quality. For USE, we run about 700 unit tests and over 120 di erent
regression tests each time someone is committing changes into the source
control system. Overall they compare nearly 1,200 expressions against
expected results and execute more than 28,000 statements. Running all tests
after each commit and notifying the development team about failed tests,
like we do using a continuous integration server, further motivates the
developers to x errors as soon as they are encountered, which bene ts the
overall stability.</p>
        <p>
          To improve the productivity of the development process and to reduce the
likelihood of errors, it is a best practice to look for popular and active open
source libraries as to built-up your system with. However, each new library
introduces the burden of keeping an eye on new versions and even more
important, it needs to be checked if the license of the component is compatible
to the one under the own product is published. Because many open source
licenses exist, each forcing di erent requirements and granting di erent rights,
this is not a trivial task [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ].
        </p>
        <p>Organizational Although, USE is developed and maintained at a non
commercial organization, economics play a role. To be able to increase the e ort
put into the project, it is quite a good idea to get an industrial partner who
is in the need for the current or future product and supports the work
nancially. We made good experience even with long term cooperations. However,
for research tools, one must be careful not to get into the role of a service
provider. In other words, ongoing research and not only the maintenance of
a product for the cooperation partner should be the goal.</p>
        <p>Community and Feedback Even if software is open source, this does not
mean you got a community of developers4. Therefore, by community we
mean active users of our software. These can be modelers, who apply USE
to gain information about their models, educators and students, who utilize
it during lectures or researchers integrating USE as a component into their
own tool.</p>
        <p>For USE, we see two facts why it has reached such a high acceptance for
research and industrial projects. First, publishing ongoing work at relevant
conferences. Second, cooperations between our working group and
commer3 For an exiting view on geeks we kindly refer to question six from Twenty
Questions for Donald Knuth (http://www.informit.com/articles/article.aspx?p=
2213858, May 20, 2014)
4 c. f. http://readwrite.com/2014/07/07/open-source-software-pros-cons
cial companies, like the integration of USE into the XGenerator as described
earlier.</p>
        <p>Regardless of the audience and as with commercial software, a profound
support must be available. For our project, we run a discussion forum and
a bugtracker at our project side on SourceForge5. Further, we provide
information how to contact the developers in case of problems. For all of them,
we try to keep response times low.</p>
        <p>Nevertheless, publishing a tool as open source, even if no active developer
community can be created, one can gain the bene t of receiving patches for
issues found by users. While this is not the most common case, sometimes
interested users already debug issues and propose xes for them.
Another successful way how we collected feedback about new features and
their value and usability was the usage of USE during lectures at university.
The view of students as (usually) unexperienced users can help to identify
possible usability issues, but can also guide the direction of development,
i. e., whether it is worth to continue the work on a feature.
3.3</p>
      </sec>
      <sec id="sec-3-3">
        <title>Thoughts on Extensions by Students</title>
        <p>As we showed previously, some extensions to USE were made by students. Either
for their diploma thesis, while participating in a collegiate project, which is
mandatory at University of Bremen, or while working as a student assistant.
As in the economy, the productivity and more importantly the quality of their
work extremely di ers. For many students, their thesis project is the rst time
they need to implement a bigger software component. These students need a
well-delimited topic to work on and usually a more time consuming mentoring
to achieve a good result. A kick-o meeting, introducing the topic and to give
a rst insight of the relevant part of the system should be obligatory. When
accompanying them during their time of writing their thesis, one often gets
usable results. However, the lack of experience often leads to working but poorly
maintainable code. The usage of a best practice guide can help to improve the
code quality, but commonly one has to refactor certain parts of the produced
results. For USE, we started to create such a best practice guide, since we noticed
recurring bad smells.</p>
        <p>One example of such bad smell is the tendency of students to extract
information out of strings (if you are lucky they won't use the identity comparator
(==) to check equality of strings). This leads to issues hard to identify if later on
string representations change. While the wrong usage of the identity comparator
on strings in Java can automatically be discovered by tools such as FindBugs6,
the extraction of information out of strings cannot. For this, we tell students: \if
you start to write something like aString.indexOf(something): rethink!".</p>
        <p>Another point, that is worth noticing, is that unexperienced students have
fun reinventing the wheel. It seems to be a pleasure implementing all the cool
5 http://www.sourceforge.net/projects/useocl
6 http://findbugs.sourceforge.net
algorithms for sorting and searching learned during their study. Unfortunately,
most of the times these algorithms either contain bugs or do not perform well.
For this, at the beginning of their work a hint at already used libraries reduces
the likelihood of the tenth sorting algorithm in the source code.</p>
        <p>Last but not least, students should be encouraged { if not forced { to write
tests containing more than tiny amounts of data. Otherwise the main developers
of the extended system are going to spend a lot of time resolving bottlenecks.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Related Projects</title>
      <p>
        Several long running open source MDE tools exist. Unfortunately, we can
highlight only two of them, because of space restrictions. Dresden OCL [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] is, in
contrast to USE, an Eclipse/EMF-based OCL interpreter which is also
integrated into several modeling tools. Its development started 19997 at the
Technical University of Dresden, where it is still maintained. As USE, Dresden OCL
is extended mainly by university members.
      </p>
      <p>
        The Alloy Analyzer8 uses the Alloy language [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], which is based on the
notion of relations. Alloy models can be used to nd valid instances, w. r. t.,
de ned constraints, but can also be used to nd counterexamples. The Alloy
Analyzer, like the USE ModelValidator, applies Kodkod [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] to search for valid
model instances. The Analyzer and the language are developed at the MIT.
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Conclusion</title>
      <p>In this work we have shown, how an open source MDE tool that was the outcome
of a single doctoral thesis emerged over more than 14 years of development. We
described key extensions that were made by university members and discussed
factors for the development that are in our view important for a successful
longterm evolution of an open source tool. An anecdotal list of issues we encountered
while integrating extensions made by students and the proposed best-practice
guide, can help projects to receive better results when unexperienced developers
are possibly temporarily working on a project.</p>
      <p>Acknowledgments We would like to thank all the people who have contributed
to USE over the years. In particular: Fabian Buttner, Mirco Kuhlmann, Mark
Richters; Roman Asendorf, Jorn Bohling, Jens Bruning, Torsten Humann, and
Hendrik Reitmann
7 http://www.dresden-ocl.org
8 http://alloy.mit.edu/alloy/index.html</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. A mann, U., et. al.:
          <article-title>Dropsbox: the dresden open software toolbox - domain-speci c modelling tools beyond metamodels and transformations</article-title>
          .
          <source>Software and System Modeling</source>
          <volume>13</volume>
          (
          <issue>1</issue>
          ),
          <volume>133</volume>
          {
          <fpage>169</fpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Boehm</surname>
            ,
            <given-names>B.W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Papaccio</surname>
            ,
            <given-names>P.N.</given-names>
          </string-name>
          :
          <article-title>Understanding and controlling software costs</article-title>
          .
          <source>IEEE Trans. Software Eng</source>
          .
          <volume>14</volume>
          (
          <issue>10</issue>
          ),
          <volume>1462</volume>
          {
          <fpage>1477</fpage>
          (
          <year>1988</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. Burguen~o,
          <string-name>
            <given-names>L.</given-names>
            ,
            <surname>Wimmer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Troya</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Vallecillo</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          :
          <article-title>Tractstool: Testing model transformations based on contracts</article-title>
          . In: Liu,
          <string-name>
            <given-names>Y.</given-names>
            ,
            <surname>Zschaler</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Baudry</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            ,
            <surname>Ghosh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Ruscio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.D.</given-names>
            ,
            <surname>Jackson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.K.</given-names>
            ,
            <surname>Wimmer</surname>
          </string-name>
          , M. (eds.) Demos/Posters/StudentResearch@MoDELS.
          <source>CEUR Workshop Proceedings</source>
          , vol.
          <volume>1115</volume>
          , pp.
          <volume>76</volume>
          {
          <fpage>80</fpage>
          .
          <string-name>
            <surname>CEUR-WS.org</surname>
          </string-name>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4. Buttner, F.:
          <article-title>Reusing OCL in the De nition of Imperative Languages</article-title>
          .
          <source>Ph.D. thesis</source>
          , Universitat Bremen,
          <source>Fachbereich Mathematik und Informatik</source>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5. Buttner,
          <string-name>
            <given-names>F.</given-names>
            ,
            <surname>Bartels</surname>
          </string-name>
          , U., Hamann, L.,
          <string-name>
            <surname>Hofrichter</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kuhlmann</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gogolla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rabe</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Steimke</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rabenstein</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stosiek</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Model-Driven Standardization of Public Authority Data Interchange</article-title>
          .
          <source>Science of Computer Programming</source>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Georg</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Troup</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Experiences developing a requirements language based on the psychological framework activity theory</article-title>
          . In: Cabot,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Gogolla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Rath</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            ,
            <surname>Willink</surname>
          </string-name>
          , E.D. (eds.)
          <source>OCL@MoDELS. CEUR Workshop Proceedings</source>
          , vol.
          <volume>1092</volume>
          , pp.
          <volume>63</volume>
          {
          <fpage>72</fpage>
          .
          <string-name>
            <surname>CEUR-WS.org</surname>
          </string-name>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>German</surname>
            ,
            <given-names>D.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hassan</surname>
            ,
            <given-names>A.E.</given-names>
          </string-name>
          :
          <article-title>License integration patterns: Addressing license mismatches in component-based development</article-title>
          .
          <source>In: Proceedings of the 31st International Conference on Software Engineering</source>
          . pp.
          <volume>188</volume>
          {
          <fpage>198</fpage>
          . ICSE '09, IEEE Computer Society, Washington, DC, USA (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Gogolla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bohling</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Richters</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Validating UML and OCL Models in USE by Automatic Snapshot Generation</article-title>
          .
          <source>Journal on Software and System Modeling</source>
          <volume>4</volume>
          (
          <issue>4</issue>
          ),
          <volume>386</volume>
          {
          <fpage>398</fpage>
          (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9. Hamann, L.,
          <string-name>
            <surname>Gogolla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kuhlmann</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>OCL-Based Runtime Monitoring of JVM Hosted Applications</article-title>
          . In: Cabot,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Clariso</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            ,
            <surname>Gogolla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Wol</surname>
          </string-name>
          ,
          <string-name>
            <surname>B.</surname>
          </string-name>
          <source>(eds.) Proc. Workshop OCL</source>
          and Textual
          <string-name>
            <surname>Modelling</surname>
          </string-name>
          (OCL'
          <year>2011</year>
          ). ECEASST,
          <string-name>
            <surname>Electronic Communications</surname>
          </string-name>
          (
          <year>2011</year>
          ), http://journal.ub.tu-berlin.de/eceasst/issue/view/56
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10. Hamann, L.,
          <string-name>
            <surname>Hofrichter</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gogolla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Towards Integrated Structure and Behavior Modeling with OCL</article-title>
          . In: France,
          <string-name>
            <given-names>R.</given-names>
            ,
            <surname>Kazmeier</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Breu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            ,
            <surname>Atkinson</surname>
          </string-name>
          , C. (eds.)
          <source>Proc. 15th Int. Conf. Model Driven Engineering Languages and Systems</source>
          (MoDELS'
          <year>2012</year>
          ). pp.
          <volume>235</volume>
          {
          <fpage>251</fpage>
          . Springer, Berlin, LNCS
          <volume>7590</volume>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Hilken</surname>
          </string-name>
          , F.,
          <string-name>
            <surname>Hamann</surname>
          </string-name>
          , L.,
          <string-name>
            <surname>Gogolla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Transformation of uml and ocl models into lmstrip models</article-title>
          . In: Ruscio,
          <string-name>
            <given-names>D.D.</given-names>
            ,
            <surname>Varro</surname>
          </string-name>
          ,
          <string-name>
            <surname>D</surname>
          </string-name>
          . (eds.)
          <source>ICMT. LNCS</source>
          , vol.
          <volume>8568</volume>
          , pp.
          <volume>170</volume>
          {
          <fpage>185</fpage>
          . Springer (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Jackson</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Alloy: A logical modelling language</article-title>
          . In: Bert,
          <string-name>
            <given-names>D.</given-names>
            ,
            <surname>Bowen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.P.</given-names>
            ,
            <surname>King</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Walden</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.A</surname>
          </string-name>
          . (eds.)
          <source>ZB. LNCS</source>
          , vol.
          <volume>2651</volume>
          , p.
          <fpage>1</fpage>
          . Springer (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Kuhlmann</surname>
          </string-name>
          , M., Hamann, L.,
          <string-name>
            <surname>Gogolla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Extensive Validation of OCL Models by Integrating SAT Solving into USE</article-title>
          . In: Bishop,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Vallecillo</surname>
          </string-name>
          ,
          <string-name>
            <surname>A</surname>
          </string-name>
          . (eds.)
          <source>Proc. 49th Int. Conf. Objects</source>
          , Models, Components, and
          <string-name>
            <surname>Patterns</surname>
          </string-name>
          (TOOLS'
          <year>2011</year>
          ). pp.
          <volume>289</volume>
          {
          <fpage>305</fpage>
          . Springer, Berlin, LNCS
          <volume>6705</volume>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Richters</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>A Precise Approach to Validating UML Models and OCL Constraints</article-title>
          .
          <source>Ph.D. thesis</source>
          , Universitat Bremen, Fachbereich Mathematik und Informatik, Logos Verlag, Berlin, BISS Monographs, No.
          <volume>14</volume>
          (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Torlak</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jackson</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Kodkod: A relational model nder</article-title>
          . In: Grumberg,
          <string-name>
            <given-names>O.</given-names>
            ,
            <surname>Huth</surname>
          </string-name>
          , M. (eds.)
          <source>TACAS. LNCS</source>
          , vol.
          <volume>4424</volume>
          , pp.
          <volume>632</volume>
          {
          <fpage>647</fpage>
          . Springer (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <article-title>A UML-based Speci cation Environment</article-title>
          . Internet, http://sourceforge.net/ projects/useocl/
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Wettel</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lanza</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Visual Exploration of Large-Scale System Evolution</article-title>
          . In: Hassan,
          <string-name>
            <given-names>A.E.</given-names>
            ,
            <surname>Zaidman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            ,
            <surname>Penta</surname>
          </string-name>
          , M.D. (eds.) WCRE. pp.
          <volume>219</volume>
          {
          <fpage>228</fpage>
          .
          <string-name>
            <surname>IEEE</surname>
          </string-name>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>