<!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-Driven Design of Cyber-Physical Systems</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Simone Vuotto</string-name>
          <email>simone.vuotto@edu.unige.it</email>
          <email>svuotto@uniss.it</email>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Università degli Studi di Genova</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Università degli Studi di Sassari</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>The demand for more and more complex Cyber-Physical Systems (CPS), i.e. tightly coupled hardware and software components that operate in a physical (unsupervised) environment, is increasing. More often than not, they require guarantees in terms of performance, safety, security, sustainability, etc. The design of CPS is therefore a fundamental, yet dificult and challenging task. The Cross-layer modElbased fRamework for multi-oBjective dEsign of Reconfigurable systems in unceRtain hybRid envirOnments (CERBERO) EU project [9] aims at developing a set of tools, cooperating at diferent layers of abstraction, to ease the design process and increase adaptivity of such systems. In this context, our research focuses on the analysis of the first item produced in the design process: software and system requirements. It is well known that a flaw in the requirements specification can lead to delays, additional costs and, possibly, the failure of the project. Nonetheless, due to the intrinsic dificulty of dealing with natural language sentences, requirements are often checked manually, an error-prone and time-consuming activity. Our goal is to design a tool to automatize this task and, starting from the formalization of requirements, generate artifacts that can be used to validate and verify the items produced along the design process.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        1 Introduction
The definition and elicitation of requirements is usually the first step in the
design of software and cyber-pysical systems. They are used as a guideline for
the implementation and as a reference for the verification and validation of the
ifnal product (see, for example, the V-Model depicted in Figure 1 on the left,
often used in the design of CPS). Despite their importance, the assessment of
requirements is still largely carried out manually. The Requirements
Engineering (RE)[
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] research field aims at developing tools and techniques to analyze
and handle requirements in a more eficient and automatic way. The goal of
our research is to build a tool that can assist the CPS designer along all the
design process, exploiting the information available in the requirements
specification document to test and monitor the behavior of the final implementation.
      </p>
      <p>This objective matches well with one of the main CERBERO’s missions, namely
reducing the time-to-market of new designed CPSs by means of an integrated
toolchain for comprehensive model-based design of CPS (Figure 1 on the right).</p>
      <p>The first main challenge of our research is to evaluate requirements
consistency: informally, it means detecting errors, missing information and deficiencies
that can compromise the interpretation and implementation of the intended
system behavior. At a syntactic level, this may involve the check for compliance
with standards and guidelines, such as the use of a restricted grammar and
vocabulary. We call this task Compliance Checking.</p>
      <p>
        However, most of the inconsistencies reside at a semantic level, i.e. in their
intended meaning. Therefore, it is necessary to interpret the requirements
semantics and represent them with a formalism that allows for reasoning. How to
formalize and translate requirements into a formal representation is an open
research question. A recurrent solution in the literature is the use of Property
Specification Patterns (PSPs), first introduced by [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. PSPs provide a direct mapping
from English-like structured natural languages to one or more logics. A survey
of all available patterns and their translations has been conducted by [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Other
approaches, like [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], employ Natural Language Processing techniques to extract
the representation directly from fully natural language requirements. In both
cases, the integration of an external Knowledge Base is often desirable to
capture the semantics of domain-specific language. We call NL2FL the component
that performs this formalization.
      </p>
      <p>
        Given the set of requirements represented in a formal logic, it becomes
possible to implement more sophisticated checks and exhaustive reasoning. We
formally define this task Consistency Checking analysis [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Consistency Checking
can range from simple variables type and domain checks to more complex
activities, like the evaluation of the intended system behavior over time.
      </p>
      <p>
        Moreover, the formalization of requirements and the consistency checking are
enablers for other tasks we would like to tackle, namely the automatic
generation of test suites [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] and runtime monitors [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. The former is used to verify
the compliance of the code with the requirement specification, while the latter
      </p>
      <p>Knowledge Base
Requirements</p>
      <p>Feedback</p>
      <p>Report
Test Suite
Monitor</p>
      <p>Compliance</p>
      <p>Checker</p>
      <p>NL2FL
Consistency</p>
      <p>Checker</p>
      <p>Automatic
Test Generator</p>
      <p>Runtime
Monitor Builder</p>
      <p>Formal
Representation
is useful to ensure that no unexpected behavior, which may have escaped the
test phase, is executed at runtime on the target CPS. The full overview of the
framework we intend to realize is depicted in Figure 2.</p>
      <p>
        Finally, the choice of which logic to use largely afects the reasoning power and
the kind of requirements that can be formalized: qualitative, real-time and/or
probabilistic. For example, in some logics it is only possible to specify that an
event e will eventually happen in the future, while others can also constraint the
time frame (e.g. e will happen within 5s) or its likelihood (e.g. e will happen
with probability p 0:5). We started from Linear Temporal Logic (LTL)[
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]
because it has a good balance between expressiveness and complexity, and it is
widely used in the literature, but we also plan to explore more expressive logics.
2
      </p>
      <p>
        Consistency of Property Specification Patterns
Our first contribution [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], presented a tool for the consistency checking of
qualitative requirements expressed in form of PSPs with constrained numerical
signals. An example of requirement that we can handle is:
      </p>
      <p>Globally, it is always the case that if proximity_sensor &lt; 20 holds, then
arm_idle eventually holds.</p>
      <p>We first translate every requirement ri 2 R in LTL(DC ), an extension of LTL
over a constraint system DC = (R,&lt;,=), with atomic constraints of the form
x &lt; c and x = c (where c 2 R is a constant real number and ‘&lt;” and “=” have
the usual interpretation). We then show how the new problem can be reduced
to LTL satisfiability. Let X(ϕ) be the set of numerical variables and C(ϕ) be the
set of constants that occur in ϕ. We compute:
– the LTL(DC ) formula ϕi for every requirement ri 2 R;
– the conjunctive formula ϕ = ϕ1 ^ ::: ^ ϕn;
– a set Mx(ϕ) of boolean propositions representing possible values of x 2 X(ϕ);
– the formula QM encoding the constraints over Mx(ϕ) 8x 2 X(ϕ);
– the formula ϕ′ that substitute all x 2 X(ϕ) in ϕ with a set of boolean
propositions from Mx(ϕ);</p>
      <p>Given the LTL(DC ) formula ϕ over the set of Boolean atoms P rop and the
terms C(ϕ) [ X(ϕ) we have that ϕ is satisfiable if and only if the LTL formula
ϕM ^ ϕ′ is satisfiable. This result is important because it shows that LTL( DC )
is decidable and that we can exploit state-of-the-art LTL model checkers.</p>
      <p>
        However, LTL satisfiability is not suficient to guarantee the correctness and
completeness of the requirements set, and a more extensive feedback is necessary
in case of inconsistency. In order to answer these needs, we extended the work
in [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] in two directions.
2.1
      </p>
      <p>Connected Requirements Check
Given a set of requirements R = r1; : : : ; rn, we want to check if one or more
of such requirements are completely unrelated to the others, meaning that they
describe some behaviors that do not interact with the main bulk of the system.
This may happen in an underspecified requirements set or for some spelling
errors. To find these faults, we first build the undirected graph G = (V; E)
representing the connections in R, such that:
– vi 2 V 8ri 2 R;
– (i; j) 2 E if X(ri) \ X(rj ) ̸= ∅ 8ri; rj 2 R; i ̸= j
where X(ri) is the set of variables, boolean or numerical, that appear in ri. We
then perform a static analysis on the graph, checking if:
– a variable is never used to connect two requirements;
– the graph is composed of two or more connected components.
Both cases suggest that the system is underspecified, and a corresponding
warning message is generated.</p>
      <p>Consider, for instance, the set of requirements:
R1 It is always the case that x &gt;= 0 and x &lt;= 10 holds.</p>
      <p>R2 After x &gt; 5, y or z eventually holds.</p>
      <p>R3 It is always the case that if w &gt; 10 holds, then y and z previously held.
R4 Globally, it is always the case that if j holds, then k eventually holds.
R5 Globally, it is always the case that if k holds, then j eventually holds.
The corresponding graph is showed in Figure 3. In this case two warnings are
generated: (1) The variable w is used only in R3; and (2) requirements R4 and
R5 are part of a separated component, meaning that they are describing the
behavior of a subsystem that does not interact with the main system, or some
requirement is missing.</p>
      <p>
        In the current implementation boolean and numerical variables are handled
in the same way, but a more fine grained check could take into account every
single range (in the example before, what happen when x is between 0 and 5?).
In case of inconsistent requirements, we are interested in finding a small subset
of them that explain the problem. This can help the designer in identifying
and fixing mistakes in a (possibly very large) set of requirements. We perform
this task, called Inconsistent Requirements Explanation, using the deletion-based
algorithm represented in Algorithm 1. The algorithm finds an high-level minimal
unsatisfiable core (HLMUC) [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], i.e., an irreducible subset of requirements that
maintain the inconsistency. It exploits the simple observation that if the set
R′ fR nr : r 2 Rg is still inconsistent, then r is not necessary for the HLMUC.
If, on the other hand, R′ is consistent, r is part of one HLMUC and can not be
removed. Therefore, we iteratively remove a specification ri and check for the
consistency of the new set. The algorithm terminate after all ri with i 2 1 : : : n
have been checked.
      </p>
      <p>To better illustrate how the algorithm works, consider the following example:
R1 Globally, it is always the case that A holds.</p>
      <p>R2 Globally, it is never the case that A holds.</p>
      <p>R3 Globally, it is always the case that B holds.</p>
      <p>R4 Globally, it is always the case that if B holds, then C holds as well.
R5 Globally, it is never the case that C holds.</p>
      <p>R6 Globally, it is always the case that A and B holds.</p>
      <p>R7 After B, D eventually holds.</p>
      <p>In this case it is simple to see that there are 4 HLMUC in R: fR1; R2g,
fR2; R6g, fR3; R4; R5g, fR4; R5; R6g. Algorithm 1 finds only one of these sets,
depending on the evaluation order. A possible step-by-step execution is
illustrated in the following table.</p>
      <p>The final result is R′ = fR4; R5; R6g, but if we used the inverse order, we
would have obtained R′ = fR1; R2g.</p>
      <p>
        Algorithm 1 is pretty simple although ineficient, because it performs jRj
satisfiability checks. We also implemented a faster algorithm that employs a
recursive strategy, but it has been omitted due to space constraints.
Algorithm 1 Linear Deletion-Based Inconsistency Finder Algorithm
We are now working on the problem of automatic tests generation from LTL
specifications. This is a widely studied problem [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], but most of the proposed
solutions assume the availability of the model that the specification refer to.
They often exploit the model checkers capability to produce a counterexample
in order to generate a finite trace that can be interpreted as a test case. However,
in our case we don’t have such a model, and therefore an alternative approach
is required. Using the requirement-based coverage metric described in [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], our
idea is to extract finite paths from the Büchi Automata representation of the
specification. We are currently developing an algorithm to generate these paths,
but scalability is an important issue to be taken into account.
      </p>
      <p>
        Moreover, the consistency checking of requirements has been improved in the
current paper, but more work is necessary in order to validate the specification.
We plan to add more checks in parallel with the current ones, like the
Realizability Check implemented in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. We also believe that the performance of HLMUC
extraction can be improved, exploiting the internal information produced by the
model checker to drive the research of the unsatisfiable core in a more eficient
way.
      </p>
      <p>
        Finally, for future works we would also like to both extend the natural
language interface with less restrictive constraints and explore more expressive
formalisms. In this regard, two research directions are possible: extend the current
work with probabilistic or real-time logics, or introduce the contract-based design
paradigm. This paradigm is an emerging solution to deal with complex systems
by decomposing them in components and defining their properties in term of
contracts [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Contract-based design is particularly interesting in our context
because it presents an appealing parallelism with how requirements are usually
specified and, at the same time, it can reduce the verification complexity.
Acknowledgments The research of Simone Vuotto is funded by the EU
Commission H2020 Programme under grant agreement N.732105 (CERBERO project).
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Autili</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grunske</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lumpe</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pelliccione</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tang</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Aligning qualitative, real-time, and probabilistic property specification patterns using a structured english grammar</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>41</volume>
          (
          <issue>7</issue>
          ),
          <fpage>620</fpage>
          -
          <lpage>638</lpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Bloem</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cavada</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pill</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Roveri</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tchaltsev</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Rat: A tool for the formal analysis of requirements</article-title>
          . In: International Conference on Computer Aided Verification. pp.
          <fpage>263</fpage>
          -
          <lpage>267</lpage>
          . Springer (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Cimatti</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Demasi</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tonetta</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Tightening the contract refinements of a system architecture</article-title>
          .
          <source>Formal Methods in System Design</source>
          <volume>52</volume>
          (
          <issue>1</issue>
          ),
          <fpage>88</fpage>
          -
          <lpage>116</lpage>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Dwyer</surname>
            ,
            <given-names>M.B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Avrunin</surname>
            ,
            <given-names>G.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Corbett</surname>
            ,
            <given-names>J.C.</given-names>
          </string-name>
          :
          <article-title>Patterns in property specifications for ifnite-state verification</article-title>
          .
          <source>In: Proceedings of the 21st International conference on Software engineering</source>
          . pp.
          <fpage>411</fpage>
          -
          <lpage>420</lpage>
          (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Fraser</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wotawa</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ammann</surname>
            ,
            <given-names>P.E.</given-names>
          </string-name>
          :
          <article-title>Testing with model checkers: a survey</article-title>
          .
          <source>Software Testing, Verification and Reliability</source>
          <volume>19</volume>
          (
          <issue>3</issue>
          ),
          <fpage>215</fpage>
          -
          <lpage>261</lpage>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Ghosh</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Elenius</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Li</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lincoln</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shankar</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Steiner</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          :
          <article-title>Arsenal: automatic requirements specification extraction from natural language</article-title>
          .
          <source>In: NASA Formal Methods Symposium</source>
          . pp.
          <fpage>41</fpage>
          -
          <lpage>46</lpage>
          . Springer (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Heitmeyer</surname>
            ,
            <given-names>C.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jefords</surname>
            ,
            <given-names>R.D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Labaw</surname>
            ,
            <given-names>B.G.</given-names>
          </string-name>
          :
          <article-title>Automated consistency checking of requirements specifications</article-title>
          .
          <source>ACM Transactions on Software Engineering and Methodology (TOSEM) 5</source>
          (
          <issue>3</issue>
          ),
          <fpage>231</fpage>
          -
          <lpage>261</lpage>
          (
          <year>1996</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Leucker</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schallhart</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>A brief account of runtime verification</article-title>
          .
          <source>The Journal of Logic and Algebraic Programming</source>
          <volume>78</volume>
          (
          <issue>5</issue>
          ),
          <fpage>293</fpage>
          -
          <lpage>303</lpage>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Masin</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Palumbo</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Myrhaug</surname>
            , H., de Oliveira Filho,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pastena</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pelcat</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rafo</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Regazzoni</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sanchez</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tofetti</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , et al.:
          <article-title>Cross-layer design of reconfigurable cyber-physical systems</article-title>
          .
          <source>In: Proceedings of the Conference on Design, Automation &amp; Test in Europe</source>
          . pp.
          <fpage>740</fpage>
          -
          <lpage>745</lpage>
          . European Design and Automation
          <string-name>
            <surname>Association</surname>
          </string-name>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Nadel</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ryvchin</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Strichman</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          :
          <article-title>Accelerated deletion-based extraction of minimal unsatisfiable cores</article-title>
          .
          <source>Journal on Satisfiability, Boolean Modeling and Computation</source>
          <volume>9</volume>
          ,
          <fpage>27</fpage>
          -
          <lpage>51</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Narizzano</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pulina</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tacchella</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vuotto</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Consistency of property speciifcation patterns with boolean and constrained numerical signals</article-title>
          .
          <source>In: NASA Formal Methods Symposium</source>
          . pp.
          <fpage>383</fpage>
          -
          <lpage>398</lpage>
          . Springer (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Nuseibeh</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Easterbrook</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Requirements engineering: a roadmap</article-title>
          .
          <source>In: Proceedings of the Conference on the Future of Software Engineering</source>
          . pp.
          <fpage>35</fpage>
          -
          <lpage>46</lpage>
          . ACM (
          <year>2000</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Pnueli</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>The temporal logic of programs</article-title>
          .
          <source>In: Foundations of Computer Science</source>
          ,
          <year>1977</year>
          ., 18th Annual Symposium on. pp.
          <fpage>46</fpage>
          -
          <lpage>57</lpage>
          . IEEE (
          <year>1977</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Whalen</surname>
            ,
            <given-names>M.W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rajan</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Heimdahl</surname>
            ,
            <given-names>M.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Miller</surname>
            ,
            <given-names>S.P.</given-names>
          </string-name>
          :
          <article-title>Coverage metrics for requirements-based testing</article-title>
          .
          <source>In: Proceedings of the 2006 international symposium on Software testing and analysis</source>
          . pp.
          <fpage>25</fpage>
          -
          <lpage>36</lpage>
          . ACM (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>