<!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>Migrating GWT to Angular 6 using MDE</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Benoît Verhaeghe</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Nicolas Anquetil</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>Stéphane Ducasse</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>Abderrahmane Seriai</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Laurent Deruelle</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mustapha Derras</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Berger-Levrault</institution>
          ,
          <country country="FR">France</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>RMod team, INRIA Lille Nord Europe</institution>
          ,
          <addr-line>Villeneuve d'Ascq</addr-line>
          ,
          <country country="FR">France</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Univ. Lille, CNRS, Centrale Lille, Inria, UMR 9189 - CRIStAL</institution>
          ,
          <addr-line>59650 Villeneuve d'Ascq</addr-line>
          ,
          <country country="FR">France</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>In the context of a collaboration with BergerLevrault, a major IT company, we are working on the migration of a GWT application to Angular. We focus on the GUI aspect of this migration which, even if both are web frameworks, is made difficult because they use different programming languages (Java for one, Typescript for the other) and different organization schemas (e.g. different XML files). Moreover, the new application must mimic closely the visual aspect of the old one so that the users of the application are not disturbed. We propose an approach in three steps that uses a meta-model to represent the GUI at a high abstraction level. We evaluated this approach on an application comprising 470 Java (GWT) classes representing 56 screens. We are able to model all the web pages of the application and 93% of the widgets they contain, and we successfully migrated (i.e., the result is visually equal to the original) 26 out of 39 pages (66%). We give examples of the migrated pages, both successful and not.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        During the evolution of an application, it is sometimes
necessary to migrate its implementation to a different
programming language and/or Graphical User Interface (GUI)
framework [
        <xref ref-type="bibr" rid="ref2 ref27">2, 27</xref>
        ]. Web GUI frameworks in particular
evolve at a fast pace. For example, in 2018 there were
two major versions of Angular, three major versions of
React.js, four versions of Vue.js, and three versions of
Ember.js. This forces companies to update their software
systems regularly to avoid being stuck in old technologies.
      </p>
      <p>Our work takes place in collaboration with
BergerLevrault, a major IT company selling Web applications
developed in GWT. However, GWT is no longer being
updated with only one major release since 2015. As a
consequence, Berger-Levrault decided to migrate its GUI to
Angular 6.</p>
      <p>The company developes 8 applications using GWT.
Each application has more than 1.5 MLOC and represents
more than 400 web pages. The applications are built from
more than 45 kind of widgets and 29 kind of attributes.
The company estimated the migration for one application
to 4 000 man-days. So, migrating automatically the visual
part of an application would already be a useful step for the
modernization of the company’s applications. Because of
fast evolution of GUI framework, the company also needs
a reusable solution for the migration to the next
programming language.</p>
      <p>
        There are many published papers on supporting GUI
migration (e.g. [
        <xref ref-type="bibr" rid="ref11 ref22 ref24">11, 22, 24</xref>
        ]). None of them discuss the case
of GUI migration of web-based applications.
      </p>
      <p>We present an approach to help developers migrate the
GUI of their web-based software systems. This approach
includes a GUI meta-model, a strategy to generate the
model, and how to create the target GUI. To validate this
approach, we developed a tool which migrates Java GWT
applications to Angular. Then, we validated our approach
on an industrial project that is used to present all the
widgets and their usage. It is composed of 470 Java classes and
56 web pages. Our approach imported correctly 93% of the
widgets and 100% of the pages. Since not all the existing
widgets are re-implemented in Angular, we tried to migrate
39 pages and were successful (same visual appearance) for
26 of them (66%).</p>
      <p>First, in Section 2, we review the literature on GUI
metamodeling. We describe the context of our project in
Section 3. In Section 4, we describe our migration approach.
We present our implementation in Section 5. Section 6
describes the experiment we made to validate our approach.
In Section 7, we present our results. Finally, in Section 8
and Section 9 we discuss the results obtained with our tool
and future work.
2</p>
    </sec>
    <sec id="sec-2">
      <title>State of the Art</title>
      <p>Section 2.1 presents the techniques used to migrate an
application. In Section 2.2, we describe the user interface
meta-models found in the literature.
2.1</p>
      <sec id="sec-2-1">
        <title>Existing migration strategies</title>
        <p>
          To define a migration strategy, we identified research work
related to application migration. Some of the proposed
approaches do not perform a full migration, but only a part of
it. Also, there are numerous publications dealing with
programming language migration. We do not, however,
consider them if they do not explicitly discuss the GUI
migration. This is the case, for example, with the work of Brant
et al. [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] that reports on a large Delphi to C# migration.
        </p>
        <p>We identified three techniques to create a representation
of the GUI: static, dynamic, or hybrid.</p>
        <p>Static. The static strategy consists in analyzing the
source code and extracting information from it. It does not
execute the code of the analyzed application.</p>
        <p>
          Cloutier et al. [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] analyzed directly the HTML, CSS,
and JavaScript files. The analysis builds a syntax tree of the
source code of the website and extracts the widgets from
the HTML files. The work consists mainly in the
identification of links between code source elements of the program
(JavaScript classes, HTML tags, etc.). The work presented
does not tackle the full migration of the GUI.
        </p>
        <p>
          Lelli et al. [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ], Silva et al. [
          <xref ref-type="bibr" rid="ref25">25</xref>
          ] and Staiger [
          <xref ref-type="bibr" rid="ref26">26</xref>
          ] used
tools that analyze source code of desktop applications. The
tools look for widget definition in the source code, then
they analyze the methods that invoked or are invoked by
the widgets and identify the relationships between widgets
and their visual properties.
        </p>
        <p>
          Sánchez Ramán et al. [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ] and Garcés et al. [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]
developed approaches to extract the GUI of Oracle Forms
applications. With this framework, developers define the user
interfaces in external files where the position of each
widget is specified. Their approaches consist in the creation
of the hierarchy of widgets from their position. However,
the case studies are simple with only few forms or labels.
The page layout is also simple because all the elements are
displayed below one another.
        </p>
        <p>The static strategy allows one to analyze an
application without having to execute it or even compile it. Apart
from the classical problem of showing all the potential facts
rather than only the real one, another limitation appears for
example, with a client/server application, when a part of
the graphical interface depends on the result of a request to
a server.</p>
        <p>Dynamic. The dynamic strategy consists in the
analysis of the graphical interfaces of an application while it is
running. It explores the application state by performing all
the actions on the user interface of the software system and
extracting the widgets and their information.</p>
        <p>
          Memon et al. [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ], Samir et al. [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ], Shah and Tilevich
[
          <xref ref-type="bibr" rid="ref24">24</xref>
          ] and Morgado et al. [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ] developed tools that
implement a dynamic strategy. However, the solutions proposed
are only available for desktop rather than Web applications.
        </p>
        <p>The dynamic analysis allows one to explore all the
windows of an application and to gather detailed information
about them. However, automatically running an application
to methodically capture all its screens might be a difficult
task depending on the technology used. Also, if a request is
done to build a GUI, the dynamic analysis does not detect
this information which may be essential for a full
representation of a GUI.</p>
        <p>Hybrid. The hybrid strategy tries to combine the
advantages of the static and dynamic analyses.</p>
        <p>
          Gotti and Mbarki [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] used a hybrid strategy to analyze
Java applications. First they create a model from a static
analysis of the source code. The static analysis finds the
widgets and attributes of a user interface and how they are
structured. Then, the dynamic analysis executes all the
possible actions linked to a widget and analyze if a
modification occurs on the interface.
        </p>
        <p>Despite the usage of both static and dynamic analysis,
the hybrid strategy does not solve the request problem
inherent to client/server applications. It also has the same
issues as the dynamic analysis of running automatically an
application and capturing its screens.</p>
        <p>
          Fleurey et al. [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] and Garcés et al. [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] worked on full
migration of software systems. They developed a tool that
semi-automatically performs the migration. To do so, they
used the horseshoe process (Kazman et al. [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]). The
migration is divided into the following four steps:
1. Generation of the model of the original application.
2. Transformation of this model into a pivot model. This
includes data structure, actions and algorithms, user
interface, and navigation.
3. Transformation of the pivot model into a target
language model.
4. Generation of the target source code.
        </p>
        <p>
          None of the authors considered the migration from web
GUI to web GUI. Also, none had the constraint of keeping
similar layout except Sánchez Ramán et al. [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ]; however,
they worked on Oracle Forms applications which are very
different from a web GUI. As a consequence, their work is
not directly applicable to our case study.
In the previous section, many abstract representations of
a GUI are used. We looked to the proposed
representations and compared them. We now present the two GUI
meta-models defined by the OMG. The Knowledge
Discovery Metamodel (KDM) allows one to represent any kind
of application. The Interaction Flow Modeling Language
(IFML) is specialized in applications with a GUI.
Section 2.2.2 presents other representations described in the
literature and compare them to the ones of the OMG.
2.2.1
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>OMG standards</title>
        <p>The OMG defines the KDM standard to support the
evolution of software. The standard defined a meta-model to
represent a piece of software at a high level of abstraction.
It includes a UI package which represents the components
and behavior of a GUI.</p>
        <p>+UIElement
0..*
0..1
+owner</p>
        <p>UIResource
UIDisplay</p>
        <p>UIField
Screen</p>
        <p>Report</p>
        <p>UIAction
+ kind : String
0..1</p>
        <p>+owner</p>
        <p>UIEvent
+ kind : String
0..*+UIElement</p>
        <p>ViewElement. A ViewElement can be refined as a
ViewContainer or a ViewComponent.</p>
        <p>A ViewContainer represents a container of other
ViewContainers or ViewComponents. For example, it can be a
window, an HTML page, a panel etc. The composition
between ViewContainer and ViewElement is used to define the
DOM.</p>
        <p>A ViewComponent corresponds to a widget which
displays its content, e.g. a form, a data grid, an image gallery
etc. It can be linked to multiple ViewComponentPart. A
ViewComponentPart represents an element of a
ViewComponent. For example, an input field inside a form, a text
which is displayed inside a data grid, or an image element
of a gallery.
2.2.2</p>
      </sec>
      <sec id="sec-2-3">
        <title>GUI meta-models</title>
        <p>Other GUI meta-models have been proposed in the
literature. We compare them to the OMG standards.</p>
        <p>All the meta-models use the Composite pattern to
represent the DOM of a GUI and define a kind of UIResource
entity to represent a graphical element of the interface.</p>
        <p>
          Gotti and Mbarki [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] and Sánchez Ramán et al. [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ]
proposed a meta-model inspired by the KDM models. The
meta-model has the main entities defined by KDM. Both
authors added the Attribute entity to the meta-model. They
also define different kinds of widgets such as Button,
Label, Panel, etc.
        </p>
        <p>
          Fleurey et al. [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] did not explicitly describe the GUI
meta-model, but we extracted information from their
navigation model. They have at least two elements in their
UI model that represent a Window and a GraphicElement.
The Window corresponds to the Display entity of the KDM
model. And because the GraphicElement and the Window
are not linked, we can suppose that the GraphicElement is
a UIRessource. The GraphicElement has an Event.
        </p>
        <p>
          Morgado et al. [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ] used a UI meta-model but did not
describe it. We only know that the UI is represented as a
tree which is similar to the DOM.
        </p>
        <p>
          The UI meta-model of Garcés et al. [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] differs a lot from
the previous ones. There are the attributes, the events, and
the screen but the notion of widget is present as a field
which displays data of a table. They also used an Event
entity to represent the interaction of the user with the user
interface. The Event entity corresponds to the Action and
the Event entities of the KDM model.
        </p>
        <p>
          Memon et al. [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ] represented a user interface with only
two entities. A UI window which is composed of a set of
widgets that can have attributes. Representing the DOM
was not in the scope of their work. It is not possible to
represent it with their meta-model.
        </p>
        <p>
          Samir et al. [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ] worked on the migration of Java-Swing
applications to Ajax Web applications. They created a
meta-model to represent the UI of the original application.
This meta-model is stored in a XUL (XML-based User
interface Language) file and represents the widgets with their
attributes and the layout. Those widgets belong to a
Window and can fire events when a UI input is performed. The
input and the event correspond to the Action and the Event
entities of the KDM model. The XUL format has been
discontinued.
        </p>
        <p>
          Shah and Tilevich [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ] used a tree architecture to
represent the UI. It allows them to model the DOM. The root of
the tree is a Frame. It corresponds to the UIDisplay entity.
The root contains components with their attributes.
        </p>
        <p>
          Joorabchi and Mesbah [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] represented a user interface
with a set of UI elements. Those elements correspond to the
definition of a UIField. For each UI element, the authors’
tool is able to handle the detection of multiple attributes
and actions.
        </p>
        <p>
          Memon [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] used a UI Model to represent the state of
an application. A state is defined as the GUI’s widgets and
their properties.
        </p>
        <p>
          Mesbah et al. [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] did not present directly their
metamodel for the user interfaces. However, they explain that
they use a DOM-tree representation to analyze different
web pages. They also used the notion of events that can
be fired. They used different instances of their UI
metamodel to represent the web pages of the application. Those
instances can be compared to multiple UIDisplay entities.
        </p>
        <p>All the authors used the notion of widget that represents
a visual entity of the user interface. Most of them have an
entity attribute that represents a characteristic of a widget.
Finally, the navigation links are represented with an action
entity.
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Context of the migration project</title>
      <p>The goal of our work is to migrate the user interfaces from a
given graphical interface framework to another. This is an
industrial project, migrating web applications from GWT
to Angular. The objective is to produce a running user
interface in the target framework. We now present the
conditions of the projects. In Section 3.1 we list some constraints
that we must fulfill. In Section 3.2 we describe the main
differences between GWT applications and Angular ones.</p>
      <p>In Section 3.3 we present a categorization of the front-end
source code.
3.1</p>
      <sec id="sec-3-1">
        <title>Constraints</title>
        <p>
          From the previous works of Moore et al. [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] and
Sánchez Ramán et al. [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ], we identify the following
constraints for our case study:
• From GWT to Angular. In the context of the
collaboration with Berger-Levrault, our migration approach
must work with Java GWT as source language and
TypeScript Angular as target one.
• Approach adaptability. Our approach should be as
adaptable as possible to different contexts. For
example, it can be used with different source and target
languages. This constraint includes the Source and
target independence and the Modularity constraints.
• Keep visual aspect. The migration must keep the
visual aspect of the target application as close as
possible to the original. This constraint includes the
Layout-preserving migration which it is in opposition
to the GUI Quality improvement.
• Code quality conservation. As a relaxed Code
Quality improvement constraint, our approach should
produce code that looks familiar to the developers of the
source application. As far as possible, the target code
should keep the same structure, identifiers and
comments. However, we will see in the next section that
there are strong differences in GWT and Angular
organization schemas.
• Automatic. An automatic solution makes the approach
more accessible. It would be easier to use an
automatic approach on large system [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ]. This constraint
corresponds to the Automation constraint of the
literature.
3.2
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>Comparison of GWT and Angular</title>
        <p>In this project, the source language and the target language
impose two different organization schemas. Their
differences are syntactic and semantic.</p>
        <p>GWT is a framework that allows developers to write
a web application in Java. The GUI code is compiled to
HTML, CSS and JavaScript code. Angular is a front-end
web application platform that allows developers to write a
web application with the TypeScript language. It is used to
create Single-Page Applications1.</p>
        <p>
          Table 1 summarizes the differences between GWT
applications and Angular ones, concerning: web page
definition, their style and the configuration files. Before
explaining these three differences, we note one major similarity:
1Single-Page Applications (SPAs) are Web apps that load a single
HTML page and dynamically update that page as the user interacts with
the app.
As proposed by Hayakawa et al. [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], we divided the
migration project in multiple sub-problems. To do so, we
define three categories of source code: the visual code; the
behavioral code; and the business code.
        </p>
        <p>• Visual Code The visual code describes the visual
aspect of the GUI. It contains the elements of the
interface. It defines the inherent characteristics of the
components, such as the ability to be clicked or their
color and size. It also describes the position of these
components compared to others.
• Behavioral code The behavioral code defines the
action/navigation flow that is executed when a user
interacts with the GUI. The behavioral code contains
control structures (i.e. loop and alternative).
• Business code The business code is specific to an
application. It includes the rule of the application,
the distant server address and the application-specific
data.</p>
        <p>Because of the size and diversity of source code,
migrating one of this code category is already an important
problem.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Migration Approach</title>
      <p>This section presents the migration approach we designed.
In Section 4.1, we describe the migration process we
designed. Section 4.2 presents our GUI meta-model.
4.1</p>
      <sec id="sec-4-1">
        <title>Migration process</title>
        <p>From the state of the art, the constraints and the
decomposition of the user interfaces, we designed an approach for
the migration.</p>
        <p>The process, represented in Figure 4, is divided into the
three following steps:
1. Extraction of the source code model. We build a
model representing the source code of the original
application. In our case study, the source program
is written in Java GWT. The extraction produces a
Source code model
Source code model extraction</p>
        <p>Source
application</p>
        <p>GUI model
extraction</p>
        <p>GUI model
2. Extraction of the GUI model. We analyze the source
code model to detect the Visual code elements
describing the GUI and we build a GUI model from these
elements. The GUI meta-model is described Section 4.2.
3. Export. We re-create the GUI in the target language.</p>
        <p>This step exports the user interface files and the
configuration files of the application.</p>
        <p>Note that currently we treat neither the Business code
nor the Behavioral code of the application. This will be the
focus of future work.
4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>GUI meta-model</title>
        <p>To represent the user interfaces of desktop or web-based
applications, we designed a GUI meta-model from the ones
presented in Section 2.2.2. In the rest of this section, we
present the entities of the meta-model.</p>
        <p>Our meta-model is an adaptation of KDM
metamodel(see Figure 1). As many others, we separate the
graphical resources corresponding to the DOM from the
actions and events. In our meta-model, graphical resources
are called Widget. They can be refined as Leafs or
Containers</p>
        <p>In our context, the user interface will always be
displayed on a screen. So we do not represent all the kind of
UIDisplay and define an entity Page. The Page represents
the main container of a graphical interface. It is either a
window of a desktop application or a web page. The Page
is a kind of Container.</p>
        <p>As proposed by many other authors, we added the entity
Attribute in our GUI meta-model. An Attribute represents
the information of a widget and can change its visual aspect
or behavior. Some common attributes are the height and
the width to precisely define the size of a widget. There
are also attributes that contain data. For example, a widget
representing a button may have a text attribute that contains
the text of the button. An attribute can change the behavior
of a widget, this is the case of the attribute enable. A
button with the enable attribute set to false represents a button
on which one cannot click. Finally, the widgets can have
attributes that impact the visual aspect of the application.
This type of attribute allows us to define a layout to be
respected by the widgets contained in the main one and
potentially the dimensions of the latter to respect a particular
layout.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5 Implementation</title>
      <p>To test our approach, we implemented a migration tool. It is
implemented in Pharo2 and the meta-model is represented
using the Moose platform3.
5.1</p>
      <sec id="sec-5-1">
        <title>Case Study</title>
        <p>Applications at Berger-Levrault (our industrial partner) are
based on the BLCore framework. This framework consists
in 763 classes in 169 packages. It is developed by the
company on top of GWT and defines the widgets that
developers should use, the default visual aspect of the applications,
and Java classes to connect the front-end of the application
to the back-end. It also encourages some coding
conventions.</p>
        <p>For the Berger-Levrault applications, we add a new
entity (Business Page) to the GUI meta-model presented
Section 4.2 to fit the company’s specific organization. It is a
kind of Container. One convention is that each Page has
one or more Business Pages represented as tabs in the
Page. The widgets (buttons, text fields, tables, . . . ) are
included in the Business Pages, never directly in the Page.</p>
      </sec>
      <sec id="sec-5-2">
        <title>5.2 Import</title>
        <p>In part because of the complexity of setting up a tool to
run automatically and capture all screens of such large web
applications, we rely on static analysis to create our model.
The results so far seem to indicate that it will be sufficient.</p>
        <p>
          As presented Section 4.1, the creation of the GUI model
is divided in two steps: the source code model extraction
and the GUI model extraction. For the source code
metamodel, we use the Java meta-model of Moose [
          <xref ref-type="bibr" rid="ref21 ref5">5, 21</xref>
          ] which
comes with a Java extractor4. Figure 5 presents a snippet of
the source code of a Berger-Levrault application. It shows
the method buildPageUi(Object object) that builds the GUI of
the business page SPMetier1 (a “simple business page”).
        </p>
        <p>For the second step of the extraction, our tool creates the
GUI model from the source code model and an analysis of
the XML configuration file. The entities we want to extract
are, first, the Pages. We parse the XML configuration file
in which is defined the information about the pages (see
2Pharo is a pure object-oriented programming language inspired by
Smalltalk. http://pharo.org/</p>
        <p>3Moose is a platform for software and data analysis. http://www.
moosetechnology.org/
4verveineJ : https://github.com/moosetechnology/verveineJ
Section 3.2). It provides for each Page (called phase in the
XML file, Figure 3) its name and the name of the Java class
that defines it. Then, the tool looks for Widgets.</p>
        <p>First, the tool determines the available widgets. To do
so, it collects all the Java subclasses of the GWT class
Widget. For the Buisiness pages, the tools looks for the classes
that implement the IPageMetier interface. Then, the tool
looks where the Widget constructors are called and creates
the links between the Widgets and their parent Widget. In
Figure 5, there are two calls to Widget constructors: line
4, the constructor of BLLinkLabel is called, and line 11, the
constructor of Label. The variable vpMain corresponds to
the main panel of the Business page. Lines 11 and 12
correspond to adding a widget inside a panel widget thanks to
the method add().</p>
        <p>
          Finally, to detect attributes and actions which belong to
a widget, the tool detects in which Java variable the
widget has been assigned. Then, it searches the methods
invoked on this variable. If a widget invokes the method
“addClickHandler”, it creates an event. If it invokes a method
“setX”, it creates an attribute. These heuristics were found
in the literature [
          <xref ref-type="bibr" rid="ref22 ref25">22, 25</xref>
          ]. In Figure 5, the BLLinkLabel,
whose variable is lblPg, is linked to one event and one
attribute. Lines 5 to 9 correspond to the creation of one event
with the executable code. Line 10 corresponds to adding
the attribute enabled with the value false.
5.3
Once the GUI model is generated, it is possible to export
the application. To generate the code of the target
application, the tool includes an exporter. The exporter creates
the folders of the target application and the configuration
files. Then, it visits the pages. For each Page, the exporter
creates an Angular sub-project in the form of a directory
containing several configuration files and a default blank
web page. Then, for each business page of the current
visited Page, the exporter generates one HTML file and one
TypeScript file. For the HTML file, the exporter builds
the DOM thanks to the Composite pattern used by the GUI
meta-model (see Section 4.2). Each widget provides its
attributes and actions to the exporter.
6
        </p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Validation</title>
      <p>In this section, we describe the industrial application on
which we used our tool to validate our approach.
Section 6.1 presents the industrial application. Section 6.2
presents the metrics we used to evaluate our approach.</p>
      <sec id="sec-6-1">
        <title>6.1 Industrial application</title>
        <p>We experimented our strategy on Berger-Levrault’s
kitchensink application. This software system, dedicated to
developers, aims to gather inside a single simple
application all the components available for building a user
interface. This application is smaller than a production one but
still uses the BLCore framework. The company framework
guarantees us the kitchensink application works exactly the
same way as the industrial applications. It contains 470
Java classes and represents 56 web pages. Although it is
the sample and demo for developers, the kitchensink
application contains code misuses.</p>
        <p>Note that the kitchensink application, as the other
industrial applications of the company, does not have test.
Therefore, there is no possibility to use tests to validate the
migration.
6.2</p>
      </sec>
      <sec id="sec-6-2">
        <title>Validation metrics</title>
        <p>The validation is done in three steps: First, we check the
constraints defined in Section 3.1; Second, we validate that
all GUI entities of interest are extracted and correctly
extracted; Third, we validate that we can re-export these
entities in Angular and that the result is correct.</p>
        <p>For the first validation, we manually identify and count
the entities in the kitchensink application and compare the
results of the tool to this count. Our analysis focuses on
the migration of three entities: Pages, Business Pages and
Widgets
• Pages. From the XML configuration file of the
application we manually count 56 pages. This
configuration file also provides the name of each page.
• Business Pages. As explained before, the business
pages correspond to a concept specific to
BergerLevrault. They are defined in the BLCore
framework as a Java class which implements the interface
IPageMetier. Thanks to this heuristic, we manually
count 76 Business Page instances in the original
application.
• Widgets. In the literature survey, we did not find an
automatic way to evaluate the detection of widgets.
Checking all widgets in the application would be long
and error-prone as there are thousands of them. As
a fallback solution, we take a sample of the pages of
the kitchensink application and count the widgets in
the DOM of these pages. We consider a sample of 6
Pages which represents a bit more than 10% of the
Pages of the application. These Pages are of different
sizes and contain different kinds of widgets. In total,
we found 238 Widgets in these 6 Pages. To get a more
exact idea of the representativeness of our sample, we
also count the number of Widget creation (i.e. new
AWidgetClass()) in the code. There are 2,081
such creation. This may not represent the exact
number of widgets in the entire application, but it is a good
estimate. We note that the number of Widgets in our
sample (slightly more than 10% of the pages) is also
slightly more than 10% of our estimate of the total
number of widgets.</p>
        <p>For the evaluation, we also check that the Widgets are
correctly placed in the DOM of the interface (i.e., they
belong to the right Container in the GUI model).</p>
        <p>In our results we consider only the recall of the tool
because the precision is always 100% (there are no false
positive). This is a sign that the BLCore framework provides
clear (if not complete) heuristics to identify the entities.</p>
        <p>For the second validation, we check that the entities are
exported correctly. In the Angular application, each Page
corresponds to a sub-project and is represented by a folder.
The name of the folder must correspond to the name of the
Page. The Business pages are represented by a sub-folder
inside the Page project. The names must also match at this
level.</p>
        <p>We also check visually that the exported Page “looks
like” the original one. This is a subjective evaluation, and
we are looking for options to automate it in the future.
7</p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>Results</title>
      <p>This section presents the results of the migration validation
on Berger-Levrault’s kitchensink application. Section 7.2
summarizes the extraction results. In Section 7.1, we
confront the exported result with the constraints defined in
Section 3.1.
7.1</p>
      <sec id="sec-7-1">
        <title>Satisfaction of constraints</title>
        <p>We set the following constraints in Section 3.1: From GWT
to Angular, Approach adaptability, Code quality
conservation, Keep visual aspect, and Automatic.</p>
        <p>Our tool can use Java code as input and generate
Angular code. The exported code is compilable and executable.
The target application can be displayed. We can thus
confirm that our tool fulfill the GWT to Angular constraint.</p>
        <p>Our tool is applicable on other source target
technologies. Our heuristics have been designed to be easy to adapt,
a user of our tool can thus add a new kind of widget for the
import or the export phases. We shortly describe a small
experiment in that sense in Section 8.5. Those possibilities
satisfied the adaptability constraint.</p>
        <p>The Code quality conservation and Keep visual aspect
constraints are discussed in Section 7.3, in the third
validation results.</p>
        <p>Finally, the results described here were obtained
automatically from application of our tool to the subject
application. This validates the last constraint.
7.2</p>
      </sec>
      <sec id="sec-7-2">
        <title>Extraction results</title>
        <p>Table 2 summarizes the extraction results.</p>
        <p>The tool extracted 56 Pages from the original GUI. This
corresponds to the number of pages defined in the
configuration file of the kitchensink application.</p>
        <p>The tool extracted 76 Business pages. This value
corresponds exactly to the number of business pages in the
original application. Moreover, the tool correctly assigned
each Business page to its proper Page.</p>
        <p>We got 100% of the Widgets on the evaluated sample
were correctly detected. However, 27 out of the 238
Widgets of our sample (11%) were not correctly assigned to
their parent container. All these problems come from one
single Page (containing 75 Widgets in total).
We manually checked the name of all the 56 exported
pages. They all conserve their original name.
(a) GWT original
(b) Angular migration
Figure 6 presents the visual differences between the
original (GWT) version, left hand, and the migrated
(Angular 6) one, right-hand. We can see that there are only
minimal differences. In the exported version, the color of
the header is a bit clearer, and the lines are a little more
distant.</p>
        <p>
          Figure 7 presents the visual differences for the Page
Input box. Again on the left-hand side there is the
original Page and on the right-hand side the same Page
after the migration. Because the two images are large, we
Section 8.1 and Section 8.2 presents two parts of the user
interface we did not work on. Section 8.3 discusses the
impact of the choice of the kitchensink application as case
study. Section 8.4 highlights the difficulties in large scale
validation of our tool. Finally, Section 8.5 discusses the
impact of the BLCore framework.
As shown in Section 7.3, the export may give incorrect
results because of layout issues (Figure 7). It is due to
the representation of the layout in our GUI meta-model.
Currently, layouts are represented in our GUI meta-model
as an attribute on a Container widget defining if the
children of this widget are placed ones beside the other or one
below the other (i.e. vertical or horizontal flow layouts).
However, many other layouts exist [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]. For example, the
BLCore framework offers BLGrid, a Widget inheriting
from the GWT Grid class and implementing a grid
layout. Currently, complex layouts are not considered in our
GUI meta-model.
        </p>
        <p>
          A solution is proposed by Sánchez Ramán et al. [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ].
They designed a layout meta-model. The idea consists in
linking widgets with a layout and combining the layouts
to create a precise representation. The authors defined a
subset of possible layout to connect to widgets.
        </p>
        <p>Moreover, with such layouts, the position of the children
Widgets might be computed at run time. For example, in
a grid layout, the children may be positioned according to
the values of some row and col variable. Guessing these
values with a static analysis is not practical, and this is a
case where an hybrid approach might be necessary.</p>
        <p>Currently, only the visual part of the GUI is migrated. To
take into account the whole application, the migrations of
the Behavioral and Business code (see Section 3.3) are
needed. The Behavioral represent the user interactions (i.e.
click, drag-and-drop, hover, ...) and the control structures
(i.e. loop and alternative). In the case of a client/server
application, requesting a server is part of Behavioral code,
whereas the query in itself and the data belongs to Business
code.
8.3</p>
      </sec>
      <sec id="sec-7-3">
        <title>Demo application</title>
        <p>Although the results are encouraging, we only evaluated
our tool on the kitchensink application. The kitchensink
application is a good training ground for our tool as it contains
all kinds of widgets that developers have at their disposal
and the way to use them. However, it might diverge from
production applications as it should contain less
irregularities or coding tricks than the later.
8.4</p>
      </sec>
      <sec id="sec-7-4">
        <title>Validation tools</title>
        <p>The automatic validation of the screens migration is
currently an unsolved problem. It is possible to manually
check the result of the migration for a few pages but it
would be better to do it automatically for hundreds of pages
(more than 400 on Berger-Levrault applications).</p>
        <p>
          We found, in the literature, only few approaches
considering automatic visual validation. In two papers [
          <xref ref-type="bibr" rid="ref11 ref23">11, 23</xref>
          ],
the authors simply count the number of widgets in the
source application and target applications. But we saw in
Figure 7 that this not guarantee visual similarity. An other
article [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ] propose to compare screenshots of the
original and the exported applications pixel by pixel. However,
we saw in Figure 6 that barely distinguishable screens may
have differences at the level of pixels.
        </p>
      </sec>
      <sec id="sec-7-5">
        <title>8.5 Impact of BLCore</title>
        <p>
          As explained in Section 5.1, the Berger-Levrault
applications are based on the BLCore framework. By specializing
GWT, BLCore provides specific widgets and a dedicated
API. This may have an impact on our approach or not. To
evaluate this possible impact, and also to validate the
generality of our approach, we performed two small experiments
considering (i) Spec (a desktop UI framework in Pharo [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ])
as the source framework and, (ii) Seaside (a web
framework in Pharo [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] – also described at seaside.st) as the
target framework. These experiments thus consider different
programming languages (Pharo instead of Java (GWT) and
TypeScript), different GUI frameworks, and desktop and
web applications. We experimented migrating the GUI of
small demo application from Spec to Angular, and
migrating the Berger-Levrault kitchensink application to Seaside.
        </p>
        <p>Some conclusions are:
• It was harder to import Spec code than GWT because
of a larger variability in defining the GUI. We
conclude that the BLCore framework eased our work on
the import by standardizing how to build the pages.
• For Seaside, it was easy to migrate simple widgets
(e.g. Label, Button, Panel), but the BLCore
framework also defines complex widgets with no direct
equivalent in Seaside. A library similar to BLCore
should be defined in Seaside to ease the migration.
• the power of our GUI meta-model and the two steps
extraction (first, source code model extraction, then
GUI model extraction, see Figure 4) are validated by
the fact that we were able to migrate a Pharo desktop
application with little extra work.
9</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>Conclusion and Future works</title>
      <p>We created a tool with promising results on the
representation of GUI to migrate GWT applications toward Angular.
In the following, we conclude the presentation of this work
and propose some future research directions we want to
explore.
9.1</p>
      <sec id="sec-8-1">
        <title>Conclusion</title>
        <p>In this paper, we exposed a preliminary work on the
problem of visual preservation and respect of the target
architecture during the GUI migration of an application. We
proposed an approach based on a GUI meta-model and a
migration process in three steps. We implemented this
process in a tool to perform the migration fof GWT
applications to Angular 6. Then, we validated our tool with an
experiment on a kitchensink application. We were able to
extract correctly all pages of the application and 89% of
the widgets. The migration results are visualizing
equivalent as long as complex widgets (e.g. GridLayout) are not
used. Dealing with these layouts is our next challenge.</p>
        <p>Our solution also allows us to respect the naming
conventions used in the source application as well as the
structure of the code as far as the differences in the GUI
frameworks allow it.
9.2</p>
      </sec>
      <sec id="sec-8-2">
        <title>Future work</title>
        <p>To improve the migration of an application user interface,
we will enhance our meta-model and our tool to support the
management of the layout and the behavioral and business
code.</p>
        <p>We did not find an approach or metrics to
automatically evaluate the validity of the migrated screens. So, it
is important to find a new way to evaluate that the migrated
screens conserve the visual aspect of the original ones.</p>
        <p>Having a good GUI meta-model also opens the door for
a generic GUI builder that could export the GUI in several
different GUI frameworks.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Marco</given-names>
            <surname>Brambilla</surname>
          </string-name>
          and
          <string-name>
            <given-names>Piero</given-names>
            <surname>Fraternali</surname>
          </string-name>
          .
          <article-title>Interaction flow modeling language: Model-driven UI engineering of web and mobile apps with IFML</article-title>
          . Morgan Kaufmann,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>John</given-names>
            <surname>Brant</surname>
          </string-name>
          , Don Roberts, Bill Plendl, and
          <string-name>
            <given-names>Jeff</given-names>
            <surname>Prince</surname>
          </string-name>
          .
          <article-title>Extreme maintenance: Transforming Delphi into C#</article-title>
          .
          <source>In ICSM'10</source>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Jonathan</given-names>
            <surname>Cloutier</surname>
          </string-name>
          , Segla Kpodjedo, and
          <article-title>Ghizlane El Boussaidi</article-title>
          .
          <article-title>WAVI: A reverse engineering tool for web applications</article-title>
          .
          <source>In 2016 IEEE 24th International Conference on Program Comprehension (ICPC)</source>
          , pages
          <fpage>1</fpage>
          -
          <lpage>3</lpage>
          . IEEE,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Stéphane</given-names>
            <surname>Ducasse</surname>
          </string-name>
          , Lukas Renggli,
          <string-name>
            <given-names>C.</given-names>
            <surname>David Shaffer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Rick</given-names>
            <surname>Zaccone</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Michael</given-names>
            <surname>Davies</surname>
          </string-name>
          .
          <article-title>Dynamic Web Development with Seaside</article-title>
          . Square Bracket Associates,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Stéphane</given-names>
            <surname>Ducasse</surname>
          </string-name>
          , Nicolas Anquetil, Usman Bhatti, Andre Cavalcante Hora, Jannik Laval, and
          <string-name>
            <given-names>Tudor</given-names>
            <surname>Girba</surname>
          </string-name>
          .
          <source>MSE and FAMIX 3</source>
          .
          <article-title>0: an Interexchange Format and Source Code Model Family</article-title>
          .
          <source>Technical report</source>
          , RMod - INRIA
          <string-name>
            <surname>Lille-Nord Europe</surname>
          </string-name>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Johan</given-names>
            <surname>Fabry</surname>
          </string-name>
          and
          <string-name>
            <given-names>Stéphane</given-names>
            <surname>Ducasse</surname>
          </string-name>
          .
          <article-title>The Spec UI Framework</article-title>
          . Square Bracket Associates,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Franck</given-names>
            <surname>Fleurey</surname>
          </string-name>
          , Erwan Breton, Benoit Baudry, Alain Nicolas, and
          <string-name>
            <surname>Jean-Marc Jezéquel</surname>
          </string-name>
          .
          <article-title>Model-Driven Engineering for Software Migration in a Large Industrial Context</article-title>
          . In Gregor Engels, Bill Opdyke, Douglas C. Schmidt, and Frank Weil, editors,
          <source>Model Driven Engineering Languages and Systems</source>
          , volume
          <volume>4735</volume>
          , pages
          <fpage>482</fpage>
          -
          <lpage>497</lpage>
          , Berlin, Heidelberg,
          <year>2007</year>
          . Springer Berlin Heidelberg.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Kelly</given-names>
            <surname>Garcés</surname>
          </string-name>
          , Rubby Casallas, Camilo Álvarez, Edgar Sandoval, Alejandro Salamanca, Fredy Viera, Fabián Melo, and Juan Manuel Soto.
          <article-title>White-box modernization of legacy applications: The oracle forms case study</article-title>
          .
          <source>Computer Standards &amp; Interfaces</source>
          , pages
          <fpage>110</fpage>
          -
          <lpage>122</lpage>
          ,
          <year>October 2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>Zineb</given-names>
            <surname>Gotti</surname>
          </string-name>
          and
          <string-name>
            <given-names>Samir</given-names>
            <surname>Mbarki</surname>
          </string-name>
          .
          <article-title>Java swing modernization approach - complete abstract representation based on static and dynamic analysis:</article-title>
          .
          <source>In Proceedings of the 11th International Joint Conference on Software Technologies</source>
          , pages
          <fpage>210</fpage>
          -
          <lpage>219</lpage>
          . SCITEPRESS - Science and Technology Publications,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Tomokazu</surname>
            <given-names>Hayakawa</given-names>
          </string-name>
          , Shinya Hasegawa, Shota Yoshika, and
          <string-name>
            <given-names>Teruo</given-names>
            <surname>Hikita</surname>
          </string-name>
          .
          <article-title>Maintaining web applications by translating among different ria technologies</article-title>
          .
          <source>GSTF Journal on Computing, page 7</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>Mona</given-names>
            <surname>Erfani</surname>
          </string-name>
          Joorabchi and
          <string-name>
            <given-names>Ali</given-names>
            <surname>Mesbah</surname>
          </string-name>
          .
          <article-title>Reverse engineering iOS mobile applications</article-title>
          .
          <source>In 2012 19th Working Conference on Reverse Engineering</source>
          , pages
          <fpage>177</fpage>
          -
          <lpage>186</lpage>
          . IEEE,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>R.</given-names>
            <surname>Kazman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.G.</given-names>
            <surname>Woods</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.J.</given-names>
            <surname>Carriére</surname>
          </string-name>
          .
          <article-title>Requirements for integrating software architecture and reengineering models: Corum ii</article-title>
          .
          <source>In Proceedings of WCRE '98</source>
          , pages
          <fpage>154</fpage>
          -
          <lpage>163</lpage>
          . IEEE Computer Society,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Valéria</surname>
            <given-names>Lelli</given-names>
          </string-name>
          , Arnaud Blouin, Benoit Baudry, Fabien Coulon, and
          <string-name>
            <given-names>Olivier</given-names>
            <surname>Beaudoux</surname>
          </string-name>
          .
          <article-title>Automatic detection of GUI design smells: The case of blob listener</article-title>
          .
          <source>EICS '16 Proceedings of the 8th ACM SIGCHI Symposium on Engineering Interactive Computing Systems, page 12</source>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>Simon</given-names>
            <surname>Lok</surname>
          </string-name>
          and
          <string-name>
            <given-names>Steven</given-names>
            <surname>Feiner</surname>
          </string-name>
          .
          <article-title>A survey of automated layout techniques for information presentations</article-title>
          .
          <source>Proceedings of SmartGraphics</source>
          ,
          <year>2001</year>
          :
          <fpage>61</fpage>
          -
          <lpage>68</lpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Atif</surname>
            <given-names>Memon</given-names>
          </string-name>
          , Ishan Banerjee, and
          <string-name>
            <given-names>Adithya</given-names>
            <surname>Nagarajan</surname>
          </string-name>
          .
          <article-title>GUI ripping: reverse engineering of graphical user interfaces for testing</article-title>
          .
          <source>In Reverse Engineering</source>
          ,
          <year>2003</year>
          .
          <article-title>WCRE 2003</article-title>
          .
          <article-title>Proceedings</article-title>
          . 10th Working Conference on, pages
          <fpage>260</fpage>
          -
          <lpage>269</lpage>
          . IEEE,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Atif</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Memon</surname>
          </string-name>
          .
          <article-title>An event-flow model of GUI-based applications for testing</article-title>
          .
          <source>Software Testing, Verification and Reliability</source>
          ,
          <volume>17</volume>
          (
          <issue>3</issue>
          ):
          <fpage>137</fpage>
          -
          <lpage>157</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Ali</surname>
            <given-names>Mesbah</given-names>
          </string-name>
          , Arie van Deursen,
          <string-name>
            <given-names>and Stefan</given-names>
            <surname>Lenselink</surname>
          </string-name>
          .
          <article-title>Crawling ajax-based web applications through dynamic analysis of user interface state changes</article-title>
          .
          <source>ACM Transactions on the Web</source>
          ,
          <volume>6</volume>
          (
          <issue>1</issue>
          ):
          <fpage>1</fpage>
          -
          <lpage>30</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Moore</surname>
          </string-name>
          , Rugaber, and
          <string-name>
            <surname>Seaver</surname>
          </string-name>
          .
          <article-title>Knowledge-based user interface migration</article-title>
          .
          <source>In Proceedings 1994 International Conference on Software Maintenance</source>
          , pages
          <fpage>72</fpage>
          -
          <lpage>79</lpage>
          . IEEE Comput. Soc. Press,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Kevin</surname>
            <given-names>Moran</given-names>
          </string-name>
          , Cody Watson, John Hoskins, George Purnell, and
          <string-name>
            <given-names>Denys</given-names>
            <surname>Poshyvanyk</surname>
          </string-name>
          .
          <article-title>Detecting and Summarizing GUI Changes in Evolving Mobile Apps</article-title>
          . arXiv:
          <year>1807</year>
          .09440 [cs],
          <year>July 2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>I</given-names>
            <surname>Coimbra</surname>
          </string-name>
          <string-name>
            <surname>Morgado</surname>
          </string-name>
          , Ana Paiva, and
          <string-name>
            <given-names>J Pascoal</given-names>
            <surname>Faria</surname>
          </string-name>
          .
          <article-title>Reverse engineering of graphical user interfaces</article-title>
          .
          <source>In ICSEA 2011 : The Sixth International Conference on Software Engineering Advances</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>Oscar</surname>
            <given-names>Nierstrasz</given-names>
          </string-name>
          , Stéphane Ducasse, and
          <string-name>
            <given-names>Tudor</given-names>
            <surname>Gîrba</surname>
          </string-name>
          .
          <article-title>The story of Moose: an agile reengineering environment</article-title>
          .
          <source>In Michel Wermelinger and Harald Gall</source>
          , editors,
          <source>Proceedings of the European Software Engineering Conference</source>
          , ESEC/FSE'05, pages
          <fpage>1</fpage>
          -
          <lpage>10</lpage>
          , New York NY,
          <year>2005</year>
          . ACM Press.
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>Hani</surname>
            <given-names>Samir</given-names>
          </string-name>
          , Amr Kamel, and Eleni Stroulia.
          <article-title>Swing2script: Migration of Java-Swing applications to Ajax Web applications</article-title>
          .
          <source>In 14th Working Conference on Reverse Engineering (WCRE</source>
          <year>2007</year>
          ),
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>Óscar</given-names>
            <surname>Sánchez</surname>
          </string-name>
          <string-name>
            <surname>Ramán</surname>
          </string-name>
          , Jesús Sánchez Cuadrado, and Jesús García Molina.
          <article-title>Model-driven reverse engineering of legacy graphical user interfaces</article-title>
          .
          <source>Automated Software Engineering</source>
          ,
          <volume>21</volume>
          (
          <issue>2</issue>
          ):
          <fpage>147</fpage>
          -
          <lpage>186</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>Eeshan</given-names>
            <surname>Shah</surname>
          </string-name>
          and
          <string-name>
            <given-names>Eli</given-names>
            <surname>Tilevich</surname>
          </string-name>
          .
          <article-title>Reverse-engineering user interfaces to facilitate porting to and across mobile devices and platforms</article-title>
          .
          <source>In Proceedings of the compilation of the co-located workshops on DSM'11</source>
          , TMC'11, AGERE!
          <year>2011</year>
          , AOOPES'11, NEAT'
          <volume>11</volume>
          , \&amp; VMIL'11, pages
          <fpage>255</fpage>
          -
          <lpage>260</lpage>
          . ACM,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>João</given-names>
            <surname>Carlos</surname>
          </string-name>
          <string-name>
            <surname>Silva</surname>
          </string-name>
          , Carlos C. Silva,
          <string-name>
            <given-names>Rui D.</given-names>
            <surname>Goncalo</surname>
          </string-name>
          , João Saraiva, and José Creissac Campos.
          <article-title>The GUISurfer tool: towards a language independent approach to reverse engineering GUI code</article-title>
          .
          <source>In Proceedings of the 2Nd ACM SIGCHI Symposium on Engineering Interactive Computing Systems</source>
          , pages
          <fpage>181</fpage>
          -
          <lpage>186</lpage>
          . ACM Press,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>Stefan</given-names>
            <surname>Staiger</surname>
          </string-name>
          .
          <article-title>Reverse engineering of graphical user interfaces using static analyses</article-title>
          .
          <source>In 14th Working Conference on Reverse Engineering (WCRE</source>
          <year>2007</year>
          ), pages
          <fpage>189</fpage>
          -
          <lpage>198</lpage>
          . IEEE,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <surname>Christian</surname>
            <given-names>Zirkelbach</given-names>
          </string-name>
          , Alexander Krause, and
          <string-name>
            <given-names>Wilhelm</given-names>
            <surname>Hasselbring</surname>
          </string-name>
          .
          <article-title>On the modernization of explorviz towards a microservice architecture</article-title>
          .
          <source>In Combined Proceedings of the Workshops of the German Software Engineering Conference 2018. CEUR Workshop Proceedings</source>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>