<!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>Leveraging composability in model-based testing for microservices</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Bas van den Brink</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Tannaz Zameni</string-name>
          <xref ref-type="aff" rid="aff3">3</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ulyana Tikhonova</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Lammert Vinke</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ana-Maria Oprescu</string-name>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Axini</institution>
          ,
          <addr-line>Azartplein 12, 1019 PD Amsterdam</addr-line>
          ,
          <country country="NL">The Netherlands</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Info Support</institution>
          ,
          <addr-line>De Kruisboog 42, 3905 TG Veenendaal</addr-line>
          ,
          <country country="NL">The Netherlands</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>University of Amsterdam</institution>
          ,
          <addr-line>Science Park 904, 1098 XH Amsterdam</addr-line>
          ,
          <country country="NL">The Netherlands</country>
        </aff>
        <aff id="aff3">
          <label>3</label>
          <institution>University of Twente</institution>
          ,
          <addr-line>Drienerlolaan 5, 7522 NB Enschede</addr-line>
          ,
          <country country="NL">The Netherlands</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>The microservices architecture is becoming increasingly more popular in contemporary software systems. Microservices communicate with each other over a network using specific communication protocols, such as HTTP or AMQP. Microservices systems can pose various challenges, with testing being one of them. Model-based testing is an established formal method for testing software systems. However, testing microservices using model-based testing is an open research topic. The goal of our research is to explore formally testing microservices systems. This research is divided in two parts: (1) we develop a theoretical framework for formally testing microservices, extending existing work on ioco-theory; (2) we implement the theoretical framework in a proof-of-concept to experiment with microservices systems from both open-source and industry.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;microservices</kwd>
        <kwd>model-based testing</kwd>
        <kwd>compositional testing</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        In recent years, distributed architectures such as microservices [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] are becoming popular in
industry [
        <xref ref-type="bibr" rid="ref22 ref31 ref7">9, 21, 30</xref>
        ]. In comparison to monolithic systems, microservices ofer independent scaling
and simpler deployment procedures, amongst other benefits [
        <xref ref-type="bibr" rid="ref13 ref27">13, 26</xref>
        ]. However, implementing a
microservice architecture also presents some challenges. These challenges arise inherently due
to the distributed interaction between services. For instance, testing microservices is regarded
to be more complex than testing monolithic applications [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>This complexity comes from the fact that each microservice is deployed as a separate software
artifact. With monolithic systems, software components compose using simple function calls. In
microservice systems, this composition is done by establishing a network connection between
each microservice. Such a composition introduces additional variables during testing, such as:
network instability, (de)serialization errors and communication protocol issues.</p>
      <p>
        As an example, microservices systems might contain hundreds of small components that
are separately deployed [
        <xref ref-type="bibr" rid="ref25">24</xref>
        ]. These microservices work together to form software systems
that handle a variety of complex tasks. Companies such as Netflix [
        <xref ref-type="bibr" rid="ref25">24</xref>
        ], Amazon [
        <xref ref-type="bibr" rid="ref24">23</xref>
        ] and
Zalando [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] are known to implement the microservices architecture for their software systems.
      </p>
      <p>
        Testing a single microservice is arguably straightforward. The complexity of testing
microservices lies in testing the integration between these small components [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Microservices are
typically integrated using a networking protocol, such as HTTP or AMQP [5]. While there
exists tooling to test software systems from end-to-end, many tools require the software
developer to write and maintain these tests. End-to-end tests are described as flaky [
        <xref ref-type="bibr" rid="ref29">28</xref>
        ], expensive
to write/maintain and expensive to execute [
        <xref ref-type="bibr" rid="ref1 ref28 ref6">1, 8, 27</xref>
        ]. A model alleviates the maintainability
problem, and generating test cases from written specifications rather than building and applying
test cases reduces costs and efort [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. If we leverage the composability of models, then we could
avoid fully deploying the end-to-end test infrastructure and suite, and contribute considerable
savings.
      </p>
      <p>
        Model-based testing [
        <xref ref-type="bibr" rid="ref38">38, 37</xref>
        ] is a formal technique to automatically generate and execute
test cases from a specification. The specification models the behavior of the system under
test. The test scenarios are generated from such a specification automatically. The system is
tested as a black-box and is interacted with through its inputs and outputs. While model-based
testing could be used with various formalisms, such as Finite State Machines and Abstract Data
Types [
        <xref ref-type="bibr" rid="ref23">22</xref>
        ], we use Labelled Transition Systems to leverage research conducted by Jan Tretmans
et al. [
        <xref ref-type="bibr" rid="ref36">35</xref>
        ] and its industrial applications, such as Axini’s Axini Modeling Plaform (AMP) [7].
Ultimately, this formal testing theory helps us to decide whether the system conforms to its
specification.
      </p>
      <p>Indeed, model-based testing can be fitting as a means to perform integration tests for
microservices. Additionally, model-based testing has the benefit that tests are automatically generated,
meaning that there is less overhead in writing the tests themselves. When the specification of
the system changes, new tests are generated automatically.</p>
      <p>
        Research proposes compositional model-based testing as a technique to model components
separately and combine these models to test the combination of components [
        <xref ref-type="bibr" rid="ref9">11</xref>
        ]. The main
benefit is that these models are smaller, making them easier to write and maintain.
      </p>
      <p>
        Compositional testing is still ongoing research [
        <xref ref-type="bibr" rid="ref11 ref15 ref26 ref8">10, 25, 15</xref>
        ], while its applicability to
microservices remains an open research topic. With this study, we want to focus on the applicability of
compositional model-based testing in combination with microservices.
      </p>
      <p>Our vision is that if compositional testing is applicable to test microservices, three main
issues with contemporary testing are tackled:
1. Writing and maintaining expensive integration tests ultimately becomes obsolete, as
model-based testing allows for the generation and execution of these tests.
2. Models become smaller and easier to maintain. With the inclusion of CI/CD pipeline
support and a proper framework, model-based testing can become more accessible to
development teams.
3. Model-based testing can be applied in a more incremental manner, allowing it to be part
of the development phase of a project.</p>
      <p>This research project is still in an early stage. With this paper, we aim to provide an initial
description of the project. Section 2 informally describes theoretical preliminaries for this paper.
Section 3 discusses related work, Section 4 presents our methodology, Section 5 aims to provide
an informal description of the current ideas behind testing microservices and Section 6 provides
an outlook for the rest of the project.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Background</title>
      <p>This section describes two main concepts used in this paper: transition systems and microservice
communication. Transition systems are the formalism of choice for testing microservices
systems in our research. Microservice communication form the basis of our proposed software
testing theory.</p>
      <sec id="sec-2-1">
        <title>2.1. Transition Systems</title>
        <p>
          There exists various formalisms that can be utilized for model-based testing [
          <xref ref-type="bibr" rid="ref38">37</xref>
          ]. In our study,
we use transition-based models as a formalism for modeling the behavior of microservices.
Transition-based models, or state-transition models, focus on describing the transitions between
diferent states of the system [
          <xref ref-type="bibr" rid="ref38">37</xref>
          ]. This formalism is commonly used to describe the behavior
of reactive or control-oriented systems, where outputs do not only depend on the current input
but also on earlier inputs. We consider microservises to fit well in this scope.
        </p>
        <p>
          In a simplistic form, Labelled Transition Systems (LTS) [
          <xref ref-type="bibr" rid="ref36">35</xref>
          ] contain a set of states with
transitions between them. There exists various extensions of labelled transition systems. A
Labelled Transition System with Inputs and Outputs (IOLTS) [
          <xref ref-type="bibr" rid="ref36">35</xref>
          ] distinguishes transitions with
inputs or outputs of the system. Similarly, a Symbolic Transition System (STS) [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ] extends upon
the LTS with the notion of data and variables. Naturally, there exists a version of the STS with
a distinction between inputs and outputs: the IOSTS.
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>2.2. Microservice Communication</title>
        <p>There are two aspects regarding microservice communication, which are depicted in table 1.
The first column regards the relation between sending and receiving entities: one-to-one, or
one-to-many. The second column determines whether the communication is synchronous or
asynchronous. The Request/Response communication style can be observed when synchronous
one-to-one communication is applied. With this communication style, a sender will send a
message (or request) to exactly one receiver. The sender will await the response of the receiver
before continuing program flow.</p>
        <p>When one-to-one communication is applied asynchronously, we observe the Notification
communication style. In this case, the sender will still send a response to a receiver, but will not
await a response. The sender will continue its program flow regardless of how the request is
handled by the receiver. In the case of asynchronous messaging with one-to-many receivers, we
observe the Publish/Subscribe communication style. Typically, a message-broker is introduced
to handle the communication between the sender and receivers. Receivers can subscribe to a
specific message topic. A sender can publish a message to such a topic. The message-broker
then ensures that the message is delivered to all subscribers of that topic.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Related work</title>
      <p>
        There currently exists tooling to test microservices from end-to-end, such as Protractor [4] or
Cypress [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. These frameworks utilize the browser to interact with the system through its
web interface. However, these testing techniques require the developer to manually write and
maintain the testing suite.
      </p>
      <p>
        Behavior Driven Development (BDD) testing tools can also be used to test microservices
systems. Examples of these tools are Cucumber [
        <xref ref-type="bibr" rid="ref33">32</xref>
        ] and SpecFlow [
        <xref ref-type="bibr" rid="ref37">36</xref>
        ]. This technique allows
practitioners to create a specification of their software system’s behavior using a human-readable
domain specific language. BDD tools then use this specification to automatically generate most
of the test code with predefined inputs and assertions. The practitioner then can implement the
rest of this test code and test the software system. With model-based testing, the formal model
contains enough information to fully automate test generation and execution.
      </p>
      <p>
        Furthermore, there have been various research eforts regarding microservices testing. For
example, Gazzola et al. [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] present a tool that automatically generates test cases based on the
run time traces of deployed microservices systems. These test cases are then executed on a
microservice in isolation. All external dependencies of the microservice are replaced by a stub.
The behavior of this stub is also determined by the collected runtime traces. The main diference
with our work is that our test cases are derived from a formal model instead of execution traces.
      </p>
      <p>
        Another tool proposed by research is EvoMaster [
        <xref ref-type="bibr" rid="ref4">6</xref>
        ]. This tool can automatically generate
tests for REST and GraphQL API’s, which are commonly used technologies in microservices
architectures. EvoMaster uses AI-techniques and (optionally) program analysis to find test cases.
This approach does not require any human intervention to generate tests, whereas model-based
testing techniques require a formal model to be constructed. Here lies the trade-of between
these methods: EvoMaster’s approach does not require manual labour, at the cost of a few
hours of running its search algorithm. Optional code analysis (white-box testing) improves the
efectiveness of the test cases several times over. With our approach, we construct a model
which does not require code analysis, and is still able to perform automated tests. We see the
major diference in how the knowledge is captured: EvoMaster learns it from the code base, we
learn it from the model created by the practitioner.
      </p>
      <p>
        Tools such as TorXakis [
        <xref ref-type="bibr" rid="ref35">34</xref>
        ] and Axini Modeling Platform (AMP) [7] already exist to perform
model-based testing on software systems. However, our work explores a tailored theory towards
the modeling and testing of microservices. We develop a proof-of-concept that implements this
theory specifically. This allows us to see if such a theory for testing microservices difers from
general model-based testing approaches.
      </p>
      <p>
        In our work, we explore the notion of a network environment as an additional transition
system during the composition of microservices. We are inspired by the works of both de Alfaro
and Henzinger [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] and Daca et al. [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. Both studies investigate how computing a separate
environment during composition can alter the properties of the final composed model. We
explore in our work how a network environment alters the properties of the final composed
model between microservices.
      </p>
      <p>
        Van der Bijl et al. [
        <xref ref-type="bibr" rid="ref9">11</xref>
        ] conclude in their study that the ioco relation does not hold after
composition of underspecified models. As a solution, they propose Demonic Completion of
underspecified specifications. In short, Demonic Completion is an algorithm that maps all
underspecified transitions to a chaos state that accepts all behaviors. A benefit of Demonic
Completion is that the ioco relation is preserved after composition. A downside of Demonic
Completion is that the model accepts any behavior during testing, which possibly weakens the
quality of the model.
      </p>
    </sec>
    <sec id="sec-4">
      <title>4. Methodology</title>
      <p>The goal of this research is to investigate the applicability of compositional model-based testing
in the context of microservices. The first research question is focused on the diferences
between models of regular software components and models of microservices. To formally
model microservices we choose the Symbolic Transition System with Inputs and Outputs (IOSTS).
A transition system is able to capture the behavior of microservices. Moreover, symbolic
transition systems contain the notion of data and variables. As microservices process vast
amounts of data, symbolic transition systems make for a suitable modeling formalism.</p>
      <p>RQ1: To what extent does a symbolic input-output transition system capture the behavior of
microservices?
To the best of our knowledge, compositional testing has not yet been applied in the context of
microservices. This raises the question: "If we could model and test a single microservice, can
we also combine the output of these tests as an input of other microservices?", leading to the
following research question:</p>
      <p>
        RQ2: To what extent can we test microservice systems using compositional model-based testing?
For the second research question, we develop a formal framework for Symbolic Transition
Systems and their compositions. Additionally, this theory is implemented in a proof-of-concept
that can be used to test microservices systems. With this proof-of-concept, we will test actual
microservices systems. We plan on testing two systems during this research project: the
opensource eShopOnContainers [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] and a microservices system from industry provided by Info
Support. Due to timing constraints, we have scoped the number of systems under test to
two. Moreover, we choose the eShopOnContainers system as it is an open-source reference
implementation of a microservice architecture. Being an open-source project, the system is
accessible as a first candidate for testing non-trivial microservices systems. Additionally, we
also include a microservices system from industry to show the applicability of our theory in
practice.
      </p>
      <p>Furthermore, we plan to compare our proof-of-concept to traditional model-based testing
tooling by using the Axini Modeling Platform (AMP) [7]. AMP is a model-based testing platform
used in industry on large-scale software systems. We will perform validation and evaluation
experiments on our proof-of-concept and AMP to investigate how a tailored theory towards
formally testing microservices impacts testing results.</p>
      <sec id="sec-4-1">
        <title>4.1. Validation</title>
        <p>
          We should be able to model specifications for microservices. Our proof-of-concept should be able
to use these models to detect bugs in microservices systems. To validate this, we systematically
inject bugs in microservices systems using open-source mutation testing frameworks such as
Stryker [
          <xref ref-type="bibr" rid="ref34">33</xref>
          ] or PIT [
          <xref ref-type="bibr" rid="ref30">29</xref>
          ]. We will then test these microservices systems using our
proof-ofconcept and report to what extend it can detect these bugs.
        </p>
      </sec>
      <sec id="sec-4-2">
        <title>4.2. Evaluation</title>
        <p>Our proposed method touches upon two area’s of software testing: testing microservices in
general and model-based testing theory. We will perform evaluation experiments on both of
these aspects.</p>
        <p>
          We evaluate how our proof-of-concept compares to other microservices testing techniques.
We have selected three testing techniques: automated testing using EvoMaster [
          <xref ref-type="bibr" rid="ref4">6</xref>
          ],
browserbased end-to-end testing using Cypress [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] and manually written E2E tests without a framework.
We will perform experiments by testing the same microservices system using the
aforementioned techniques. We will compare these techniques based on eficiency, efectiveness and
applicability using the framework proposed by Eldh et al. [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. Additionally, we will compare
the expressiveness of all testing techniques in terms of user friendliness. For example, what
kind of information does each testing technique provide when a test has detected a bug? This
could give us insights on how easy or intuitively a practitioner can interact with our proposed
testing technique.
        </p>
        <p>
          We also compare our proof-of-concept with the Axini Modeling Platform, as a framework
representative for model-based testing. The goal is to see if a tailored theory for testing
microservices difers from a general model-based testing approach. For comparison, we plan to
employ a similar approach as conducted by van den Bos and Tretmans [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]. We perform multiple
test executions using both model-based testing techniques. After test execution, we measure
the number of inputs and outputs that were required to find the injected bug in the system
under test. This approach gives us insights in how thorough and efective our proof-of-concept
is in finding bugs.
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Towards modeling microservices</title>
      <p>Due to their distributed nature, microservices can display various behaviors that might impact
modeling. In this section, we informally describe the diferences of modeling a microservice.</p>
      <sec id="sec-5-1">
        <title>5.1. Asynchronous Behavior</title>
        <p>Asynchronous messaging might have an impact on model-based testing. If an output of a
microservice is produced asynchronously, we might observe it at diferent moment for each
test execution.</p>
        <p>Efectively, this introduces a form of non-determinism where microservices that use
asynchronous actions yield diferent traces with the same input. It might be interesting to introduce
a form of partial order or relative timestamps to model this kind of asynchronous behavior of
microservices. We will explore this in the short-term.</p>
      </sec>
      <sec id="sec-5-2">
        <title>5.2. Operating environments of microservices</title>
        <p>A microservice can be tested in isolation. Indeed, deploying a microservice separately and
stubbing out any external dependency allows us to create a specific environment for testing.
However, there is a diference between this testing environment and the actual production
environment of microservices. Microservices communicate over a network. This efectively
means that if we would compose microservice models, we could model this notion of the
network as well. A network might introduce a form of non-determinism to the actions between
microservices. A network connection may or may not be established between both parties. The
result is that when two microservices communicate over a network to perform a procedure,
this procedure may or may not be executed.</p>
        <p>Moreover, a microservice either has successfully established a connection and is executing a
procedure, or it has failed and therefore stopped. To an external observer of the microservice,
there is no distinguishable behavior between the two; the microservice is quiescent.</p>
        <p>
          When we are composing microservice models, it might be required to model the network as
a separate transition system. This is inspired by the work of both de Alfaro and Helzinger [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ]
and Daca et al. [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. The authors compute an environment as a separate transition system
during the composition of two models. In our case, we can use this environment as a third
component during composition. For example, instead of composing microservices A and B, we
now compose microservices A and B with a third component (the network) N.
        </p>
        <p>The main benefit is that we can use model-based testing to generate scenario’s where the
network between two microservices is unstable. As an example, this would allow us to test how
a microservice would behave when the network is physically down.</p>
      </sec>
      <sec id="sec-5-3">
        <title>5.3. Underspecification of the HTTP protocol</title>
        <p>Microservices use some kind of protocol to communicate with each other. As discussed earlier,
microservices typically use the HTTP protocol for synchronous communication. An interesting
aspect of this protocol is that it specifies semantics for handling erroneous situations.</p>
        <p>In the case that a microservice has handled a HTTP request successfully, it returns a HTTP
Status Code in the 2xx-class. This status code class indicates success. If any kind of error occurs
during the handling of a HTTP request, the microservice should return a status code in the
5xx-class. This indicates that the microservice did not fulfill the request successfully.</p>
        <p>We could make use of the semantics of the HTTP protocol to allow the underspecification of
erroneous behavior. For example, we could model a flow of a microservice that only considers
the "Happy Path", e.g. only the case where the microservice returns a 2xx-class response. In
this model, we did not specify any other possible HTTP Status codes, such as the 5xx-class
to indicate an error. When we compose microservice specifications, we could detect that the
composed specification does not contain any paths with erroneous HTTP status codes. We know
that these erroneous HTTP status codes can be returned, as that is what the HTTP protocol
specifies.</p>
        <p>In this case, we can perform a special kind of Demonic Completion for these microservice
models. For this completion, we find the states that contain transitions with HTTP responses.
We can then add additional transitions from these states that model a generic error handling.
This generic error handling can resemble the "Chaos" state that is used in Demonic Completion
that allows all behavior.</p>
        <p>The benefit of this approach is that we now allow microservice models with some notion of
underspecification. We will investigate the compositional properties of this completion in the
near-future.</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>6. Conclusion and Outlook</title>
      <p>With this work-in-progress study, we want to explore the applicability of compositional
modelbased testing in combination with microservices.</p>
      <p>In the short-term, we will formalize our theory regarding microservices testing. Next, we will
develop a proof-of-concept that implements this tailor-made theory. This proof-of-concept will
then be used to test actual microservices systems. One candidate for testing is the aforementioned
open-source eShopOnContainers system. Moreover, we will also test a professionally developed
microservices system that is provided by Info Support.</p>
      <p>Additionally, we plan on performing validation and evaluation experiments on this
proofof-concept. During these experiments, both microservices systems will be tested using the
proof-of-concept and the Axini Modeling Platform. This will then allow us to compare both
model-based testing methods, and find out whether developing a testing theory tailored towards
microservices reaps the benefits that we hypothesize.</p>
      <p>We are aware that our endeavour may change the job portfolio of testing practitioners,
however, it does not need to change the requirements on their background education. We
simply aim to better leverage their knowledge of the system under test, without the burden of
setting up tedious end-to-end test setups. The theoretical challenges intrinsic to the employed
formalisms would have been solved in the proposed framework.
[4] Angular. Protractor. End to end testing for Angular. url: https://www.protractortest.org/#/
(visited on 06/21/2022).
[5]</p>
      <p>Nish Anil, Clark Brent, David Coulter, Miguel Veloso, John Parente, and Maira Wenzel.
Communication in a microservice architecture. 2021. url:
https://docs.microsoft.com/enus/dotnet/architecture/microservices/architect-microservice-container-applications/
communication-in-microservice-architecture.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Pekka</given-names>
            <surname>Aho</surname>
          </string-name>
          , Matias Suarez, Teemu Kanstrén, and
          <string-name>
            <surname>Atif</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Memon</surname>
          </string-name>
          . “Murphy Tools:
          <article-title>Utilizing Extracted GUI Models for Industrial Software Testing”</article-title>
          .
          <source>In: 2014 IEEE Seventh International Conference on Software Testing, Verification and Validation Workshops . Mar</source>
          .
          <year>2014</year>
          , pp.
          <fpage>343</fpage>
          -
          <lpage>348</lpage>
          . doi:
          <volume>10</volume>
          .1109/ICSTW.
          <year>2014</year>
          .
          <volume>39</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2] Luca de Alfaro and
          <article-title>Thomas A. Henzinger. “Interface automata”</article-title>
          .
          <source>In: ACM SIGSOFT Software Engineering Notes 26</source>
          .5 (
          <issue>Sept</issue>
          .
          <year>2001</year>
          ), pp.
          <fpage>109</fpage>
          -
          <lpage>120</lpage>
          . issn:
          <fpage>0163</fpage>
          -
          <lpage>5948</lpage>
          . doi:
          <volume>10</volume>
          .1145/503271. 503226. url: https://doi.org/10.1145/503271.503226 (visited on 06/21/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Paul E Ammann</surname>
          </string-name>
          , Paul E Black, and
          <string-name>
            <given-names>William</given-names>
            <surname>Majurski</surname>
          </string-name>
          . “
          <article-title>Using model checking to generate tests from specifications”</article-title>
          .
          <source>In: Proceedings second international conference on formal engineering methods (Cat. No. 98EX241)</source>
          . IEEE.
          <year>1998</year>
          , pp.
          <fpage>46</fpage>
          -
          <lpage>54</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Andrea</given-names>
            <surname>Arcuri. “RESTful API Automated</surname>
          </string-name>
          <article-title>Test Case Generation with EvoMaster”</article-title>
          .
          <source>In: ACM Transactions on Software Engineering and Methodology</source>
          <volume>28</volume>
          .1 (
          <issue>Feb</issue>
          .
          <year>2019</year>
          ), pp.
          <fpage>1</fpage>
          -
          <lpage>37</lpage>
          . issn:
          <fpage>1049</fpage>
          -
          <lpage>331X</lpage>
          ,
          <fpage>1557</fpage>
          -
          <lpage>7392</lpage>
          . doi:
          <volume>10</volume>
          .1145/3293455. (Visited on 08/29/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <string-name>
            <given-names>Axini. Axini Modeling</given-names>
            <surname>Platform</surname>
          </string-name>
          .
          <year>2022</year>
          . url: https://www.axini.com/nl/.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Fachrul</given-names>
            <surname>Pralienka Bani Muhamad</surname>
          </string-name>
          , Riyanarto Sarno, Adhatus Solichah Ahmadiyah, and Siti Rochimah. “
          <article-title>Visual GUI testing in continuous integration environment”</article-title>
          .
          <source>In: 2016 International Conference on Information Communication Technology and Systems (ICTS)</source>
          . ISSN:
          <fpage>2338</fpage>
          -
          <lpage>185X</lpage>
          . Oct.
          <year>2016</year>
          , pp.
          <fpage>214</fpage>
          -
          <lpage>219</lpage>
          . doi:
          <volume>10</volume>
          .1109/ICTS.
          <year>2016</year>
          .
          <volume>7910301</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>L</given-names>
            <surname>Bass</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I</given-names>
            <surname>Weber</surname>
          </string-name>
          , and
          <string-name>
            <given-names>L</given-names>
            <surname>Zhu. DevOps: A Software Architect's Perspective</surname>
          </string-name>
          . Addison-Wesley,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Nikola</surname>
            <given-names>Beneš</given-names>
          </string-name>
          , Przemysław Daca, Thomas A.
          <string-name>
            <surname>Henzinger</surname>
          </string-name>
          , Jan Křetínský, and Dejan Ničković. “
          <article-title>Complete Composition Operators for IOCO-Testing Theory”</article-title>
          .
          <source>In: Proceedings of the 18th International ACM SIGSOFT Symposium on Component-Based Software Engineering</source>
          . Montréal QC Canada: ACM, May
          <year>2015</year>
          , pp.
          <fpage>101</fpage>
          -
          <lpage>110</lpage>
          . isbn:
          <fpage>978</fpage>
          -1-
          <fpage>4503</fpage>
          -3471-6. doi:
          <volume>10</volume>
          . 1145/2737166.2737175. url: https://dl.acm.org/doi/10.1145/2737166.2737175 (visited on 05/22/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Machiel</surname>
            <given-names>van der Bijl</given-names>
          </string-name>
          , Arend Rensink, and Jan Tretmans. “
          <article-title>Compositional Testing with ioco”.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <source>Lecture Notes in Computer Science</source>
          . Springer,
          <year>2004</year>
          , pp.
          <fpage>86</fpage>
          -
          <lpage>100</lpage>
          . isbn:
          <fpage>978</fpage>
          -3-
          <fpage>540</fpage>
          -24617-6.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          <source>doi: 10</source>
          .1007/978-3-
          <fpage>540</fpage>
          -24617-
          <issue>6</issue>
          _
          <fpage>7</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <article-title>Petra van den Bos and Jan Tretmans. “Coverage-Based Testing with Symbolic Transition Systems”</article-title>
          . In: Tests and Proofs. Ed. by Dirk Beyer and Chantal Keller. Vol.
          <volume>11823</volume>
          . Series Title: Lecture Notes in Computer Science. Cham: Springer International Publishing,
          <year>2019</year>
          , pp.
          <fpage>64</fpage>
          -
          <lpage>82</lpage>
          . url: http://link.springer.com/10.1007/978- 3-
          <fpage>030</fpage>
          - 31157-
          <issue>5</issue>
          _5 (visited on 01/13/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>Lianping</given-names>
            <surname>Chen</surname>
          </string-name>
          . “Microservices:
          <article-title>Architecting for Continuous Delivery and DevOps”</article-title>
          .
          <source>In: 2018 IEEE International Conference on Software Architecture (ICSA)</source>
          . Seattle, WA: IEEE, Apr.
          <year>2018</year>
          , pp.
          <fpage>39</fpage>
          -
          <lpage>397</lpage>
          . isbn:
          <fpage>978</fpage>
          -1-
          <fpage>5386</fpage>
          -6398-1. doi:
          <volume>10</volume>
          . 1109 / ICSA .
          <year>2018</year>
          .
          <volume>00013</volume>
          . url: https://ieeexplore.ieee.org/document/8417115/ (visited on 07/20/
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Cypress</surname>
          </string-name>
          . Cypress. url: https://www.cypress.io/ (visited on 06/21/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Przemyslaw</surname>
            <given-names>Daca</given-names>
          </string-name>
          , Thomas A.
          <string-name>
            <surname>Henzinger</surname>
          </string-name>
          , Willibald Krenn, and Dejan Nickovic. “
          <article-title>Compositional Specifications for ioco Testing”</article-title>
          . In: arXiv:
          <year>1904</year>
          .07083 [cs] (
          <year>Apr</year>
          .
          <year>2019</year>
          ). arXiv:
          <year>1904</year>
          .07083. url: http://arxiv.org/abs/
          <year>1904</year>
          .07083 (visited on 11/13/
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Sigrid</surname>
            <given-names>Eldh</given-names>
          </string-name>
          , Hans Hansson, Sasikumar Punnekkat, Anders Pettersson, and Daniel Sundmark.
          <article-title>“A Framework for Comparing Eficiency, Efectiveness and Applicability of Software Testing Techniques”</article-title>
          .
          <source>In: Aug</source>
          .
          <year>2006</year>
          , pp.
          <fpage>159</fpage>
          -
          <lpage>170</lpage>
          . doi:
          <volume>10</volume>
          .1109/TAIC-PART.
          <year>2006</year>
          .
          <volume>1</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17] .
          <source>NET Foundation. eShopOnContainers. June</source>
          <year>2022</year>
          . url: https : / / github . com / dotnet - architecture/eShopOnContainers.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>Martin</given-names>
            <surname>Fowler</surname>
          </string-name>
          . Microservices. url: https://martinfowler.com/articles/microservices.html (visited on 06/21/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Luca</surname>
            <given-names>Gazzola</given-names>
          </string-name>
          , Maayan Goldstein, Leonardo Mariani, Itai Segall, and Luca Ussi. “
          <article-title>Automatic Ex-Vivo Regression Testing of Microservices”</article-title>
          .
          <source>In: Proceedings of the IEEE/ACM 1st International Conference on Automation of Software Test</source>
          . Seoul Republic of Korea: ACM, Oct.
          <year>2020</year>
          , pp.
          <fpage>11</fpage>
          -
          <lpage>20</lpage>
          . isbn:
          <fpage>978</fpage>
          -1-
          <fpage>4503</fpage>
          -7957-1. doi:
          <volume>10</volume>
          .1145/3387903.3389309. url: https://dl.acm.org/doi/10.1145/3387903.3389309 (visited on 06/16/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>A</given-names>
            <surname>Giamas</surname>
          </string-name>
          . From Monolith to Microservices,
          <source>Zalando's Journey</source>
          .
          <year>2016</year>
          . url: https://www.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>infoq.com/news/2016/02/Monolith-Microservices-Zalando/.</mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [21]
          <string-name>
            <surname>Robert</surname>
            <given-names>Heinrich</given-names>
          </string-name>
          , André van Hoorn,
          <string-name>
            <surname>Holger Knoche</surname>
            ,
            <given-names>Fei</given-names>
          </string-name>
          <string-name>
            <surname>Li</surname>
          </string-name>
          , Lucy Ellen Lwakatare, Claus Pahl, Stefan Schulte, and Johannes Wettinger. “
          <article-title>Performance Engineering for Microservices: Research Challenges and Directions”</article-title>
          .
          <source>In: Proceedings of the 8th ACM/SPEC on International Conference on Performance Engineering Companion</source>
          . L'
          <string-name>
            <surname>Aquila</surname>
            <given-names>Italy: ACM</given-names>
          </string-name>
          , Apr.
          <year>2017</year>
          , pp.
          <fpage>223</fpage>
          -
          <lpage>226</lpage>
          . isbn:
          <fpage>978</fpage>
          -1-
          <fpage>4503</fpage>
          -4899-7. doi:
          <volume>10</volume>
          .1145/3053600.3053653. url: https://dl.acm.org/doi/10.1145/3053600.3053653 (visited on 07/20/
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [22]
          <string-name>
            <surname>Robert</surname>
            <given-names>M Hierons</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Kirill</given-names>
            <surname>Bogdanov</surname>
          </string-name>
          , Jonathan P Bowen, Rance Cleaveland, John Derrick, Jeremy Dick, Marian Gheorghe, Mark Harman, Kalpesh Kapoor,
          <string-name>
            <given-names>Paul</given-names>
            <surname>Krause</surname>
          </string-name>
          , et al. “
          <article-title>Using formal specifications to support testing”</article-title>
          .
          <source>In: ACM Computing Surveys (CSUR) 41.2</source>
          (
          <issue>2009</issue>
          ), pp.
          <fpage>1</fpage>
          -
          <lpage>76</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>T</given-names>
            <surname>Hof</surname>
          </string-name>
          .
          <source>Amazon Architecture</source>
          .
          <year>2007</year>
          . url: http://highscalability.com/blog/2007/9/18/amazonarchitecture.html (visited on 03/31/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [24]
          <string-name>
            <surname>Yury</surname>
            <given-names>Izrailevsky</given-names>
          </string-name>
          , Stevan Vlaovic, and
          <string-name>
            <given-names>Ruslan</given-names>
            <surname>Meshenberg</surname>
          </string-name>
          .
          <source>About Netflix - Completing the Netflix Cloud Migration</source>
          .
          <year>2016</year>
          . url: https://about.netflix.com/,%20https://about.netflix. com/en/news/completing
          <article-title>-the-netflix-cloud-migration.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>Ramon</given-names>
            <surname>Janssen</surname>
          </string-name>
          and
          <string-name>
            <given-names>Jan</given-names>
            <surname>Tretmans</surname>
          </string-name>
          . “
          <article-title>Matching implementations to specifications: the corner cases of ioco”</article-title>
          .
          <source>In: Proceedings of the 34th ACM/SIGAPP Symposium on Applied Computing. Limassol Cyprus: ACM, Apr</source>
          .
          <year>2019</year>
          , pp.
          <fpage>2196</fpage>
          -
          <lpage>2205</lpage>
          . isbn:
          <fpage>978</fpage>
          -1-
          <fpage>4503</fpage>
          -5933-7. doi:
          <volume>10</volume>
          .1145/3297280.3297496. url: https://dl.acm.org/doi/10.1145/3297280.3297496 (visited on 06/21/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [26]
          <string-name>
            <surname>Qing</surname>
            <given-names>Lei</given-names>
          </string-name>
          , Weidong Liao, Yingtao Jiang,
          <string-name>
            <given-names>Mei</given-names>
            <surname>Yang</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Haifeng</given-names>
            <surname>Li</surname>
          </string-name>
          .
          <article-title>“Performance and Scalability Testing Strategy Based on Kubemark”</article-title>
          .
          <source>In: 2019 IEEE 4th International Conference on Cloud Computing and Big Data Analysis (ICCCBDA)</source>
          . Chengdu, China: IEEE, Apr.
          <year>2019</year>
          , pp.
          <fpage>511</fpage>
          -
          <lpage>516</lpage>
          . url: https://ieeexplore.ieee.org/document/8725658/ (visited on 07/20/
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [27]
          <string-name>
            <surname>Leonardo</surname>
            <given-names>Mariani</given-names>
          </string-name>
          , Mauro Pezze, Oliviero Riganelli, and Mauro Santoro. “
          <article-title>AutoBlackTest: Automatic Black-Box Testing of Interactive Applications”</article-title>
          .
          <source>In: Verification and Validation 2012 IEEE Fifth International Conference on Software Testing. ISSN</source>
          :
          <fpage>2159</fpage>
          -
          <lpage>4848</lpage>
          . Apr.
          <year>2012</year>
          , pp.
          <fpage>81</fpage>
          -
          <lpage>90</lpage>
          . doi:
          <volume>10</volume>
          .1109/ICST.
          <year>2012</year>
          .
          <volume>88</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [28]
          <string-name>
            <surname>A.M. Memon</surname>
            ,
            <given-names>M.E.</given-names>
          </string-name>
          <string-name>
            <surname>Pollack</surname>
            , and
            <given-names>M.L.</given-names>
          </string-name>
          <string-name>
            <surname>Sofa</surname>
          </string-name>
          . “
          <article-title>Hierarchical GUI test case generation using automated planning”</article-title>
          .
          <source>In: IEEE Transactions on Software Engineering</source>
          <volume>27</volume>
          .2 (
          <issue>Feb</issue>
          .
          <year>2001</year>
          ).
          <source>Conference Name: IEEE Transactions on Software Engineering</source>
          , pp.
          <fpage>144</fpage>
          -
          <lpage>155</lpage>
          . issn:
          <fpage>1939</fpage>
          -
          <lpage>3520</lpage>
          . doi:
          <volume>10</volume>
          .1109/32.908959.
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [29]
          <string-name>
            <surname>PIT. PIT Mutation</surname>
          </string-name>
          <article-title>Testing</article-title>
          . url: https://pitest.org/ (visited on 09/05/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [30] Jose G. Quenum and
          <string-name>
            <given-names>Samir</given-names>
            <surname>Aknine</surname>
          </string-name>
          . “
          <article-title>Towards Executable Specifications for Microservices”</article-title>
          .
          <source>In: 2018 IEEE International Conference on Services Computing (SCC)</source>
          . San Francisco, CA, USA: IEEE,
          <year>July 2018</year>
          , pp.
          <fpage>41</fpage>
          -
          <lpage>48</lpage>
          . isbn:
          <fpage>978</fpage>
          -1-
          <fpage>5386</fpage>
          -7250-1. doi:
          <volume>10</volume>
          .1109/SCC.
          <year>2018</year>
          .
          <volume>00013</volume>
          . url: https://ieeexplore.ieee.org/document/8456399/ (visited on 07/20/
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [31]
          <string-name>
            <given-names>Chris</given-names>
            <surname>Richardson</surname>
          </string-name>
          . Building Microservices:
          <string-name>
            <surname>Inter-Process Communication</surname>
          </string-name>
          .
          <source>July</source>
          <year>2015</year>
          . url: https://www.nginx.com/blog/building
          <article-title>-microservices-inter-process-communication/ (visited on 02/03/</article-title>
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [32]
          <string-name>
            <surname>SmartBear</surname>
          </string-name>
          . Cucumber. url: https://cucumber.io/ (visited on 09/05/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [33]
          <string-name>
            <surname>Stryker</surname>
          </string-name>
          . Stryker Mutator. url: https://stryker-mutator.io/.
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [34]
          <article-title>TorXakis</article-title>
          . TorXakis. url: https://github.com/TorXakis/TorXakis (visited on 06/21/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [35]
          <string-name>
            <given-names>Jan</given-names>
            <surname>Tretmans</surname>
          </string-name>
          .
          <article-title>“Model Based Testing with Labelled Transition Systems”</article-title>
          . In:
          <article-title>Formal Methods and Testing: An Outcome of the FORTEST Network, Revised Selected Papers</article-title>
          . Ed. by
          <string-name>
            <surname>Robert M. Hierons</surname>
            ,
            <given-names>Jonathan P.</given-names>
          </string-name>
          <string-name>
            <surname>Bowen</surname>
          </string-name>
          , and
          <source>Mark Harman. Lecture Notes in Computer Science</source>
          . Berlin, Heidelberg: Springer,
          <year>2008</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>38</lpage>
          . isbn:
          <fpage>978</fpage>
          -3-
          <fpage>540</fpage>
          -78917-8. doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>540</fpage>
          -78917-
          <issue>8</issue>
          _1. url: https://doi.org/10.1007/978-3-
          <fpage>540</fpage>
          -78917-
          <issue>8</issue>
          _1 (visited on 07/12/
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          [36]
          <string-name>
            <surname>Tricentis</surname>
          </string-name>
          . SpecFlow. url: https://specflow.org/ (visited on 09/05/
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          [37] [38]
          <string-name>
            <given-names>Mark</given-names>
            <surname>Utting</surname>
          </string-name>
          and
          <string-name>
            <given-names>Bruno</given-names>
            <surname>Legeard</surname>
          </string-name>
          .
          <article-title>Practical Model-Based Testing: A Tools Approach</article-title>
          . Elsevier,
          <year>July 2010</year>
          . isbn:
          <fpage>978</fpage>
          -0-
          <fpage>08</fpage>
          -046648-4.
        </mixed-citation>
      </ref>
      <ref id="ref39">
        <mixed-citation>
          <string-name>
            <given-names>Mark</given-names>
            <surname>Utting</surname>
          </string-name>
          , Alexander Pretschner, and Bruno Legeard.
          <article-title>“A TAXONOMY OF MODELBASED TESTING”</article-title>
          .
          <source>In: (Apr</source>
          .
          <year>2006</year>
          ), p.
          <fpage>18</fpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>