<!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>Automated Identification of Flaky Builds using Knowledge Graphs⋆</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Florent Moriconi</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Raphael Troncy</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Aurélien Francillon</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jihane Zouaoui</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>AMADEUS IT Group</institution>
          ,
          <addr-line>Sophia Antipolis</addr-line>
          ,
          <country country="FR">France</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>EURECOM</institution>
          ,
          <addr-line>Sophia Antipolis</addr-line>
          ,
          <country country="FR">France</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>DevOps' mindset encourages the use of Continuous Integration to quickly identify regressions introduced on code changes by running a set of checks (i.e., a build) on each commit or pull-request. This approach leads to a very large number of builds every day: in the order of tens of thousands at Amadeus. Builds can either fail because of a regression which has been introduced (a legitimate failure) or because of infrastructure instabilities (an illegitimate failure). Investigating the cause of failure is generally a manual process done by developers. If the failure is due to the infrastructure, the developers have wasted time investigating a failure they cannot directly fix. Therefore, there is a strong interest in automating identification of builds broken by infrastructure instabilities. Considering the large amount of heterogeneous data available about a build, we propose a method based on knowledge graph embeddings to automatically identify whether the failure is legitimate or not. We first propose an ontology to model the continuous integration process widely used in software engineering. To this end, we follow the best practices from the knowledge engineering community using competency questions and we also re-use well known ontologies. Next, we propose a method to build a labelled dataset and we experiment with knowledge graph embedding techniques. We empirically demonstrate that we can predict whether a failure is due to the infrastructure or not with an accuracy of 94% on a balanced validation dataset.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Ontology modeling</kwd>
        <kwd>Knowledge Graphs</kwd>
        <kwd>Software engineering</kwd>
        <kwd>Continuous Integration</kwd>
        <kwd>Root cause analysis</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>Modern software development practices like DevOps try to shorten the System-Development
Life Cycle (SDLC) to allow frequent and safe updates. The DevOps mindset encourages the
use of Continuous Integration (CI) to reduce the feedback loop by ensuring on every code
change that the code still meets quality requirements. This allows developers to be alerted
quickly when problems with code changes occur. In practice, a CI system is often composed
of a build step (compilation of the source code), static code analysis (e.g., code linting tools,
vulnerability scanners), peer-review, binary scan, tests (e.g., unit-testing, end-to-end testing,
regression testing, functional validation) and deployment of produced artifacts (e.g., binaries,
docker images, tarball archives, pip packages). The CI is orchestrated by a CI orchestrator where
the most important ones are Jenkins, Gitlab CI, Github Actions, Travis CI, Circle CI and Drone.</p>
      <p>This paper is structured as follows. In Section 1.1, we describe the vocabulary, main
components and processes used in continuous integration systems. In Section 1.2, we present
approaches explored in the literature to perform automated root cause analysis of CI failures. In
Section 2, we present the modeling of an ontology to represent the continuous integration
process. This ontology is then used to populate a knowledge graph that represents heterogeneous
information about successful and failed builds together with information about external factors.
In Section 3, we propose a simple method to create a labelled dataset and we experiment with
knowledge graph embedding methods for predicting when build failures are illegitimate. We
empirically demonstrate that our approach can reliably predict which build failures are due to
instabilities. In Section 4, we conclude and outline some future works.</p>
      <sec id="sec-1-1">
        <title>1.1. Continuous Integration</title>
        <p>A run of CI steps is called a build. A build can be triggered on code change (Pull-Request, branch
event), by a timer or by a user. A build failure may be legitimate (a requirement for success is
not met, e.g., the code is not linted correctly), or illegitimate (e.g., due to a temporary network
failure, no space left on the device). Finding why a build has failed may be complex and it often
requires manual work by software developers. While build failures are not an issue by design,
illegitimate failures take time to be investigated while they are often temporary or out of the
scope of a developer mission.</p>
        <p>
          Builds that failed because of infrastructure instabilities are similar to flaky tests [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] since a
build fails if at least one of its tests fails. However, builds tend to have much more dependencies
and source of issues than tests: network access, local storage, use of remote APIs, environment
updates, tool configurations, etc. Even large companies such as Google and Microsoft have flaky
tests [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ]: 41% and 26% of their tests, respectively, have some level of flakiness. Infrastructure
instabilities are often limited in time and non-deterministic: restarting the build can fix the
issue. This solution is often chosen by developers, sometimes without even looking for the root
cause, in particular if developers are facing numerous instabilities. However, blindly restarting
all broken builds consumes computing power, which leads to higher energy consumption and
infrastructure load. Thus, there is a strong interest in solutions that allow automated root cause
analysis of build failures to restart only builds that failed because of infrastructure instabilities.
        </p>
      </sec>
      <sec id="sec-1-2">
        <title>1.2. Related work</title>
        <p>
          Attempts have been made in the literature to provide automated root cause analysis of CI build
failures [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ][
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]. Root cause analysis can be provided as: (i) locating the root cause message in the
log; (ii) classifying the whole log into categorical root causes; (iii) classifying log lines as normal
or abnormal lines; (iv) providing a fix for the root cause (e.g., a code patch). In this work, we
focus on the binary classification task to identify builds broken by infrastructure instabilities. A
large number of methods rely on log analysis, using either rule-based methods (e.g., regular
expressions, metrics extraction) [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] or natural language processing approaches [
          <xref ref-type="bibr" rid="ref6 ref7">6, 7</xref>
          ]. However,
methods that rely on expert knowledge are dificult to use in practice considering the number
of possible root causes in large companies and the continuous evolution of software: new
software versions, log format evolution, evolving build environment, etc. Furthermore, CI logs
are composed of various software stacks and in-house tooling written in diferent languages
(shell scripting, package managers, test orchestration tools, code analyzers, etc.). Therefore, CI
logs tend to be highly heterogeneous compared to production logs where only one software is
running per log stream. Thus, log parsing approaches such as Drain [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] or Logram [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] tend to
poorly perform to identify log events in CI build logs.
        </p>
        <p>
          Haben et al. [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] work on detecting flaky tests in CI builds of the Chromium project using a
curated list of metrics such as run duration and failure history. While they achieved a F1-score
of 94% for predicting flaky tests, this method is highly tailored for Chromium’s CI setup and
practices. Furthermore, they only focus on test failures, while in this work, we focus on build
failures, which include additional root causes such as network issues, node issues or program
mis-configuration. Amar et al. [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] present a fault localisation tool based on historical test logs.
The proposed solution flags less than 1% of log lines for manual inspection (which may be huge
considering the size of the logs as input). However, the authors concede that a system based
solely on logs will not be able to detect all faults because not all errors are found in the logs,
which motivates our work to propose a method that could easily integrate multiple data sources.
        </p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>2. An Ontology for Representing Builds in a Continuous</title>
    </sec>
    <sec id="sec-3">
      <title>Integration Process</title>
      <p>We hypothesize that Knowledge Graphs (KG) are best suited for representing builds in the
continuous integration process considering their ability to easily integrate heterogeneous
information such as series of events of variable length and categorical data which are typical of
the traces produced by CI systems. A knowledge graph allows to decompose the process into
elements (e.g., a build machine, a build trigger) represented as nodes in the graph. We expect
to walk the graph for detecting failure patterns that would be much more dificult to detect
independently.</p>
      <p>We first design an ontology to represent builds in continuous integration systems. The
ontology is available at https://purl.org/cibuilds. The ontology contains 14 classes, 13 object
properties and 10 data properties. Figure 1 illustrates the representation of a CI build in the
knowledge graph. The represented build has 2 stages (Compile and Upload). It was triggered
because of a code change in a source file (src/main.py), and it has failed because the stage Upload
has failed.</p>
      <p>In order to populate the knowledge graph, we first leverage the API of the CI orchestrator
which provides information such as why the build was triggered, on which build machine it
ran, the diferent steps of the build, etc. Graphs are automatically created for new builds by a
Python program in near real time: as soon as a build is finished, build metadata are retrieved
from the HTTP REST API of the CI orchestrator. However, there is much more information
available: insights from the build log, the state of the environment (e.g., outages), network
connections between the build and its environment (e.g., API calls, dependencies download)
or other metrics created by other systems (e.g., infrastructure load, command metrics). It is
also possible to enrich available data using simple heuristics. This heterogeneity of information
coming from multiple systems justifies a data integration and enrichment approach which is
best conducted using knowledge graphs.</p>
      <p>We generate the value of the object property isUsingRemoteServices using an heuristic.
If the rdfs:label value of the build stage (i.e., the stage name) contains at least one of the
words publish, deploy, download, push, remote, upload, download, checkout (case-insensitive) then
we consider that this stage is using remote services. Most of the builds have stages that rely on
external dependencies to work properly: download dependencies from a remote server, use web
APIs, push compilation artifacts to remote storage, etc. Broken builds because of infrastructures
instabilities are often the consequence of failure to use remote services. Therefore, it is relevant
to document whether a stage is using remote services or not. Network trafic analysis can help
to precisely identify the remote resources in use as well as transport failure (e.g., TCP timeout)
or application failure (e.g., HTTP status code &gt;= 400) but it is harder to use in practice. However,
nowadays, most of the trafic is encrypted using TLS.</p>
      <p>Integrating service status is also interesting to model in the graph if remote services are
available or not during the build execution. While a broken remote service can lead to build
failure, services can have a partial outage: they fail to process only a small part of total requests.
Therefore, service status can be green even when the root cause is related to this service.</p>
      <p>Given the proposed ontology to explicitly represent knowledge about CI builds, the following
step is to automatically identify builds broken because of infrastructure instabilities using root
cause analysis methodologies.</p>
    </sec>
    <sec id="sec-4">
      <title>3. Root Cause Analysis</title>
      <p>In this work, we focus on the binary classification of builds between REPO class (root cause
is related to the code repository) and EXTERNAL class (root cause is related to the
infrastructure). This classification problem is equivalent to a link prediction problem for the
isInfrastructureInstabilities edge (in red in Figure 1) between a Build object and
a boolean value: this is a binary representation of hasRootCause property: this is equal to true
if hasRootCause is connected to EXTERNAL root clause class, or equal to false if connected to
another class. It aims to simplify (reduce from multi-class to binary) the prediction task.</p>
      <sec id="sec-4-1">
        <title>3.1. Creating a Labelled Dataset</title>
        <p>Labelled data is needed for training a supervised learning method, but also for performance
validation in unsupervised settings. We propose a method to automatically label a part of
historical builds (i.e., not the latest build). We assign a label to a failed build depending on
code changes between the failed build and the next build, if and only if the following build is
successful. In other terms, our method is available for all builds that met the following condition:
∀ such as  failed and +1 is successful</p>
        <p>If there is no code change between these builds (i.e., the build was restarted without code
change), we consider that the root cause is related to the infrastructure; otherwise, we consider
that the root cause is related to the code repository. In other words, if a broken build is restarted
without any modification and it passed, then it has failed because of infrastructure instabilities.
Detecting code changes between builds may be hard: during our experiment, the CI orchestrator
returned wrong results in few cases. It notably happened when git history was rewritten and
force pushed or when config files were injected at build time (without code commit). To handle
these cases, we compare git commit hashes to detect code changes. If not available, builds were
ignored. In practice, this method helps to label around 10% of historical failed builds. We made
the hypothesis that these builds are representative of all failed builds.</p>
      </sec>
      <sec id="sec-4-2">
        <title>3.2. Baseline</title>
        <p>We developed a baseline model based on natural language processing methods. This model
is based on TF-IDF for representing build log and Random Forest to predict if the root cause
is related to the infrastructure. TF-IDF is composed of two terms: Term Frequency (TF) and
Inverse Document Frequency (IDF). The main idea is that words that appear in a low number
of documents are more significant to classify documents, as well as words that appear often
in a document. TF-IDF is part of Bag of Words (BoW) approaches: the context of log lines
is lost. Random Forest is an evolution of Decision Tree classifier that aims to provide better
performance while requiring only little configuration. On a balanced cross-validation dataset
(CV=5), this approach has a mean accuracy of 67% and a mean recall of 60% which leads to a
F1-score of 63%.</p>
      </sec>
      <sec id="sec-4-3">
        <title>3.3. Knowledge Graph Embeddings</title>
        <p>
          We propose to use Knowledge Graph Embedding (KGE) methods on the large and heterogeneous
graph about CI builds presented in Section 2. KGE aim to represent entities as vectors that
can be compared with a distance function and similarity metrics. In our experiments, we tried
TransE [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], DistMult [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ], HolE [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] and TorusE [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. We did not use literal values to create
the embeddings. For instance, TransE models relations as a translation from head to tail entities.
        </p>
        <p>eℎ + e ≈ e</p>
        <p>Reworking the expression above and applying the p-norm leads to the TransE interaction
function:</p>
        <p>(ℎ, , ) = −‖ eℎ + e − e‖</p>
        <p>The objective of the learning phase is to maximize the TransE interaction function. When
the algorithm is trained, similar entities should have similar vectors. In the context of this work,
the head entity is a Build, the relation is isInfrastructureInstabilities and the tail
entity is a Boolean.</p>
      </sec>
      <sec id="sec-4-4">
        <title>3.4. Experiment</title>
        <p>In our experiment, we use a dataset composed of 829,638 triples that represent 8,586 builds
where we know the real root cause. The builds were scraped from Amadeus’ continuous
integration systems and therefore cannot be released publicly. We labelled them following the
methodology described in Section 3.1. The dataset was split into training (90%) and testing (10%)
sets. For the embedding generation, we used the PyKeen framework. Our code is available at
https://purl.org/cibuilds/code-v1 to support reproducibility. Table 1 provides the performance
results. We define the balanced accuracy score as</p>
        <p>+  
  +   +   +  
We define F1-score as</p>
        <p>2 *  
2 *   +   +  
Where TP stands for True Positive (count), TN for True Negative, FP for False Positive, and FN
for False Negative. We used an artificially balanced dataset to validate the performance where
we vary the embedding sizes and embedding methods. We choose to limit the hyperparameter
optimisation to embedding size only to reduce search space. We used PyTorch’s ExponentialLR
learning rate (PyKeen’s default). Low dimensional spaces result in poorer classification accuracy.
However, with an embedding dimension of 50 we outperform the baseline approach (TF-IDF
using the Random Forest classifier) for 3 over 4 methods, with a simpler and easier to explain
algorithm. The highest classification accuracy and F1-score is achieved for TorusE embedding
method with an embedding dimension of 300. When a build is predicted to have failed because
of infrastructure, restarting it could fix it. With an accuracy score of more than 94%, less then
6% of restarted builds were restarted while it was not relevant considering the real root cause.</p>
        <p>Embedding method</p>
        <p>TransE
TransE
TransE
DistMult
DistMult
DistMult</p>
        <p>HolE
HolE
HolE
TorusE
TorusE
TorusE</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>4. Conclusion and Future Work</title>
      <p>Analysing continuous integration builds raises new challenges: log analysis is significantly
more complex than application logs, builds are composed of steps, build dependencies to remote
services are not always well defined, builds can be scheduled on diferent nodes, etc. While our
results for flaky builds identification outperformed our baseline, using graph embedding should
allow to provide finer-grained automated root cause analysis of build failures by allowing easier
data integration (network trafic analysis, insights from logs, commands, infrastructure metrics,
etc.). Fine-grained root classification will also help to develop methodologies for automated
ifxes: rollback the source commit that caused the build to fail, generate a code patch, rerun the
build only when the root cause is fixed, etc. Organising knowledge about builds and making
it queryable will also help to advocate best practices for continuous integration by detecting
bad patterns (i.e., patterns that lead to more failures): one-stage build, rarely executed builds,
dependencies on remote services for unit-test stage, etc.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Gruber</surname>
          </string-name>
          , Tackling Flaky Tests:
          <article-title>Understanding the Problem and Providing Practical Solutions</article-title>
          ,
          <source>in: 36th IEEE/ACM International Conference on Automated Software Engineering (ASE)</source>
          ,
          <year>2021</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>3</lpage>
          . doi:
          <volume>10</volume>
          .1109/ASE51524.
          <year>2021</year>
          .
          <volume>9678701</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>O.</given-names>
            <surname>Parry</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G. M.</given-names>
            <surname>Kapfhammer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hilton</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>McMinn</surname>
          </string-name>
          ,
          <article-title>A Survey of Flaky Tests</article-title>
          ,
          <source>ACM Transactions on Software Engineering and Methodology</source>
          <volume>31</volume>
          (
          <year>2022</year>
          )
          <fpage>1</fpage>
          -
          <lpage>74</lpage>
          . URL: https://dl. acm.org/doi/10.1145/3476105. doi:
          <volume>10</volume>
          .1145/3476105.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>J. K. Bastida,</surname>
          </string-name>
          <article-title>Applying Machine Learning to Root Cause Analysis in Agile CI/CD Software Testing Environments, phdthesis</article-title>
          , Aalto University, Espoo, Finland,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>F.</given-names>
            <surname>Hassan</surname>
          </string-name>
          ,
          <article-title>Tackling build failures in continuous integration</article-title>
          ,
          <source>in: 2019 34th IEEE/ACM International Conference on Automated Software Engineering (ASE)</source>
          ,
          <year>2019</year>
          , pp.
          <fpage>1242</fpage>
          -
          <lpage>1245</lpage>
          . doi:
          <volume>10</volume>
          .1109/ASE.
          <year>2019</year>
          .00150, ISSN:
          <fpage>2643</fpage>
          -
          <lpage>1572</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>J.</given-names>
            <surname>Kahles</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Torronen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Huuhtanen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Jung</surname>
          </string-name>
          ,
          <source>Automating Root Cause Analysis via Machine Learning in Agile Software Testing Environments, in: 12th IEEE Conference on Software Testing, Validation and Verification (ICST)</source>
          , IEEE,
          <year>2019</year>
          , pp.
          <fpage>379</fpage>
          -
          <lpage>390</lpage>
          . URL: https://ieeexplore.ieee.org/document/8730163/. doi:
          <volume>10</volume>
          .1109/ICST.
          <year>2019</year>
          .
          <volume>00047</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>C.</given-names>
            <surname>Bertero</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Roy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Sauvanaud</surname>
          </string-name>
          , G. Tredan,
          <source>Experience Report: Log Mining Using Natural Language Processing</source>
          and Application to Anomaly Detection, in: 28th
          <source>International Symposium on Software Reliability Engineering (ISSRE)</source>
          , IEEE,
          <year>2017</year>
          , pp.
          <fpage>351</fpage>
          -
          <lpage>360</lpage>
          . URL: http://ieeexplore.ieee.org/document/8109100/. doi:
          <volume>10</volume>
          .1109/ISSRE.
          <year>2017</year>
          .
          <volume>43</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>N.</given-names>
            <surname>Aussel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Petetin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Chabridon</surname>
          </string-name>
          ,
          <article-title>Improving Performances of Log Mining for Anomaly Prediction Through NLP-Based Log Parsing</article-title>
          , in: 26th
          <source>International Symposium on Modeling, Analysis, and Simulation of Computer and Telecommunication Systems (MASCOTS)</source>
          , IEEE,
          <year>2018</year>
          , pp.
          <fpage>237</fpage>
          -
          <lpage>243</lpage>
          . URL: https://ieeexplore.ieee.org/document/8526889/. doi:
          <volume>10</volume>
          .1109/MASCOTS.
          <year>2018</year>
          .
          <volume>00031</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>P.</given-names>
            <surname>He</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Zhu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Zheng</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. R.</given-names>
            <surname>Lyu</surname>
          </string-name>
          ,
          <article-title>Drain: An Online Log Parsing Approach with Fixed Depth Tree</article-title>
          , in: International Conference on Web Services (ICWS), IEEE,
          <year>2017</year>
          , pp.
          <fpage>33</fpage>
          -
          <lpage>40</lpage>
          . URL: http://ieeexplore.ieee.org/document/8029742/. doi:
          <volume>10</volume>
          .1109/ICWS.
          <year>2017</year>
          .
          <volume>13</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>H.</given-names>
            <surname>Dai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.-S.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Shang</surname>
          </string-name>
          , T.-H. Chen, Logram: Eficient Log Parsing Using
          <string-name>
            <surname>n-Gram</surname>
            <given-names>Dictionaries</given-names>
          </string-name>
          ,
          <source>IEEE Transactions on Software Engineering</source>
          <volume>48</volume>
          (
          <year>2022</year>
          )
          <fpage>879</fpage>
          -
          <lpage>892</lpage>
          . doi:
          <volume>10</volume>
          .1109/TSE.
          <year>2020</year>
          .
          <volume>3007554</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>G.</given-names>
            <surname>Haben</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Habchi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Papadakis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Cordy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y. L.</given-names>
            <surname>Traon</surname>
          </string-name>
          ,
          <article-title>Discerning Legitimate Failures From False Alerts: A Study of Chromium's Continuous Integration</article-title>
          , arXiv
          <volume>2111</volume>
          .03382,
          <year>2021</year>
          . URL: https://arxiv.org/abs/2111.03382.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Amar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. C.</given-names>
            <surname>Rigby</surname>
          </string-name>
          ,
          <article-title>Mining Historical Test Logs to Predict Bugs and Localize Faults in the Test Logs</article-title>
          ,
          <source>in: 41st International Conference on Software Engineering (ICSE)</source>
          , IEEE,
          <year>2019</year>
          , pp.
          <fpage>140</fpage>
          -
          <lpage>151</lpage>
          . URL: https://ieeexplore.ieee.org/document/8812113/. doi:
          <volume>10</volume>
          .1109/ ICSE.
          <year>2019</year>
          .
          <volume>00031</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Bordes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Usunier</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Garcia-Durán</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Weston</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Yakhnenko</surname>
          </string-name>
          ,
          <article-title>Translating Embeddings for Modeling Multi-Relational Data</article-title>
          ,
          <source>in: 26th International Conference on Neural Information Processing Systems (NIPS)</source>
          , Curran Associates Inc.,
          <year>2013</year>
          , pp.
          <fpage>2787</fpage>
          --
          <lpage>2795</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>B.</given-names>
            <surname>Yang</surname>
          </string-name>
          , W.-t. Yih,
          <string-name>
            <given-names>X.</given-names>
            <surname>He</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Gao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Deng</surname>
          </string-name>
          ,
          <article-title>Embedding entities and relations for learning and inference in knowledge bases, 2014</article-title>
          . URL: https://arxiv.org/abs/1412.6575. doi:
          <volume>10</volume>
          .48550/ ARXIV.1412.6575.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Nickel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Rosasco</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. A.</given-names>
            <surname>Poggio</surname>
          </string-name>
          ,
          <article-title>Holographic embeddings of knowledge graphs</article-title>
          , in: D.
          <string-name>
            <surname>Schuurmans</surname>
            ,
            <given-names>M. P.</given-names>
          </string-name>
          Wellman (Eds.),
          <source>Proceedings of the Thirtieth AAAI Conference on Artificial Intelligence, February 12-17</source>
          ,
          <year>2016</year>
          , Phoenix, Arizona, USA, AAAI Press,
          <year>2016</year>
          , pp.
          <fpage>1955</fpage>
          -
          <lpage>1961</lpage>
          . URL: http://www.aaai.org/ocs/index.php/AAAI/AAAI16/paper/view/12484.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>T.</given-names>
            <surname>Ebisu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Ichise</surname>
          </string-name>
          ,
          <article-title>Toruse: Knowledge graph embedding on a lie group</article-title>
          , in: S. A.
          <string-name>
            <surname>McIlraith</surname>
            ,
            <given-names>K. Q.</given-names>
          </string-name>
          <string-name>
            <surname>Weinberger</surname>
          </string-name>
          (Eds.),
          <source>Proceedings of the Thirty-Second AAAI Conference on Artificial Intelligence</source>
          ,
          <source>(AAAI-18)</source>
          ,
          <source>the 30th innovative Applications of Artificial Intelligence (IAAI-18), and the 8th AAAI Symposium on Educational Advances in Artificial Intelligence (EAAI-18)</source>
          , New Orleans, Louisiana, USA, February 2-
          <issue>7</issue>
          ,
          <year>2018</year>
          , AAAI Press,
          <year>2018</year>
          , pp.
          <fpage>1819</fpage>
          -
          <lpage>1826</lpage>
          . URL: https://www.aaai.org/ocs/index.php/AAAI/AAAI18/paper/view/16227.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>