<!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>Requirements as First-Class Citizens: Integrating Requirements Directly with Implementation Artifacts</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Markus Voelter</string-name>
          <email>voelter@acm.org</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Daniel Ratiu</string-name>
          <email>ratiu@fortiss.org</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Federico Tomassetti</string-name>
          <email>federico.tomassetti@polito.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Politecnico di Torino</institution>
          ,
          <addr-line>Torino</addr-line>
          ,
          <country country="IT">Italy</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>fortiss gGmbH</institution>
          ,
          <addr-line>Muenchen</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>independent/itemis</institution>
          ,
          <addr-line>Stuttgart</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Requirements often play second ddle in software development projects. The tools for managing requirements are only loosely integrated with the tools used for implementing the system. Furthermore, while implementation tools are based on a rich syntax and wellunderstood semantics (the programing language itself), requirements tools are often only aware of weakly structured text. This leads to accidental complexity in integrating requirements with each other and with implementation artifacts. In this paper we describe an approach based on language engineering technologies that results in integrated development environments where both requirements and the code are treated as rst class entities. Parts of requirements can be used directly as the implementation, and they are managed with the same tools that are used for the implementation. The approach is illustrated by an extension of the mbeddr system, a comprehensive IDE for embedded software development, with functionality for managing requirements.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Collecting, organizing and managing requirements is essential in the
embedded software development. Complete con guration management and traceability
from the code to requirements is required by safety standards such as IEC61508.
Still, it is often a cumbersome activity which either is relentlessly executed with
major e ort (typically if the process requires it) or it is mainly overlooked,
leading to poorly structured and maintained requirements.</p>
      <p>
        One major problem with the traditional ways of collecting and maintaining
requirements is the inadequacy of the supporting tools [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. Requirements are
often collected and managed using MS O ce documents [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] or tools like Rational
DOORS, which basically manage numbered paragraphs of text with very limited
additional structure and weak modeling capabilities [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. The relation between
requirements and implementation code or tests is collected in other documents,
or expressed with comments in the code. This requires manual synchronization
with the actual system implementation [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. As emphasized in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], a deeper, more
seamless integration of requirements with the other development activities would
increase their value to all stakeholders.
      </p>
      <p>
        The study in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] identi es element-level tracing as a major challenge. It is not
surprising that, when possible, practitioners try to escape the need for systematic
requirements management and tracing, using an "agile" process as an excuse.
However, while agile approaches to requirements engineering limit the burden
of managing them, they often do not provide a maintenance strategy; instead,
requirements are considered transient artifacts. This is not acceptable in many
embedded systems projects, where quality standards require a more structured
approach to requirements management.
      </p>
      <p>
        In this paper we present an approach to use language engineering and
projectional editors to deeply integrate requirements into software development tools.
Requirements are captured using an extensible language speci c to the
"requirements domain", just as other artifacts are expressed with languages speci c to
their particular domains (C code, state machines, data ow blocks). We have
implemented this approach based on the JetBrains MPS language workbench
and the mbeddr stack for implementing embedded software (discussed in the
next section). The approach leads to four main bene ts:
{ Rich and extensible requirements language: By using the language
modularization and composition features supported by language workbenches,
requirements can have a rich structure, domain-speci c extensions to (generic)
requirements can be de ned, and custom traces or consistency checks can
be seamlessly integrated. The need to extend requirements engineering tools
in order to to properly express requirements was pointed out already almost
forty years ago in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Today we can bene t from language workbenches that
support extensibility with very limited e ort, supporting end user-friendly
notation such as tables or mathematical formulas.
{ Deep integration of requirements with other artifacts: Various ways of
integrating implementation artifacts and requirements become technically
simple. For example, traces to requirements can be attached to arbitrary
elements in arbitrary implementation artifacts.
{ Ability to query the requirements model: Relationships between requirements
and artifacts can be queried to nd out, for example, which requirements are
related to failing tests or are not connected to implementing artifacts.
{ Reduction of friction loss between tools: Since requirements are rst class
citizens in the development tool, the same tooling is reused both for editing
and managing of requirements and implementation artifacts. This includes
version control and di /merge.
2
      </p>
      <p>
        mbeddr and MPS at a Glance
mbeddr4 is an open source project supporting embedded software development
based on incremental, modular domain-speci c extension of C. It also supports
other languages, which is what we exploit in this paper. Fig. 1 shows an overview,
details are discussed in [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] and [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. mbeddr builds on the JetBrains MPS
language workbench5, a tool that supports the de nition, composition and
integrated use of general purpose or domain-speci c languages. MPS uses a
projectional editor, which means that, although a syntax may look textual, it is not
      </p>
    </sec>
    <sec id="sec-2">
      <title>4 http://mbeddr.com 5 http://jetbrains.com/mps</title>
      <p>represented as a sequence of characters which are transformed into an abstract
syntax tree (AST) by a parser. Instead, a user's editing actions lead directly to
changes in the AST. Projection rules render a concrete syntax from the AST.
Consequently, MPS supports non-textual notations such as tables or
mathematical symbols, and it also supports wide-ranging language composition and
extension { no parser ambiguities can ever occur when combining languages.</p>
      <p>
        mbeddr comes with an extensible implementation of the C99 programming
language. On top of that, mbeddr ships with a library of reusable extensions
relevant to embedded software. As a user writes a program, he can import language
extensions from the library and use them in his program. The main extensions
include test cases, interfaces and components, state machines, decision tables and
data types with physical units. For many of these extensions, mbeddr provides
an integration with static veri cation tools [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. mbeddr also supports several
important aspects of the software engineering process: documentation,
requirements and product line variability. These are implemented in a generic way to
make them reusable with any mbeddr-based language (we discuss aspects of the
requirements support in detail in the remainder of this paper). Finally, users can
build extensions to any of the existing languages or integrate additional DSLs.
3
      </p>
      <sec id="sec-2-1">
        <title>Challenges and Solutions</title>
        <p>In this section we describe a set of challenges in requirements engineering as well
as our approach to solving them in mbeddr. While not all of the solutions are
unique to mbeddr, the combination of features and their exible extensibility is.
3.1</p>
        <sec id="sec-2-1-1">
          <title>Requirements Versioned with Code</title>
          <p>Challenge Traditionally, requirements are stored in a tool-speci c database.
Other development artifacts are instead typically stored in version control
systems (VCS) such as git, SVN or ClearCase. This leads to problems when trying
to keep requirements in sync with the implementation.</p>
          <p>Solution In mbeddr, requirements are treated like any other artifact and
stored in MPS models (represented as XML les on the les system). This
way, requirements and implementation artifacts are stored in the same VCS.
Di /merge is supported for requirements in the same way as for any other
artifact (see Fig. 2). mbeddr is not the only tool that uses this approach: Requality6
and Yakindu7 use this approach as well.</p>
          <p>To represent requirements, mbeddr provides a special language. Each
requirement has an ID, a short description, an optional longer prose and additional
attributes. Requirements can also be nested. An example is shown in Fig. 4.
3.2</p>
        </sec>
        <sec id="sec-2-1-2">
          <title>Traceability into Code</title>
          <p>
            Challenge Tracing can be used to express the relationship between
implementation artifacts and requirements: a program element has a pointer to one or
more requirements, expressing that this particular element is somehow related to
a requirement. By using di erent trace kinds, the nature of "somehow related"
can be quali ed. Trace kinds typically include implements or tests. Tracing is
supported by several requirements tools. For example, Reqtify8 supports tracing
into SCADE models and Yakindu supports tracing into various Eclipse-based
artifacts, requiring speci c tool adapters for each of them. Consistent element-level
tracing becomes a challenge, however, when working with di erent
implementation languages, techniques and tools. The empirical study in [
            <xref ref-type="bibr" rid="ref7">7</xref>
            ] identi es this as
one of the major challenges in today's use of model-driven engineering tools.
Solution In the context of mbeddr, a program is anything expressed with
any MPS-based (programming or modeling) language. This includes C and all
of mbeddr's C extensions. Fig. 3 shows a piece of mbeddr program code. The
root element is a module, and it has an annotation that speci es to which
requirements modules we may want to trace from within that module. We can then
add a trace to any program element in that module (expressed in C and the state
machines extension), tracing to any requirement in the referenced requirements
module. There are four important characteristics of this implementation:
          </p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>6 http://requality.ru 7 http://www.yakindu.de/requirements/ 8 http://www.3ds.com/products-services/catia/portfolio/geensoft/reqtify/</title>
      <p>1. The trace is not an independent program element that is just "geographically
close" to the program element it traces. Instead, the trace is a child of the
traced element. This means that, if you move, copy, cut or paste the element,
the trace moves with it.
2. Since MPS is a projectional editor, the program can also be shown without
the traces, if the user so desires.
3. The requirements trace is a well-typed program element that can be used in
analyses. For example, it is possible to nd all program elements that have
traces to a particular requirement using MPS' generic Find Usages facility.
4. The tracing facility is completely independent of the traced language.
Program elements de ned in any (MPS-based) language can be traced.
Userde ned languages with automatically work with the tracing mechanism.
Our tracing framework still requires users to manually establish and maintain the
traces according to the actual relationship between programs and requirements
(except in cases where artifacts are generated from higher-level artifacts, in which
case traces can be added automatically). However, the approach does solve the
technical challenges associated with ubiquitous tracing support. In particular,
the fact that referential integrity is automatically checked and that arbitrary
analyses can be built on top of the program/requirement/trace data, eases the
work of the developer.
3.3</p>
      <sec id="sec-3-1">
        <title>Formal Business Logic in Requirements</title>
        <p>
          Challenge In today's practice, there is a big gap between requirements and
implementation artifacts: requirements are prose text, and developers are
expected to understand the text and write implementation code that is faithful
to the requirements. This is ine cient, tedious and error prone. In many cases,
aspects of a system's requirements are known to domain experts and
requirements engineers in a structured/formal way. Examples include price calculations,
legal rules or control algorithms. It would be useful a tool were available that
is able to incorporate such structured/formal aspects into requirements { with
IDE support for the languages used to express these structured/formal aspects.
With today's tools, this is hard to achieve, and the study in [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] identi es this as
another major challenge in today's practice.
        </p>
        <p>Solution mbeddr supports embedding structured/formal parts of the business
logic into requirements, and then use these parts directly in the implementation.
Fig. 4 shows two requirements. The rst one de nes a constant BASE POINTS
with the type int8 and the value 10. The second requirement de nes a
calculation PointsForATrackpoint. A calculation has a name, parameters, and a result
expression, which, in this case, uses a decision table (a representation of nested
if-statements). The calculation also references the BASE POINTS constant. Using
constants and calculations, business users can formally specify some important
business data and rules, while not having to deal with the actual implementation
of the overall system. To help with getting these data and rules correct,
calculations also include test cases. These are evaluated directly in the IDE, using an
interpreter: users can directly "play" with the calculations.</p>
        <p>To increase the usefulness of the constants and calculations speci ed by
business users in requirements, these calculations should make their way into the code
directly. Fig. 5 shows a component, expressed in mbeddr's component extension
to C that invokes a calculation (the green code). When this code is translated
to C, the expression in the calculation is translated into C and inlined.</p>
        <p>The constants and the calculations are just examples of possible "plug in"
languages into mbeddr's requirements system. Any DSL, using a wide range of
business user-friendly notations, can be plugged into requirements.
Challenge For each functional requirement there should be a suite of tests to
verify it. The functional coverage represents the degree to which all functional
requirements are covered through veri cation activities. Making sure that all
requirements are veri ed in the code is usually a manual process.
Solution The solution to this challenge combines language extensibility and
tracing. Language extensions that express test cases and domain-speci c formal
veri cations are available, and traces (with suitable kinds) are used to tie tests
and veri cations back to the tested and veri ed requirements (Fig. 6, Fig. 7). The
deep integration of requirements and code also helps to identify inconsistencies or
underspeci cations in requirements. This way, requirements can be implemented,
tested and veri ed iteratively, checked automatically and continuously.
Challenge To answer questions like "how many requirements were
implemented", "what are the quality assurance tasks for a certain requirement", or
"how much e ort has been spent on each requirement" one needs today to use
various di erent tools, because answering these questions often requires access to
the requirements, the traces as well as the implementation artifacts. This makes
answering these questions expensive, preventing team members from getting an
overview over the state of the project.</p>
        <p>
          Solution mbeddr's assessments provide a exible way of answering questions
like the ones mentioned above. An assessment is a query over the integrated
model. The results are presented in a query-speci c way. Users can navigate
from the result entries to various linked elements. A color code highlights results
that have been added in the most recent update. Fig. 8 shows an example.
As mentioned in the introduction, Winkler and von Pilgrim [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ] performed a
literature review on traceability. They conclude that tracing is rarely used in
practice and the most prominent problem leading to this is the lack of proper tool
support. Our approach provides a possible solution to this dilemma and could
therefore contribute to helping practitioners in adopting requirements
traceability, particularly, in contexts where the process requires it.
        </p>
        <p>
          In [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ], Kuhn et al. present an empirical study on the problems that currently
plague model-driven development in the industry. They have interviewed a
number of developers from General Motors who use mainstream model-driven
development tools. Traceability between implementation artifacts (model, code) and
requirements is very important to all engineers interviewed in the study. Their
current tool-chain only provides document-to-document traceability, which is
not granular enough. Traceability is required on the level of model or program
elements, for any level of abstraction. mbeddr's approach supports this issue.
The study also found that di ng between various versions of the same model is
insu ciently supported; mbeddr solves this problem as well. Finally, the study
nds that developers miss the ability to use problem-appropriate abstractions
and notations when describing systems. mbeddr's extensibility solves this
problem as well { for requirements, and for any other language in mbeddr.
        </p>
        <p>
          Favaro et al. [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] present an approach to requirements engineering that has
some commonalities with ours. Like us, they have the goal to introduce
structured, model-based requirements. Their approach relies on the use of a wiki
enriched by semantic links supporting navigation from the requirement to the
artifact (but not vice versa). They emphasize two points with which we strongly
agree: a) the importance of having an adaptable mechanism for requirements,
depending not only on the nature of the project but also on the kind of the
requirement, with a lighter process for "non-technical" requirements; b) the fact that
requirements and implementation artifacts are intrinsically integrated. mbeddr's
approach provides tight integration between requirements and artifacts, as well
as the possibility to have both a exible approach and speci c IDE support for
any particular kind of formal language embedded into the requirements.
5
        </p>
        <sec id="sec-3-1-1">
          <title>Discussion, Conclusions and Future Work</title>
          <p>Discussion The tooling described in this paper solves some important
challenges in requirements engineering. However, it is assumed that all artifacts
reside in MPS, which limits the applicability of the approach (an import/export
facility for requirements is provided, though). On the other hand, mbeddr
demonstrates the bene ts of building tool suites on top of a language workbench like
MPS. In our opinion, this trade-o is worthwhile.</p>
          <p>
            mbeddr allows us to scale the level of sophistication of the language used to
express requirements to the needs of the project. This way, small projects can
use a basic version of the language to express requirements in a very lightweight
form. For more demanding contexts, for example the development of complex
embedded systems, the tooling permits to plug-in domain-speci c extensions of
the requirements language. The e orts of extending the requirements language
is limited (language extension e orts are discussed in [
            <xref ref-type="bibr" rid="ref10">10</xref>
            ]). Also, we have built a
set of extensions of the requirements language speci c to a concrete development
project on the y, as part of the project. The e orts were a few hours.
          </p>
          <p>
            Since the mbeddr requirements tool looks like a "programming IDE", it may
appear to appeal mostly to programmers. However, in a recent project, the
product manager has expressed that he is very happy using it. Also, we are
currently in the process of introducing a similar tool to business users in the
insurance domain. In both cases, the ability to use domain-speci c abstractions
and notations such as tables or formulas were cited as a major advantage.
Conclusion mbeddr's core idea is discussed in [
            <xref ref-type="bibr" rid="ref10">10</xref>
            ]: building domain-speci c
tools is not just about adapting a tool to a particular domain (e.g. automotive,
medical devices, user interfaces). It is rather more important to adapt to the
domain the languages, formalisms and data formats that underlie the tool. If this
is done based on a language workbench, the necessary e orts are limited, and
you get the tool adaptation essentially for free. This is because the actual tool,
JetBrains MPS, is essentially a very powerful editor for any kind of language.
In this paper, we have demonstrated this idea for requirements management.
All the bene ts discussed in this paper involve only language engineering. No
tool aspects have been customized. End user feedback for this approach is very
encouraging.
          </p>
          <p>
            Future Work There are two main areas for future work. First, we will add
reporting functionality, targeting requirements documents in HTML and
Latex. The reports will include the diagrams, as well as trace reports. Second, a
colleague of ours is currently working on an MPS editor component that
supports mixing free text (with text-like editing support) and instances of language
concepts. Integrating this editor with the requirements management tooling
discussed in this paper will be extremely useful: for example, one could reference
other requirements from within the prose description of a particular requirement,
while making sure that this reference would take part in refactorings. In addition
we may experiment with integrating information retrieval techniques to suggest
possible traces between requirements and development artifacts, as suggested by
Hayes et al. in [
            <xref ref-type="bibr" rid="ref6">6</xref>
            ]. This would reduce the e ort of establishing and maintaining
the traces.
          </p>
          <p>Acknowledgements We thank the mbeddr and MPS teams for creating a
powerful platform that can accommodate the things described in this paper.</p>
        </sec>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>T.</given-names>
            <surname>Bell</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Bixler</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Dyer</surname>
          </string-name>
          .
          <article-title>An extendable approach to computer-aided software requirements engineering</article-title>
          .
          <source>Software Engineering</source>
          , IEEE Transactions on,
          <source>SE3(1):</source>
          <volume>49</volume>
          {
          <fpage>60</fpage>
          ,
          <year>1977</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>B. H. C.</given-names>
            <surname>Cheng</surname>
          </string-name>
          and
          <string-name>
            <given-names>J. M.</given-names>
            <surname>Atlee</surname>
          </string-name>
          .
          <article-title>Research directions in requirements engineering</article-title>
          .
          <source>In 2007 Future of Software Engineering, FOSE '07</source>
          , pages
          <fpage>285</fpage>
          {
          <fpage>303</fpage>
          , Washington, DC, USA,
          <year>2007</year>
          . IEEE Computer Society.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>J. M. C. de Gea</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Nicols</surname>
            ,
            <given-names>J. L. F.</given-names>
          </string-name>
          <string-name>
            <surname>Alemn</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Toval</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          <string-name>
            <surname>Ebert</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Vizcano</surname>
          </string-name>
          .
          <article-title>Requirements engineering tools: Capabilities, survey and assessment</article-title>
          .
          <source>Information and Software Technology</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>B.</given-names>
            <surname>Draxler</surname>
          </string-name>
          .
          <article-title>Bidirectional tracing of requirements in embedded software development</article-title>
          .
          <source>Technical report</source>
          , University of Satzburg,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>J.</given-names>
            <surname>Favaro</surname>
          </string-name>
          , H.
          <string-name>
            <surname>-P. de Koning</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Schreiner</surname>
            , and
            <given-names>X.</given-names>
          </string-name>
          <string-name>
            <surname>Olive</surname>
          </string-name>
          .
          <article-title>Next generation requirements engineering</article-title>
          .
          <source>In Proc. 22nd Annual INCOSE International Symposium</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>J.</given-names>
            <surname>Hayes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Dekhtyar</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Osborne</surname>
          </string-name>
          .
          <article-title>Improving requirements tracing via information retrieval</article-title>
          .
          <source>In Requirements Engineering Conference</source>
          ,
          <year>2003</year>
          . Proceedings. 11th IEEE International, pages
          <volume>138</volume>
          {
          <fpage>147</fpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>A.</given-names>
            <surname>Kuhn</surname>
          </string-name>
          , G. Murphy, and
          <string-name>
            <given-names>C.</given-names>
            <surname>Thompson</surname>
          </string-name>
          .
          <article-title>An exploratory study of forces and frictions a ecting large-scale model-driven development</article-title>
          . In R. France,
          <string-name>
            <given-names>J.</given-names>
            <surname>Kazmeier</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Breu</surname>
          </string-name>
          , and C. Atkinson, editors,
          <source>Model Driven Engineering Languages and Systems</source>
          , volume
          <volume>7590</volume>
          of Lecture Notes in Computer Science. Springer,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>D.</given-names>
            <surname>Ratiu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Voelter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Schaetz</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Kolb</surname>
          </string-name>
          .
          <article-title>Language Engineering as Enabler for Incrementally De ned Formal Analyses</article-title>
          .
          <source>In FORMSERA'12</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>A.</given-names>
            <surname>Talbot</surname>
          </string-name>
          .
          <article-title>An investigation into requirements engineering current practice and capability in small and medium software development enterprises</article-title>
          .
          <source>Master's thesis</source>
          , Auckland University of Technology,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>M. Voelter</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Ratiu</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Kolb</surname>
            , and
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Schaetz</surname>
          </string-name>
          . mbeddr:
          <article-title>Instantiating a language workbench in the embedded software domain</article-title>
          .
          <source>Journal of Automated Software Engineering</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>M. Voelter</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Ratiu</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Schaetz</surname>
            , and
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Kolb</surname>
          </string-name>
          .
          <article-title>mbeddr: an Extensible C-based Programming Language and IDE for Embedded Systems</article-title>
          .
          <source>In Proc. of the 3rd conf. on Systems</source>
          , programming, and
          <article-title>applications: software for humanity</article-title>
          ,
          <source>SPLASH '12.</source>
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>S.</given-names>
            <surname>Winkler</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Pilgrim</surname>
          </string-name>
          .
          <article-title>A survey of traceability in requirements engineering and model-driven development</article-title>
          .
          <source>Software and Systems Modeling</source>
          ,
          <volume>9</volume>
          :
          <fpage>529</fpage>
          {
          <fpage>565</fpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>