<!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>An effort allocation method to optimal code sanitization for quality-aware energy efficiency improvement</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Marco Bessi</institution>
          ,
          <addr-line>Gabriella Carrozza</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>-Software energy efficiency has been shown to remarkably affect the energy consumption of IT platforms. Besides “performance” of the code in efficiently accomplishing a task, its “correctness” matters too. Software containing defects is likely to fail and the computational cost to complete an operation becomes much higher if the user encounters a failure. Both performancerelated energy efficiency of software and its defectiveness are impacted by the quality of the code. Exploiting the relation between code quality and energy/defectiveness attributes is the main idea behind this position paper. Starting from the authors' previous experience in this field, we define a method to first predict the applications of a software system more likely to impact energy consumption and with higher residual defectiveness, and then to exploit the prediction for optimally scheduling the effort for code sanitization - thus supporting, by quantitative figures, the quality assurance teams' decision-makers. Index Terms-Reliability allocation, effort allocation, test planning, quality assurance, static analysis, prediction, optimization</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>Energy consumption of IT systems is increasingly
becoming a concern, especially for large infrastructure managers.
Research on Green IT is developing at a rapid pace, spanning
from fields centered on hardware device and architectural
design, to software design and development, as well as to
operations management and usage practices.</p>
      <p>
        Software energy efficiency has been shown to remarkably
affect energy consumption of all the other infrastructural levels
[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. The efficiency of the code is indeed related to the
computational expense needed to perform the intended task. We
claim that the overall energy efficiency due to software is not
only related to how fast the code performs a task, but also to
the correctness of its execution. A software containing defects
is likely to fail upon a request is made; the computational cost
to accomplish a requested operation becomes much higher if
the user encounters a failure and must retry the operation, or,
even worse, if the system has to be restarted or switched off
in favour of a replica.
      </p>
      <p>
        Both performance-related efficiency of software and its
defectiveness are related to the quality of the code. Quality is a
yG. Carrozza was with CAST Software when this paper was prepared.
multi-facet attribute, including reliability, usability, portability,
security, performance, efficiency [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], which are all affected by
how the software is designed and ultimately implemented. In
this position paper, we first explore the relationship between
code quality and performance-related energy consumption as
well as between code quality and software defectiveness. Code
quality is expressed in terms of degree of adherence to
predefined sets of well-programming rules. The violation of rules
is checked by means of a well-known tool, the Automatic
Static Analysis (ASA) [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Some preliminary results are
presented in this regard. Then, a method is proposed to:
Predict the applications of a software system more likely
to impact performance-related energy consumption as
well as the applications more likely to contain defects.
This is accomplished by machine learning algorithms
to train predictive models inferring the relation between
ASA rule violations and energy/defectiveness attributes.
By such a knowledge, quality assurance team leaders can
rank the applications according to the criticality (both
in terms of performance-related energy consumption and
defectiveness) before the testing stage starts, and plan
actions to improve the code where needed.
      </p>
      <p>
        Optimize the allocation of the effort for code
improvement to each application, based on the prediction results.
Effort allocation models are a very useful practice for
quality assurance planning on quantitative bases,
especially in large systems [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. We formulate a
multiobjective optimization model suggesting the best
distribution of effort i) across applications and ii) across
ASA rules, to sanitize the code under specific objectives
in terms of: cost to fix violations, expected impact on
energy, expected defectiveness reduction.
      </p>
      <p>In the following, we first present our experience on both
energy efficiency measurement and software defects analysis
(Section II), with preliminary results about correlation with
ASA rule violations; then, the method is presented in Section
III; a roadmap is in Section IV.</p>
      <p>II. PAST EXPERIENCE AND PRELIMINARY RESULTS</p>
      <sec id="sec-1-1">
        <title>A. ASA-Energy Relationship</title>
        <p>
          Measurement (and, in our case, prediction) of energy
efficiency is as much important as underestimated. Previous
studies shown that 86% of ICT departments in UK do not
know their CO2 emissions and 80% of companies do not know
their electric bill [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]. In the work we have done about this topic
[
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ], we introduced and tested a model to measure software
application energy consumption that decouples the usage of
the computational resources from their energy consumption.
Such a method allows estimating the energy efficiency of
software applications independently of the hardware
infrastructure. Let us model the usage of resources by monitoring
three key entities: the CPU, the storage (e.g., let us assume
a DB that is the common storage means on large systems),
the network. According to our model, energy consumption is
expressed as:
        </p>
        <p>ET OT = Eidle + ECP U + EDB + ENET
= Pidle tex +
u + DDB eDB + DNET eNET
(1)
in which:</p>
        <p>Pidle is the power absorption of the CPU in the idle state
and tex is the time in which the system is idle;</p>
        <p>is the usage of the CPU, and can be written as:
1 R t2 U%(t)dt !(t) where: U% is the percentage usage
f t1
of the CPU at time t, ! is a function denoting the
application-dependent consumption pattern, which may
depend on many factors (e.g., number of concurrent users,
type of operations, type of application, state of the DB,
etc.); f is the clock frequency of the CPU; t1 and t2 are
the initial and final measurement time;</p>
        <p>u is the power absorption function of the CPU per
percent usage (it is approximated by a constant assuming
the power grows linearly with usage);
DDB is the amount of data (in number bytes) exchanged
with the DB, while eDB is the energy consumed to
exchange 1 byte with the DB;
DNET is the amount of data (in number bytes) exchanged
with the network, while eNET is the energy consumed
to exchange 1 byte with the network.</p>
        <p>
          In this expression, the factors , DDB and DNET are
intrinsic characteristics of the software application, while u,
eDB and eNET depend on the hardware infrastructure. The
sole estimation of the former parameters allows computing the
energy consumption of the software application. In previous
studies [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ], it was shown that the consumption of storage is
almost independent of usage, as dynamic RAMs are constantly
refreshed and most of the energy consumed by disks is used for
spinning. In addition, focusing on CPU-intensive applications,
the EDB and ENET are negligible. Thus we assume that
energy mainly depends on the usage pattern . In [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ], we
have tested the model by using both ammeter clamp directly
connected to the server’s CPU electric source and specific HP
Performance Center’s instrumentations.
        </p>
        <p>Resource usage by the application can be estimated by
dynamic analysis, namely by means of profiling during testing.
However, there would be three problems with this approach: i)
the result would depend on the goodness of test cases, namely
on their ability to well represent the operational usage; ii) the
result does not provide direct hints about how it is possible
to optimize the code for performance improvement; iii) the
result of such an evaluation could be provided too late, as
(operational) testing is done at the end of the lifecycle, whereas
developers would like to benefit from the feedback earlier.</p>
        <p>We therefore explore the performance indications that can
be given by ASA on the source code. In fact, the adherence
or violation to predefined programming rules and patterns is
able to suggest possible performance issues. This, in turn, is
likely to impact energy consumption, as software with higher
performance is expected to be more energy-efficient. We are
exploring if there is any relation between Automatic Static
code Analysis (ASA) rules and the usage pattern factor ,
which is the most relevant contributor to ET OT . As
preliminary result we are obtaining, we have observed that some
ASA rules, defined by means of the CAST c tool, are highly
correlated to the metric, as reported in Table I.</p>
        <p>Based on this result, we are confident that the infringements
in terms of code rule violations as obtained by ASA are
potentially correlated with energy efficiency. This is going to
be exploited for our method formulation.</p>
      </sec>
      <sec id="sec-1-2">
        <title>B. ASA-Defects Relationship</title>
        <p>
          The quality of software can be well assessed by ASA. In
our previous experience [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ], we have studied the quality of
large-scale mission-critical software systems produced by a big
Italian company, leader in the market of defence, homeland
security and protection, information security, avionics and
aerospace. The quality as perceived by the end user can be,
however, different. User perceives system’s failures: one could
have a very poor (internal) code quality in terms of violations,
but a good user experience. In fact, ASA violations are not
necessarily defects: they can be either false warnings, when a
violation does not cause the software to fail, or can be actually
a defect, whose activation would lead the software to a failure.
In [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], we therefore also explored the quality of such systems
in terms of actual defectiveness – an exercise that allowed us
to assess not only the product but also the process quality.
        </p>
        <p>
          Since defects are detected at later stages (i.e, during testing
or even operation) compared to violations (detected soon
after coding), their treatment is much more expensive. Thus,
it makes sense to try anticipating the knowledge about the
presence of defects as earlier as possible. To this aim, we
are exploring any possible relationship between programming
rules violation and the presence of software defects. There
is indeed a reasonable expectation that ASA violations are
correlated to defects (as proven in some past papers [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]),
and that some types of violations (namely, some rules) are
more correlated than others. In Table II, we report preliminary
results about such correlation we are obtaining on a dataset
of 29 components of the same mission-critical system that we
have studied in [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. There is a significant correlation (with
95% of confidence) in several cases. Results can however be
improved by considering rules at finer grain (i.e., not by group)
than what we did so far. As in the previous case, this output
is going to be exploited for the method formulation.
        </p>
        <p>Based on the preliminary results about correlation, we
propose the following allocation method. The method includes
two steps: i) a prediction step, in which we run machine
learning algorithms to build predictive models able of spotting
the most relevant applications and ASA rules, from both
energy and defectiveness point of view; ii) an optimization
step, in which we exploit the output of prediction to orient the
fixing of ASA rule violations in terms of: which applications
and which rules should be prioritized in the correction. The
goal is to provide quality team leaders with a quantitative
means to figure out how to sanitize the code to pursue
welldefined objectives of energy efficiency, quality and cost.</p>
      </sec>
      <sec id="sec-1-3">
        <title>A. Prediction</title>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>The goal of prediction is twofold:</title>
      <p>Predict applications more likely containing defects and
applications more prone to consume energy before the
integration/system/acceptance testing starts;
Predict which rules more likely suggest the presence of
defects and which ones suggest inefficiency bottlenecks
(besides the side feedback of identifying the most critical
rules that programmers are keen on violating).</p>
    </sec>
    <sec id="sec-3">
      <title>The steps for prediction are:</title>
      <p>Retrieving data from ASA reports about a set of
applications of a tested or an operational system. Tracking of
defects found during testing and of energy consumption
measurements1 should be available.</p>
      <p>
        Training of prediction models. We mean to test several
different models, by varying both machine learning
algorithms (we opt for ranking algorithms, such as
regressionbased techniques [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], since binary classifiers provide no
information about the relative weight of each sample),
and the variables of interest (e.g., relying on absolute
numbers or relative to the code size).
      </p>
      <p>
        Test of the models by 10-fold cross-validation, repeated
N = 30 times per each classifier (for statistical validity),
comparison and choice of the best model. Criteria for
comparison can be several (the most used ones are the
response variable value in the top 20% of samples and
Fault Percentile Average (FPA) [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]).
      </p>
      <p>
        Actual prediction on applications for which we know
only the ASA violations but anything about energy
consumption (and defects) yet. The output is a list of
applications rated by their expected energy consumption and
a list rated by expected defectiveness. The ranking-based
algorithms associate a ranking score with each sample in
the list. We call it pj (and qj , for energy consumption) and
normalize it in [
        <xref ref-type="bibr" rid="ref1">0,1</xref>
        ]: !dj = mapxj(pj m)inm(pinj )(pj ) (similarly
for qj , obtaining !ej ).
      </p>
      <p>
        Rules rating. We analyze the impact of attribute
selection, by an attribute ranking algorithm such as the
Information Gain, which rates an attribute according
to the gain of information obtained by knowing that
attribute. The top rules useful for prediction are derived,
and each rule i is assigned a score si (hi for energy
consumption list) denoting the importance of that rule for
prediction. The scores are then normalized in [
        <xref ref-type="bibr" rid="ref1">0,1</xref>
        ] to get
the relative weight of each rule: di = masxi(sim)inm(sini)(si)
and ei = mahxi(him)inm(hini)(hi) , in the two cases of
defectiveness and energy consumption, respectively.
      </p>
      <p>Prediction information (!dj , di and !ej , ei ) is used to
parametrize the optimization model. The steps we are going
to implement for optimization are in the next Section.</p>
      <sec id="sec-3-1">
        <title>B. Optimization</title>
        <p>
          Optimization of violation fixing is conceived to exploit the
above predictions to prioritize applications and rules to fix,
according to predefined objectives and constraints. We aim at
providing the team leader with sets of alternative solutions
for which the expected impact on cost, quality and energy
efficiency is known. Thus a multi-objective optimization
approach is formulated. The main objective of the proposed
approach can be stated as follows: suggest the number and type
of violations to remove and the applications from which they
should be removed in order to get the best tradeoffs among: i)
1See [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] for a discussion about measurement of energy consumption; for
our purpose, a profiling tool can suffice to get realistic patterns of .
minimizing the expected residual defectiveness (i.e., maximize
quality), ii) minimizing the expected energy consumption (i.e.,
maximize energy efficiency), iii) minimizing the expected cost,
under user-defined constraints (e.g., maximum budget for code
sanitization). Suppose vi;j denotes the number of violation of
type i in the j-th application. Let us denote with Cf ixi the
average expected cost to remove violations of type j (that
can be obtained from historical data about violation fixes).
Considering the indication about correlation weights, di and
ei , each violation type is characterized by Cf ixi ; di and
ei . Furthermore, each rule is assigned a “severity” (Sdi and
Sei , in the defect and energy case, respectively) by domain
expert, who usually wants to give priorities to the removal of
violations of some types, according to their expected impact
(we, discretize the severity levels in the [
          <xref ref-type="bibr" rid="ref1">0,1</xref>
          ] range, by equally
spacing n levels: S1 = 1=n, S2 = 2=n ...Sn = 1)2
        </p>
        <p>It would be extremely expensive to eliminate all violations
of all types from all applications. The algorithm finds the best
tradeoffs optimizing the objectives. Let us denote the decision
variables xi;j , being the number of violations of the i-th type
that the algorithm proposes to eliminate from application j.
The three objectives are expressed as follows:</p>
        <p>Min!</p>
        <p>C =
Max!
Max!</p>
        <p>Q =</p>
        <p>E =
C &lt; C
Q &gt; Q
E &gt; E
n</p>
        <p>m
XhX(xi;j Cfixi )</p>
        <p>i
j i=1
n m
XhX(xi;j
j i=1
n m
XhX(xi;j
j
i=1
di
ei
i
(Minimum Energy Reduction)
subject to 0
xi;j</p>
        <p>vi;j and to the following bounds:
Further constraints on violations can be added, such as:
n
N1 X Pim=1(vi;j xi;j ) vmax, meaning that the residual
j=1
number of average violations must be less than (or equal
to) a target vmax. The first objective function minimizes the
expected cost for violation removal. The second objective
function assesses the expected quality increase (to maximize)
as sum of violations xi;j to remove weighted by: the likelihood
that violation of type i is actually correlated to defects, the
likelihood that the interested application j is actually
defectprone, and by the severity of the rule assigned by domain
expert. Similarly, the third objective assesses the reduction
of energy consumption (to maximize) if we remove xi;j
violations. The solution provides a matrix with the amount
of violations engineers should remove for each type and for
each application, as well as the estimate of removal cost, the
expected quality in terms of defects and the expected energy
2For instance, reliability rules might be assigned a higher
defectivenessrelated severity; similarly, for performance rules in the energy case.
(2)
(3)
consumption if sanitization actions are taken as suggested.
Note that this is just an instance of multi-objective models that
can be formulated, and that can give raise to numerous variants
targeting specific needs. More generally, the core message is
that we can setup code sanitization plans supported by
quantitative reasoning, by exploiting prediction and considering
quality and energy objectives together in the formulation.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>IV. ROADMAP</title>
      <p>
        As first step, we are going to validate the prediction and the
optimization steps separately. As for the prediction, we mean
to extend the set of test applications (across multiple domains)
to improve the generality of predictive models, and to extend
the set of metrics to improve their accuracy (e.g., with metrics
from version control systems [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]). As for optimization, we
will first validate the model numerically to get feedback and
refine the model (e.g., by comparing metaheuristics on sample
problems). Then, the whole method will be experimented on
real case studies. As we did in the past for the mentioned
cases, we aim at exploiting the strong collaborations with our
industrial partners in order to create a long-term testbed where
this kind of models can be validated empirically.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>E.</given-names>
            <surname>Capra</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Formenti</surname>
          </string-name>
          ,
          <string-name>
            <surname>F. C.</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Gallazzi</surname>
          </string-name>
          , “
          <article-title>The impact of mis software on it energy consumption</article-title>
          ,
          <source>” in European Conference on Information Systems (ECIS)</source>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>E.</given-names>
            <surname>Capra</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Francalanci</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Slaughter</surname>
          </string-name>
          , “
          <article-title>Is software “green”? application development environments and energy efficiency in open source applications</article-title>
          ,
          <source>” Information and Software Technology</source>
          , vol.
          <volume>54</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>60</fpage>
          -
          <lpage>71</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>“</surname>
            <given-names>ISO</given-names>
          </string-name>
          /IEC 25010 - Software Product Quality.” http://iso25000. com/index.php/en/iso-25000-standards/iso-25010,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>N.</given-names>
            <surname>Nagappan</surname>
          </string-name>
          and
          <string-name>
            <given-names>T.</given-names>
            <surname>Ball</surname>
          </string-name>
          , “
          <article-title>Static analysis tools as early indicators of pre-release defect density,”</article-title>
          <source>in Proc. 27th Int. Conference on Software Engineering</source>
          , pp.
          <fpage>580</fpage>
          -
          <lpage>586</lpage>
          , ACM,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>R.</given-names>
            <surname>Pietrantuono</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Russo</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Trivedi</surname>
          </string-name>
          , “
          <article-title>Software reliability and testing time allocation: An architecture-based approach</article-title>
          ,
          <source>” IEEE Transactions on Software Engineering</source>
          , vol.
          <volume>36</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>323</fpage>
          -
          <lpage>337</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>G.</given-names>
            <surname>Carrozza</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pietrantuono</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Russo</surname>
          </string-name>
          , “
          <article-title>Dynamic test planning: a study in an industrial context</article-title>
          ,”
          <source>International Journal on Software Tools for Technology Transfer</source>
          , vol.
          <volume>16</volume>
          , no.
          <issue>5</issue>
          , pp.
          <fpage>593</fpage>
          -
          <lpage>607</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M.</given-names>
            <surname>Bessi</surname>
          </string-name>
          , E. Capra, and
          <string-name>
            <given-names>C.</given-names>
            <surname>Francalanci</surname>
          </string-name>
          , “
          <article-title>A benchmarking methodology to assess the energy performance of mis applications</article-title>
          ,
          <source>” in 34th International Conference on Information Systems</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>G.</given-names>
            <surname>Agosta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Bessi</surname>
          </string-name>
          , E. Capra, and
          <string-name>
            <given-names>C.</given-names>
            <surname>Francalanci</surname>
          </string-name>
          , “
          <article-title>Automatic memoization for energy efficiency in financial applications</article-title>
          ,
          <source>” Sustainable Computing: Informatics and Systems</source>
          , vol.
          <volume>2</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>105</fpage>
          -
          <lpage>115</lpage>
          ,
          <year>2012</year>
          . IEEE International Green Computing Conference (IGCC
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>G.</given-names>
            <surname>Carrozza</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Cinque</surname>
          </string-name>
          , U. Giordano,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pietrantuono</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Russo</surname>
          </string-name>
          , “
          <article-title>Prioritizing correction of static analysis infringements for cost-effective code sanitization</article-title>
          ,”
          <source>in Proceedings of the Second International Workshop on Software Engineering Research and Industrial Practice</source>
          ,
          <string-name>
            <surname>SER</surname>
          </string-name>
          &amp;IP '
          <fpage>15</fpage>
          , (Piscataway, NJ, USA), pp.
          <fpage>25</fpage>
          -
          <lpage>31</lpage>
          , IEEE Press,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>G.</given-names>
            <surname>Carrozza</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pietrantuono</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Russo</surname>
          </string-name>
          , “
          <article-title>Defect analysis in missioncritical software systems: a detailed investigation</article-title>
          ,
          <source>” Journal of Software: Evolution and Process</source>
          , vol.
          <volume>27</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>22</fpage>
          -
          <lpage>49</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>R.</given-names>
            <surname>Plosch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Gruber</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hentschel</surname>
          </string-name>
          , G. Pomberger, and
          <string-name>
            <given-names>S.</given-names>
            <surname>Schiffer</surname>
          </string-name>
          , “
          <article-title>On the relation between external software quality and static code analysis</article-title>
          ,
          <source>” in 32nd IEEE Software Engineering Workshop</source>
          , pp.
          <fpage>169</fpage>
          -
          <lpage>174</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>X.</given-names>
            <surname>Yang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Tang</surname>
          </string-name>
          , and
          <string-name>
            <given-names>X.</given-names>
            <surname>Yao</surname>
          </string-name>
          , “
          <article-title>A learning-to-rank approach to software defect prediction</article-title>
          ,
          <source>” IEEE Transactions on Reliability</source>
          , vol.
          <volume>64</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>234</fpage>
          -
          <lpage>246</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>D. G.</given-names>
            <surname>Cavezza</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pietrantuono</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Russo</surname>
          </string-name>
          , “
          <article-title>Performance of defect prediction in rapidly evolving software,” in Release Engineering (RELENG</article-title>
          ),
          <year>2015</year>
          IEEE/ACM 3rd International Workshop on, pp.
          <fpage>8</fpage>
          -
          <lpage>11</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>