<!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>Static and Dynamic Architecture Conformance Checking: A Systematic, Case Study-Based Analysis on Tradeoffs and Synergies</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jan Thomas</string-name>
          <email>jan.thomas@rwth-aachen.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ana Nicolaescu</string-name>
          <email>ana.nicolaescu@swc.rwth-aachen.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Horst Lichter</string-name>
          <email>horst.lichter@swc.rwth-aachen.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>RWTH Aachen University</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2017</year>
      </pub-date>
      <fpage>6</fpage>
      <lpage>13</lpage>
      <abstract>
        <p>-In order to uncover architectural drift, a plethora of architecture conformance checking tools has been proposed that mainly leverage two approaches: they extract architectural knowledge based on either source code artifacts (static approach) or run-time behavior (dynamic approach). Although both approaches have been evaluated separately, no up-to-date analysis of their relative strengths and weaknesses, nor realworld comparative case studies of the two were published. In this paper we address this issue by presenting the results of a direct comparison of both approaches. We first identify and compare their strengths and weaknesses on a theoretical level. We then evaluate these results against our experiences gained in a large-scale industrial case study. As a result, we argue that the approaches cannot substitute each other as they differ in many key aspects. Hence, we crystallize guidelines regarding how to combine these such that their strengths are emphasized while weaknesses mitigated.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>
        It is well studied and understood [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] that the quality
of a software system’s architecture directly influences its
nonfunctional properties (NFP) like understandability,
maintainability, or security. As a consequence, developing successful
large-scale software solutions requires a well-documented
architecture. If the documented architecture accurately reflects
the built system, it serves as the key artifact for architectural
communication among different stakeholders and sound
architectural decision making [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. However, as software
systems evolve, it is often the case that a gap between the
actually implemented architecture (as-implemented) and its
documentation (as-intended) emerges. This gap is referred to
as architectural drift [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. If this drift is not addressed properly,
it could cause the violation of architectural design decisions
(architectural erosion) [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], which can cause serious problems
related to the NFPs listed above.
      </p>
      <p>
        In order to uncover architectural drift, several architecture
conformance checking techniques were proposed [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] (e.g.
reflexion modeling [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]) and implemented in commercial [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]
[
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] and non-commercial [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] tools. These tools collect
architectural evidence from a system’s source code and compare it
to an as-intended architecture (static approach). However,
current research shows that automated architecture conformance
checking techniques and tools are still not well adopted by the
industry [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>
        In addition, with the advent of new architecture styles (e.g.
microservices), the complexity of software systems shifts from
their static structure to their run-time behavior. Consequently,
static analysis tools might not cover all architecturally relevant
aspects. To address this issue, tools were proposed [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]
[
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] that collect architectural evidence by means of run-time
data and therefore cover behavioral aspects as well (dynamic
approach).
      </p>
      <p>Although both approaches have been discussed separately,
no work addressed a direct comparison thereof. Guided by this
observation, we derived two research questions:</p>
    </sec>
    <sec id="sec-2">
      <title>RQ1 - Considering their general capabilities, which are</title>
      <p>the main strengths and weaknesses of static and dynamic
architecture conformance checking approaches?
RQ2 - How can both approaches be combined in order
to obtain synergies?
Addressing these questions on a theoretical foundation can
be done by consulting existing literature and related work.
However, answering such questions outside the scope of a
real-world context is not recommended, as results may lack
applicability and industrial relevance. Hence, we also
conducted a case study as a six months long project that emerged
within the cooperation with one of our industry partners.
During this case study, we explored the applicability of both
architecture conformance checking approaches in a large-scale
industrial context. As a result, the key contributions of this
paper are bivalent. (1) We contribute a theoretical comparison
of static and dynamic approaches in general and (2) undergo
a comparison based on the experiences gathered from our
industrial case study. Both are important contributions towards
answering the research questions as defined before.</p>
      <p>The remainder of this paper is structured as follows:
Section II investigates the theoretical background of static and
dynamic approaches. Subsequently, we introduce the context
and design of our case study in Section III. Next, we present
the challenges that we encountered while performing the case
study and continue with the evaluation of the obtained results.
A thorough comparison and discussion of both approaches
based on the previous results is subject to Section IV. Section
V presents related work. Last, Section VI concludes the paper
with a summary and a discussion of future work.
II. BACKGROUND OF STATIC AND DYNAMIC APPROACHES</p>
      <p>
        In comparison to other techniques for checking architecture
conformance, reflexion modeling has a large industrial
acceptance and a great maturity of tool support [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. Originally,
reflexion modeling was introduced [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] as a technique to uncover
architectural drift based on three prerequisites: an as-intended
architecture model, low-level architectural evidence and a
mapping between both. Based on these inputs, entities and
relations of the as-intended architecture model are identified
as architectural convergences, divergences or absences. The
capabilities of reflexion modeling strongly depend on the type
of architectural evidence (entities and relations) that can be
extracted by either analyzing source code (static approach)
or by analyzing run-time data from an instrumented system
(dynamic approach).
      </p>
      <sec id="sec-2-1">
        <title>A. Architectural Entities and Relations</title>
        <p>We illustrate which entities and relations can be obtained
for both approaches on the example of Java. Analyzing Java
source code, one can obtain three kinds of entities: files,
packages and types (classes, enums or interfaces). Each source
file defines a package that it belongs to and defines a set of
imported types. Classes can extend other classes and implement
interfaces. Interfaces are able to extend other interfaces. Within
classes, a different set of relations can be found. Classes can be
instantiated, variables of classes or instances can be accessed
and methods of classes or instances can be invoked. While the
belongs to package relation defines the structure of entities,
all remaining ones (import, extend, implement, instantiate,
variable access, method invocation) express different kinds
of usage. As it is possible to define these relations during
run-time1, it is possible that the resulting relations are not
created ahead of run-time. Hence, usage that is triggered in this
dynamic manner is not within the scope of the static approach.</p>
        <p>
          In contrast, applying the dynamic approach one needs to
extract architectural evidence through instrumentation of a
system using special monitoring tools like Dynatrace [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]
and triggering its behavior (e.g. running test-cases), which
we refer to as episodes. The monitoring tools intercept and
capture method invocations at run-time and yield a set of
so-called execution traces. A trace can be defined as a tree
of caller-callee-nodes. Each node includes the name of the
invoked method and the fully qualified name of the type
it belongs to. Furthermore, nodes can be augmented with
additional run-time information (e.g. object ids or method
arguments). In addition, the execution frequency of a method
can be derived from all observed invocations. Dependent on
the utilized monitoring tool, further relations are in the scope
of the dynamic approach. This includes method invocations
which are triggered dynamically (e.g. by reflection) as well
as variable access. Furthermore, relations resulting from
interprocess communication (e.g. pipes, database access, or web
services) can also be extracted. Table I summarizes the
previous analyzed architectural relations. Based on the architectural
1using techniques such as reflection and dependency injection
        </p>
        <p>TABLE I</p>
        <p>RELATIONS OBTAINED FROM ARCHITECTURAL EVIDENCE
Relation Type
Import
Extends
Implements
Variable Access
Instantiation
Method Invocation
Dynamic Method Invocation
Inter-Process Communication
Execution Frequency
Execution Time</p>
        <p>Static Appr.</p>
        <p>x
x
x
x
x
x</p>
        <p>Dynamic Appr.</p>
        <p>x
x
x
x
x
x
x
evidence which can be obtained and how it is extracted, we
can derive the strengths and weaknesses of either approaches.</p>
        <p>Using reflexion modeling techniques, the as-intended
architecture can be expressed as rules of the type “is allowed to
use” (e.g. component A is allowed to use component B).
The type of usage can be refined based on the extracted
architectural relation types. Compared to some basic usage
rules, which can be formulated in both approaches, more
complex ones can be defined based on the relations obtained
by the dynamic approach. First, it can distinguish multiple
method invocation types (e.g. direct invocation, database
access, remote procedure calls, web services, message bus).
Second, communication parameters captured at run-time (e.g.
method invocation arguments or web service endpoint) can
also be considered when modeling usage-based rules. For
instance, architects could define rules that restrict access to
a component through a specific REST API. Similarly, given
a component, the architects can choose to restrict its database
access to a specific table. Third, besides is allowed to use
rules, the dynamic approach also facilitates the definition of
rules based on the temporal order of captured method calls
or their frequency. For instance, one could define rules stating
that a method call A must happen before B or that A must
not be called more than once. Generally speaking, the
dynamic approach facilitates the analysis of richer architectural
properties.</p>
      </sec>
      <sec id="sec-2-2">
        <title>B. Distinguishing Capabilities</title>
        <p>A key benefit of the dynamic approach is the ability to
analyze inter-process communication. This becomes
essential when analyzing systems following new architecture styles
like microservices. The complexity of these systems shifts
from their static structure to their interaction and behavior at
run-time, as they are distributed across multiple processes. In
these cases, only the dynamic approach can provide insights
about the entire system, as the concrete architecture is only
assembled at run-time.</p>
        <p>
          Even if architectural conformance analysis is restricted to
homogeneous single process systems, not all architecturally
relevant information can be obtained from the source code
[
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. For instance, relations caused by late binding (e.g.
polymorphism) can only be extracted from running systems.
However, late binding effects might not always be desired.
For instance, interfaces are often used as a measure to prevent
direct coupling between classes. While the static approach is
aware of this decoupling, the dynamic approach is not because
it observes the dynamic, late bound type at run-time. This
anomaly needs to be considered by architects when modeling
rules for either the static or dynamic approach.
        </p>
        <p>
          A major difference between the static and dynamic
approach is the analysis completeness [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ]. While architectural
evidence extracted from source code holds for all program
executions, architectural evidence obtained from run-time data
only holds for the observed behavior. As a consequence, the
dynamic approach cannot guarantee that a system satisfies a
particular architectural property, but can only detect violations
of those. In contrast, the static approach gives this guarantee,
as its properties hold for all program executions. In case
that both approaches disagree regarding a certain property,
either the dynamic approach did not cover all relevant parts
of the system or the static approach analyzed code that is
either unreachable or not used anymore [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ]. As the dynamic
approach considers actual program executions, it does not
suffer from analyzing unreachable or unused code. However,
due to the same reason it is hard to achieve completeness.
        </p>
        <p>Applying these thoughts regarding completeness to reflexion
modeling techniques, adds a fuzziness to the results of the
dynamic approach (cf. Figure 1). Parts of the as-implemented
architecture that were not captured due to incomplete
instrumentation are represented as dashed rectangles. Taking the
possibility of uncovered parts into account leads to three
considerations. First, if not all parts of the as-implemented
architecture are covered, it is not certain that the set of
divergences reflect all actual divergences in the software system.
There might be architectural violations in the system which are
not detected, thus this set only suites as a lower bound. Second,
absences may be detected that actually are convergences due to
uncovered parts in the as-implemented architecture. Therefore,
the set of detected absences can only be interpreted as an upper
bound, whereas the set of detected convergences represents a
lower bound. Third, the probability that these match the actual
sets in the software system is influenced by the degree of
uncovered parts in the as-implemented architecture. If a large
uncovered fraction exists, this probability is low. In contrast,
lowering this fraction increases the robustness and reliability
of the results. As a consequence, architects need to make a
reasonable episode selection such that all parts of the system
that are relevant for the analysis are covered.</p>
        <p>
          In order to make a reasonable episode selection, one could
follow guidelines to ensure that these cover the system’s most
relevant use-cases. Besides using such guidelines, the quality
of selected episodes should also be measured objectively. To
this end, architects can adopt structural coverage metrics (e.g.
statement coverage) in the context of architectural
conformance checking to assess the quality of selected episodes
(see e.g. [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ] or [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ]). Measuring coverage metrics bears
the advantage of gaining confidence regarding the analysis
significance. In addition, these metrics are easy to measure
due to mature tool support for major programming languages.
        </p>
        <p>To sum up, in this section we defined the analysis scope
of both approaches based on entities and relations obtained
from architectural evidence. In addition, we distinguished the
approaches by capabilities of analyzing interprocess
communication, late binding effects and characteristics regarding
completeness.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>III. CASE STUDY This section describes the conducted case study. We first describe the case study context and design, before we comment on encountered challenges and present the obtained results.</title>
      <sec id="sec-3-1">
        <title>A. System Under Analysis (SUA)</title>
        <p>Subject to this case study is a system for task automation
and data distribution, which is developed since 2008. As part
of the software evolution process and driven by customer
needs, features were constantly added and improved. As a
consequence, its architecture was refactored several times.
Today, the Java OSGi based system comprises a total of
125000 lines of code. Table II summarizes additional
sizeoriented metrics. As the SUA represents a business critical
component, it is crucial to ensure that all non-functional
properties considered by the architects are actually respected
in the implementation. Hence, there is a strong need for
automated architectural conformance checks.</p>
        <p>The system is divided into five processes, each
implementing an individual functional slice. Each process runs an OSGi
container which hosts several OSGi bundles. These in turn can
provide or require OSGi services and depend on other .jar
artifacts. Persistence is realized through a RDBMS and local
XML files. Inter-process communication (IPC) among the five
processes is implemented by polling for state changes in the
persistence layer as well as by publishing and subscribing
to a message bus. As data distribution is a central feature
of the SUA, it implements several communication protocols
(e.g. FTP, HTTP, etc.). Its architecture is documented in a set
of UML component diagrams which depict several levels of
abstractions: system, process and OSGi bundle. Each diagram
models how the inner concepts are connected and defines
dependencies to the context in which it is embedded. Table
III depicts which concepts and dependencies are represented
in which diagram type.</p>
        <p>Based on these diagrams and expert interviews, we derived
properties that had to be analyzed in the case study: (1) Do the
OSGi bundles use just the documented .jar dependencies? (2)
Are OSGi services wired at run-time as documented? (3) Is the
database used only through the access layer component? (4)
Are only the allowed components coupled at run-time through
the message bus? (5) Are only white-listed directories and files
accessed at run-time? (6) Are external systems always used
through their dedicated protocol facades? While properties 1,
3 and 6 are related to the static structure of the SUA, the
analysis of property 2, 4 and 5 requires insights into the
system’s run-time. For this reason, we decided to combine
the tools Sonargraph-Architect (static approach) and ARAMIS
(dynamic approach) for this case study.</p>
      </sec>
      <sec id="sec-3-2">
        <title>B. Employed Static Tool - Sonargraph-Architect</title>
        <p>
          Sonargraph-Architect [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] is a well established tool for static
code analysis. It allows to monitor complex software systems
regarding their technical quality and to enforce architectural
conformance rules. In addition, it calculates a variety of
metrics. While Sonargraph supports many features, we just
used the architecture conformance related features for this
case study. Sonargraph-Architect provides a domain-specific
language (DSL) to define a system’s architecture. According
to the principles of reflexion modeling, the DSL supports the
definition of components which are mapped to source code and
connected by architectural rules (e.g. allowed to instantiate,
allowed to call, etc.).
the SUA by using ARAMIS’ dedicated architecture
description language (ADL). This description includes a hierarchy
of so-called architecture units, their mapping to the source
code elements and their allowed interaction rules. Second,
the SUA needs to be instrumented while performing certain
episodes in order to capture low-level architectural evidence
in form of run-time traces. As ARAMIS builds on top of well
established monitoring infrastructures, we used the Dynatrace
[
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] monitoring infrastructure, as it is able to monitor complex
distributed and heterogeneous systems. Third, the captured
traces need to be analyzed by the ARAMIS processing chain
regarding architectural violations.
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>D. Case Study Design and Execution</title>
        <p>
          During an initialization phase, we organized several
meetings to discuss the general setting and high-level requirements
for automated architecture conformance checks. Afterward, the
source code (as-implemented architecture) and the diagrams
(reference as-intended architecture) were manually inspected.
Based on this inspection and expert interviews, architectural
questions of interest tailored to the SUA were derived. As the
utilized tools can not directly perform conformance checks
based on the reference model, tool-specific as-intended
architecture models needed to be created. We decided to exercise
an automated model-to-model transformation approach which
was studied in our previous work [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]. This approach
enabled us to obtain tool-specific models of comparable quality,
which facilitates a fair comparison of the static and dynamic
approach. Another prerequisite for applying the tools is the
availability of architectural evidence. While the source code
could be accessed easily by Sonargraph-Architect, we had
to instrument the SUA and capture traces at run-time for
ARAMIS using Dynatrace. To this end, we used an already
existing UI test suite and measured its statement coverage
to assess its adequacy for supporting a behavior-based
conformance check. Using the automatically transformed models
and the architectural evidence, we then applied the tools
Sonargraph-Architect and ARAMIS on the SUA in order
to uncover its architectural drift. Subsequently, we manually
verified our results by classifying the detected architectural
violations into defects in the as-intended architecture, defects in
the as-implemented architecture and false positive violations.
This activity was conducted in cooperation with architects and
developers.
        </p>
      </sec>
      <sec id="sec-3-4">
        <title>E. Challenges</title>
        <p>This section illustrates challenges we encountered when
conducting the case study and explains countermeasures we
C. Employed Dynamic Tool - ARAMIS took.</p>
        <p>
          ARAMIS (Architecture Analysis and Monitoring Infrastruc- As stated above, we followed a model-to-model
transformature) is a tool-supported framework for run-time monitoring, tion approach to obtain tool-specific as-intended architecture
communication integrity validation, evaluation and visualiza- models from a set of reference as-intended architecture
diation of the behavior view of software architectures [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. In grams. When implementing this transformation, we
encounorder to automatically check for architectural conformance tered two major challenges. First, we needed to automatically
using ARAMIS, three steps need to be followed. First, an map components in the reference model to implemented
as-intended architecture description needs to be defined for classes or packages in the source code. Second, the diagrams
denoted connections between components in terms of Java analyzing the execution frequency captured at run-time. These
interfaces. While the static approach is aware of interface valuable run-time insights highlight the unique capabilities of
decoupling, the dynamic approach is not due to late binding. the dynamic approach.
        </p>
        <p>As traces captured at run-time do not state usage of an Although we monitored about 140 automated UI test cases,
interface, but usage of a concrete implementation, rules in the only 32% of all statements in the SUA were covered at
rundynamic approach need to be aware of the concrete implemen- time. While this low coverage does not give any confidence
tations. However, as these were not denoted in the reference that we captured a relevant part of the SUA, the detailed
diagrams, it was not possible to automatically generate these coverage report gives valuable hints how the utilized test suite
rules without any additional information. The presented issues could be improved (e.g., only 26% of the system’s public API
boil down to two questions: (1) Which packages and classes were covered).
are defined within a component given its name? (2) Which Once set up, an important performance indicator of
archiclasses implement a particular interface given its name? In tecture conformance checks is the cycle time for the whole
order to automatically answer these questions, we decided to analysis process. We experienced cycle times of less than
embed a static pre-analysis of the component’s source code a minute for the static approach. In contrast, the dynamic
into the transformation process. This analysis creates two approach was a long running process which took 13 hours
mappings by iterating over all components and their classes: (deduplicated traces) up to 33 hours (full traces).
(1) component name ) included packages and classes names,
(2) interface name ) implementations’ class names. By using IV. COMPARISON AND DISCUSSION
these mappings, the previous questions could automatically be In the previous sections we mainly elaborated on the basic
answered, which enabled us to apply the planned model-to- characteristics of both approaches (RQ1). In contrast, this
model transformation approach. section first consolidates the previous results for a comparison</p>
        <p>As usual with dynamic approaches, scalability issues needed of both approaches. Subsequently, we discuss how both
apto be carefully addressed. The monitoring of the approximately proaches can be combined in order to obtain synergies (RQ2).
140 test cases lasted for 33 hours and produced 16 GB of trace
information comprising over 35 million caller-callee-pairs. To A. Comparison
reduce the amount of data, we applied our knowledge
regarding the monitored tests and the system’s general architecture:
redundant traces result through (1) test fixture setup and tear
down and (2) periodic polling employed by the processes. We
discarded these duplicate traces by utilizing heuristic-based
data deduplication techniques. This lead to a comprehensible
reduction of over 60% of the data to be analyzed and its
processing time.</p>
      </sec>
      <sec id="sec-3-5">
        <title>F. Results</title>
        <p>When exercising both approaches, we obtained 20 types
of architectural violations using ARAMIS and 15 violations
using Sonargraph-Architect. Only 3 of these violation types
were detected by both tools. With the help of architects,
we further classified these into defects in the as-intended
architecture, defects in the as-implemented architecture and
false positive violations. About two fifth were identified as
false positives due to false mapped classes or due to false
modeled rules. The majority of the remaining violations was
traced back to imprecise information in the reference
asintended architecture model. Sonargraph-Architect uncovered
undocumented external dependencies, which were not in the
scope of ARAMIS as we reduced its instrumentation scope. In
addition, Sonargraph-Architect detected 4 architectural
violations, which were not detected by ARAMIS due to insufficient
coverage produced by the monitored test suite. Both
observations confirm our previous thoughts on completeness of the
dynamic approach. In contrast, ARAMIS was able to uncover
file system related violations which were not in the scope
of Sonargraph-Architect. In addition, we identified an unused
database connection and two performance critical violations by</p>
        <p>
          Knodel and Popescu derived different comparison
dimensions as part of their work [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] in order to compare three
different static architecture conformance checking approaches.
Being generic dimensions, we reuse a subset of these and
adapt them for our work. In particular, these dimensions cover
required inputs, involved stakeholders, manual tasks, the
analysis scope, the analysis completeness, evaluation performance,
scalability factors and maintenance aspects. The following
discusses our comparison results which are summarized in
Table IV.
        </p>
        <p>Before choosing a conformance checking approach,
companies need to be aware of prerequisites in terms of required
inputs . Both approaches require a tool-specific as-intended
architecture model which can either be modeled manually
or be transformed automatically from a reference model. In
our case study, we augmented the reference model by static
information gathered from source code. Furthermore, both
conformance checking approaches depend on architectural
evidence for their analysis. The static approach can infer
this evidence directly from source code. In contrast, the
dynamic approach needs to capture run-time traces from an
instrumented system for this task. In addition, this process
requires a solid instrumentation configuration and an episode
selection that captures all architecturally relevant parts of the
SUA. These inputs need to be available upfront the analysis
and maintained throughout the systems lifetime by different
stakeholders.</p>
        <p>For both approaches, the creation of tool-specific
architecture models involves manual work either by manually creating
the model or by implementing a tailored model-to-model
transformation. However, if a similar system was analyzed
before, the transformation might be reused or adapted. Beyond
that, the static approach does not need much manual effort
to carry out the analysis process due to mature tool support.
In contrast, behavior-based non-commercial tools need much
more manual effort as they are not as mature. In the case of
ARAMIS, trace capturing, importing and processing need to
be initiated and monitored manually by architects. Another
important manual task is the discussion of detected violations
by architects and developers in order to identify their cause and
possible solutions. As architectural violations can be caused
individually by defects in the as-intended architecture, by
defects in the as-implemented architecture or by defects in the
analysis process (false positives), this task can not be handled
by tools.</p>
        <p>In order to choose the right approach, it is important to
consider the approachs analysis scope. As identified before,
static tools collect architectural evidence directly from source
code. Hence, the scope of a particular analysis is constrained
to a single programming language and in turn to
homogeneous systems only. In contrast, the analysis scope of the
dynamic approach mainly depends on the utilized monitoring
infrastructure. Advanced ones (e.g. Dynatrace) are able to
collect traces across system boundaries. Therefore, these tools
facilitate the analysis of heterogeneous systems-of-systems.
Architectural relations that can be analyzed by a particular
approaches were illustrated in Table I. Summarizing this table,
the static approach has to be used if the analysis should include
rules based on import, extends or implements relations. On the
contrary, the dynamic approach has to be applied if dynamic
method invocation, inter-process communication, execution
frequency or timing related aspects are relevant. Rules based
on method invocation can be modeled in either approaches.
However, if the dynamic type of an invoked method (late
binding) is relevant for the analysis, the dynamic one needs to
be used as the static one is not aware of late binding concepts.</p>
        <p>A pivotal difference between the static and dynamic
approach is the analysis completeness. The static approach is
complete within its scope as it can access all architectural
relations easily from source code. In contrast, the dynamic
approach is not complete because in practice it is not possible
to capture behavior of an application in its entirety. As a
consequence, the dynamic approach cannot guarantee that a system
satisfies a particular property for all program executions. As
stated before, the degree of completeness depends on the
quality of selected episodes. However, increasing the quality
of these, such that they cover more parts of the SUA, has two
major influences. First, it requires significantly more effort to
write and maintain test suites for those episodes. Second, as
more episodes are monitored, more traces are captured. As
a consequence, the overall analysis has an increase in trace
capturing time, processing time and storage requirements.</p>
        <p>Both approaches differ significantly in their cycle time of
the overall analysis process. In the context of our case study,
we experienced short cycle times of less than a minute for the
static approach and long cycle times of 13 to 33 hours for the
dynamic one. Therefore, the static one offers the opportunity
to provide instant feedback, whereas the dynamic one is a long
running process which needs to be planned and scheduled in
advance.</p>
        <p>Finally, one needs to take maintenance aspects into
account, before applying one or the other approach. For both
approaches it is crucial to maintain the reference and
toolspecific as-intended architecture for the SUA. Two additional
artifacts need to be maintained for the dynamic approach. First,
an instrumented version of the SUA needs to be maintained
in order to capture traces. As the source code changes, its
instrumentation configuration must be updated accordingly.
Second, the episode selection must be maintained accordingly
to changes in the source code or the architecturally relevant
use cases of the system.</p>
        <p>
          The previous comparison points out that both approaches
have their own strengths, weaknesses and unique features.
Hence, one approach can not substitute the other. However, the
dynamic one requires significantly more effort and resources
compared to the static one in almost all dimensions. As
a result, the static approach should be preferred according
to the “least effort extraction” strategy [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] for analyzing
architectural properties which are within the scope of both
approaches. Beyond that, we propose to first establish a solid
static architecture conformance analysis before applying the
dynamic approach. According to the pareto principle, a static
analysis can already identify a large fraction of architectural
violations using comparatively little effort. In addition, it bears
the advantage of being complete within its scope. Due to
the ability of providing instant feedback, the static approach
could potentially be integrated into IDEs, which has two
advantages. First, it increases the architectural awareness and
hence prevents the emergence of severe architectural violations
at development time. Second, if it is applied frequently,
it facilitates a tight feedback loop between developers and
architects by continuously validating architectural decisions.
In summary, the static approach should be used early and often
in order to establish the foundation of tool-based architecture
conformance checking.
        </p>
        <p>However, using solely static tools is not sufficient for a
comprehensive architecture analysis. Based on our analysis
and the performed case study, we see the following two
scenarios where the dynamic approach can enhance the results
of a static analysis</p>
        <p>First, if analyzing heterogeneous systems-of-systems, a
dynamic analysis focusing on inter-process communication can
augment the static analysis, which focuses on inner-process
properties only; in particular, a static analysis needs to be
augmented by a dynamic one, if architectural relevant properties,
like security or performance are influenced by concepts such
as late binding, etc..</p>
        <p>Second, as applying just the static approach does not give
insights how often particular violations occur at run-time, the
dynamic approach can be used to measure the frequency of
architectural violations in order to assess their severity.</p>
        <p>To sum up, we propose the combination of static an
dynamic approaches in order to achieve a broader analysis
scope. The static approach should be preferred for all
architectural properties where it is applicable as it is complete
and requires less effort. As it provides instant feedback, it
should be used frequently by developers in order to increase
architectural awareness and prevent architectural drift. To
complement missing architectural properties of the static analysis,
a dynamic one should be conducted on demand.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>V. RELATED WORK Architecture conformance checking has been in the focus of research for a long time. Ducasse and Pollet [22] introduced a taxonomy of the field and presented a comprehensive overview</title>
      <p>
        of existing tools and techniques. Static approaches were
discussed in [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. Approaches focusing on the behavior
of software systems were studied in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. But, to
the best of our knowledge, there is no work that performed a
direct comparison of both approaches, based on a theoretical
level and case study results.
      </p>
      <p>
        Knodel and Popescu [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] conducted a comparison of three
low-level static architecture conformance checking techniques
in the context of a tool for static architecture evaluation
called SAVE. Guided by a goal-question-metric approach,
they derived 13 dimensions in order to compare the three
techniques. We used a subset of these dimensions and adopted
them for our work in section IV. Like in our work, the authors
identified strength and weaknesses for each technique. They
proposed that architects should individually choose the right
technique for their needs based on the comparison dimensions
and results.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ], Knodel et al. reported a long term experience on
transferring static architecture conformance checking to their
industry partner. They identified the need for automating the
process to a large extent due to time constraints of their
industry partner. In [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ] Rosik et al. present their results
obtained while applying static architecture reconstruction over
a time-span of two years for one of their industrial partners.
Among others, they recommend to apply an adaptation of the
reflexion modeling technique: conformance checking should
be undergone periodically during the actual development and
not only on the completed system. Similarly, Ganesan, Keuler,
and Nishimura [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] share their experience applying the
dynamic approach in an industrial context. They experienced
that conformance checking is best applied iteratively and in
close cooperation with architects. Furthermore, they propose to
measure the code coverage metrics of monitored use cases to
ensure that all relevant architectural components were covered
at run-time. This approach was also proposed by [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ].
      </p>
      <p>Similar to these case studies, we also provided architecture
conformance checks as a service. In addition, we automated
the creation of tool-specific architecture models and captured
coverage metrics to assess the quality of our dynamic analysis.
In contrast to these studies, we applied the static and dynamic
approach in parallel. This facilitated a comprehensive
comparison of both approaches and a broader architectural analysis
scope.</p>
    </sec>
    <sec id="sec-5">
      <title>VI. CONCLUSION AND FUTURE WORK</title>
      <p>In this paper, we studied the characteristics, strengths and
weaknesses of static and dynamic architecture conformance
checking approaches and examined how synergies can be
obtained by combining both. In the following, we draw a
conclusion regarding our initial research questions.</p>
      <p>RQ1 - Considering their general capabilities, which are the
main strengths and weaknesses of static and dynamic
architecture conformance checking approaches? Static and dynamic
approaches are contrary to each other as most strengths of one
approach are the weaknesses of the other. We studied this on a
theoretical foundation (cf. section II) and supported our results
with an industrial case study (cf. section III). On the one hand,
the static approach enables an architectural analysis which is
complete within its scope spending comparable little effort. In
addition, it provides instant feedback and therefore can be used
frequently. On the other hand, its scope is limited to the static
structure of software systems, which excludes the analysis of
inter-process communication, dynamic method invocation and
effects of late binding. However, these concepts are within
the scope of the dynamic approach. But in contrast to the
static one, it is not complete and requires significantly more
effort and processing time. In turn, it is aware of the frequency
violations occurred at run-time, which can be used to assess
their severity.</p>
      <p>RQ2 - How can both approaches be combined in order to
obtain synergies? As both approaches are contrary to each
other, one can not substitute the other. In order to achieve a
broader analysis scope, we proposed a way of combining both
such that their strengths are emphasized and weaknesses are
mitigated. To utilize the completeness, low effort and instant
feedback of the static approach, it should be preferred over the
dynamic one if it is applicable and should be used frequently.
If the static analysis does not cover all relevant properties and
the project resources permit, a dynamic analysis can be used to
cover the missing properties. As it is not complete, structural
coverage metrics should be measured in conjunction to the
analysis in order to expose uncovered parts of the analyzed
system. Due to its high effort and processing time, dynamic
architecture conformance checks should only be conducted on
demand.</p>
      <p>It needs to be stressed that our practical results rest upon
the analysis of a single software system. As it is not possible
to generalize from a single case, additional cases in different
industrial settings should be studied in the future to validate
our results. Nevertheless, in comparison to our theoretical
work the conducted case study bears the advantage that it is
based on a real-life software system.</p>
    </sec>
    <sec id="sec-6">
      <title>ACKNOWLEDGMENT</title>
      <p>We want to thank our cooperation partners from KISTERS
AG for enabling us to perform the industrial case study
presented in this paper.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>R.</given-names>
            <surname>Kazman</surname>
          </string-name>
          and
          <string-name>
            <given-names>L.</given-names>
            <surname>Bass</surname>
          </string-name>
          , “
          <article-title>Toward deriving software architectures from quality attributes,” Defense Technical Informtion Center (DTIC)</article-title>
          ,
          <source>Tech. Rep.</source>
          ,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>L.</given-names>
            <surname>Chung</surname>
          </string-name>
          and
          <string-name>
            <surname>J. C. S.</surname>
          </string-name>
          do Prado Leite, “
          <article-title>On Non-Functional Requirements in Software Engineering</article-title>
          .” Springer Berlin Heidelberg,
          <year>2009</year>
          , pp.
          <fpage>363</fpage>
          -
          <lpage>379</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>L.</given-names>
            <surname>Bass</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Clements</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Kazman</surname>
          </string-name>
          , Software Architecture in Practice, 2nd ed. Boston, MA, USA:
          <string-name>
            <surname>Addison-Wesley Professional</surname>
          </string-name>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>R. N.</given-names>
            <surname>Taylor</surname>
          </string-name>
          , N. Medvidovic, and
          <string-name>
            <given-names>E. M.</given-names>
            <surname>Dashofy</surname>
          </string-name>
          , Software Architecture: Foundations, Theory, and Practice. Wiley Publishing,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A. L.</given-names>
            <surname>Wolf</surname>
          </string-name>
          and
          <string-name>
            <given-names>D. E.</given-names>
            <surname>Perry</surname>
          </string-name>
          , “
          <article-title>Foundations for the Study of Software Architecture,”</article-title>
          <source>ACM SIGSOFT Software Engineering Notes</source>
          , vol.
          <volume>17</volume>
          , no.
          <issue>4</issue>
          , pp.
          <fpage>40</fpage>
          -
          <lpage>52</lpage>
          ,
          <year>1992</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>Knodel</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Popescu</surname>
          </string-name>
          , “
          <article-title>A Comparison of Static Architecture Compliance Checking Approaches</article-title>
          ,”
          <source>in Proceedings of the Working IEEE/IFIP Conference on Software Architecture (WICSA)</source>
          . IEEE, jan
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>G. C.</given-names>
            <surname>Murphy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Notkin</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Sullivan</surname>
          </string-name>
          , “
          <article-title>Software Reflexion Models: Bridging the Gap Between Source and High-level Models,”</article-title>
          <source>ACM SIGSOFT Software Engineering Notes</source>
          , vol.
          <volume>20</volume>
          , no.
          <issue>4</issue>
          , pp.
          <fpage>18</fpage>
          -
          <lpage>28</lpage>
          , oct
          <year>1995</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8] “
          <fpage>hello2morrow</fpage>
          -
          <string-name>
            <given-names>Sonargraph</given-names>
            <surname>Architect</surname>
          </string-name>
          .” [Online]. Available: https://www.hello2morrow.com/products/sonargraph/architect9
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>“Structure101 Software Architecture Development Environment</surname>
          </string-name>
          (ADE).” [Online]. Available: http://structure101.com/
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>L. J.</given-names>
            <surname>Pruijt</surname>
          </string-name>
          , C. Ko¨ppe,
          <string-name>
            <surname>J. M. van der Werf</surname>
            , and
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Brinkkemper</surname>
          </string-name>
          , “
          <article-title>HUSACCT: Architecture Compliance Checking with Rich Sets of Module and Rule Types,”</article-title>
          <source>in Proceedings of the 29th ACM/IEEE international conference on Automated software engineering (ASE)</source>
          . ACM Press,
          <year>2014</year>
          , pp.
          <fpage>851</fpage>
          -
          <lpage>854</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Caracciolo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. F.</given-names>
            <surname>Lungu</surname>
          </string-name>
          , and
          <string-name>
            <given-names>O.</given-names>
            <surname>Nierstrasz</surname>
          </string-name>
          , “
          <article-title>How Do Software Architects Specify</article-title>
          and Validate Quality Requirements?” Springer, Cham,
          <year>2014</year>
          , pp.
          <fpage>374</fpage>
          -
          <lpage>389</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>I.</given-names>
            <surname>Melo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Santos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. D.</given-names>
            <surname>Serey</surname>
          </string-name>
          , and M. T. Valente, “
          <article-title>Perceptions of 395 Developers on Software Architecture's Documentation and Conformance,” in 2016 X Brazilian Symposium on Software Components, Architectures and Reuse (SBCARS)</article-title>
          . IEEE, sep
          <year>2016</year>
          , pp.
          <fpage>81</fpage>
          -
          <lpage>90</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>D.</given-names>
            <surname>Garlan</surname>
          </string-name>
          , S. Cheng, A.
          <string-name>
            <surname>Huang</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Schmerl</surname>
            , and
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Steenkiste</surname>
          </string-name>
          , “Rainbow:
          <article-title>Architecture-Based Self-Adaptation with Reusable Infrastructure</article-title>
          ,” Computer, vol.
          <volume>37</volume>
          , no.
          <issue>10</issue>
          , pp.
          <fpage>46</fpage>
          -
          <lpage>54</lpage>
          , oct
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>B.</given-names>
            <surname>Schmerl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Aldrich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Garlan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Kazman</surname>
          </string-name>
          , and Hong Yan, “
          <article-title>Discovering Architectures from Running Systems,”</article-title>
          <source>IEEE Transactions on Software Engineering</source>
          , vol.
          <volume>32</volume>
          , no.
          <issue>7</issue>
          , pp.
          <fpage>454</fpage>
          -
          <lpage>466</lpage>
          , jul
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>A.</given-names>
            <surname>Nicolaescu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Lichter</surname>
          </string-name>
          ,
          <string-name>
            <surname>A</surname>
          </string-name>
          . Go¨ringer, P. Alexander, and
          <string-name>
            <given-names>D.</given-names>
            <surname>Le</surname>
          </string-name>
          , “
          <article-title>The ARAMIS Workbench for Monitoring, Analysis and Visualization of Architectures based on Run-time Interactions,”</article-title>
          <source>in Proceedings of the 2015 European Conference on Software Architecture Workshops (ECSAW)</source>
          . ACM Press,
          <year>2015</year>
          , pp.
          <volume>57</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>57</lpage>
          :
          <fpage>7</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>S.</given-names>
            <surname>Herold</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>English</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Buckley</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Counsell</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M. O.</given-names>
            <surname>Cinneide</surname>
          </string-name>
          , “Detection of Violation Causes in Reflexion Models,”
          <source>in Proceedings of the 22nd IEEE International Conference on Software Analysis</source>
          , Evolution, and Reengineering - SANER '
          <fpage>15</fpage>
          . IEEE, mar
          <year>2015</year>
          , pp.
          <fpage>565</fpage>
          -
          <lpage>569</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>“</surname>
            <given-names>Dynatrace - Digital</given-names>
          </string-name>
          <string-name>
            <surname>Performance</surname>
          </string-name>
          &amp; Application Performance Monitoring.” [Online]. Available: https://www.dynatrace.com/
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>B.</given-names>
            <surname>Thoms</surname>
          </string-name>
          , “
          <article-title>The concept of dynamic analysis</article-title>
          ,
          <source>” ACM SIGSOFT Software Engineering Notes</source>
          , vol.
          <volume>24</volume>
          , no.
          <issue>6</issue>
          , pp.
          <fpage>216</fpage>
          -
          <lpage>234</lpage>
          , nov
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>H.</given-names>
            <surname>Yan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Garlan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Schmerl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Aldrich</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Kazman</surname>
          </string-name>
          , “
          <article-title>DiscoTect: A System for Discovering Architectures from Running Systems,”</article-title>
          <source>in Proceedings of the 26th International Conference on Software Engineering (ICSE)</source>
          . IEEE,
          <year>2004</year>
          , pp.
          <fpage>470</fpage>
          -
          <lpage>479</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>D.</given-names>
            <surname>Ganesan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Keuler</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Nishimura</surname>
          </string-name>
          , “
          <source>Architecture Compliance Checking at Runtime: An Industry Experience Report,” in Proceedings of the Eighth International Conference on Quality Software (QSIC)</source>
          . IEEE, aug
          <year>2008</year>
          , pp.
          <fpage>347</fpage>
          -
          <lpage>356</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>D.</given-names>
            <surname>Le</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Nicolaescu</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H.</given-names>
            <surname>Lichter</surname>
          </string-name>
          , “
          <article-title>Adapting Heterogeneous ADLs for Software Architecture Reconstruction Tools</article-title>
          ,”
          <source>in Proceedings of the 10th International Conference on Software Engineering Advances (ICSEA)</source>
          . Barcelona, Spain: IARIA XPS Press,
          <year>2015</year>
          , pp.
          <fpage>52</fpage>
          -
          <lpage>55</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>S.</given-names>
            <surname>Ducasse</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Pollet</surname>
          </string-name>
          , “Software Architecture Reconstruction:
          <string-name>
            <given-names>A</given-names>
            <surname>Process-Oriented</surname>
          </string-name>
          <string-name>
            <surname>Taxonomy</surname>
          </string-name>
          ,
          <source>” IEEE Transactions on Software Engineering</source>
          , vol.
          <volume>35</volume>
          , no.
          <issue>4</issue>
          , pp.
          <fpage>573</fpage>
          -
          <lpage>591</lpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>L.</given-names>
            <surname>Passos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Terra</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. T.</given-names>
            <surname>Valente</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Diniz</surname>
          </string-name>
          , and
          <string-name>
            <surname>N.</surname>
          </string-name>
          <article-title>das Chagas Mendonca, “Static Architecture-Conformance Checking: An Illustrative Overview</article-title>
          ,” IEEE Software, vol.
          <volume>27</volume>
          , no.
          <issue>5</issue>
          , pp.
          <fpage>82</fpage>
          -
          <lpage>89</lpage>
          , sep
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>J.</given-names>
            <surname>Knodel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Muthig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U.</given-names>
            <surname>Haury</surname>
          </string-name>
          , and G. Meier, “Architecture Compliance Checking - Experiences from Successful Technology Transfer to Industry,”
          <source>in Proceedings of the 12th European Conference on Software Maintenance and Reengineering (CSMR)</source>
          . IEEE, apr
          <year>2008</year>
          , pp.
          <fpage>43</fpage>
          -
          <lpage>52</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>J.</given-names>
            <surname>Rosik</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Le Gear</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Buckley</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Ali Babar</surname>
          </string-name>
          ,
          <source>“An Industrial Case Study of Architecture Conformance,” in Proceedings of the Second ACM-IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM)</source>
          . ACM Press,
          <year>2008</year>
          , pp.
          <fpage>80</fpage>
          -
          <lpage>89</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>L. D.</given-names>
            <surname>Silva</surname>
          </string-name>
          , “
          <source>Towards Controlling Software Architecture Erosion Through Runtime Conformance Monitoring,” Ph.D. dissertation</source>
          , University of St Andrews,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>