0% found this document useful (0 votes)
11 views

An Exploratory Study of MVC-based Architectural Patterns in Android Apps

An Exploratory Study of MVC-based Architectural Patterns in Android Apps
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views

An Exploratory Study of MVC-based Architectural Patterns in Android Apps

An Exploratory Study of MVC-based Architectural Patterns in Android Apps
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

An Exploratory Study of MVC-based Architectural Patterns in

Android Apps
Aymen Daoudi Ghizlane ElBoussaidi
Université du Québec à Montréal École de technologie supérieure
Montréal, Québec, Canada Montréal, Québec, Canada
[email protected] [email protected]

Naouel Moha Sègla Kpodjedo


Université du Québec à Montréal École de technologie supérieure
Montréal, Québec, Canada Montréal, Québec, Canada
[email protected] [email protected]

ABSTRACT KEYWORDS
Mobile app development now represents a significant part of the Software architecture, Architectural patterns, Design patterns, Mo-
software industry, with Android being the largest ecosystem. An- bile development, MVC, MVP, MVVM
droid development comes with its own design practices and tem-
ACM Reference Format:
plates (layouts, activities, etc.). Developers also use different estab-
Aymen Daoudi, Ghizlane ElBoussaidi, Naouel Moha, and Sègla Kpodjedo.
lished architectural patterns for designing interactive software such 2019. An Exploratory Study of MVC-based Architectural Patterns in Android
as MVC, MVP and MVVM. They implement these patterns based Apps. In The 34th ACM/SIGAPP Symposium on Applied Computing (SAC ’19),
on their understanding and experience. Thus, the choice and the April 8–12, 2019, Limassol, Cyprus. ACM, New York, NY, USA, Article 4,
implementation of such patterns varies from a developer to another. 10 pages. https://doi.org/10.1145/3297280.3297447
To the best of our knowledge, there is no work that provides a
comprehensive view of the use of these patterns in mobile apps.
Moreover, there is no clear understanding of which pattern to use
1 INTRODUCTION
and what is the trend for designing mobile apps using such patterns. Mobile apps are without doubt a growing market. The vast majority
In this paper, we propose an automatic approach to identify which of these apps operate under Android, which has established itself
MVC-based architectural pattern (MVC, MVP and MVVM) is used as the predominant mobile platform with a market share of 88%1 .
predominantly in a given app. For this purpose, we defined each of Mobile devices usually come with more constraints, in terms of
these patterns through a number of heuristics according to the pat- memory, battery, computational power, competition for resources,
tern’s potential implementations within the Android framework. etc. To cope with these, the Android framework proposes a number
We conducted an empirical study on a large set of mobile apps of mechanisms and architectural components that put a greater
downloaded from the Google Play Store. We found, not surpris- emphasis on well-structured design patterns, as shown by the em-
ingly, a dominance of the popular MVC pattern, a rare use of MVP pirical study performed by Bagheri et al. [4]. Android developers
while MVVM is almost unused and a significant number of apps have to compose with these mechanisms and decide on how to use
do not follow any pattern. The empirical study also enabled us to them to meet their app’s requirements.
analyse the use of these patterns by domain, size and last-update The impact of these choices on the quality of an app cannot be
date of the apps. We observed that MVC has been the most used overstated. In particular, with user interactivity being so central in
pattern over the past years and it continues to gain popularity, and almost any app, well established patterns at the presentation layer
that small-size apps are mostly the ones that do not use any pattern. such as the Model View Controller (MVC) and its variants such as
Model View Presenter (MVP) and Model View ViewModel (MVVM)
CCS CONCEPTS become especially relevant. Although these patterns are widely used
and discussed within the Android developers community, there is
• Software and its engineering → Software architectures; De-
no consensus around their use or on which one is best suited for
sign patterns; Object oriented languages; Frameworks; • Human-
Android apps [9, 27, 29, 35]. In fact, there are no available data
centered computing → Smartphones;
or studies that may be used to decide which MVC-based pattern
is appropriate for which kind of apps. Moreover, each of these
Permission to make digital or hard copies of all or part of this work for personal or
classroom use is granted without fee provided that copies are not made or distributed patterns may be implemented in different ways within the Android
for profit or commercial advantage and that copies bear this notice and the full citation framework.
on the first page. Copyrights for components of this work owned by others than ACM In this context, there is a need for studies that analyse which and
must be honored. Abstracting with credit is permitted. To copy otherwise, or republish,
to post on servers or to redistribute to lists, requires prior specific permission and/or a how these MVC-based patterns are implemented within Android
fee. Request permissions from [email protected]. apps. These data are essential to provide an overview of design
SAC ’19, April 8–12, 2019, Limassol, Cyprus
© 2019 Association for Computing Machinery.
1 https://www.statista.com/statistics/266136/global-market-share-held-by-
ACM ISBN 978-1-4503-5933-7/19/04. . . $15.00
https://doi.org/10.1145/3297280.3297447 smartphone-operating-systems/

1711
trends in mobile apps and to specifically develop a better under- This results in an archive file called an APK (Android Application
standing of the relationship between the characteristics of Android Package), which contains all the necessary information to install
apps and MVC-based patterns. Recent works on mobile apps in- and run the application [16].
clude [21, 23–25, 27, 30, 32] and [4]. However, these works focus The Application classes as well as Activities, Fragments and
either on the possible implementations of such patterns [23, 25], Dialogs are the main components that contribute to the behavior
manual identification and comparison [27], architecture recovery and the life cycle of mobile apps with user interfaces. As this work
[4] or the automatic identification of anti-patterns and code smells targets the study of patterns of the presentation layer, we will
[21, 24, 30, 32]. To the best of our knowledge, there is no work that mainly focus on Android apps that use these components.
supports the automatic detection of presentation layer architectural
patterns such as MVC, MVP and MVVM in Android apps. Thus, 2.2 MVC, MVP and MVVM
this work aims to answer the following research questions: The development of maintainable and high-quality interactive soft-
• RQ1: What is the frequency of usage of the MVC-based ware requires a clear separation between the underlying data, its
patterns in Android apps? presentation and manipulation. The MVC-based architectural de-
• RQ2: Which kinds of Android apps use the MVC-based pat- sign patterns are thus widely used in such type of software [6].
terns? There are however different perspectives leading to different MVC-
To answer these questions, we propose an approach, called Ri- based patterns.
maz, to identify the dominant MVC-based pattern in an Android
Query & Update
app. The approach is based on heuristics that consider the possible
implementations of MVC variants in Android. Using Rimaz, we Events Notify
View Controller Model
conducted a study on 5,480 apps from Google Play Store to get a
Update Query & Update
sense of the Android landscape relatively to the use of MVC vari-
ants. Therefore, our contributions are essentially two-fold: 1) an Notify

heuristics-based approach to identify Android MVC variants and (a) Classical MVC

2) an empirical study to answer questions pertaining to the use of Events Notify

such patterns in Android apps. View Presenter Model

The rest of the paper is organized as follows. Section 2 presents Model updates Query & Update

the related work as well as some key concepts about Android and (b) MVP
the MVC-based patterns. Section 3 presents Rimaz, our heuristics- Notify
based approach. The evaluation of our approach is provided in
Events Notify
Sections 4 and 5. Section 6 concludes the paper and discusses future
View (DataBinding) ViewModel Model
work. Query & Update
Update

Notify
2 BACKGROUND AND RELATED WORK
(c) MVVM
This section briefly presents the Android framework and its key
components. It then describes the three architectural patterns (MVC,
MVP and MVVM) and their implementations in Android. Figure 1: Diagrams presenting MVC, MVP and MVVM

2.1 Android Framework 2.2.1 Model View Controller. Proposed in 1979, MVC aims at
Android app development is organised around key building blocks, separating the business logic from the presentation layer [31] [8].
which understanding is required for developers and designers. It defines three main layers. First, the Model: basically a set of
These app components —such as Activity, Service, BroadcastRe- entities that represent knowledge, information and a set of rules
ceiver, and ContentProvider— serve as entry points for an Android that handle updates and access to these information [31]. To ensure
app. Activities are key components that define screens for user inter- loose coupling with the other layers, the Model should not know
action, while the other three are faceless components that deal with about the other components but can send them notifications about
background tasks (Services), notifications (Broadcast receivers) and the state of its objects ([6] [7]). Second, the View, which is in charge
access to shared data (Content providers). In addition to Activities, of providing a visual representation of the Model. The View shows
there are a few lower level components, attached to an Activity, data that it retrieves from the Model by sending queries, and can
such as Fragments and Dialogs that help for user interaction. At an change its state through messages [31] [8]. Third, the Controller,
even lower level are UI objects such as Button and EditText. which is the main entry point of the application, manipulates the
All these components help in the realisation of an Android app. View and translates the interaction of the user to the model [31].
The concept of Application is explicitly defined in Android with a Furthermore, the Controller communicates directly with the Model
top-level Application class that is declared in a manifest file (An- and must be able to change its state. [6]. Figure 1 (a) shows the
droidManifest.xml), with information pertaining to its visible ac- three components of the original MVC architecture and describes
tivities, services, content providers and broadcast receivers. The the connections between them.
application source code is bundled with data and resources, com- Since its introduction, MVC has evolved along with the appari-
piled using respective language compilers and the Android SDK. tion of new development frameworks. Many adaptations were

1712
brought to the pattern to fit in the targeted framework, resulting in MVP keeps the declaration of the events in the View, and delegates
new variants. the work that they perform to the Presenter, which should dele-
gate the manipulation of platform components and functionalities
2.2.2 Model View Presenter. MVP (Figure 1 (b)) is a variant of
to the View. To achieve this, the View has a field referencing the
the MVC architecture, introduced in the early 90s. It brings more
Presenter and vice versa. In the Android world, and contrarily to
decoupling between the domain layer and the user interface.
MVC, Activities, Fragments and Dialogs are considered as parts of
Compared to MVC, the Presenter in MVP is more isolated - than
the View. Figures 2 and 3 simply illustrate the relation between an
the Controller in MVC - from the underlying system and should
Activity and its corresponding Presenter.
know nothing about the system [5]. The Model has essentially
the same responsibilities whereas the View handles actions that
Class Activity extends AbstractView, IEventListener Class ConcretePresenter extends AbstractPresenter
manipulate components
{ of the system or the user interface and {
AbstractPresenter presenter; AbstractView view;
only delegates to thepublic
Presenter actions that manipulate the model
onCreated() public ConcretePresenter (AbstractView concreteView)
entities. { { ..
..
. .
If the Presenter needs to make visual
presenter changes
= new to the user inter-
ConcretePresenter(this); view = concreteView;
.. the underlying operating system, it ..
face or make interactions with . .
UIElement.SetEventListener(this); }
should call a method of the View .
that implements this need [12].
.. Public presenterMethod()
2.2.3 Model View }ViewModel. MVVM is an evolution of the {
..
.
MVP pattern [22]. AsPublicshownonEventListenerAction()
in Figure 1 (c), it aims to realise more View.viewMethod();
{ ..
decoupling between the userpresenter.presenterMethod()
interface and the middle layer repre- .
} }
sented by the ViewModel. The communication between these two
Public viewMethod()
is done exclusively through two-way data-binding notifications. }
{
The View, generally written in declarative
//manages UI languages, usually
}
XML variants,} represents the user interface. It is as passive as possi- Figure 2: Relation between a Presenter class and an Activity
ble; declaring only widgets and user interface objects, and delegat-
ing all the logic to its backing ViewModel, from which it retrieves
any kind of updates [28]. The ViewModel is simply a Model of the Class Activity extends AbstractView, IEventListener Class Concr
View. It defines and implements the user input events, transforms { {
AbstractPresenter presenter; Abs
the Model data and makes it ready to be displayed by the View. public onCreated() pub
{ {
..
Importantly, the ViewModel should be completely ignorant about .
presenter = new ConcretePresenter(this);
its corresponding View. No reference to a View should be declared ..
.
nor used within the ViewModel. The ViewModel should be ready UIElement.SetEventListener(this); }
..
at anytime to be used with any other View entity without breaking . Pub
} {
code [28]. The role of Model entities remains unchanged compared
Public onEventListenerAction()
to the two other patterns. {
presenter.presenterMethod()
} }
2.3 Implementation of the MVC-based patterns Public viewMethod() }
{
in Android apps //manages UI
}
MVC is the first pattern adopted in the Android world. Yet its }

implementation in Android apps is subject to debate. At the center


of this is the interpretation of the Controller [35] [9]. It is stated Figure 3: Relation between Activity and a Presenter class
to be the entry point and the layer handling the user interactions
with the view and translating them to the data layer. MVVM, came late to the Android world. However, since the
Some developers consider the Activity as the main component introduction of new Architecture components by Google in 2017,
that plays the role of the Controller, for being: i) the main entry it has taken a bigger profile and is now a recommended design
points of the application and ii) the most natural place to declare for Android apps [18]. Android now simplifies the use of MVVM,
input events.2 Other developers believe that Activities, Fragments through types such as the ViewModel [20] and the LiveData [19]
and Dialogs should be considered as part of the View, or at least types. It remains that Google started supporting fully advanced data-
helpers of the View components, while Controller components binding only in 2016 [15], so developers previously had to use third
should be separate classes. Both choices are backed by strong argu- party libraries to implement MVVM. The ViewModel is represented
ments, well used in real world and should be taken into account by by classes that play the role of a data-binding context for each
a detection approach. View component. Binding View components to ViewModel classes,
MVP (Model View Presenter), on the other hand, is straightfor- generates intermediate classes that define all binding operations
ward to implement on Android. Following the standard definition, and prepare them for runtime [15]. Events are bound from layout
2 In files to the corresponding ViewModel classes as methods, they will
fact, even if the developer declares listener-based events elsewhere (which is
possible), some sort of events, called event-handlers, can only be declared inside these be later redefined in the data-binding generated classes using the
components. traditional Listener pattern [15].

1713
2.4 Related work They found many improper usages of architectural constructs and
Recently, some works targeted the manual analysis of MVC-based styles in the reverse-engineered architecture of popular apps.
patterns in mobile apps while only one treated their architecture In our work, we specifically focused on the presentation layer,
recovery. In fact, there is no work relating specifically to the auto- and in particular on MVC-based architectural patterns.
matic detection of patterns in mobile apps, except for anti-patterns
and code smells. We report in the following the related works. 3 IDENTIFYING MVC-BASED PATTERNS IN
ANDROID APPS
2.4.1 Design and MVC-based patterns in mobile apps. Few
recent works deal with design patterns including MVC-based ones 3.1 Overview of the Proposed Approach
in mobile apps. A recent Master’s thesis [27] presents a manual anal- Our tooled approach, called Rimaz, aims to identify the MVC-based
ysis and some empirical data to verify whether MVP and MVVM architectural patterns in Android apps. Rimaz relies on heuristics
architectures are better than MVC in Android apps from a quality that describe the different potential implementations of MVC-based
perspective. Another recent book [23] presents how to implement patterns in Android apps. Using these heuristics, Rimaz identifies
MVVM pattern on the Xamarin framework. Similarly, La et al. [25] the dominant MVC-based pattern. We specifically focus on the
presented how to design a balanced MVC architecture for service- MVC, MVP and MVVM patterns. Written in Java, Rimaz relies on
based mobile apps. Other similar works studied design patterns and the Soot framework to analyze Dalvik bytecode contained within
proposed their own adapted patterns for mobile apps [34], [33]. apk files [36]. Soot converts the Dalvik bytecode into intermediate
Although all these works provide interesting contributions to representations that are easier to understand and analyse.
design and MVC-based patterns in mobile apps, none of them pro- Figure 4 depicts the whole process used by Rimaz to identify
posed automatic approaches for their identification. The closest these MVC-based patterns in an Android app. Steps 1 to 3 are pre-
works relate to the automatic detection of anti-patterns and code processing steps that aim at retrieving a number of information
smells in mobile apps. required by our detection algorithm. In the step 4 we apply the
heuristics-based detection algorithm on the app. We describe each
2.4.2 Automatic detection of design patterns in object ori- of these steps in details in the following subsections.
ented software. Antoniol et al. [2] were the first to present an
approach based on an UML representation of the source code and 3.2 Step 1. Filtering Application Code
the architecture of the program, that is used to extract metrics to
This step aims at differentiating the code of the app from the code
detect the presence of the patterns. Fontana and Zanoni [11] pro-
belonging to used libraries. This is a common challenge encoun-
posed a plugin called MARPLE for the Eclipse IDE. This tool allows
tered when analyzing Android apps since APKs contain both codes.
the detection of object oriented (OO) design patterns by extracting
Running analysis tools on the entire packaged code source will
metrics from the source code and using a representation based on
certainly produce incorrect results, and can affect the execution
the abstract syntax tree of the application.
time of the analysis [26]. To fix this problem, some approaches use
Such studies are useful for the detection of traditional design pat-
the package name declared within the manifest file as root folder
terns in OO applications in general, but cannot be used to identify
of the app; they filter out all source code that does not belong to
presentation layer architectural patterns in Android apps. These
the package having that name. This approach has two limitations:
latter require metrics and heuristics that are tightly coupled with
the platform’s architecture and components. (1) Sometimes, developers change the package name and use a
completely different one in the manifest file.
2.4.3 Automatic detection of anti-patterns and code smells (2) Some Android projects may have many root folders; using
in mobile apps. There are few relevant works on the automatic only the one declared within the manifest file would exclude
identification of anti-patterns and code smells in mobile apps. Hecht parts of the app’s code.
et al. [21] proposed an automatic tool, called Paprika, which allows
Until now, the best workaround solution for overcoming this
the detection of both common object-oriented and Android-specific
problem is to use a blacklist containing the names of most used
code smells by analyzing the binaries of Android apps. Similarly,
libraries’ packages. Li et al. [26] have conducted a study on a large
Palomba et al. [30] proposed a tool, called aDoctor, that is able
set of Android apps and built a blacklist with more than 1,353
to identify 15 Android-specific code smells from the catalogue of
package names of the most used libraries. Since this list has not
Reimann et al. [32] using metric-based detection rules. Kessentini
been updated since 2015, we updated it by adding another list of
et al. [24] proposed an alternative approach for detecting Android
1,176 package names of the widely used libraries that we manually
smells using a multi-objective genetic programming algorithm.
collected from community websites such as [37] and [3].
2.4.4 Architecture Recovery in Mobile Apps. Bagheri et al.
[4] conducted the first and only in-depth analysis of Android’s 3.3 Step 2. Identifying Significant Classes
app architecture. They identified several drivers that motivated the As explained in the background, the MVC-based patterns aim at
adoption of architectural principles in mobile software, specifically decoupling the user interface from the entities representing the
Android. They reverse-engineered the architecture of hundreds of model. To determine which of these patterns is used in an app,
apps and mined five different types of architectural styles including we need to identify the classes playing particular roles in the ap-
message-based explicit-invocation, message-based implicit- invoca- plication. In particular, we need to distinguish between: classes
tion, publish-subscribe, shared state, and distributed object styles. through which the user interacts with the app, classes representing

1714
Step 1: Filtering Application Step 2: Identifying Significant Model Classes (MCs)
Apk Code Classes Interaction Classes
App source (ICs)
code Applying identification DataBinding Classes
Libraries Excluding libraries code (DBCs)
heuristics for classes
blacklist Helper Classes (HCs)

Step 3: Identifying Input Events Step 4: Identifying Dominant


manipulating the Model Pattern
Model manipulations Dominant pattern
Identifying input events by input events
Applying detection heuristics
for MVC, MVP & MVVM
Identifying model manipulations

Figure 4: Overview of the Rimaz approach to detect dominant MVC-based patterns in Android apps

the entities of the model, classes responsible for data-binding, and used by ICs and do not play any significant role in the particular
other remaining classes. used architectural pattern (i.e. MVC, MVP or MVVM).
3.3.1 Identifying Interaction Classes. In general, in the context
of an Android app, classes that support user interactions are Ac-
3.4 Step 3. Identifying Input Events
tivities, Fragments, Dialogs and Application classes. We call these Manipulating the Model
classes Interaction Classes (ICs). The heuristic to identify these Besides recognising significant classes in an Android app, we need
classes in a given app is as follows: to analyse the interactions between these classes to be able to iden-
• An Activity, Fragment, Dialog or Application class is any tify which of MVC, MVP or MVVM is applied. To do so, we need to
class that has at least one super-type whose qualified name identify the events that are triggered when the user interacts with
ends with .app.Activity, .app.Fragment, .app.Dialog or the app and how these events are propagated to MCs. Input events
.app.Application respectively. are a key parameter in identifying which architectural pattern is
These super-types are usually all part of the android.app.* pack- used in Android apps. Specifically, the declaration/triggering loca-
age. However, when developers target multiple API versions, they tion of input events as well as the way they access and manipulate
use super-types provided by support libraries [17]. For instance, a MCs definitely determine the applied pattern.
Fragment class originally extends android.app.Fragment, but it may 3.4.1 Identifying input events. Google, in the Android docu-
also extend the support class android.support.v4.app.Fragment. mentation, calls events Input Events (IEs). We distinguish between:
Generally, a class provided by support libraries has a fully qualified
a. Listener-based input events: which are triggered by UIEle-
name that starts with android.support.vX where X is the number
ments3 and implemented using the listener pattern [14]. To refer
of the supported version.
to these events, we will use the abbreviation LIEs (i.e. Listener-
3.3.2 Identifying Model Classes. Model classes (MCs) are classes based Input Event) in the following.
describing the state of the system, which may be persistent or not. b. Event handlers: these are methods belonging to classes ex-
In an Android app, these classes can be implemented as simple tending/implementing certain types (classes/interfaces) of the
Bean classes or built using ORMs, serialisation or SQL data base Android framework. The overridden methods are invoked by
libraries. To cover the most common implementations of MCs, we Android when specific events are triggered [14]. They can be:
first listed from [3, 37] a set of up-to 50 of the most used libraries of • Life cycle event handlers : such as Activiy’s onCreate, onStart,
ORMs, SQLDBs and serialisation libraries. Then we applied simple onResume, onPause, onStop, onDestroy and onRestart methods;
heuristics that check if these libraries were used to identify MCs. • Non life cycle event handlers : for example, the onKeyDown
method is called when the user presses one of the phone
3.3.3 Identifying DataBinding Classes. Data-binding eases syn-
volume buttons.
chronisation and enables more decoupling between the UI and the
business logic. MVVM relies on data-binding to decouple the View To identify LIEs, we rely on the characteristics of the listener
and the ViewModel. When using data-binding capabilities in An- pattern, which is a specific implementation of the Observer pattern
droid, binding classes are automatically generated at compile time [13], which includes: 1) A contract, represented by an interface
and executed during runtime to perform the desired bindings; we or an abstract class, corresponding to the listener and containing
call these classes DataBinding classes (DBCs). We use the following one or several methods that are invoked when the event is fired;
heuristic to identify these classes in an Android app: and 2) The UIElement through which the event is triggered, and
which must have a field representing the listener (or a collection
• A DBC is any class extending android.databinding.ViewDat-
of listeners and methods) to set the listener (or to add one to the
aBinding.
collection of listeners).
3.3.4 Identifying Helper Classes. We call Helper classes (HCs)
3 The Android convention is to call UI objects (such as Button, EditText etc.) Views
all classes that are neither ICs nor MCs nor DBCs. Here, the concept
since they are all sub-types of android.view.View. This term can be confused
of HCs does not relate to the classical object-oriented programming with the term View used in architectural patterns. To avoid any confusion, we use the
meaning of a helper class. In our context, HCs are usually classes term UIElement for all UI objects [14].

1715
To identify event handlers, we collected, from the Android docu- 3.5 Step 4. Identifying Dominant Pattern
mentation, a list of all the potential super-types of classes containing Developers tend to be flexible about their implementations of pat-
event handlers. This list includes, in addition to ICs and UIElements, terns, sometimes violating or combining them. Our algorithm is
types such as Application.ActivityLifecycleCallbacks, interested in revealing the dominant pattern, which is probably the
KeyEvent.Callback, Window.Callback, LayoutInflater.Factory, and conscious choice of the app designers.
View.OnCreateContextMenuListener. We consider as an Event han- In the Rimaz approach, when there are no Model classes, there
dler any method that overrides/implements a method defined by is no point in looking for MVC variants. When we do have Model
one of the types of this list. classes, our algorithm tries to determine the dominant kind of model
manipulations. The activity diagram given in Figure 5 summarises
3.4.2 Identifying model manipulations by input events. We the different heuristics for the detection of the MVC-based patterns.
focus on input events that manipulate MCs because it is the way A first key question, from which we derived our heuristics ([Hx]),
these events are propagated to MCs that differentiates between is the following: Where are most model manipulations initiated by
MVC, MVP and MVVM. An input event can manipulate a given MC LIEs defined ?
by reading information from its static fields or from instance fields
of the MC’s instances. This is generally done through calling getter 3.5.1 Case 1: Most model manipulations initiated by LIEs
methods. The input event can also write to the MC by performing originated from ICs. The detection can be narrowed to MVC or
an initialisation or calling a setter method to assign values to its MVP. A second key question then becomes: Do most model manip-
instance or static fields. Model manipulations are identified in our ulations occur in ICs – either directly or through sibling methods?
approach using a number of heuristics. In fact, after confirming that most of manipulations are initiated
Depending on the applied architectural pattern, input events may by LIEs that originiated from ICs, we consider at this step all ma-
directly or indirectly manipulate MCs. Therefore we distinguish nipulations of MCs, including those initiated by event handlers.
and identify the following situations: [H1] If yes, it means the developer considered ICs as being
• A direct manipulation: In this case the manipulation of Controllers: we have MVC as the dominant pattern. In this
the MC is performed in the body of the execution methods case, the app implements MVC. The View is represented by layout
of an event. Here we call execution method any method that files and any custom UIElement, while the Controller consists of
is invoked when the event is fired in case of a LIE, or any Activities, Fragments and Dialogs.
overridden method in case of an event handler. For example, [H2] Otherwise, this means the ICs delegate the manipu-
for the click event, the OnClickListener listener is used, and lation of model entities to HCs: [H21 ] if these HCs have a
its execution method is the method onClick(). presenter form, we have an MVP. In this case, the View consists
• Via sibling methods manipulation: this represents an of the Activities, Fragments, Dialogs, their corresponding layout
indirect manipulation of the MC through the call of a sibling files, as well as any custom UIElement; [H22 ] otherwise it is MVC.
method (i.e. a method belonging to the same class). The HCs along with the Activities, Fragments and Dialogs are con-
• Via another class manipulation: this represents an indi- sidered as Controllers, while the View is represented by the layout
rect manipulation of the MC by calling methods of other files and any custom UIElement.
classes (e.g., HCs or DBCs).
3.5.2 Case 2: Most model manipulations initiated by LIEs
3.4.3 Classifying model manipulations according to the def- did not originate from ICs. [H3] If the LIEs are mostly de-
inition location of LIEs . Depending on the class in which input fined in DBCs, this means that events were defined using
events are defined – we call it definition location – and if these Android data-binding techniques and this most probably in-
events directly or indirectly manipulate MCs, we can determine dicates the use of the MVVM pattern. To confirm that it is an
which of the MVC, MVP and MVVM patterns was applied in a given MVVM, we check that: 1) the DBC has a private field whose type is
app. For instance, when most of the manipulations of MCs are initi- of one of the HCs, 2) this HC is also used to define a field in an IC,
ated by LIEs defined in DBCs, we suspect that MVVM was applied and 3) this IC also defines a field having the same type as the type
in the app under analysis. Therefore we need to classify each model of the DBC. In this case, the ViewModel corresponds to the used
manipulation according to the definition location (i.e. ICs, HCs or HC and the View consists of the Activities, Fragments, Dialogs and
DBCs) of the related input event. Note that we specifically target any layout file.
LIEs. In fact event handlers are defined in interaction classes (ICs) [H4] If the LIEs are mostly defined in HCs, this is an MVC
as explained in Section 3.4.1; their definition location is enforced where the HCs are considered as Controller classes. In this case, the
by the Android framework and is independent of the applied MVC- Controller consists of both HCs and ICs while the View consists of
based pattern. Therefore we classify model manipulations initiated layout files and any custom UIElement.
by LIEs into two sets :
(1) Model manipulations initiated by LIEs that were declared in 4 EXPERIMENTAL SETUP
Activity, Fragment or Dialog classes (We exclude Application The goal of our experiments was to elicit the trends in terms of using
classes from ICs in this part). the MVC, MVP and MVVM patterns within the mobile community.
(2) Model manipulations initiated by LIEs that were declared in Specifically, our experiments aim at addressing the following re-
HCs or DBCs. search questions:

1716
[H1 : Direct or via sibling methods]
MVC

How do IEs [H2_1 : Yes]


[ICs] manipulate MCs ? MVP

Do HCs have
Presenter Form ?
[H2 : Via HCs]
Model Manipulations by Input Events (IEs) Where are most model
MVC
manipulations initiated by [H2_2 : No]
LIEs defined?
[H3 : DBCs]
MVVM

[H4 : HCs]
MVC

Figure 5: Activity diagram summarising the MVC-based patterns detection algorithm

• RQ1: What is the frequency of usage of the MVC-based the only instance of MVVM was a “showcase” app for illustrating
patterns in Android apps? The goal of this question is two- the application of MVVM within the Android framework. Ten apps
fold : 1) find out which of the MVC, MVP and MVVM patterns were wrongly classified. Two apps, that were actually mostly MVP,
is mostly used; and 2) know how the usage frequency evolved were mis-classified as MVC because of third party libraries that
over time. were not filtered out. Seven apps were detected as implementing
• RQ2: Which kinds of Android apps use the MVC-based pat- MVP although they were implementing MVC. This was the result of
terns? Here, we want to find out if the usage of these patterns a cross-reference between the View (embodied by Activity classes)
correlate with some properties of mobile apps. and the Controller (corresponding to some helper classes), which is
To answer these questions, we conducted an empirical study by not the typical way of implementing MVC. One app was classified
applying our approach on thousands of apps from Google Play Store. as an app not using any pattern although it used MVC, this was
Prior to this empirical experiment, we conducted a preliminary due to the fact that the app didn’t use any of the common libraries
study on a set of open-source mobile apps to evaluate the correct- for implementing the MCs.
ness of our heuristics-based detection algorithm. In the remain-
ing of this section, we describe briefly our preliminary evaluation 4.2 Setup of the empirical study
(Subsection 4.1) and we present the design of the empirical study
Figure 6 gives an overview of the experimentation process. For
(Subsection 4.2). The results of our empirical study are discussed in
our dataset, we used the AndroZoo repository [1] that provides a
Section 5.
comprehensive weekly updated list of Android apps from many
different markets. We randomly selected from this list 5,480 apps
4.1 Preliminary evaluation that are present on the Google Play Store and for which we could
To the best of our knowledge, there is no existing study (or bench- get the metadata. To answer our research questions, we use the
mark) on the detection of the MVC-based patterns in Android apps. following metadata:
Manual inspection of an app source code appeared thus as the best
way to validate the results of our tooled approach Rimaz. Therefore, • Size: We use two factors to measure the size of apps including
before conducting a large scale study on apps taken from the Google the number of classes and the number of lines of code. We
Play Store, with unlikely access to the apps’ source code, we sought only show the distribution of apps by number of lines of
to get a measure of our success rate in classifying apps according code for space constraints (Figure 7).
to their MVC pattern choice. To do so, we randomly selected 100 • Category: The apps are classified by category in the Google
applications from F-Droid [10], a well-established repository for Play Store. Theses categories give some hints on the domain
free open-source apps, and analysed them with our tool Rimaz. of an app. Figure 8 shows the number of apps by category.
After which, we asked three experts in the related field to manu- • Last update year: The apps in our dataset were randomly
ally inspect the source code of each app and annotate it with the selected. Thus they were probably created and updated at
architectural pattern that he/she could detect including MVC, MVP, different times. To accomplish our analysis we do not rely
MVVM and NONE (For apps with no patern used). After that, we on the creation date of the apps; but on their last update date.
considered the majority vote between the experts annotations and This is due to the fact that an app could have been created
compared it to the result returned by our tool Rimaz. without using any of the MVC-based patterns and evolved
Rimaz detected instances of the three studied patterns in the into an MVC-based app. Figure 9 shows the number of apps
100 apps; MVC was the most popular (73%), MVP was rarely used by their last update year.
(16%), MVVM was only detected once, and some applications did
not use any of the patterns (10%). The manual analysis of these
apps revealed an accuracy of 90%, with a precision of 85.87%, a 5 RESULTS AND DISCUSSION
recall of 90.71% and a value of F-Measure of 88% 4 . Interestingly,
This section reports the results of our empirical study, responds to
4 Precision
each of our research questions and discusses the threats to validity
and recall were calculated by computing the average of the precision and
the recall of all classes (MVC, MVP, MVVM and NONE) of our study.

1717
Google AndroZoo
Play Store Servers most used pattern by Android developers. This can be explained by
three factors: 1) MVC was historically the first pattern adopted in
Download Download
the Android community; 2) a very large number of mobile apps are
metadata applications Detected
Patterns very simple with very few screens, and MVC offers enough sepa-
ration of concerns to support these apps; and 3) developers tend
Patterns Detection to declare most of the input events in Activities which at the same
Aanalysis
time contain a number of UIElements and this naturally creates
more coupling than what is suggested by MVP or MVVM.
Metadata

Figure 6: Experimentation process of the Rimaz approach


NONE
35%

MVC
Number of Apps

57%
MVP
Number of Apps

MVVM 8%
0%

Figure 10: Distribution of the MVC-based patterns in dataset

Despite the fact that MVP and MVVM provide more decoupling
Number of lines of code
and separation of concerns, very few apps use MVP (8% in our
dataset) and there is no occurrence of MVVM. This can be explained
Figure 7: Apps distribution by number of LOC by: 1) the small size of the mobile apps, the relationship between the
size and the applied MVC-based pattern is analysed in the following
Weather
Video Players & Editors subsection (5.2); and 2) the complexity that these two patterns may
Travel & Local
Tools
Social
involve for non-experienced developers. The absence of MVVM
Shopping
Productivity however, is no surprise, as the mechanisms to ease the support for
Photography
Personalization
News & Magazines
data-binding were added very recently to the Android framework
categories

Music & Audio


Medical (i.e. the Android Data Binding Library).
Maps & Navigation
Lifestyle
Health & Fitness
Finance
Entertainment
Communication RQ1- Observation 1: MVC is the most used pattern by
Business
Books & Reference
Games
Android developers.
Family
0 200 400 600 800 1000 1200
Number of apps
We also analysed how the usage frequency of the MVC, MVP
and MVVM patterns evolved over time. For this purpose, we use the
Figure 8: Apps distribution by category NONE
last update date of36%
the apps. As explained above, knowing that an
MVC using any of the MVC-based
app could have been created without
1600
1411 57%
patterns and evolved into an MVC-based app, we cannot speculate
1400

1200 1100 on the relationship between


MVP the creation dates and the application
MVVM 7%
1000 932 of the patterns.0%Figure 11 shows the evolution of the percentage of
Number of Apps

792
727
800 apps applying MVC, MVP or none of them over the years.
600

400 314 70%

200 126 60%


62
2 14
Percentage of apps

0 50%
2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
40%
Last update year
30%

20%

Figure 9: Apps distribution by last update year 10%

0%
2009 2010 2011 2012 2013 2014 2015 2016 2017 2018

Years
5.1 RQ1: What is the frequency of usage of the MVC MVP NONE
MVC-based patterns in Android apps?
We analysed the 5,480 apps of our dataset using Rimaz. The results Figure 11: Evolution of the adoption of MVC-based patterns
of the detection algorithm are shown in Figure 10. 57% of the anal-
ysed apps used MVC while 8% of them used MVP and 35% did not These results show that Android developers started applying
use any of the MVC, MVP or MVVM pattern. Therefore MVC is the MVP around the year of 2010. Given all the recent debates around

1718
MVC and MVP, we expected Android developers to be more in- Regarding MVP, it was used in the Games category more than
terested in MVP and to use it more in the recent years. However, any other category. This suggests that these apps require a clear
the results show that the overall increase of the usage of MVC separation of the layers View, Control and Model.
during the last four years is more significant than the one of MVP.
In fact MVP continues to be used but in a small portion of Android RQ2- Observation 1: No apparent relationship between
apps (less than 10%). This would suggest that the debate among the choice of MVC or MVP and the category of the app.
developers’ communities on the use of alternative patterns to MVC,
such as MVP and MVVM, did not translate in increased use of those
alternatives. Additionally, the percentage of apps that do not use Our previous analysis suggests that there may be a relationship
any of the patterns has dropped significantly (from around 40% to between the usage of patterns and the size of apps. Figures 13 shows
about 25%) for the apps that were updated in the last four years, the distribution of the MVC-based patterns by the number of lines
and this decline was in favor of an increase in the use of MVC. of code of the analysed apps. We can see clearly that more than 50%
of apps having their number of lines of code less than 2000 (their
number of classes under 50), do not use any pattern. In general,
RQ1- Observation 2: MVC has been the most used pat- for bigger sizes, the number of apps with no pattern decreases
tern over the past years and it continues to gain popularity. significantly.

5.2 RQ2: Which kinds of Android apps use the


MVC-based patterns?
To get insights on factors that may affect the choice of a given
pattern, we analysed the relationships between the usage of MVC-
based patterns and the kinds of apps that were part of our dataset.
Figure 12 shows the distribution by category of the occurrences of
MVC and MVP that were found in our dataset. Interestingly enough,
more than 50% of the apps use a pattern for each category. At first
glance, these results do not indicate any correlation between the
usage or not of a pattern and the category of an app. Figure 13: Patterns by number of lines of code

Weather
Video Players & Editors
Travel & Local
Tools
Social
Shopping
RQ2- Observation 2 : Small-sized applications are the
Productivity
Photography least implementing any of the studied patterns.
Personalization
News & Magazines
Categories

Music & Audio


Medical
Maps & Navigation
Lifestyle
Health & Fitness
Finance
Entertainment
Communication
5.3 Threats to Validity
Business
Books & Reference
Games
In this section, we discuss the threats to validity of our study based
Family
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
on the guidelines provided by Wohlin et al. [38].
Percentage of patterns presence Internal validity threats concern the causal relationship between
MVC MVP NONE
the treatment and the outcome. In this study, these threats can
be caused by an incorrect detection of the patterns with Rimaz,
Figure 12: Distribution of MVC-based patterns by category
which may be due to the analysis of the code that belongs to a used
library. This is why we used a blacklist of the most used libraries.
The categories Finance, Shopping and News & Magazines have the We also updated this list by an additional list based on community
highest percentages of apps that use a pattern and these apps mostly recommendations. This list will be continuously updated to enhance
use MVC. These categories generally include professional apps such the precision of Rimaz. Moreover, we first evaluated manually
as France24 (5 million downloads), Daily Expenses 3 (with 1 million our approach on a representative number of apps and applied it
downloads) and OLX - Jual Beli Online (10 million downloads). on a large number of apps. Finally, we tried to be careful when
These three apps, for instance, were all implemented using MVC. interpreting the results of our analysis. We consider the general
The categories Entertainment and Tools have the highest number of trend known inside the Android developers community.
apps that do not apply neither MVC nor MVP. We looked into the External validity threats concern the possibility to generalize
apps of these categories to see why they are not using any pattern. our findings. We cannot claim that our findings are generalizable
We found out that around 50% of the apps in these two categories to the entire Android app ecosystem. We nonetheless randomly
have a number of classes that are less than 35 and number of lines selected a large number of apps which can reasonably be expected
of code less than 1600. Some examples of apps that do not use any as representative.
pattern are DroidCam Wireless Webcam (size: 30 classes, 1260 lines Reliability validity threats concern the possibility of replicating
of code) and Real Horn Sounds (28 classes, 477 lines of code). this study. We tried to provide all necessary information to replicate

1719
our analysis as well as our tool Rimaz and the list of the analyzed [11] Francesca Arcelli Fontana and Marco Zanoni. 2011. A tool for design pattern
apps from https://github.com/TheRimaz/Rimaz. detection and software architecture reconstruction. Information Sciences 181, 7
(2011), 1306–1324. https://doi.org/10.1016/j.ins.2010.12.002
Finally, the conclusion validity threats refer to whether the con- [12] Martinn Fowler. 2006 (Accessed on 2018-04-17). GUI Architectures. https://www.
clusions reached in a study are correct. We did not make conclusions martinfowler.com/eaaDev/uiArchs.html
[13] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. 1995. Design
that cannot be validated with the presented results. Patterns: Elements of Reusable Object-oriented Software. Addison-Wesley Long-
man Publishing Co., Inc., Boston, MA, USA. 395 pages. https://doi.org/10.1007/
6 CONCLUSION AND FUTURE WORK 3-540-48249-0_10
[14] Google’s official Android documentation. Accessed on 2018-02-01. Input Events.
Mobile app development, especially for Android, is an appealing https://developer.android.com/guide/topics/ui/ui-events.html
option for more and more software developers. User interactivity [15] Google’s official Android documentation. Accessed on 2018-03-01. Data Binding
Library. https://developer.android.com/topic/libraries/data-binding/index.html
is a key element for most apps and as such, developer choices as to [16] Google’s official Android documentation. Accessed on 2018-04-12. Application
how to organise the basic interaction-centric components provided Fundamentals. https://developer.android.com/guide/components/fundamentals.
by the Android framework are particularly important. Interactive html
[17] Google’s official Android documentation. Accessed on 2018-04-14. Support Li-
design patterns such as MVC, MVP, and MVVM are thus especially brary. https://developer.android.com/topic/libraries/support-library/index.html
relevant for Android apps. [18] Google’s official Android documentation. Accessed on 2018-04-21. Guide to App
Architecture. https://developer.android.com/topic/libraries/architecture/guide
In this paper, we propose an approach to identify which of these [19] Google’s official Android documentation. Accessed on 2018-04-21. Live Data.
MVC-based patterns is dominant in an Android app. The approach https://developer.android.com/topic/libraries/architecture/livedata.html
is based on heuristics that describe the different potential implemen- [20] Google’s official Android documentation. Accessed on 2018-04-21. View Model.
https://developer.android.com/topic/libraries/architecture/viewmodel.html
tations of MVC-based patterns in Android apps. We validated the [21] Geoffrey Hecht, Benomar Omar, Romain Rouvoy, Naouel Moha, and Laurence
approach on a sample of open-source apps from F-Droid, then con- Duchien. 2015. Tracking the Software Quality of Android Applications along
ducted a large scale study on 5,480 apps downloaded from Google their Evolution. In 30th IEEE/ACM International Conference on Automated Software
Engineering. IEEE, 12.
Play Store. Our study shows that MVC is, with 57%, by far the most [22] Gossman John. Accessed on 2018-04-18. Introduction
used pattern and seems to actually be growing in popularity in to Model-View-ViewModel pattern for building WPF apps.
https://blogs.msdn.microsoft.com/johngossman/2005/10/08/
the Android community. MVP is less popular (around 8% of our introduction-to-modelviewviewmodel-pattern-for-building-wpf-apps/
dataset) and a significant percentage of the apps seemed to have no [23] Paul Johnson. [n. d.]. Using MVVM Light with your Xamarin Apps. Apress. 200
MVC-based pattern. Although present in the initial sample from pages. https://doi.org/10.1007/978-1-4842-2475-5
[24] Marouane Kessentini and Ali Ouni. 2017. Detecting Android smells using multi-
F-Droid, MVVM was not detected in any of our dataset. Our study objective genetic programming. In Proceedings of the 4th International Conference
also revealed that there is no relationship between the usage or not on Mobile Software Engineering and Systems. IEEE Press, 122–132.
of a pattern and the category of an app. Finally most of small-sized [25] Hyun Jung La and Soo Dong Kim. 2010. Balanced MVC Architecture for Devel-
oping Service-Based Mobile Applications. In IEEE 7th International Conference on
apps do not use any pattern. E-Business Engineering. 292–299. https://doi.org/10.1109/ICEBE.2010.70
Overall, our study is the first of its kind to provide some insights [26] Li Li, Tegawendé F. Bissyandé, Jacques Klein, and Yves Le Traon. 2015. An
Investigation into the Use of Common Libraries in Android Apps. (2015). https:
on Android developers’ choice with respect to the use of MVC- //doi.org/10.1109/SANER.2016.52 arXiv:1511.06554
based patterns. As future work, we plan to study how well these [27] Tian Lou. 2016. A Comparison of Android Native App Architecture âĂŞ MVC, MVP
patterns are respected and well implemented, by detecting the most and MVVM. Master’s thesis. Aalto University, Finland.
[28] Microsoft’s MSDN. Accessed on 2018-04-18. Implementing the Model-View-
practiced violations by the community. ViewModel Pattern. https://msdn.microsoft.com/en-us/library/ff798384.aspx
[29] Joshua Musselwhite. Accessed on 2018-03-01. Android Architecture. http://www.
REFERENCES therealjoshua.com/2011/11/android-architecture-part-1-intro/
[30] Fabio Palomba, Dario Di Nucci, Annibale Panichella, Andy Zaidman, and An-
[1] Kevin Allix, Tegawendé F. Bissyandé, Jacques Klein, and Yves Le Traon. 2016. drea De Lucia. 2017. Lightweight detection of Android-specific code smells:
AndroZoo: collecting millions of Android apps for the research community. In The aDoctor project. In IEEE 24th International Conference on Software Analy-
Proceedings of the 13th International Conference on Mining Software Repositories sis, Evolution and Reengineering, SANER 2017. IEEE Computer Society, 487–491.
(MSR). ACM, 468–471. https://doi.org/10.1109/SANER.2017.7884659
[2] Giuliano Antoniol, Roberto Fiutem, and Luca Cristoforetti. 1998. Design pattern [31] T. Reenskaug. 1979. THING-MODEL-VIEW-EDITOR: an Example from a Plan-
recovery in object-oriented software. In Program Comprehension, 1998. IWPC’98. ning System. Xerox PARC Technical Note (May 1979) (1979).
Proceedings., 6th International Workshop on. IEEE, 153–160.
[32] Jan Reimann, Martin Brylski, and Uwe Açmann. 2014. A Tool-Supported Quality
[3] Roy Aritra. Accessed on 2018-02-01. Ultimate Android Reference. https://github.
Smell Catalogue For Android Developers. In Proc. of the conference Modellierung
com/aritraroy/UltimateAndroidReference/blob/master/README.md
2014 in the Workshop Modellbasierte und modellgetriebene Softwaremodernisierung
[4] Hamid Bagheri, Joshua Garcia, Alireza Sadeghi, Sam Malek, and Nenad Medvi-
âĂŞ MMSM 2014.
dovic. 2016. Software architectural principles in contemporary mobile software:
[33] Fadilah Ezlina Shahbudin and Fang-Fang Chua. 2013. Design Patterns for Devel-
from conception to practice. Journal of Systems and Software 119 (2016), 31–44.
oping High Efficiency Mobile Application. Journal of Information Technology Soft-
https://doi.org/10.1016/j.jss.2016.05.039
ware Engineering 3, 3 (2013), 667–684. https://doi.org/10.4172/2165-7866.1000122
[5] Andy Bower and Blair McGlashan. 2000. Twisting the triad: The evolution of
[34] Karina Sokolova and Marc Lemercier. 2014. Towards High Quality Mobile Appli-
the Dolphin Smalltalk MVP application framework. Tutorial Paper for ESUG 2000
cations: Android Passive MVC Architecture. 7 (06 2014), 123–138.
(2000), 1–7.
[35] StackOverflow thread. Accessed on 2018-03-01. MVC pattern on Android. https:
[6] Frank Buschmann, Kevlin Henney, and Douglas Schmidt. 2007. Pattern-Oriented
//stackoverflow.com/questions/2925054/mvc-pattern-on-android
Software Architecture Volume 4: A Pattern Language for Distributed Computing.
[36] Raja Vallée-Rai, Phong Co, Etienne Gagnon, Laurie Hendren, Patrick Lam, and
639 pages. https://doi.org/10.1007/s13398-014-0173-7.2 arXiv:arXiv:1011.1669v3
Vijay Sundaresan. 1999. Soot - a Java Bytecode Optimization Framework. In
[7] John Deacon. 2005. Model-view-controller (mvc) architecture. Computer Systems
Proceedings of the 1999 Conference of the Centre for Advanced Studies on Collabo-
Development Mvc (2005), 1–6. https://techsimplified2.com/Uploads/Agendas/
rative Research (CASCON ’99). IBM Press, 13–. http://dl.acm.org/citation.cfm?
October28,2011.pdf
id=781995.782008
[8] Tamal Dey. 2011. A Comparative Analysis on Modeling and Implementing with
[37] Bauer Vladislav. Accessed on 2018-02-01. Android Arsenal. https://
MVC Architecture. Mvc (2011), 44–49. https://doi.org/10.1.1.472.1591
android-arsenal.com/
[9] Maxwell Eric. Accessed on 2017-10-28. The MVC, MVP,
[38] Claes Wohlin, Per Runeson, Martin Hst, Magnus C. Ohlsson, Bjrn Regnell, and An-
and MVVM Smackdown. https://academy.realm.io/posts/
ders Wessln. 2012. Experimentation in Software Engineering. Springer Publishing
eric-maxwell-mvc-mvp-and-mvvm-on-android/
Company, Incorporated.
[10] F-Droid website. Accessed on 2018-04-14. F-Droid. https://f-droid.org/en/about/

1720

You might also like