<!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>A Context and Feature Visualisation Tool for a Feature-Based Context-Oriented Programming Language</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Beno^t Duhoux, UCLouvain, Belgium</string-name>
          <email>benoit.duhoux@uclouvain.be</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Kim Mens, UCLouvain, Belgium</string-name>
          <email>kim.mens@uclouvain.be</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>In: Anne Etien (eds.): Proceedings of the 12th Seminar on Ad-</string-name>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Bruno Dumas</institution>
          ,
          <addr-line>UNamur</addr-line>
          ,
          <country country="BE">Belgium</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Hoo Sing Leung</institution>
          ,
          <addr-line>UCLouvain</addr-line>
          ,
          <country country="BE">Belgium</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>vanced Techniques Tools for Software Evolution</institution>
          ,
          <addr-line>Bolzano</addr-line>
          ,
          <country country="IT">Italy</country>
          ,
          <addr-line>July 8-10 2019, published at http://ceur-ws.org</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>In this paper we present a visualisation tool that is intricately related to a featurebased context-oriented programming language. Context-oriented programming languages allow programmers to develop software systems of which the behaviour evolves dynamically upon changing contexts. In our language, the software behaviour as well as the contexts to which the behaviour adapts, are encoded in terms of separate feature models. Due to the highly dynamic nature of such software systems and the many possible combinations of contexts to which they may adapt, developing such systems is hard. To help programmers manage the complexity of developing such software systems, we created a tool to help them visualise the contexts and features, even at runtime. The visualisation tool confronts two hierarchical models: the context model and the feature model, and highlights the dependencies between them. We conduct an initial user study of the visualisation tool to assess its usefulness and usability.</p>
      </abstract>
      <kwd-group>
        <kwd>Software visualisation tool</kwd>
        <kwd>contextoriented programming language</kwd>
        <kwd>dynamic adaptation</kwd>
        <kwd>feature and context models</kwd>
        <kwd>user study</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Copyright c 2019 for this paper by its authors. Use permitted
under Creative Commons License Attribution 4.0 International
(CC BY 4.0).</p>
    </sec>
    <sec id="sec-2">
      <title>Introduction</title>
      <p>
        Context-aware systems [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] use information about the
surrounding environment and conditions in which
a software system operates, to adapt dynamically
their behaviour to such contexts. This
information can take the form of user preferences (a user's
age, habits, (dis)abilities), information from
external services (weather conditions), or internal data
about the device on which the system runs
(remaining battery level or other sensor information). Due
to the exponential combination of contexts, their
possible behavioural variations, and the high
dynamicity of such systems, developing such systems is hard.
Context-oriented programming languages [
        <xref ref-type="bibr" rid="ref35 ref8">19, 35</xref>
        ]
propose dedicated programming abstractions to
implement context-aware behavioural adaptations that can
temporarily adapt existing system functionality upon
the (de)activation of certain contexts.
      </p>
      <p>
        The notion of context has also been explored in the
eld of feature modelling [
        <xref ref-type="bibr" rid="ref10 ref18 ref21 ref29 ref4 ref5">9, 17, 21, 5, 4, 29</xref>
        ].
Hartmann et al. [
        <xref ref-type="bibr" rid="ref18">17</xref>
        ] model multiple software product lines,
where the absence or presence of some features depend
on the chosen contexts, in terms of a separate feature
model and context model, connected through
explicitly declared dependencies between the contexts and
features. For example, when modelling a car
navigation system, the selection of a context \Europe" would
imply the selection of a feature for European maps.
      </p>
      <p>
        Inspired by this idea, we proposed a
contextoriented software architecture [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ] where contexts and
features are handled by separate architectural layers,
with explicit dependencies from one layer to the next.
The selection and activation of contexts in earlier
layers can trigger the selection and activation of their
corresponding features.
      </p>
      <p>Building upon this context-oriented software
architecture, and taking the analogy with Hartmann et al.'s
modelling approach a step further, we extended the
proposed architecture by explicitly representing
contexts and features in terms of two separate feature
models that are used at runtime to guide the selection
and activation of both contexts and features.
Nevertheless, keeping track of all possible contexts,
features and their intra- and inter-dependencies remains
a daunting task for developers of context-oriented
systems. It is not easy for a developer to know what
contexts or features are available, are currently active,
what the impact of activating or deactivating them is,
or whether the system exhibits the intended behaviour
in a particular situation.</p>
      <p>We therefore developed a visualisation tool that can
help developers keep an overview of all existing
contexts and features, by displaying the context and
feature models and their dependencies. The tool o ers
more than a mere static visualisation of the context
and feature models. It can also depict dynamically
what context and features are active or get activated,
and what program code this a ects.</p>
      <p>To assess whether the tool's visual metaphor helps
understanding the programming paradigm and
programs written in it, we conducted an initial user study
with master students in software engineering. We
conclude that our tool helps understanding the underlying
approach, despite its complexity for programmers
developping context-oriented applications.</p>
      <p>The remainder of this paper is structured as
follows. Section 2 introduces the case study of a
contextoriented system used as running example throughout
the paper. Section 3 then introduces our
contextoriented software architecture and programming
language, as well as corresponding background material.
Our visualisation tool is presented in Section 4.
Section 5 discusses the initial user study and discusses its
results. Related work is exposed in Section 6. Section
7 concludes the paper and presents some future work.
2</p>
    </sec>
    <sec id="sec-3">
      <title>Case study</title>
      <p>
        Before introducing our visualisation tool and the
underlying context-oriented software architecture upon
which it relies, in this section we brie y describe the
case study that will serve as running example
throughout the paper: a `risk information system' [
        <xref ref-type="bibr" rid="ref12">11</xref>
        ].
      </p>
      <p>The system provides instructions to citizens on
what to do in case of certain emergency situations
or risks, like earthquakes or oods. The actual
instructions given to a citizen may depend on a variety
of contexts, such as the user's age, location or
vicinity, weather conditions, or the status of an emergency
(the emergency has been announced but has not yet
a ected the user, the emergency is actually occurring,
or being in the aftermath of an emergency situation).</p>
      <p>The instructions issued by the context-aware risk
information system can be either static or dynamic.
Static instructions are just instructions that a user can
consult about what to do in case of certain risks.</p>
      <p>The system can also display information and
characteristics about actual emergencies as they occur. For
example, when an earthquake is detected, its
severity would be computed on the Richter scale and its
location shown to citizens as a circular impact zone
determined by its epicentre and its radius.</p>
      <p>When an actually emergency is observed, the
authorities will actively issue instructions speci c to the
emergency at hand, and speci c to the current
situation and user pro le. For instance, if an earthquake
warning has been issued, and a citizen is stuck at
home, an adult may get a speci c instruction to \Hide
under a table, desk, bed or any other sturdy piece of
furniture", while a child may just see a pictogram
representing this speci c instruction instead.
3</p>
      <p>
        A feature-based context-oriented
approach
Context-oriented programming languages and
frameworks help programmers build context-oriented
systems. We proposed one such framework [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ] that,
based on contextual information sensed from the
surrounding environment, selects and activates so-called
contexts in the system. Appropriate features
corresponding to these activated contexts are then selected,
activated and deployed in the system, to adapt the
system's behaviour to the actual context of use. We build
upon this work by explicitly representing contexts and
features as run-time feature models. At the end of this
section we explain this feature-oriented context-aware
programming approach in more detail, after having
reviewed preliminary work on feature modelling,
context modelling and context-oriented programming that
lead to this. In the next section we then present a
visualisation tool we built to help programmers visualise
the underlying context and feature models and how
these a ect the system at runtime.
3.1
      </p>
      <sec id="sec-3-1">
        <title>Feature modelling</title>
        <p>Fig. 1 shows a simpli ed feature model depicting a
subset of the functionalities of the case study.1 A user
of the risk information system can edit his or her
prole (age and location) and the system can display the
characteristics of an emergency such as its severity or
impact zone.</p>
        <p>
          A feature model highlights the commonalities and
variabilities of a system [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ]. Such diagrams are often
used in software product lines to de ne a family of
similar systems with some variations. In our current
1A more complete version is shown later in Fig. 6.
example, the commonalities are the features Profile
Edition, Age and Location, which will be active in
any instantiation of the risk information system. The
other features are variabilities, i.e. features that will
be deployed only in some versions of the system, or
rather, at particular moments in time (e.g., when a
particular emergency is active).
        </p>
        <p>A feature model is represented as a tree, where the
nodes represent features and the hierarchical edges
represent constraints between these features.
Whenever a child feature is selected, all of its ancestor
features must be selected. A mandatory constraint,
depicted with a black circle, means that if the parent
feature is selected, the subfeature must be present in
the system as well. An optional constraint, depicted
with a white circle, states that the subfeature may or
may not be present. As such, the Profile edition
feature must always be present in a risk information
system, whereas the emergency information is optional
(it is only needed when there is an actual emergency).</p>
        <p>An or (resp. xor ) constraint, depicted by a black
(resp. white) triangle, means that at least one (resp.
exactly one) of the child nodes participating in this
constraint should be selected in the system. In our
example, the features Display severity and Show
impact zone can coexist (and often do) in a same
version of the system, as well as their subfeatures (this can
happen if two emergencies, for example a ood and an
earthquake, happen at the same time).</p>
        <p>A particular instantiation of the system is
correct only if the selection of features that adapt the
system, respects the constraints imposed by the
feature model. It is not allowed to activate or
deactivate features if that would violate the constraints
of the feature model. In Fig. 1, a valid con
guration could be Risk Information System, Emergency
information, Display severity, Richter, Profile
edition, Age, Location, and would correspond to a
con guration where the system can display the
severity of an earthquake emergency (using the Richter
scale) and where the user can edit his age and decide
if the system can use his current location or not.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Contexts versus Features</title>
        <p>
          Not only features, but also contexts, are key notions
in feature-based context-oriented systems. While
contexts are characteristics of the surrounding
environment in which a system runs [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ], features can be
de ned as "any prominent or distinctive user-visible
aspect, quality, or characteristic of a software
system" [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ]. Contexts and features are complementary
notions that go hand in hand when building
contextoriented systems that can adapt their behaviour
(described in terms of features) dynamically whenever
changes (rei ed as contexts) are detected in the
surrounding environment. In other words, the activation
or deactivation of certain contexts triggers the
activation or deactivation of certain features to adapt the
runtime system behaviour.
        </p>
        <p>
          Notwithstanding their complementarity and di
erences, it has been observed that the feature modelling
notation can also be used to model contexts [
          <xref ref-type="bibr" rid="ref10 ref18 ref21 ref29 ref4 ref5">9, 17, 21,
5, 4, 29</xref>
          ]. For example, Desmet et al. [
          <xref ref-type="bibr" rid="ref10">9</xref>
          ] use a notation
very similar to Kang et al.'s feature modelling
notation [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ] to design context models of context-oriented
applications. Hartmann and Trew [
          <xref ref-type="bibr" rid="ref18">17</xref>
          ] present a
Multiple-Product-Line-Feature Model to model
several variants of a same product depending on some
contexts. In their approach, schematically depicted in
Fig. 2, they split the overall model in two separate
submodels: a context variability model (representing
the contexts and their intra-dependencies) and a
traditional feature model. This allows them to model not
only what the common and variable features are, but
also how contexts a ect what features should (not)
become part of a product, by declaring explicit
dependencies from the context model to the feature model.
Murguzur et al. [
          <xref ref-type="bibr" rid="ref31">31</xref>
          ] state this strategy increases the
number of dependencies between contexts and features
but provides a better reusability of context properties.
        </p>
        <p>MPL-Feature Model
Context
Variability</p>
        <p>Model</p>
        <p>Feature
Model
Now that we have discussed how to model contexts
and features, we still need to discuss how to program
context-oriented systems that can adapt to changes in
their surrounding environment.</p>
        <p>
          Context-oriented programming (COP) is a
paradigm that provides dedicated programming
language abstractions to adapt the behaviour of a
software system dynamically upon changing contexts.
The paradigm was introduced about a decade ago by
Hirschfeld et al [
          <xref ref-type="bibr" rid="ref8">19</xref>
          ]. In COP, contexts and behavioural
adaptations (modelled as features in this paper) are
rst-class language entities. The behavioural
adaptations get (de)activated in the code whenever their
corresponding contexts become (de)activated. Nowadays
many di erent implementations of COP languages
exist [
          <xref ref-type="bibr" rid="ref13 ref14 ref15 ref16 ref19 ref2 ref24 ref26 ref3 ref32 ref34 ref35 ref36">3, 15, 18, 12, 2, 13, 26, 34, 36, 35, 32, 14, 24</xref>
          ].
Most of them are extensions of existing programming
languages, often object-oriented. However, many
of these implementations do not clearly distinguish
contexts from features. To address this issue, we
propose a context-oriented software architecture [
          <xref ref-type="bibr" rid="ref30">30</xref>
          ]
in which we separate contexts and features in Cdlassi* 1eCrlasesnt
architectural layers. Fig. 3 provides a highClas-slevCleassl
overview of this architecture.
        </p>
        <p>Sensors</p>
        <p>Context
Handling</p>
        <p>Feature
Handling</p>
        <p>Code
Adaptation</p>
        <p>This architecture senses the surrounding
environment in which the system executes. Whenever changes
in the environment are detected, the Context Handling
layer interprets and reasons about the raw data
representing these changes, in order to reify them into
contexts and (de)activate them. After the contexts are
(de)activated, the Feature Handling layer (un)selects
and (de)activates the features corresponding to the
(de)activated contexts. Finally, the Code Adaptation
layer (un)installs the code corresponding to these
features to adapt dynamically the system behaviour.
3.4</p>
      </sec>
      <sec id="sec-3-3">
        <title>Feature visualiser</title>
        <p>
          In earlier work, we proposed a rst visualisation
tool [
          <xref ref-type="bibr" rid="ref12">11</xref>
          ] for the context-oriented software architecture
described in the previous section. An excerpt of this
visualisation tool, applied to the Risk Information
System case, is shown in Fig. 4.
        </p>
        <p>This tool depicts the currently active dependencies
between the contexts, features and (object-oriented)
classes of the system. For example, when an
earthquake emergency is detected, the Earthquake
context gets activated, and appears in the
visualisation as a yellow rounded rectangle. This context
activation then causes the selection and activation
of the corresponding features SeverityRichter and
CircleImpactZone, which contain speci c
functionality to display information about an earthquake
emergency. When these features are activated, they get
displayed as green rounded rectangles. Finally, these
features adapt the code of some classes in the system,
depicted as blue rounded rectangles (in this case, it is
the Earthquake class that gets altered).</p>
        <p>However, as can be seen from Fig. 4, this
visualisation does not represent the contexts and features as
separate hierarchical feature models, but rather as a
single large graph of active contexts, features, classes
and their dynamic intra- and inter-dependencies.
3.5</p>
      </sec>
      <sec id="sec-3-4">
        <title>Context and feature models</title>
        <p>
          One of the contributions of our current work is to
model the possible contexts, features they trigger, and
classes they adapt, as separate but interconnected
hierarchical models, as depicted schematically in Fig. 5.
This approach combines our context-oriented software
architecture with the multiple-product-line-feature
modelling approach of Hartmann and Trew [
          <xref ref-type="bibr" rid="ref18">17</xref>
          ]. We
explore our dedicated visualisation tool support for
this combined approach in the next section.
        </p>
        <p>Context Model</p>
        <p>Feature Model
Sensors</p>
        <p>Context
Handling</p>
        <p>Feature
Handling</p>
        <p>Class Diagram
Class * 1 Class</p>
        <p>Class Class</p>
        <p>Code
Adaptation
Now that we have introduced our feature-based
context-oriented programming approach, in this
section we present the tool we built to help
programmers visualise and animate the underlying hierarchical
context and feature models and their
interdependencies, allowing them to better understand and handle
the complexity and dynamicity of systems built using
that approach. We will describe the visualisation tool
through di erent usage scenarios from a programmer's
perspective. Before doing so, we brie y revisit and
expand upon the case study.</p>
        <p>Flood
Earthquake</p>
        <p>Flood
Earthquake
Show
impacted
zone
Child
friendly
Senior
friendly
Alert
Warn
Inform</p>
        <p>Age
Location</p>
        <p>Risk
concerns
Description
Instructions
in case of
already mentioned above, is the use of colouring to
show active contexts, features and classes in green. A
second one, which will be explained in the next
subsection, is to use particular lters to show only
activated contexts, features, dependencies, and currently
adapted classes. The nal and probably most powerful
functionality provided by the tool is to show changes to
the diagrams as they occur. To explore these dynamic
changes, the tool provides the ability to replay the
changes step by step (by activating the Step-by-step
mode and using the Next step button in the Con
guration pane, as showed in the bottom right of Fig. 7),
so that a programmer can inspect the state of the
diagrams after each change.
4.2</p>
      </sec>
      <sec id="sec-3-5">
        <title>Exploring the dynamics of a contextoriented system</title>
        <p>In addition to providing a static overview of a
contextoriented system, the tool should support programmers
in understanding and exploring the dynamic aspects of
such a system. The tool should help them inspect what
contexts and features are currently active and how that
a ects the behaviour, in terms of what classes are
currently being adapted. For example, suppose that
during testing and simulation of the system a programmer
discovers that, when an earthquake warning is issued,
the system starts displaying instructions related to a
ood instead of an earthquake. To understand such
undesired behaviour he needs to explore what contexts
are currently active, what feature were triggered in
response to that, and how the classes were then adapted
by those features. A possible cause of this bug may be
for example a wrong dependency between the
earthquake context and its corresponding features.</p>
        <p>The visualisation tool provides several ways of
exploring the system dynamics. A rst one, which was</p>
      </sec>
      <sec id="sec-3-6">
        <title>Filtering and prede ned views</title>
        <p>To help programmers manage the complexity of
understanding big systems consisting of many di erent
context and features, the tool comes with a set of
lters and prede ned views that a programmer can
select to focus on particular concerns, as depicted in the
bottom left of Fig. 7.</p>
        <p>These lters (called `Customized views') allow a
programmer to indicate whether he is more interested
in the contexts, the features, the code, or the
dependencies between them, and whether he is currently
more interested in exploring the active or inactive
entities or dependencies. The lters can be combined in
many di erent ways. In addition to that some
`Predened views' are provided, which are prede ned
combinations of lters, often selected together. For example
the \Active mode" shows all entities and dependencies
that are currently `active', as depicted in Fig. 8.
As the number of possible contexts, features, classes
and dependencies can become quite large, in
addition to ltering the diagrams to only show certain
elements of interest, highlighting is another interesting
way to help programmers navigate through the
diagrams. Suppose for example that a programmer is
trying to understand why a particular feature, say the
Active During Earthquake feature, does not seem to
exhibit the expected behaviour. By simply clicking on
that feature, it will be highlighted in yellow, together
with the contexts that triggered its selection (by
following the dependencies that have this feature as
target) and the classes it adapts (by following the
dependencies that have this feature as source). In this
example, the contexts During and EarthquakeEmergency
will be highlighted, as well as the Earthquake class.
This highlighting is illustrated by the yellow borders
and yellow arrows in Fig 7.
4.5</p>
      </sec>
      <sec id="sec-3-7">
        <title>Hiding and collapsing information</title>
        <p>Finally, a programmer can customise his visualisation
at an even more ne-grained level. For example, Fig. 9
shows a reduced feature model obtained by hiding and
collapsing particular features, using the
corresponding buttons to hide an element, collapse all elements
above, or all elements below.
5</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Validation</title>
      <p>In this section, we describe and analyse the user study
we conducted to assess the usability and usefulness of
our visualisation tool and underlying approach. The
subjects of our study were 34 master-level students in
computer science or engineering following a software
engineering course. They were aged 20 to 27 years old
and 4 of them were female. To evaluate the tool, we
asked them to play the role of programmers working
on a context-oriented system. To initiate them to the
di erent technologies used in the project, they
participated in two preparatory sessions before the actual
user study. Since the study was carried out during
a course, in order not to bias the results we made it
clear to the students that this user study would not
be related to the course evaluation and would be
entirely dedicated to our research and performed
anonymously. In the remainder of this section, we rst
describe the preparatory sessions preceding the study,
then describe the user study itself, present the results
we gathered from the study, and nally brie y discuss
some threats to validity.
5.1</p>
      <sec id="sec-4-1">
        <title>Preparation</title>
        <p>Before conducting the user study, we initiated our
master-level students with two sessions of two hours
each. The rst session was an introduction to the Ruby
programming language, the language used to develop
our feature-based context-aware approach. The
second session was to explain our approach in which we
exempli ed it with an earthquake-speci c risk
information system.
5.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>User study</title>
        <p>After these preparatory sessions, during a third
twohour session we performed the actual user study, where
our students were asked to assess the usability and
usefulness of our visualisation tool. To help them in their
evaluation task, they had to perform two tasks. These
tasks aimed to extend the earthquake-speci c variant
of the risk information system with a new kind of risk
and emergency: oods. Task 1 concerned the
characteristics of a ood. In this task, they had to implement
the ne-grained features to manage and display the
`standard severity' feature and the `polygon impacted
zone' feature needed to represent a ood emergency.
Task 2 was about implementing the ood-speci c
instructions (either static or dynamic) that citizens must
follow before, during or after a ood. We conducted
the user study as follows: Students were rst asked
to provide some information about themselves (age,
knowledge of object-oriented programming,
contextoriented programming and so on). They had to
evaluate their knowledge on a ve-level Likert scale, where
a value of 1 meant they had no expertise in the eld up
to a value of 5 meaning they considered themselves as
an expert in the eld. Then we split the
students/programmers in two separate groups (A and B) to
perform their assigned task during a 25-minute time slot.
Group A had to start implementing Task 1 whereas
group B had to develop Task 2. During this rst task,
they were not allowed to use the visualisation tool.
Next, they received a quick introduction to the
visualisation tool as a preparation for their second task.
For this second task, we switched the tasks. Group A
now had to develop Task 2 while group B had to
implement Task 1. Again, both groups received at most
25 minutes to nish their assigned task. Finally, all
subjects were asked to answer some questions
regarding how they perceived the usability and usefulness of
our visualisation tool. We also asked them to provide
some open feedback on how we could improve the
visualisation tool.
5.3</p>
      </sec>
      <sec id="sec-4-3">
        <title>Results and discussion</title>
        <p>Despite the complexity of our feature-based
contextoriented programming approach, the participants in
our study seemed to agree that our visualisation tool is
interesting for developers when learning our approach
or during debugging.</p>
        <p>Fig. 10 illustrates the background knowledge of our
participants at the beginning of our user study. We can
observe that our students have quite a good
knowledge of programming and object-oriented
programming in particular. But they did not feel as
comfortable with more dynamic programming technologies
such as the context-oriented programming paradigm
or our feature-based context-oriented approach. Their
weak knowledge of the Ruby programming language
can be justi ed by the fact that only a few of the
students had prior experience (beyond what they saw in
the two-hour preparatory session) in Ruby.</p>
        <p>Nevertheless, despite the di culty of our approach,
our participants do seem to be interested by the
visualisation tool when they must develop a context-oriented
system using our approach. Fig. 11 depicts their
opinions about the tool. The rst two questions concern
whether they believed the static or dynamic
representation of the models and their dependencies to be easy
to understand. The ve values ranged from hard to
understand to easy to understand. For each
representation, more or less 58% (taking into account only
the positive values) of our participants considered the
representations as understandable. For the question
about which aspect (static or dynamic) is most
interesting in this tool, 50% (considering only the positive
values) of our participants consider the dynamic view
as more interesting than the static view, as opposed
to only 20% (computing only the negative values) who
believed the static view to be more interesting. 30%
liked the dynamic aspect as much as the static one. In
addition, almost 56% of our participants agreed that
our visualisation tool is helpful to learn the approach.
The ease to use our tool is more mitigated however.
Whereas almost 40% of the participants believed our
tool to be easy to use, more or less 26% of them did
not. This result could be explained by the
complexity of our approach. Indeed, assessing the usability of
a visualisation tool such as the one described in this
paper is intrinsically linked to the understandability
of the underlying programming approach. Finally, in
our open question about which functionality is most
useful, several participants answer that the ability to
replay changes dynamically using the Next step
button is really useful. In the received feedback, two main
requests may be noted: the addition of a previous step
button to step back in the process and better support
for visualising larger context and feature models.
5.4</p>
      </sec>
      <sec id="sec-4-4">
        <title>Threats to validity</title>
        <p>The case study performed in this paper should not be
considered as a full- edged in-depth user study but
rather as an initial exploratory study to help us
identify the main strengths and weaknesses of the
proposed approach and visualisation before developing it
further. In particular we wanted to nd out if the
proposed visualisation tool could help programmers in
coping with the inherent di culty of building
contextoriented programs of which the behaviour can change
dynamically upon changing contexts. Although our
initial ndings were promising they are still
premature and a more rigorous validation study of the form
of a controlled experiment with proper task completion
metrics would be needed to avoid biased conclusions.
In particular, the study should be set up in such a way
that the opinions of the subjects are not in uenced by
possible bias implanted by the context or preparation
of the user study.
6</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Related work</title>
      <p>In Section 3 we already presented some background
work on feature and context modelling, in order to
introduce our feature-oriented context-aware approach.
In this section we will explore some further related
work, in particular on context-oriented and
featureoriented programming approaches, as well as on other
visualisation tools related to these approaches.</p>
      <p>Programming in general</p>
      <p>
        Object-oriented programming
Whereas feature-oriented programming [
        <xref ref-type="bibr" rid="ref33">33</xref>
        ] was
designed with software product lines in mind,
contextoriented programming [
        <xref ref-type="bibr" rid="ref8">19</xref>
        ] was designed with the
purpose of creating dynamically adaptive software
systems. After a closer comparison of these paradigms,
Cardozo et al. [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] concluded that both approaches are
quite similar, their main di erence being that
contextoriented programming is typically more dynamic
(focussing on runtime adaptations) than feature-oriented
programming (typically focussing on compile-time
adaptation), even though more dynamic approaches
to feature-oriented programming exist as well [
        <xref ref-type="bibr" rid="ref17">16</xref>
        ].
      </p>
      <p>
        To create dynamic software systems sensitive to
their environment, several approaches exist. One
approach is to extend feature models with contextual
information, so that the system can be recon gured by
selecting features at runtime depending on sensed
context information [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ]. A second approach is to make
use of context-oriented programming languages. Some
researchers have started to explore introducing the
notion of features into that paradigm. For example, on
top of an existing context-oriented programming
lan-100 -80
-60
-40
40
60
80
100
-20 0 20
Modes in percentage
7
3
Modes
42
50
4
20
8
11
16
12
8
1
6
7
5
10
10
12
15
4
1
4
14
15
10
13
11
3
0
0
0
6
5
7
6
2
guage, Cardozo et al. [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] proposed a way of building
applications that are composed dynamically from a set
of available ne-grained features, according to
contextual information. Costanza and D'Hondt [
        <xref ref-type="bibr" rid="ref9">8</xref>
        ] also
proposed an extension of context-oriented programming
with explicit feature descriptions that is quite similar
to the feature-based context-oriented approach upon
which we rely in this paper.
      </p>
      <p>
        However none of these approaches separate clearly
the features from the contexts, which is why we
proposed a novel feature-based context-oriented approach
based on top of our earlier context-oriented software
architecture [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ].
6.2
      </p>
      <sec id="sec-5-1">
        <title>Visualisation tools</title>
        <p>Several visualisation tools have been created for
visualising di erent aspects of the context- and
featureoriented modelling or programming approaches that
have been mentioned either above or earlier in
Section 3. Many of these works state that visual support
is essential especially when trying to understand and
manage large and complex feature (or context)
models.</p>
        <p>
          To visualise feature models, programmers can use
a tool like FeatureIDE [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ], which is an open-source
visualisation framework integrated in the Eclipse
development environment. For dealing with larger
feature models, programmers may prefer to use
S.P.L.O.T. [
          <xref ref-type="bibr" rid="ref28">28</xref>
          ], a web-based system that represents
feature models in a much more compact tree-like
structure. Illescas et al. [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ] propose four di erent
visualisations that focus on features and their interactions
at source code level, and evaluate them with four case
studies. Urli et al. [
          <xref ref-type="bibr" rid="ref37">37</xref>
          ] present a visual and interactive
blueprint that enables software engineers to
decompose a large feature model in many smaller ones while
visualising the dependencies among them.
        </p>
        <p>
          Nieke et al. created a tool suite for integrating
modelling in context-aware software product lines [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ].
This tool helps developers to model the three
dimensions (spatial, contextual and temporal) of the
variabilities of such approaches.
        </p>
        <p>
          In Section 3, we showed our Feature Visualiser [
          <xref ref-type="bibr" rid="ref12">11</xref>
          ]
tool on top of our context-oriented software
architecture [
          <xref ref-type="bibr" rid="ref30">30</xref>
          ]. In addition to that tool, we also developed a
COP simulator [
          <xref ref-type="bibr" rid="ref11">10</xref>
          ] to simulate context-oriented
systems implemented with this architecture. Both of
these tools can be seen as complementary to the
visualisation tool introduced in Section 4.
7
        </p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>To create context-oriented software systems, in this
paper we presented a feature-based context-oriented
approach, where both the contexts and features are
modelled in terms of feature diagrams. Managing
these di erent models and their dependencies is a
daunting task, due to the potentially high number of
contexts and features, as well as the high dynamicity of
such systems. To address this issue, we created a
dedicated visualisation tool for this feature-based
contextoriented approach, which confronts two hierarchical
models (the context model and feature model) and
highlights the dependencies between them. In
addition, it shows the dependencies from the feature model
to the code (i.e., the classes of the system). This
visualisation tool not only allows programmers to inspect
the models and their dependencies statically, but also
to explore what happens dynamically as contexts and
features are being (de)activated during system
execution. For understanding and manipulating larger
models, the tool also comes with lters, prede ned views,
and functionality to highlight, collapse or hide speci c
elements, allowing programmers to focus the
visualisation only on speci c parts of interest.</p>
      <p>To assess the usefulness and usability of our
visualisation tool, we conducted an initial user study with
34 master-level students in the context of a software
engineering course. The participants of this study
considered that our tool was easy to understand in terms
of the di erent representations it provides. They felt in
particular that the dynamic representation of the
models helped them understand how the system adapted
over time. However, the participants were less
convinced when it came to usability of the tool. However,
this can be explained by the fact that the complexity
tool is strongly linked to the complexity of the
underlying approach.</p>
      <p>
        As future work we will rst integrate the useful
comments and feedback received from the participants in
our study. To deal with the scalability problem of
large models, we will address this issue by relying on
other visualisations such as for example a more
compact tree-like view a la S.P.L.O.T. [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ] or alternatively
using hyperbolic trees [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ] or a 3D representation such
as GEF3D [
        <xref ref-type="bibr" rid="ref38">38</xref>
        ]. We will also conduct more rigorous
user studies in order to get more conclusive results.
      </p>
      <sec id="sec-6-1">
        <title>Acknowledgements</title>
        <p>We are grateful to Jean Vanderdonckt for the many
fruitful discussions on this topic.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>G. D.</given-names>
            <surname>Abowd</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. K.</given-names>
            <surname>Dey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. J.</given-names>
            <surname>Brown</surname>
          </string-name>
          , N. Davies,
          <string-name>
            <given-names>M.</given-names>
            <surname>Smith</surname>
          </string-name>
          ,
          <string-name>
            <given-names>and P.</given-names>
            <surname>Steggles</surname>
          </string-name>
          .
          <article-title>Towards a better understanding of context and context-awareness</article-title>
          .
          <source>In Proc. HUC 99</source>
          , pages
          <fpage>304</fpage>
          {
          <fpage>307</fpage>
          . Springer,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>T.</given-names>
            <surname>Aotani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Kamina</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H.</given-names>
            <surname>Masuhara</surname>
          </string-name>
          .
          <article-title>Featherweight eventcj: A core calculus for a contextoriented language with event-based per-instance layer transition</article-title>
          .
          <source>In Proc. COP 11</source>
          , pages
          <fpage>1</fpage>
          <article-title>:1{1:7</article-title>
          . ACM,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>M.</given-names>
            <surname>Appeltauer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Hirschfeld</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Rho</surname>
          </string-name>
          .
          <article-title>Dedicated programming support for context-aware ubiquitous applications</article-title>
          .
          <source>In Proc. UBICOMM 08</source>
          , pages
          <fpage>38</fpage>
          {
          <fpage>43</fpage>
          . IEEE,
          <year>Sept 2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>R.</given-names>
            <surname>Capilla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hinchey</surname>
          </string-name>
          , and
          <string-name>
            <surname>F. J.</surname>
          </string-name>
          <article-title>D az. Collaborative context features for critical systems</article-title>
          .
          <source>In Proc. VaMoS 15</source>
          , pages
          <fpage>43</fpage>
          :
          <fpage>43</fpage>
          {
          <fpage>43</fpage>
          :
          <fpage>50</fpage>
          . ACM,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>R.</given-names>
            <surname>Capilla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Ortiz</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Hinchey</surname>
          </string-name>
          .
          <article-title>Context variability for context-aware systems</article-title>
          .
          <source>Computer</source>
          ,
          <volume>47</volume>
          (
          <issue>2</issue>
          ):
          <volume>85</volume>
          {
          <fpage>87</fpage>
          ,
          <string-name>
            <surname>Feb</surname>
          </string-name>
          .
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>N.</given-names>
            <surname>Cardozo</surname>
          </string-name>
          , S. Gunther,
          <string-name>
            <surname>T. D'Hondt</surname>
            , and
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Mens</surname>
          </string-name>
          .
          <article-title>Feature-oriented programming and context-oriented programming: Comparing paradigm characteristics by example implementations</article-title>
          .
          <source>In Proc. ICSEA 11</source>
          , pages
          <fpage>130</fpage>
          {
          <fpage>135</fpage>
          .
          <string-name>
            <surname>IARIA</surname>
          </string-name>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>N.</given-names>
            <surname>Cardozo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Mens</surname>
          </string-name>
          , P.-Y. Orban,
          <string-name>
            <given-names>S.</given-names>
            <surname>Gonzalez</surname>
          </string-name>
          , and W. De Meuter.
          <article-title>Features on demand</article-title>
          .
          <source>In Proc. VaMoS 14</source>
          , pages
          <fpage>18</fpage>
          :
          <article-title>1{18:8</article-title>
          . ACM,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>R.</given-names>
            <surname>Hirschfeld</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Costanza</surname>
          </string-name>
          , and
          <string-name>
            <given-names>O.</given-names>
            <surname>Nierstrasz</surname>
          </string-name>
          .
          <article-title>Context-oriented programming</article-title>
          .
          <source>JOT</source>
          ,
          <volume>7</volume>
          (
          <issue>3</issue>
          ):
          <volume>125</volume>
          {
          <fpage>151</fpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>P.</given-names>
            <surname>Costanza</surname>
          </string-name>
          and
          <string-name>
            <given-names>T. D</given-names>
            <surname>Hondt</surname>
          </string-name>
          .
          <article-title>Feature descriptions for context-oriented programming</article-title>
          .
          <source>In Lero Int. Science Centre</source>
          , pages
          <volume>9</volume>
          {
          <fpage>14</fpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>B.</given-names>
            <surname>Desmet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Vallejos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Costanza</surname>
          </string-name>
          , W. De Meuter, and
          <string-name>
            <surname>T. D'Hondt</surname>
          </string-name>
          .
          <article-title>Contextoriented domain analysis</article-title>
          .
          <source>In Modeling and Using Context</source>
          , pages
          <volume>178</volume>
          {
          <fpage>191</fpage>
          . Springer,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>B.</given-names>
            <surname>Duhoux</surname>
          </string-name>
          . L'
          <article-title>integration des adaptations interfaces utilisateur dans une approche de developpement logiciel orientee contexte</article-title>
          .
          <source>Master's thesis</source>
          , UCLouvain, Belgium,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>B.</given-names>
            <surname>Duhoux</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Mens</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Dumas</surname>
          </string-name>
          .
          <article-title>Feature visualiser: An inspection tool for context-oriented programmers</article-title>
          .
          <source>In Proc. COP 18</source>
          , pages
          <fpage>15</fpage>
          {
          <fpage>22</fpage>
          . ACM,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>C.</given-names>
            <surname>Ghezzi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Pradella</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Salvaneschi</surname>
          </string-name>
          .
          <article-title>Programming language support to context-aware adaptation: A case-study with erlang</article-title>
          .
          <source>In Proc. SEAMS 10</source>
          , pages
          <fpage>59</fpage>
          {
          <fpage>68</fpage>
          . ACM,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>S.</given-names>
            <surname>Gonzalez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Cardozo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Mens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Cadiz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.-C.</given-names>
            <surname>Libbrecht</surname>
          </string-name>
          , and
          <string-name>
            <surname>J.</surname>
          </string-name>
          <article-title>Go aux</article-title>
          . Subjective-c:
          <article-title>Bringing context to mobile platform programming</article-title>
          .
          <source>In Proc. SLE 10</source>
          , pages
          <fpage>246</fpage>
          {
          <fpage>265</fpage>
          . Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>S.</given-names>
            <surname>Gonzalez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Mens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Colacioiu</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Cazzola</surname>
          </string-name>
          .
          <article-title>Context traits: Dynamic behaviour adaptation through run-time trait recomposition</article-title>
          .
          <source>In Proc. AOSD 13</source>
          , pages
          <fpage>209</fpage>
          {
          <fpage>220</fpage>
          . ACM,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>S.</given-names>
            <surname>Gonzalez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Mens</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Cadiz</surname>
          </string-name>
          .
          <article-title>Contextoriented programming with the ambient object system</article-title>
          .
          <source>J.UCS</source>
          ,
          <volume>14</volume>
          (
          <issue>20</issue>
          ):
          <volume>3307</volume>
          {3332, nov
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>S.</given-names>
            <surname>Gu</surname>
          </string-name>
          <article-title>nther and</article-title>
          <string-name>
            <given-names>S.</given-names>
            <surname>Sunkle</surname>
          </string-name>
          .
          <article-title>Dynamically adaptable software product lines using ruby metaprogramming</article-title>
          .
          <source>In Proc. FOSD 10</source>
          , pages
          <fpage>80</fpage>
          {
          <fpage>87</fpage>
          . ACM,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>H.</given-names>
            <surname>Hartmann</surname>
          </string-name>
          and
          <string-name>
            <given-names>T.</given-names>
            <surname>Trew</surname>
          </string-name>
          .
          <article-title>Using feature diagrams with context variability to model multiple product lines for software supply chains</article-title>
          .
          <source>In Proc. SPLC 08</source>
          , pages
          <fpage>12</fpage>
          {
          <fpage>21</fpage>
          . IEEE,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>R.</given-names>
            <surname>Hirschfeld</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Costanza</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Haupt</surname>
          </string-name>
          .
          <article-title>Generative and transformational techniques in software engineering ii. chapter An Introduction to Context-Oriented Programming with ContextS</article-title>
          , pages
          <volume>396</volume>
          {
          <fpage>407</fpage>
          . Springer-Verlag,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>S.</given-names>
            <surname>Illescas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. E.</given-names>
            <surname>Lopez-Herrejon</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Egyed</surname>
          </string-name>
          .
          <article-title>Towards visualization of feature interactions in software product lines</article-title>
          .
          <source>In Proc. VISSOFT 16</source>
          , pages
          <fpage>46</fpage>
          {
          <fpage>50</fpage>
          . IEEE, Oct
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Jaroucheh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Liu</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Smith.</surname>
          </string-name>
          <article-title>Mapping features to context information: Supporting context variability for context-aware pervasive applications</article-title>
          .
          <source>In Proc. WIIAT 10</source>
          , volume
          <volume>1</volume>
          , pages
          <fpage>611</fpage>
          {
          <fpage>614</fpage>
          ,
          <string-name>
            <surname>Aug</surname>
          </string-name>
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>K. C. Kang</surname>
            ,
            <given-names>S. G.</given-names>
          </string-name>
          <string-name>
            <surname>Cohen</surname>
            ,
            <given-names>J. A.</given-names>
          </string-name>
          <string-name>
            <surname>Hess</surname>
            ,
            <given-names>W. E.</given-names>
          </string-name>
          <string-name>
            <surname>Novak</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A. S.</given-names>
            <surname>Peterson</surname>
          </string-name>
          .
          <article-title>Feature-oriented domain analysis (foda) feasibility study</article-title>
          .
          <source>Technical report</source>
          , CMU,
          <year>November 1990</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>C.</given-names>
            <surname>Kastner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Thum</surname>
          </string-name>
          , G. Saake,
          <string-name>
            <given-names>J.</given-names>
            <surname>Feigenspan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Leich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Wielgorz</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Apel</surname>
          </string-name>
          .
          <article-title>Featureide: A tool framework for feature-oriented software development</article-title>
          .
          <source>In Proc. ICSE 09</source>
          , pages
          <fpage>611</fpage>
          {
          <fpage>614</fpage>
          . IEEE,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ku</surname>
          </string-name>
          <article-title>hn. Reconciling context-oriented programming and feature modeling</article-title>
          .
          <source>Master's thesis</source>
          , UCLouvain, Belgium,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>J.</given-names>
            <surname>Lamping</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Rao</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Pirolli</surname>
          </string-name>
          .
          <article-title>A focus+context technique based on hyperbolic geometry for visualizing large hierarchies</article-title>
          .
          <source>In Proc. CHI 95</source>
          , pages
          <fpage>401</fpage>
          {
          <fpage>408</fpage>
          . ACM,
          <year>1995</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>J.</given-names>
            <surname>Lincke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Appeltauer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Steinert</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Hirschfeld</surname>
          </string-name>
          .
          <article-title>An open implementation for context-oriented layer composition in contextjs</article-title>
          .
          <source>SCP</source>
          ,
          <volume>76</volume>
          (
          <issue>12</issue>
          ):
          <volume>1194</volume>
          {
          <fpage>1209</fpage>
          ,
          <string-name>
            <surname>Dec</surname>
          </string-name>
          .
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>J.</given-names>
            <surname>Mauro</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Nieke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Seidl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>and I. C.</given-names>
            <surname>Yu</surname>
          </string-name>
          .
          <article-title>Context aware recon guration in software product lines</article-title>
          .
          <source>In Proc. VaMoS 16</source>
          , pages
          <fpage>41</fpage>
          {
          <fpage>48</fpage>
          . ACM,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>M.</given-names>
            <surname>Mendonca</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Branco</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Cowan</surname>
          </string-name>
          . S.p.l.o.t.:
          <article-title>Software product lines online tools</article-title>
          .
          <source>In Proc. OOPSLA 09</source>
          , pages
          <fpage>761</fpage>
          {
          <fpage>762</fpage>
          . ACM,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>K.</given-names>
            <surname>Mens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Capilla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Hartmann</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Kropf</surname>
          </string-name>
          .
          <article-title>Modeling and managing context-aware systems' variability</article-title>
          .
          <source>IEEE Software</source>
          ,
          <volume>34</volume>
          (
          <issue>6</issue>
          ):
          <volume>58</volume>
          {
          <fpage>63</fpage>
          ,
          <string-name>
            <surname>Nov</surname>
          </string-name>
          .
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>K.</given-names>
            <surname>Mens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Cardozo</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Duhoux</surname>
          </string-name>
          .
          <article-title>A contextoriented software architecture</article-title>
          .
          <source>In Proc. COP 16</source>
          , pages
          <fpage>7</fpage>
          <lpage>{</lpage>
          12. ACM,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [31]
          <string-name>
            <given-names>A.</given-names>
            <surname>Murguzur</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Capilla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Trujillo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Ortiz</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R. E.</given-names>
            <surname>Lopez-Herrejon</surname>
          </string-name>
          .
          <article-title>Context variability modeling for runtime con guration of servicebased dynamic software product lines</article-title>
          .
          <source>In Proc. SPLC 14</source>
          , pages
          <fpage>2</fpage>
          <article-title>{9</article-title>
          . ACM,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [32]
          <string-name>
            <given-names>T.</given-names>
            <surname>Poncelet</surname>
          </string-name>
          and
          <string-name>
            <surname>L. Vigneron.</surname>
          </string-name>
          <article-title>The phenomenal gem: Putting features as a service on rails</article-title>
          .
          <source>Master's thesis</source>
          , UCLouvain, Belgium,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [33]
          <string-name>
            <given-names>C.</given-names>
            <surname>Prehofer</surname>
          </string-name>
          .
          <article-title>Feature-oriented programming: A new way of object composition. CC-</article-title>
          PE,
          <volume>13</volume>
          :
          <fpage>465</fpage>
          {
          <fpage>501</fpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [34]
          <string-name>
            <given-names>G.</given-names>
            <surname>Salvaneschi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Ghezzi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Pradella</surname>
          </string-name>
          . Javactx:
          <article-title>Seamless toolchain integration for context-oriented programming</article-title>
          .
          <source>In Proc. COP 11</source>
          , pages
          <fpage>4</fpage>
          <article-title>:1{4:6</article-title>
          . ACM,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [35]
          <string-name>
            <given-names>G.</given-names>
            <surname>Salvaneschi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Ghezzi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Pradella</surname>
          </string-name>
          .
          <article-title>Context-oriented programming: A software engineering perspective</article-title>
          .
          <source>JSS</source>
          ,
          <volume>85</volume>
          (
          <issue>8</issue>
          ):
          <year>1801</year>
          { 1817, Aug.
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [36]
          <string-name>
            <given-names>G.</given-names>
            <surname>Salvaneschi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Ghezzi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Pradella</surname>
          </string-name>
          . Contexterlang:
          <article-title>Introducing context-oriented programming in the actor model</article-title>
          .
          <source>In Proc. AOSD 12</source>
          , pages
          <fpage>191</fpage>
          {
          <fpage>202</fpage>
          . ACM,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          [37]
          <string-name>
            <given-names>S.</given-names>
            <surname>Urli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Bergel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Blay-Fornarino</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Collet</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Mosser</surname>
          </string-name>
          .
          <article-title>A visual support for decomposing complex feature models</article-title>
          .
          <source>In Proc. VISSOFT 15</source>
          , pages
          <fpage>76</fpage>
          {
          <fpage>85</fpage>
          . IEEE,
          <year>Sept 2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          [38]
          <string-name>
            <surname>J. von Pilgrim</surname>
            and
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Duske.</surname>
          </string-name>
          <article-title>Gef3d: A framework for two-</article-title>
          ,
          <string-name>
            <surname>two-</surname>
          </string-name>
          and
          <article-title>-a-half-, and three-dimensional graphical editors</article-title>
          .
          <source>In Proc. SoftVis 08</source>
          , pages
          <fpage>95</fpage>
          {
          <fpage>104</fpage>
          . ACM,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>