<!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>
      <journal-title-group>
        <journal-title>ORCID:</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Predicting the Number of Secondary Software Defects</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Oleg Odarushchenko</string-name>
          <email>odarushchenko@gmail</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Elena Odarushchenko</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Olena Kopishynska</string-name>
          <email>olena.kopishynska@pdaa.edu.ua</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Oleksandr Rudenko</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Anatoliy Gorbenko</string-name>
          <email>a.gorbenko@leedsbeckett.ac.uk</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>IntelITSIS'2022: 3rd International Workshop on Intelligent Information Technologies and Systems of Information Security</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Leeds Beckett University</institution>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>National University «Yuri Kondratyuk Poltava Polytechnic»</institution>
        </aff>
        <aff id="aff3">
          <label>3</label>
          <institution>Poltava State Agrarian University</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>1847</year>
      </pub-date>
      <volume>000</volume>
      <fpage>0</fpage>
      <lpage>0003</lpage>
      <abstract>
        <p>Reliability assessment and prediction of the number of faults/defects is an important part of the software engineering process. Many software reliability models assume that all detected are removed with certainty and no new faults are introduced. However, the introduction of secondary faults during software updates has become quite common in software development practice, which can be explained by the enormous complexity of modern computer applications. In the paper we consider different scenarios of introducing secondary faults and how to predict number of such faults. Finally, we discuss how different SRGMs like Jelinski-Moranda, Exponential, Schick-Wolverton, Musa and Lipov models can be modified to account secondary faults in order to improve accuracy of software reliability prediction. We use an industrial case study to demonstrate applicability of the proposed approach. Our results show that considering secondary faults helped to considerably improve accuracy of software failure rate prediction.</p>
      </abstract>
      <kwd-group>
        <kwd>Keywords1</kwd>
        <kwd>Software reliability</kwd>
        <kwd>software reliability growth models</kwd>
        <kwd>secondary faults</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>Software (SW) has become a ubiquitous component and an important part of modern information
and communication systems. As a result, software failures caused by faults made during software
development and overlooked during the testing process can have severe consequences and lead to
largescale outages of computer systems, significant financial losses and even human casualties.</p>
      <p>
        Thus, assessment of software reliability is one of the key issues that arise during SW development,
verification, and validation. An importance of software reliability assessment is emphasized by the need
to comprehensively account its’ impact on reliability of computer systems for critical and
businescritical applications [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ]. Quantitative approach to evaluate software reliability is based on application
of various mathematical models assessing and predicting the number of residual faults and probability
of failure occurrence. These models are called software reliability growth models (SRGMs) [
        <xref ref-type="bibr" rid="ref3 ref4 ref5">3-5</xref>
        ].
SRGMs reflect the critical difference in software and hardware failure mechanisms (hardware fails
mostly due to physical faults, while software faults are design faults; reliability of hardware can degrade
      </p>
      <p>2022 Copyright for this paper by its authors.
over time due to ageing, while software cannot age physically) and can predict the mean time to failure
(MTTF) based on failure statistics collected during software testing and operation.</p>
      <p>A large number of software reliability models have been proposed over the past decades. A model
is a description of the relationship between two or more variables (e.g. the number of already detected
faults/defects and the time to the next failure).</p>
      <p>
        Model assumptions are used to simplify model development. They denote a set of used conventions,
choices and other specifications on which the model is based. Many SRGMs contain an assumption that
in the process of eliminating already detected (primary) faults, new (secondary) faults cannot be
introduced [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. However, the practice of software engineering shows that secondary faults/defects are
often introduced during software update which needs to be accounted by SRGMs [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. This can be done
by developing a new reliability model from the scratch or via modification/upgrading of the existing
SRGMs by introducing new thoughtful assumption [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
      </p>
      <p>The paper proposes a new technique for prediction the number of secondary faults. This technique
has been incorporated into Jelinski-Moranda SRGM to improve accuracy of software reliability
assessment. An industrial case study was used to justify applicability of the proposed approach and to
demonstrate its efficiency.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related Works</title>
      <p>Over two hundred different software reliability models have been developed over the past decades.
These models define the set of assumptions about the number of faults (finite or infinite), fault rate, time
between failures, etc. and offer analytical equations forecasting the number of residual failures, the
failure rate and mean time to failure. A large set of different assumptions is caused by the wide range
of different factors in the process of software development, testing and operation affecting conditions
of faults creation, detection and manifestation [14-23].</p>
      <p>
        There have been quite a few publications attempting to systematize and classify existing SRGMs
based on the assumptions they use:
• Hecht’s classification [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] divided models into prediction, estimation and measurement models;
prediction models such as Holsted and Motley-Brook predict number of software defects based on
physical program characteristics, i.e. code metrics, such as number of the source lines of code,
number of cycles and cyclomatic complexity, number of errors per page of the program code, etc.;
measurement models (e.g. Nelson-Bastani) evaluate reliability of a program working in an
operational environment for a sample of inputs which are randomly selected from the whole input
domain set and counting the number of inputs that results in execution failures; estimation models
like Musa model predict mean time to failure based on failure statistics collected during software
testing.
• Goel's classification [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] considered the following model domains: Times Between Failures
Models (e.g. Jelinski-Moranda and Schick-Wolverton models); Failure Count Models: (e.g.
Schumann model); Fault Seeding Models: (e.g. Mills and Beisin models); Input Domain Based
Models (e.g. Nelson model).
• Fatuev's classification [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. According to Fatuev's classification SRGMs can be divided into two
major classes: static and dynamic. In turn, each class can be split into continuous and discrete
subclasses.
• Blagodatsky’s сlassification [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] extended Fatuev's classification by further dividing the static
models by defects and input data domains and introducing a new class of empirical models which
encompasses the complexity model and the model that determines the required software debugging
time. Continuous models include: Jelinski-Moranda, Mousses, and Transition probabilities models.
The class of discrete models consists of: Shumkan, La Padula, and Schick-Wolverton SRGMs.
• Polonnikov-Nikandrov [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] divided models by time structure (Jelinski-Moranda, simple
exponential, Schick-Wolverton, Lipov, geometric, Schneidewind, Weibul, and Duane models),
software complexity (Halsted model), error markup (Mills, Beisin, and simple heuristic models),
program text structure (Nelson, La Padula, and IBM regression models), input data space structure
(text and entropic models).
• Kharchenko et al in [24] put forward a facet-hierarchical classification of the most popular
SRGMs (Jelinski-Moranda, Shooman, Goel-Okumoto, Schneidewind, Musa, Lapri, Lipow,
MusaOkumoto etc.) which is based on their assumptions systematisation and offered a method of software
reliability growth models choice using the proposed assumptions matrix.
      </p>
      <p>Ultimately, we can conclude that software reliability models can be divided into three main classes:
(i) empirical models, (ii) statistical models and (iii) probabilistic models. The class of probabilistic
models seems to be the most suitable to consider and take into account probability of inserting the
secondary faults during the process of removing the primary faults. We selected a subset of probabilistic
models which risk functions can be modified to account probability of inserting the secondary faults:
Jelinski-Moranda, Simple exponential, Schick-Wolverton, Lipov and Musa models. In the next section
we will consider scenarios of introducing secondary defects during the software life cycle and how the
risk functions of the software reliability models mentioned above can be updated to account for
secondary faults in order to improve the accuracy of software reliability predictions.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Scenarios of introducing SW secondary faults</title>
      <p>It is assumed that software contains Nd initial faults and undergoes a series of updates/upgrades
during its lifecycle. The number of faults Mi left in the software after the i-th update/upgrade can be
estimated using (1) depending on one of the following assumptions:
1. All faults Ni are removed with certainty and no new faults are introduced;
2. All faults Ni detected by the i-th update step are removed with certainty; however, Ki new
(secondary) faults are introduced after software is updated;
3. Not all faults out of Ni detected by the i-th update step are removed after updating the software;
∆Ni faults are left unfixed, but no new faults are introduced as a result of software update;
4. Not all faults out of Ni detected by the i-th update step are removed after updating the software; ∆Ni
faults are left unfixed; in addition, Ki new (secondary) faults are introduced as a result of software update;
5. All faults Ni detected by the i-th update step are removed with certainty; however, K*i new faults
are introduced after upgrading software functionality (i.e. adding new functions);
6. Not all faults out of Ni detected by the i-th update step are removed after updating the software;
∆Ni faults are left unfixed; in addition, K*i new faults are introduced after upgrading software
functionality (i.e. adding new functions);
7. All faults Ni detected by the i-th update step are removed with certainty; however, Ki* new
faults are introduced after upgrading software functionality (i.e. adding new functions); in addition,
KiB interaction faults (i.e. faults occurred during interaction of upgraded software modules with
nonupgraded ones) are introduced into the program.
8. Not all faults out of Ni detected by the i-th update step p are removed with certainty; however,
Ki* new faults are introduced after upgrading software functionality (i.e. adding new functions); in
addition, KiB interaction faults (i.e. faults occurred during interaction of upgraded software modules
with non-upgraded ones) are introduced into the program.
(1)
where λ(t) – risk functions, Fi-1 – the total number of corrected defects at the time, Xi – test time from
ti-1 (time of detection of i-1 software defect) to ti.</p>
    </sec>
    <sec id="sec-4">
      <title>4. Software reliability assessment workflow</title>
      <p>The process of predicting the number of secondary SW faults can be split into the following steps.
Step 1. Collecting the SW defects statistics.</p>
      <p>
        As an input this step uses the following information [
        <xref ref-type="bibr" rid="ref11 ref12">11-13</xref>
        ]:
• system requirements specification (SRS): description of system functions, operating scenarios,
interfaces description, functional and non-functional (i.e. performance, environment, information
security, reliability) requirements;
• software requirements specification (SWRS) and software detailed design (SWDD):
description of operating SW scenarios, SW functional requirements and requirements for SW
interfaces, and non-functional requirements;
      </p>
      <p>The output of this stage is statistics about failure occurrence and fault detection. It is obtained based
on the analysis of testing and validation reports and code reviews.</p>
      <p>Step 2. Analyzing failure occurrence and fault detection statistics as a function of time.</p>
      <p>Failure occurrence and fault detection statistics in each time interval collected at the previous stage
is used to analyze its time correlation.</p>
      <p>Step 3. Selecting the regression function.</p>
      <p>Step 4. Evaluating regression coefficients.</p>
      <p>Step 5. Predicting the number of secondary SW faults.
4.1.</p>
    </sec>
    <sec id="sec-5">
      <title>Prediction of the number of secondary software faults</title>
      <p>Below we define steps for predicting the number of secondary SW defects.</p>
      <p>1. Calculating the module of the difference between the actual number of software defects detected
in the specified time interval and the value predicted by the regression function for the same period of
time.</p>
      <p>2. The number of secondary SW faults in the i-th testing interval can be estimated as the difference
between the results obtained in the previous step and the standard deviation of the fault statistic in the
specified time interval multiplied by the coefficient (2) and rounded to the nearest whole number.
where n – is the total number of testing intervals.</p>
      <p>As a result, we can derive the following equation:</p>
      <p>1
n + 1 − i</p>
      <p>,
 = y −</p>
      <p>− b −
a
x</p>
      <p>1
n + 1 − x
 y ,
(2)
(3)
where y – is statistics of software faults detected in each testing interval; x – is the sequence number of
the testing interval; a, b – are coefficients of the regression function; n – is the total number of testing
intervals;  y – is the standard deviation of y;  – is the estimated deviation value.</p>
      <p>The number of secondary faults then can be estimated by rounding  to the nearest whole number.</p>
    </sec>
    <sec id="sec-6">
      <title>4.2. Industrial case study: evaluation of the number of secondary SW faults in the Logic Module of RadICS platform</title>
      <p>RadICS’s (see Fig. 2) is the digital instrumentation and control platform used in safety and control
systems applications in operating nuclear power plants [23]. It is a modular platform which includes a
set of replaceable standardized modules such as logic module, digital and analog input/output modules.
The functionality of each module is driven by the program logic implemented in the on-board FPGA(s).
FPGA (Field-Programmable Gate Array) is an integrated circuit designed to be programmed through
the use of hardware description languages, e.g. VHDL or Verilog [26, 27]. FPGA code is written in a
description language, then is interpreted, synthesized, and ultimately produces hardware. As such, faults
in the FPGA program code can introduce logic errors into the system.</p>
      <p>In this section we report fault detection statistics (see Table 2) for RadICS’s Logic Module collected
during its functional testing and apply the discussed approach to predict the number of secondary faults.
The Logic Module serves as the core of the entire RadICS platform. It implements the application logic
and is used as a communication node linking other modules installed in the chassis together, performs
self-diagnostics and controls communications with external chassis and systems.</p>
      <p>Figure 4 depicts the fault detection statistics (NS_1) collected during functional testing and the power
regression function (4) used for theoretical approximation of the testing results (NS_2). Values of the
parameters of the regression function were estimated by the least-squares technique.
y = 12.66/x + 2.31
(4)
16
14</p>
      <p>The number of secondary software faults nin was calculated using (3) by pairwise comparison of
NS_1 and NS_2 series. Obtained results are summarised in Table 3.</p>
      <p>The number of predicted secondary faults can now be used to estimate the software failure rate λd
with the help of software reliability growth models. Table 4 compares software failure rates predicted
using Jelinski-Moranda SRGM with and without considering secondary software faults.
secondary faults. It is shown that the total number of faults detected during the testing period is equal
to 67. The number of predicted secondary faults is 8 (approx. 12% of the detected faults).</p>
      <p>Thus, one can assume that the potential number of software faults equals 75 which means that the
software needs to be further tested to detect and remove the rest of the faults.
1,667813
2,031909
1,108970
1,123758
0,706515
0,063928</p>
      <p>Testing intervals, month
1
2
3
4
5
6
7
8
9
10
11
12</p>
    </sec>
    <sec id="sec-7">
      <title>5. Conclusions</title>
      <p>This paper discusses an importance of software reliability assessment. A great number of models
have been proposed to predict software reliability (probability of failure, failure rate or mean time to
failure) and the number of residual software faults.</p>
      <p>Different models use different approaches to evaluate software reliability. For instance, one of the
first attempt to predict the number of software faults was made by Maurice Halstead in 1977 in [23]
where he proposed a number of program code’s ‘complexity’ metrics used as predictors of program
defects.</p>
      <p>In this paper we consider a class of software reliability growth models which use fault detection
statistics collected during software testing. These models put forward different assumption about
statistical distribution of failures (e.g. time between failures follows the exponential distribution),
number of faults (e.g. finite or infinite) and other limitations to simplify the process of software
reliability assessment.</p>
      <p>However, some of these assumptions might not be very realistic and, hence, affect accuracy of the
reliability prediction. For example, many SRGMs assume that all detected faults are removed with
certainty and no new faults are introduced in the software. However, our industrial experience and other
studies show that the introduction of secondary faults is quite common and, hence, needs to be
accounted during software reliability modelling.</p>
      <p>In the paper we discuss different scenarios of introducing secondary faults and how to predict number
of such faults. Finally, we discuss how different SRGMs like Jelinski-Moranda, Exponential,
SchickWolverton, Musa and Lipov models can be modified to account secondary faults in order to improve
accuracy of software reliability prediction. We use an industrial case study to demonstrate applicability
of the proposed approach. Our results show that considering secondary faults helped to increase
accuracy of software failure rate assessment up to 5%.</p>
    </sec>
    <sec id="sec-8">
      <title>6. References</title>
      <p>1977.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <source>[1] IEC</source>
          <volume>61508</volume>
          :
          <year>2010</year>
          .
          <article-title>Functional safety of electrical/electronic/programmable electronic safetyrelated systems</article-title>
          ,
          <source>IEC Standards</source>
          ,
          <year>2010</year>
          , 594 p.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <source>[2] IEC</source>
          <volume>61513</volume>
          :
          <year>2011</year>
          .
          <article-title>Nuclear power plants - Instrumentation and control important to safety - General requirements foe systems</article-title>
          ,
          <source>IEC Standards</source>
          ,
          <year>2011</year>
          , 210 p.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>O.</given-names>
            <surname>Pomorova</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Savenko</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Lysenko</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Kryshchuk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Nicheporuk</surname>
          </string-name>
          .
          <article-title>A Technique for detection of bots which are using polymorphic code</article-title>
          .
          <source>Communications in Computer and Information Science</source>
          .
          <year>2014</year>
          . Vol.
          <volume>431</volume>
          . PP.
          <volume>265</volume>
          -
          <fpage>276</fpage>
          , ISSN:
          <fpage>1865</fpage>
          -
          <lpage>0929</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>L.</given-names>
            <surname>Mirtskhulava</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Khunjgurua</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Lomineishvili</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Bakuria</surname>
          </string-name>
          ,
          <source>Software Reliability Prediction Model Analysis</source>
          ,
          <source>International Journal of Computer, Information, Systems and Control Engineering</source>
          ,
          <year>2014</year>
          , №
          <issue>6</issue>
          , pp.
          <fpage>927</fpage>
          -
          <lpage>932</lpage>
          . URL: https://publications.waset.org/9998645/softwarereliability-prediction
          <article-title>-model-analysis.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>I.</given-names>
            <surname>Lakshmanana</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Ramasamya</surname>
          </string-name>
          ,
          <article-title>Selection of Right Software Reliability Growth Models for Every Software Project</article-title>
          .
          <source>International Journal of Control Theory and Applications</source>
          . Volume
          <volume>9</volume>
          . Number 40.
          <year>2016</year>
          , pp.
          <fpage>807</fpage>
          -
          <lpage>817</lpage>
          . URL: https://serialsjournals.com/abstract/85226_
          <fpage>89</fpage>
          -
          <lpage>cha21</lpage>
          .pdf.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>L.</given-names>
            <surname>Xiaomei</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Naiming</surname>
          </string-name>
          ,
          <article-title>Grey-based approach for estimating software reliability under nonhomogeneous Poisson process</article-title>
          .
          <source>Jornal of Systems Engineering and Electronics</source>
          . Volume
          <volume>33</volume>
          , No. 2,
          <string-name>
            <surname>April</surname>
            <given-names>2022</given-names>
          </string-name>
          , pp.
          <fpage>360</fpage>
          -
          <lpage>369</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>H</given-names>
            ,
            <surname>Hecht</surname>
          </string-name>
          , NASA-CR-
          <volume>145135</volume>
          :
          <article-title>Measurement, estimation and prediction of software reliability</article-title>
          ,
          <source>NASA</source>
          ,
          <year>1977</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>A.L.</given-names>
            <surname>Goel</surname>
          </string-name>
          ,
          <article-title>Software reliability models: Assumptions, Limitations and Applicability</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          , Vol. SE-
          <volume>11</volume>
          , №
          <volume>12</volume>
          ,
          <year>1985</year>
          , pp.
          <fpage>1411</fpage>
          -
          <lpage>1423</lpage>
          . URL: https://dl.acm.org/doi/abs/10.1109/TSE.
          <year>1985</year>
          .
          <volume>232177</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>R.P.</given-names>
            <surname>Garg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Sharma</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Kumar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.K.</given-names>
            <surname>Garg</surname>
          </string-name>
          ,
          <article-title>Performance Analysis of Software Reliability Models using Matrix Method</article-title>
          .
          <source>International Journal of Computer, Information, Systems and Control Engineering</source>
          ,
          <year>2010</year>
          , №
          <volume>11</volume>
          , pp.
          <fpage>31</fpage>
          -
          <lpage>38</lpage>
          . URL: https://publications.waset.org/3581/pdf.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10] ISO/IEC/IEEE 29148:
          <fpage>2011</fpage>
          -
          <article-title>Systems and software engineering - Life cycle processes - Requirements engineering</article-title>
          , ISO,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>K.</given-names>
            <surname>Wiegers</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Beatty</surname>
          </string-name>
          , Software Requirements, Microsoft Press,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>E.</given-names>
            <surname>Hull</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Jackson</surname>
          </string-name>
          ,
          <string-name>
            <surname>J</surname>
          </string-name>
          . Dick, Requirements Engineering, Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>