<!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>A Machine Learning Based Framework for Continuous Defect Prediction in CI/CD Pipelines ?</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Lazzarinetti Giorgio</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Massarenti Ni</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Sgr`o F</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Noovle S.p.A</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Milan</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Italy https://www.noovle.com/en/</string-name>
        </contrib>
      </contrib-group>
      <abstract>
        <p>Recent advances in information technology has led to an increasing number of applications to be developed and maintained daily by product teams. Ensuring that a software application works as expected and that it is absent of bugs requires a lot of time and resources. Thanks to the recent adoption of DevOps methodologies, it is often the case where code commits and application builds are centralized and standardized. Thanks to this new approach, it is now possible to retrieve log and build data to ease the development and management operations of product teams. However, even if such approaches include code control to detect unit or integration errors, they do not check for the presence of logical bugs that can raise after code builds. For such reasons in this work we propose a framework for continuous defect prediction based on machine learning algorithms trained on a publicly available dataset. The framework is composed of a machine learning model for detecting the presence of logical bugs in code on the basis of the available data generated by DevOps tools and a dashboard to monitor the software projects status. We also describe the serverless architecture we designed for hosting the aforementioned framework.</p>
      </abstract>
      <kwd-group>
        <kwd>Continuous Defect Prediction</kwd>
        <kwd>Machine Learning</kwd>
        <kwd>DevOps</kwd>
        <kwd>Continuous Integration</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        daily. Given the high number of activities that must be taken into account, such
as managing branches (development, stage, production, features), architecting
software applications, coordinating the developers and interacting with project
managers, it’s useful to have some automatic tools that alert the developers in
case bugs are detected in code. For such a reason, we propose a framework that
aims at easing the management and development activities and that integrates
with DevOps methodologies, with a focus on Continuous Integration (CI) and
Continuous Delivery (CD) operations. With CI/CD operations, thanks to
analysis tools such as Jenkins [
        <xref ref-type="bibr" rid="ref33">33</xref>
        ], it is possible to detect and avoid unit or integration
errors before shipping applications to production environments. However, such
tools are not able to detect logical bugs and therefore to block builds triggered
from commits. For this reason we decided to develop a methodology based on
machine learning techniques to detect if a commit could contain a logical bug.
The final goal is that of using the proposed methodology to build a monitoring
framework integrated with CI/CD operations to allow a visual exploration of the
status of each software project to evaluate the quality of the software produced
and, in case the machine learning model detects issues, to automatically raise
alerts in order to fix the bug before it reaches production environments.
      </p>
      <p>The rest of this paper is organized as follows: Chapter 2 describes the state of
the art for continuous defect prediction whereas Chapter 3 describes the dataset,
the preprocessing operations, the models used and the developed dashboard. In
Chapter 4 some infrastructural considerations are described. Finally, Chapter 5
draws some conclusions and some future work.
2</p>
    </sec>
    <sec id="sec-2">
      <title>State of the art</title>
      <p>
        DevOps is a software development methodology used in computer science that
aims at enhancing communication, collaboration and integration between
developers and information technology operations [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. DevOps wants to respond to
the interdependence between software development and IT operations, aiming
to help an organization to develop software products and services more quickly
and eciently [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. DevOps automated analysis systems generate huge amounts of
data that can be used to detect unnecessary processes, monitor production and
predict bugs. Server logs can reach hundreds of megabytes in a short time while
additional monitoring tools, like Jenkins [
        <xref ref-type="bibr" rid="ref33">33</xref>
        ] or SonarQube [
        <xref ref-type="bibr" rid="ref34">34</xref>
        ] can generate
gigabytes of data. Quantities force developers to set up automatic checks with
the use of thresholds for identifying problems. However, the thresholds are not
optimal in this context, given the scarce generalization of the parameters and
the zero adaptation to the infrastructure over time [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Moreover, generally, the
systems used in projects that adopt DevOps are many and of di↵erent nature.
Each system monitors the health and performance of applications in di↵erent
ways. It is therefore dicult to find relationships between di↵erent data sources.
Thus, a better approach to analyze this data in real time is through the
application of machine learning techniques, which allow to give a new vision of the
metrics collected with the DevOps tools. Machine learning techniques applied
in this context allow to monitor the progress of deliveries and the presence of
bugs using data collected by continuous integration systems. Machine learning
systems can also use input data of a di↵erent nature to produce a more robust
view of the applications on which they are used [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
      <p>
        When it comes to software bugs, they usually appear during the software
development process and are dicult to detect or identify, thus developers spend
a large amount of time locating and fixing them. In order to detect them, many
machine learning algorithms have been developed and tested [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. Indeed,
machine learning algorithms can be applied to analyze data from di↵erent
perspectives and can benefit from the large amount of code production metrics that are
also used by developers to obtain useful information. Many examples of machine
learning solutions for detecting software bugs have been implemented. For
example in [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] a combination approach of contexts and Artificial Neural Network
(ANN) is proposed. In [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] three algorithms are compared, namely Naive Bayes
(NB), Decision Tree (DT) and ANN, showing that DT has the best results over
the others. In [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] Bayesian Network (BN) and Random Forest (RF) are
compared, showing that BN can outperform RF. Di↵erently, in [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] NB, RF and
ANN are compared, showing that RF is better than the others. In [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] also deep
learning techniques are proposed, showing good performance.
      </p>
      <p>
        From all these studies emerge that, apart from the choice of the algorithm
that varies according to the used dataset, software metrics are extremely
important for fault prediction in quality assurance, hence, identification of proper
metrics is essential in all software projects [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. D’Ambros et al. [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] proposed a
benchmark to compare prediction techniques on five publicly available datasets
focusing on the di↵erent metrics related to code production, such as line of code,
code complexity [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], number of changes [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] or previous fault [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
      </p>
      <p>
        In the context of DevOps CI builds, software bug detection plays an extremely
important role, particularly at change-level. Change-level defect prediction, also
known as just-in-time defect prediction, aims at predicting defective changes
(i.e. commits to a version control system) and is more practical because it can
not only ensure software quality in the development process, but also make
the developers check and fix the defects just at the time they are introduced.
There are a lot of studies about this. For example, in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] the authors propose a
deep learning based approach over six di↵erent datasets, showing good results in
this kind of task. Indeed, their framework relies on a preprocessing and feature
engineering step and on the definition of the deep neural network classifier. The
chosen model di↵ers from the proposal of [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], that relies on Logistic Regression
(LR), because LR considers the contribution of each feature independently and
performs well only when input features and output labels are linearly correlated.
For such reasons, in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] the authors propose a Deep Belief Network (DBN) which
has the advantage of generating new non-linear combinations features given the
initial set of features.
      </p>
      <p>
        Scientific community also proposed several datasets related to continuous
defect prediction. In [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] the authors make available 11 million data rows
retrieved from CI builds that embrace 1265 software projects, 30022 distinct
commit authors and several software process metrics. Another well known dataset
for continuous defect prediction is the Technical Debt Dataset [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], a curated set
of project metrics data from 33 Java projects from the Apache Software
Foundation. It has been produced using four tools, i.e. PyDriller [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ], Ptidej [
        <xref ref-type="bibr" rid="ref35">35</xref>
        ],
Refactoring Miner [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] and SonarQube. The Technical Debt Dataset includes
information at commit granularity, such as the commit hash, the date, the
message, on the refactoring list applied in each commit, on the code quality, such as
the list of detected issues related to a commit, the style violations, the detected
anti-patterns and the code smells. Other included information are the Jira [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ]
issues retrieved from the project’s issue tracker as well as the fault-inducing
and the fault-fixing commits, that are the association for each fixed fault of the
commit where the fault was created and where the fault was fixed.
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>The Framework</title>
      <p>The objective of this research is to develop a framework capable of identifying
bugs from commited code in order to provide from the one hand a synoptic
point of view of the status of software projects and from the other hand alerting
if some inconsistencies and logical bugs are detected.</p>
      <p>The proposed framework consists of three main components: a data
processing pipeline, a machine learning model for classification and a monitoring
dashboard. In the following sections we will described all these components in
details, by focusing on the publicly available dataset used for training the model,
the preprocessing operations executed to make the dataset compliant with data
from the production environment, the machine learning models tested that
follows the trend of the state of the art and the implemented dashboard with the
way of using and the kinds of analysis performed over it.
3.1</p>
      <sec id="sec-3-1">
        <title>The Dataset</title>
        <p>
          The dataset used for model training is the Technical Debt Dataset [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ]. It
contains information at the granularity level of the commits organized in nine
different tables:
– Projects: contains the links to the GitHub repository and the associated
        </p>
        <p>Jira issue tracker.
– Sonar measures: contains the SonarQube measures such as number of code
lines in the commit, the code complexity and the number of functions.
– Commits: contains the information retrieved from the git log including the
commit hash, the message, the author, the date and timezone and the list
of branches.
– Commit changes: contains the changes contained in each commit,
including the old path of the file, the new path, the type of change (added, deleted,
modified or renamed), the di↵, the number of lines added.
– Jira issues: contains Jira issues for each project with information such that
the key, the creation and resolution dates and the priority.
– Fault inducing commits: reports the results from the execution of the</p>
        <p>
          SZZ [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ] algorithm.
– Refactoring miner: contains the list of refactoring activities applied in
the repository. The table contains the project, commit hash, the type of
refactoring applied and the associated details.
– Sonar issues: contains the list of SonarQube issues such that the
antipatterns and the code smess.
– Sonar rules: contains the list of rules monitored by SonarQube.
        </p>
        <p>Since the real case production environment slightly di↵ers from the
aforementioned dataset due to some constraints imposed by CI/CD tools, that impose us
to have data aggregated at push granularity instead of commit granularity, the
Technical Debt Dataset has first been processed and synthetically modified to
match the push granularity by aggregating subsequent commits with windows
of varying lengths between 1 and 5. Aggregation of numerical features has been
executed in some cases by averaging the numerical values while in other cases
selecting only the min/max values, depending on the meaning of the feature in
the context of software development.</p>
        <p>
          In addition, dataset features have undergone a selection process that involves
studying the correlation between each feature with respect to the dataset label,
as shown in Figure 1. The process consisted of a Recursive Feature Elimination
(RFE) [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ] technique with an empirically chosen cuto↵ threshold on the F1-score
drop. This allows us to reduce the dimensionality of data by only keeping those
features valuable to the model.
        </p>
        <p>Feature name Description
token count Token count of functions
complexity Cyclomatic complexity
nloc Lines of code of the file
lines added Number of lines added
lines removed Number of lines removed
modification type Type of changed applied</p>
        <p>(modify, delete, add, rename)
files changed Number of modified files count
e↵ort Time needed to solve the issues sum
class complexity Complexity of classes in commits count
severity Severity level of the issues max</p>
        <p>Table 1. Detail of selected features</p>
        <p>Aggregation Source
sum, mean PyDriller
sum PyDriller
sum, mean PyDriller
sum, mean PyDriller
sum, mean PyDriller
count PyDriller</p>
        <p>PyDriller
SonarQube</p>
        <p>SonarQube
SonarQube</p>
        <p>The final set of features selected for training is described in Table 1. The
FRE process allowed us to select only 18 features. in Table 1 we can see the
feature name, the description, the aggregations and the source. Each feature is
considered once per each aggregation, thus, as an example, the ”token count”
feature is considered twice, both as sum of token count of each commit and as
mean of token count of each commit. Moreover, the feature ”modification type”,
given its categorical nature, is considered as a unique feature for each category
it can assume (modify, delete, unknown, add, rename).
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>The Models</title>
        <p>
          The models chosen for continuous defect prediction are the ones mostly used in
scientific research, such as in [
          <xref ref-type="bibr" rid="ref14 ref17">14, 17</xref>
          ]. In particular, we tested RF and ANN. To
test the performance of the two models we split the dataset into train and test
sets, with the 80/20 ratio rule.
        </p>
        <p>As far as RF is concerned, its hyperparameters have been identified by means
of grid search optimization over a 5-fold cross validation, that resulted in the
following selection:
– Bootstrap: yes
– Criterion: gini
– Number of Estimators: 250
– Minimum number of samples for splitting: 3
The overall performance on the test set are shown in Table 2.</p>
        <p>Where the True Negatives (TN) are 57 and the True Positives (TP) are 69
whereas the False Positives (FP) are 7 and the False Negatives (FN) are 6.</p>
        <p>The other model tested is a Dense Neural Network (DNN), a particular case
of the ANN, trained for binary classification. Its hyperparameters have been
identified by means of grid search optimization over a 5-fold cross validation and
early stopping criterion to avoid overfitting and select the number of epochs,
that resulted in the following selection:
– Optimizer: Adam
– Learning rate: 0.01
– Number of epochs: 5
– Loss function: Categorical Cross Entropy
– Accuracy metrics: Accuracy
The network architecture is composed of a dense layer with an output dimension
equal to 64 and 1344 parameters, a dropout layer and a final dense layer with
an output dimension equal to 2 and 130 parameters. Performance of the DNN
model on the test set is shown in Table 3.</p>
        <p>Where the True Negatives (TN) are 53 and the True Positives (TP) are 58
whereas the False Positives (FP) are 22 and the False Negatives (FN) are 6.</p>
        <p>As shown above, performance of the RF is better than the one of the DNN,
especially when comparing the precision and the recall metrics of the positive
class. Indeed, the RF model outperforms the DNN when considering all the
metrics.
3.3</p>
      </sec>
      <sec id="sec-3-3">
        <title>The Monitoring Dashboard</title>
        <p>According to the results of the trained classifiers, the RF model has been
deployed and used in a production environment. In order to visualize the
predictions of the model and keep track of all the operations performed in the di↵erent
software projects, each project has been connected to the model and results have
been recorded in a database to be visualized. Thus, a monitoring dashboard have
been designed to easily read the results of the analysis. Given the high number
of data collected daily, we include in the dashboard distributions and time series
plots, in order to give a synoptic point of view of the software projects’ status.</p>
        <p>In details, the dashboard firstly includes some global metrics that resume the
operations performed in the di↵erent code repositories over which the extraction
and prediction algorithms have been connected. In particular the global metrics
included are:
– Number of commits: total number of commits analyzed by the system.
– Lines added : number of code lines added in the analyzed commits.
– Lines removed: number of code lines removed in the analyzed commits.
– Files changed: number of files modified in the analyzed commits.
– Total bugs: number of bugs identified by the machine learning algorithm
in the analyzed commits.</p>
        <p>The dashboard also includes a detailed tables that contains some references
useful to reconstruct the history of each commit, such as the username, the
branch name, the Jenkins job name, the commit hash, the critical violations and
the bugs detected by SonarQube. All these informations are correlated with the
model prediction, so that it is easy when the model detect a bug to identify the
project, the branch and the authors of the interested commit.</p>
        <p>Then, with a pie chart it is possible to easily understand the percentage of
commits with a possible bug and with a time series chart it is possible to see
the trend of detected bug together with some other important features, such as
number of lines added, number of files changed and number of lines removed.</p>
        <p>Finally, the dashboard gives the user the possibility to filter the content in
order to reduce the number of visualized data and change the dimensions of the
analysis. The available filters are based on date range, name of the repository,
branch name, Jenkins job name, username and model prediction. In this way,
all the charts and metrics previously described can be recomputed with specific
filters, thus deeply exploring each project according to di↵erent dimensions.</p>
        <p>The developed dashboard has not given only the possibility to detect bugs
in real time, but also the chance to evaluate the quality of the software projects.
Indeed, thanks to the di↵erent charts and filters, it has been possible to identify
projects or branches with more bugs, which generally means that are more
complex projects/branches or projects/branches for which the requirements are not
well defined. Moreover, it has been possible to monitor also the resources that
contribute to software projects. As an example, it has been possible to identify
resources that usually do not commit frequently, but only in case of large changes
or improvements in team’s code quality.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Infrastructural considerations</title>
      <p>To conclude, we present some considerations related to the infrastructure that
we set-up to serve the proposed framework.</p>
      <p>
        We deployed the services using Google Cloud Platform [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ] infrastructure. As
depicted in Figure 2, the proposed framework requires to retrieve data both from
GitHub and SonarQube that is analysed by means of a Python [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ] script for
PyDriller data retrieval and processing operations described in Section 3.1. When
data is uploaded on Google Cloud Storage [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ], it triggers a Cloud Function [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ]
that invokes Google Vertex AI Prediction [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ] service for model predictions.
The results are then saved to Google BigQuery [
        <xref ref-type="bibr" rid="ref31">31</xref>
        ] and made available for
visualization by means of a Data Studio [
        <xref ref-type="bibr" rid="ref32">32</xref>
        ] dashboard.
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Conclusions</title>
      <p>The goal of this research was that of defining a framework to detect bugs in
software projects’ commits in a change-level defect prediction scenario. In order to
define such framework, we firstly analyzed the state of the art for machine
learning algorithms applied to support CI/CD operations, with a focus on continuous
defect prediction. The analysis of the state of the art allowed us to define the
main machine learning approach to defect prediction, the main publicly available
datasets and some related works. Thus, we selected an approach and a public
dataset that fit our needs to create the aforementioned framework. However,
di↵erently from the related works that focus on processing the logs of CI tools,
given the constraints set by CI/CD tools used in our production environments,
we needed to preprocess the dataset to consider an agglomerations of record
based on subsequent commits. Then, we designed and tested two models: a RF
and a DNN both with grid search over 5-fold cross validation for
hyperparameters optimization and early stopping for DNN. Experimental results showed that,
on the preprocessed dataset, RF outperformed DNN, with an average F1-score
over the positive class of 0.91 against 0.81. Thus, we define a Google Cloud based
architecture to host our framework for real time monitoring, that allowed to link
di↵erent software projects to the RF model and register all the logs produced
in order to visualize the results. We also design a monitoring dashboard, that
allowed us to derive important insights and evaluate software quality.</p>
      <p>The developed framework is extremely useful, especially thanks to the
synoptic point of view that provides, however some enhancements can be performed.
As an example, some future developments could involve the augmentation of
the features with user-specific information to make the model learning
userpatterns. Other future developments are related to a posterior analysis of the
machine learning models. Indeed, we couldn’t train a model on a real dataset and
a manual analysis of the results showed that this is the reason why the model
produces some false positive. Thus, validating the results of the models and
retrain the model with a real dataset could enhance the model’s performance and
allow for a better usage of the framework.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Ebert</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gallardo</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hernantes</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Serrano</surname>
          </string-name>
          , N.:
          <source>DevOps. IEEE Software</source>
          ,
          <volume>33</volume>
          (
          <issue>3</issue>
          ),
          <fpage>94</fpage>
          -
          <lpage>100</lpage>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Virmani</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Understanding DevOps &amp; bridging the gap from continuous integration to continuous delivery</article-title>
          .
          <source>In: Fifth international conference on the innovative computing technology (INTECH</source>
          <year>2015</year>
          ), pp.
          <fpage>78</fpage>
          -
          <lpage>82</lpage>
          . IEEE,
          <string-name>
            <surname>Galcia</surname>
          </string-name>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Madeyski</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kawalerowicz</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Continuous defect prediction: the idea and a related dataset</article-title>
          .
          <source>In: 2017 IEEE/ACM 14th International Conference on Mining Software Repositories (MSR)</source>
          , pp.
          <fpage>515</fpage>
          -
          <lpage>518</lpage>
          . IEEE,
          <string-name>
            <surname>Buenos Aires</surname>
          </string-name>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Nogueira</surname>
            ,
            <given-names>A. F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ribeiro</surname>
            ,
            <given-names>J. C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zenha-Rela</surname>
            ,
            <given-names>M. A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Craske</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Improving la redoute's ci/cd pipeline and devops processes by applying machine learning techniques</article-title>
          .
          <source>In: 2018 11th international conference on the quality of information and communications technology (QUATIC)</source>
          , pp.
          <fpage>282</fpage>
          -
          <lpage>286</lpage>
          . IEEE,
          <string-name>
            <surname>Coimbra</surname>
          </string-name>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>D</given-names>
            <surname>'Ambros</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Lanza</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Robbe</surname>
          </string-name>
          ,
          <string-name>
            <surname>R.:</surname>
          </string-name>
          <article-title>An Extensive Comparison of Bug Prediction Approaches</article-title>
          .
          <source>In: Proceedings of 7 th IEEE Working Conference on Mining Software Repositories</source>
          , pp.
          <fpage>31</fpage>
          -
          <lpage>41</lpage>
          . IEEE,
          <string-name>
            <surname>Cape Town</surname>
          </string-name>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Gyimothy</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ferenc</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Siket</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>Empirical Validation Of Object-Oriented Metrics on Open Source Software for Fault Prediction</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>31</volume>
          (
          <issue>10</issue>
          ),
          <fpage>897</fpage>
          -
          <lpage>910</lpage>
          (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Hassan</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Predicting Faults Using the Complexity of Code Changes</article-title>
          .
          <source>In: Proceedings of the 31 st International Conference on Software Engineering</source>
          , pp.
          <fpage>78</fpage>
          -
          <lpage>88</lpage>
          . IEEE, Vancouver (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Hassan</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Holt</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          :
          <article-title>The Top Ten List: Dynamic Fault Prediction</article-title>
          .
          <source>In: Proceedings of the 21st IEEE International Conference on Software Maintenance</source>
          , pp.
          <fpage>263</fpage>
          -
          <lpage>272</lpage>
          . IEEE, Budapest (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Madeyski</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jureczko</surname>
            <given-names>M.</given-names>
          </string-name>
          :
          <string-name>
            <surname>Which Process Metrics Can Significantly Improve Defect Prediction Models</surname>
          </string-name>
          ?
          <article-title>An Empirical Study</article-title>
          .
          <source>Software Quality Journal</source>
          <volume>23</volume>
          (
          <issue>3</issue>
          ),
          <fpage>393</fpage>
          -
          <lpage>422</lpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Kamei</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shihab</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Adams</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hassan</surname>
            ,
            <given-names>A. E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mockus</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sinha</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ubayashi</surname>
          </string-name>
          , N.:
          <article-title>A large-scale empirical study of just-in-time quality assurance</article-title>
          .
          <source>TSE</source>
          <volume>39</volume>
          (
          <issue>6</issue>
          ),
          <fpage>757</fpage>
          -
          <lpage>773</lpage>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Madeyski</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kawalerowicz</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Continuous defect prediction: the idea and a related dataset</article-title>
          .
          <source>In: 2017 IEEE/ACM 14th International Conference on Mining Software Repositories (MSR)</source>
          , pp.
          <fpage>515</fpage>
          -
          <lpage>518</lpage>
          . IEEE,
          <string-name>
            <surname>Buenos Aires</surname>
          </string-name>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Alnor</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Khleel</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , Neh´ez, K.:
          <article-title>Comprehensive Study on Machine Learning Techniques for Software Bug Prediction</article-title>
          .
          <source>International Journal of Advanced Computer Science and Applications</source>
          <volume>12</volume>
          (
          <issue>8</issue>
          ), (
          <year>2021</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Yang</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lo</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Xia</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhang</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sun</surname>
          </string-name>
          , J.:
          <article-title>Deep learning for just-in-time defect prediction</article-title>
          .
          <source>In: 2015 IEEE International Conference on Software Quality, Reliability and Security</source>
          , pp.
          <fpage>17</fpage>
          -
          <lpage>26</lpage>
          . IEEE, Vancouver (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Li</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nguyen</surname>
            ,
            <given-names>T. N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nguyen</surname>
            ,
            <given-names>S. V.</given-names>
          </string-name>
          :
          <article-title>Improving bug detection via context-based code representation learning and attentionbased neural networks</article-title>
          .
          <source>In: Proceedings of the ACM on Programming Languages</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>30</lpage>
          . Association for Computing Machinery, New York (
          <year>2019</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Hammouri</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hammad</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Alnabhan</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Alsarayrah</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Software bug prediction using machine learning approach</article-title>
          .
          <source>International Journal of Advanced Computer Science and Applications</source>
          <volume>9</volume>
          (
          <issue>2</issue>
          ),
          <fpage>78</fpage>
          -
          <lpage>83</lpage>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Pandey</surname>
            ,
            <given-names>S. K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mishra</surname>
            ,
            <given-names>R. B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Triphathi</surname>
            ,
            <given-names>A. K.</given-names>
          </string-name>
          :
          <article-title>Software bug prediction prototype using Bayesian network classifier: A comprehensive model</article-title>
          .
          <source>Procedia Computer Science</source>
          <volume>132</volume>
          ,
          <fpage>1412</fpage>
          -
          <lpage>1421</lpage>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Uqaili</surname>
            ,
            <given-names>I. U. N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ahsan</surname>
            ,
            <given-names>S. N.</given-names>
          </string-name>
          <article-title>: Machine learning based prediction of complex bugs in source code</article-title>
          .
          <source>The International Arab Journal of Information Technology</source>
          <volume>17</volume>
          (
          <issue>1</issue>
          ),
          <fpage>26</fpage>
          -
          <lpage>37</lpage>
          (
          <year>2020</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Islam</surname>
            ,
            <given-names>M. J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pan</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nguyen</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rajan</surname>
          </string-name>
          , H.:
          <article-title>A comprehensive study on deep learning bug characteristics</article-title>
          .
          <source>In: Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>11</lpage>
          . Association for Computing Machinery,
          <string-name>
            <surname>Tallin</surname>
          </string-name>
          (
          <year>2019</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Lenarduzzi</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Saarimaki</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Taibi</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>The Technical Debt Dataset</article-title>
          .
          <source>In: Proceedings of the Fifteenth International Conference on Predictive Models and Data Analytics in Software Engineering</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>2</lpage>
          . Association for Computing Machinery, New York (
          <year>2019</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Guyon</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Weston</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Barnhill</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vapnik</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          :
          <article-title>Gene Selection for Cancer Classification using Support Vector Machines</article-title>
          .
          <source>Machine Learning</source>
          <volume>46</volume>
          ,
          <fpage>389</fpage>
          -
          <lpage>422</lpage>
          (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Pellegrini</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lenarduzzi</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Taibi</surname>
            ,
            <given-names>D.:</given-names>
          </string-name>
          <article-title>OpenSZZ: A Free, Open-Source, WebAccessible Implementation of the SZZ Algorithm</article-title>
          .
          <source>In: Proceedings of the 28th international conference on program comprehension</source>
          , pp.
          <fpage>446</fpage>
          -
          <lpage>450</lpage>
          . Association for Computing Machinery, New York (
          <year>2020</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Spadini</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Aniche</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bacchelli</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>PyDriller: Python Framework for Mining Software Repositories</article-title>
          .
          <source>In: Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE)</source>
          , pp.
          <fpage>908</fpage>
          -
          <lpage>911</lpage>
          . Association for Computing Machinery, New York (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Tsantalis</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mansouri</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Eshkevari</surname>
            ,
            <given-names>L. M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mazinanian</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dig</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Accurate and Ecient Refactoring Detection in Commit History</article-title>
          .
          <source>In: Proceedings of the 40th International Conference on Software Engineering (ICSE '18)</source>
          , pp.
          <fpage>483</fpage>
          -
          <lpage>494</lpage>
          . Association of Computing Machinery, New York,(
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24. GitHub Homepage, https://github.com/.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25. Jira Homepage, https://www.atlassian.com/it/software/jira.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26. Google Cloud Platform Homepage, https://cloud.google.com.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          27. Python Homepage, https://www.python.com.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          28. Google Cloud Storage Homepage, https://cloud.google.com/storage.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          29. Google Cloud Functions Homepage, https://cloud.google.com/functions.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          30.
          <string-name>
            <surname>Google Cloud Vertex AI Homepage</surname>
          </string-name>
          , https://cloud.google.com/vertex-ai.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          31. Google Cloud BigQuery Homepage, https://cloud.google.com/bigquery.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          32. Data Studio Homepage, https://datastudio.google.com/.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          33. Jenkins Homepage, https://www.jenkins.io/.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          34. SonarQube Homepage, https://www.sonarqube.org/.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          35. Ptidej GitHub Repository, https://github.com/ptidejteam/v5.2.
          <source>Last accessed 30 Sep 2021</source>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>