<!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>Towards the Design and Implementation of Aspect-Oriented Programming for Spreadsheets</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Pedro Maia y</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jorge Mendes y</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ja´come Cunha z</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Henrique Rebeˆlox</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Joa˜o Saraiva y HASLab / INESC TEC</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Portugal yUniversidade do Minho</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Portugal</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>pedromaia</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>jorgemendes</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>jasg@di.uminho.pt</string-name>
        </contrib>
      </contrib-group>
      <abstract>
        <p>-A spreadsheet usually starts as a simple and single- to evolve into a single software artifact where all business user software artifact, but, as frequent as in other software logic from all different users is defined! In such a collaborative systems, quickly evolves into a complex system developed by setting if a new user needs to express a new business rule on tmhaensyamacetosrps.reOadftsehne,edt:iffwerheilnet ausseercsrwetoarrky omnadyifbfeereonntlyasipnevcotlsveodf the spreadsheet data, he/she has to do it by intrusively adding in adding plain data to the spreadsheet, an accountant may formulas to the existing spreadsheet. define new business rules, while an engineer may need to adapt The programming language community developed advanced the spreadsheet content so it can be used by other software modularity mechanisms to avoid this problem in regular smyesctehmans.isUmnsf,oratnudnaatselay, csopnreseaqdusheneecte,syssotmeme sodfothneotporfefveriomusodtauslkars programming languages. In that sense, aspect-oriented promay be defined by adding intrusive “code” to the spreadsheet. gramming (AOP) is a popular and advanced technique that In this paper we go through the design and implementation enables the modular implementation of the so-called crossof an aspect-oriented language for spreadsheets so that users cutting concerns. The crosscutting structure tends to appear can work on different aspects of a spreadsheet in a modular tangled and scatted across several artifacts of a software nweawy. bFuosrineexsasmrupllees, atospaenctsexciasntinbge sdperfienadedshieneto,rodrertotomianntirpoudluactee system. While implementing such crosscutting concerns, the the spreadsheet data to be ported to another system. Aspects crosscutting structure can appear in common software developare defined as aspect-oriented program specifications that are ment concerns, such as distribution and persistence [2], error dynamically woven into the underlying spreadsheet by an aspect handling [3], [4], certain design patterns [5], tracing [6], or weaver. In this aspect-oriented style of spreadsheet development, design by contract [6]-[8]. cdoifdfeerteontthueseorrsigdienvaellosppr,eoardrsehueseet,. aSsupcehctcsowdiethisouatdaddedd/ienxgeicnuttreudsibvye In this paper we introduce the concept of AOP to spreadthe spreadsheet weaving mechanism proposed in this paper. sheets. We start by introducing a running example in Section II. Our first contribution is presented in Section III where I. INTRODUCTION we adapt the AOP concept to spreadsheets. For instance, a key feature of a common aspect-oriented language is the possibility to add advice before, after or around a join point. Since spreadsheets are two-dimensional, AOP features like advising need to be adapted in order to be applied to spreadsheets. The second contribution we do in this work is the design of a new language to implement AOP for spreadsheets. This language is presented in Section IV. An overview of the architecture of the system is presented in Section V. Finally, Section VI discusses related work, and Section VII presents our conclusions.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Spreadsheet systems are the software system of choice
for many non-professional programmers, often called
enduser programmers [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], like for example, teachers, accountants,
secretaries, engineers, managers, etc. In the last century such
end users would develop their spreadsheets individually in
their own desktops, and sharing and reuse was not the usual
procedure. The recent advent of powerful mobile devices, and,
as a consequence, the availability of powerful cloud-based
spreadsheet systems (like, for example, Google Drive), has
dramatically changed this situation. Nowadays, spreadsheets
are complex software systems, developed and maintained by
many (end) users.
      </p>
      <p>Very much like in the development of other software
systems, different developers (end users in this case) are
concerned with different aspects of the functionality of the
system. However, while modern programming languages offer
modularity mechanisms providing powerful abstractions to
develop software collaboratively, spreadsheet systems offer no
such support to their users. As a result, a spreadsheet tends</p>
    </sec>
    <sec id="sec-2">
      <title>II. MOTIVATION</title>
      <p>In this section we present an example of a popular setting
to use spreadsheets: manage the students marks in a course.
Such a spreadsheet is shown in Fig. 1.</p>
      <p>In this simple spreadsheet, the final mark of a student
is the average of three evaluation items: two exams and
one essay. Thus, this mark is obtained by the formula
=AVERAGE(B2:D2) (for the student in line 2).</p>
      <p>Let us consider now a real scenario where three different
users share, access, and update this spreadsheet: a teaching
assistant, that mainly structures the spreadsheet and compiles
the different marks, the teaching coordinator who has to
validate the spreadsheet, decide on borderline cases, and send
the final marks to the academic services, and finally, the
Erasmus coordinator who has to adapt the marks of Erasmus
students to the ECTS system1.</p>
      <p>Because spreadsheets offer no modularity mechanisms, a
typical spreadsheet development environment allows a
spreadsheet to quickly evolve into a more complex one. That is, each
of the users adds/updates data and formulas in order to express
the (crosscutting) logic they need. In the following, we show
the spreadsheet after the teaching and Erasmus coordinator
update it.</p>
      <p>The data edited by one user can be seen as intrusive code
for the others. For example, the teaching coordinator and its
assistant are not concerned with the ECTS system, although
this concern is now part of their spreadsheet.</p>
      <p>Let us analyze the teaching coordinator role in more
detail. Because he decides on borderline cases, he decided to
approve only one of such cases (student in line 3). Instead
of changing that particular final mark formula, and as often
occurs in reality, he just replaces this formula by the constant
5.0. Although the result of such an operation is a correct
spreadsheet, this action has several problems. First, there is
no documentation on how borderline cases have been decided
(the threshold is not known). Second, the original spreadsheet
data is lost, and it may be difficult to recover it (for example,
if other borderline students ask for explanations).</p>
      <p>This is the natural setting to apply AOP. In this style of
programming users do not intrusively modify the original
program (a spreadsheet in our case), but instead, a new
software fragment is defined in order to specify the program
transformations needed to express such new concern. These
software fragments are called aspects. Then, a specific AOP
1For more details on the ECTS system please refer to http://ec.europa.eu/
education/tools/docs/ects-guide en.pdf.</p>
      <p>}
end
mechanism, called weaver, given the original program and the
aspect(s), weaves them into a coherent executable software
program.</p>
      <p>We present in Listing 1 our first spreadsheet aspect, the one
that specifies the coordinator concerns on borderline cases.</p>
      <p>Listing 1. An aspect to handle borderline marks.
aspect BorderlineCase
finalmark : select sheet{*}.column{*}.cell{*}
around finalmark {
#{cell.result &gt;= 4.8 &amp;&amp; cell.result &lt; 5 ? 5 :
cell.value}
} when {</p>
      <p>cell.column[0].value = "Final Mark"
}
end</p>
      <p>An aspect-oriented language has three main parts. First
it is necessary to select the join points of interest by
means of pointcut declarations. In the example, the pointcut
finalmark selects any cell within any worksheet. This is
done by the select command in our language. Then, the around
advice declaration defines the actions (transformations in our
case) to be applied. Hence, it specifies when the result of
evaluating a formula is greater than of equal to 4.8, and if it
is, the cell is replaced by the constant 5.0. To access the result
of the computation of a cell, that is, the result of the formula
in the cell, we use cell.result. This accesses a cell, and
after that, its computed result. The when statement specifies
when the action is applied (in this case to all columns labeled
Final Mark).</p>
      <p>This aspect clearly and non-intrusively defines the
crosscutting rule used to decide on borderline cases: all students with
marks greater than or equal to 4.8 are approved in the course.</p>
      <p>Similarly, the Erasmus coordinator can define an aspect
where the rules to define the ECTS marks are expressed. This
aspect is presented in Listing 2.</p>
      <p>Listing 2. Aspect to add ECTS marks.
aspect AddECTSMark
finalmarks : select sheet{*}.column{*}.cell{*}
right finalmarks {
=IF(#{cell.name}&lt;=10 &amp;&amp; #{cell.name}&gt;=9.5
, "A"
, IF(#{cell.name}&lt;9.5 &amp;&amp; #{cell.name}&gt;=8.5
, "B"
, IF(#{cell.name}&lt;8.5 &amp;&amp; #{cell.name}&gt;=6.5
, "C"
, IF(#{cell.name}&lt;6.5 &amp;&amp; #{cell.name}&gt;=5.5
, "D"
, IF(#{cell.name}&lt;5.5 &amp;&amp; #{cell.name}&gt;=5
, "E"
, "F")))))
} when {
column[0].value == "Final Mark"</p>
      <p>&amp;&amp; cell.row &lt;&gt; 0
}
right finalmarks {</p>
      <p>ECTS Mark
} when {
column[0].value = "Final Mark"
&amp;&amp; cell.row = 0</p>
      <p>In this aspect, we use cell.name to access the cell address
(for instance “E4”). Thus, when the IF formula is placed in the
corresponding cells, the correct references will be calculated
and inserted in the formula replacing the use of cell.name.</p>
      <p>An aspect weaver can then weave this aspects into the
original spreadsheet individually, or by composing them. Actually,
Fig. 2 shows the result of weaving the aspect
AddECTSMark after the aspect BorderlineCase. Thus, aspects can be
combined. It should also be noticed that such a spreadsheet
based weaver has to dynamically weave aspects since for
some aspects (BorderlineCase) only after computing formulas,
aspects can be weaved. Indeed, it is necessary to execute the
spreadsheet to get the results of formulas, for instance, when
the cell.result operator is used.</p>
      <p>We have just presented two aspects of our AOP spreadsheet
language and briefly explained how aspects are weaved into a
spreadsheet system. Next sections present in detail the design
and implementation of this language and weaver.</p>
      <p>III. APPLYING ASPECT-ORIENTED PROGRAMMING</p>
      <p>TO SPREADSHEETS</p>
      <p>In this section, we discuss how AOP concepts can be applied
to spreadsheets. Specific examples are described in Section IV.</p>
      <sec id="sec-2-1">
        <title>A. Spreadsheet Join Point Model</title>
        <p>In order to apply AOP to a language, it is necessary to
identify the join point model that the new aspect language
supports. A join point is a well-defined point in the program
that is specified by a pointcut, that is, an expression to match
specific elements within the language. In our case, these
elements are set to be the main elements of the spreadsheet,
where users will want to perform operations on, for instance,
use an alternate worksheet for testing or add more cells for
debugging. For spreadsheets, we define the following join
points of interest:
worksheets;
ranges; and,
cells.</p>
        <p>With these join points the spreadsheet is accessible from
aspects, hence users can separate concerns at different levels:</p>
        <sec id="sec-2-1-1">
          <title>Spreadsheet Worksheet Range</title>
        </sec>
        <sec id="sec-2-1-2">
          <title>Cell</title>
          <p>When a join point is instantiated, it is possible to perform an
action using advice. Advice are additional behavior that one
wants for the underlying program, that can be new worksheets,
ranges of cells, or single cells. This allows to separate the
business logic of the spreadsheet into several concerns when
developing the spreadsheet and then join everything in order
to achieve the wanted application.</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>B. Worksheet</title>
        <p>A spreadsheet file is composed of a set of worksheets, each
of which containing the cells with the data and formulas.
Worksheets are the top-level artifacts in a spreadsheet.</p>
        <p>As a join point, a worksheet (see Fig. 3) can be modified
by the standard AOP advice in the following manner:
before – insert a worksheet before the current join point;
after – insert a worksheet after the current join point;
around – insert a worksheet before and/or after the
current joint point and/or define an alternative worksheet
for the current join point.</p>
        <p>As an example, consider Fig. 3 with Sheet2 as the join
point. A before advice for this join point results in a new
worksheet between the worksheets Sheet1 and Sheet2. On
the other hand, if we consider an after advice, the resulting
worksheet is between worksheets Sheet2 and Sheet3.</p>
        <p>To specify a worksheet, two options are available: either
defining the cells for the new worksheet, or referencing a
worksheet to be duplicated.</p>
      </sec>
      <sec id="sec-2-3">
        <title>C. Cell</title>
        <p>Cells are the finest grained join points possible in the
spreadsheets world. Unlike common programming languages, they
are inserted in a two-dimensional plan. Thus, the usual before
and after advice declarations are not completely adequate since
ambiguities may arise about which of the two dimensions
(vertical or horizontal) should be used. To overcome this issue,
each kind of advice declaration is separated in two for each
dimension in the plane, resulting in the following:
XXXXXXXadXviXceX
direction
vertical
horizontal
before
above
left
after
below
right
The advice that can be defined for cell join points is:
left – add a cell, or range of cells, to the left of the current
join point;
above – add a cell, or range of cells, above the current
join point;
right – add a cell, or range of cells, to the right of the
current join point;
below – add a cell, or range of cells, below the current
join point;
around – define an alternative cell for the current join
point.</p>
        <p>A cell is specified just by stating its contents. A range of
cells is specified by defining the cells that it contains.</p>
        <p>In this section we present our language for aspects for
spreadsheets. This language is based on existing ones for
common purposes programming languages, and implements
the vision we described in Section III. The proposed language
allows to specify aspects defining its pointcuts and advice. For
each component of the aspects to be written by the user we
present next the corresponding grammar. This grammar is the
artifact used to validate, though a compiler, the correctness of
the aspects written by the users. We start by introducing the
grammar for pointcuts.</p>
      </sec>
      <sec id="sec-2-4">
        <title>A. Pointcuts</title>
        <p>Pointcuts are defined by an expression pattern, which is
specified by the following grammar:
hjoin pointi ::= hjp namei ‘:’ ‘select’ hpExpri
where hpExpri is a pattern expression. The expression is used
to define the kind of join point to be selected: sheet, range,
or cell.</p>
        <p>The allowed expressions in join points are instances of the
following productions:
hpExpri ::= hpSheeti
j hpSheeti ‘.’ hpRangei
j hpSheeti (‘.’ hpRangei)? ‘.’ hpCelli
hpSheeti ::= ‘sheet’ ‘{’ hpSheetExpri ‘}’
hpSheetExpri ::= ‘name’ hbCompi hstringi
j ‘number’ hbCompi hintegeri
j ‘*’
hpRangei ::= ‘range’ ‘{’ hpRangeExpri ‘}’
j ‘column’ ‘{’ hpRangeExpri ‘}’
j ‘row’ ‘{’ hpRangeExpri ‘}’
hpRangeExpri ::= ‘name’ hbCompi hstringi</p>
        <p>j ‘*’
hpCelli ::= ‘cell’ ‘{’ hpCellExpri ‘}’
hpCellExpri ::= ‘name’ hbCompi hstringi
j ‘match’ hbCompi hstringi
j ‘*’
hbCompi ::= ‘==’ j ‘&lt;’ j ‘&lt;=’ j ‘&gt;’ j ‘&gt;=’ j ‘&lt;&gt;’</p>
        <p>The pattern expression hpExpri allows to select worksheets
hsheeti, ranges hrangei, or cells hcelli.</p>
        <p>When specifying a worksheet as a join point, it is possible
to select a worksheet relative to a given name, to a worksheet
index, or to select all worksheets.</p>
        <p>For ranges, there are three kinds that can be selected: a
column range (column) with a width of one cell, a row range
(row) with a height of one cell, or a range with any rectangular
shape (range).</p>
        <p>For cells, it is possible to specify its address (name),
or a pattern-match expression (match). When no specific
worksheet, range or cell is necessary, the wildcard symbol
‘*’ can be used.</p>
        <p>With this, we can select, for instance, the second worksheet
worksheet_jp: select worksheet{number=2}
or a rectangular range of 3 columns by 2 rows starting at cell
A2 in any worksheet:</p>
        <p>range_jp: select worksheet{*}.range{name="A2:C3"}
or the cells in the first row of any worksheet:
cell_jp: select worksheet{*}.range{row=1}.cell{*}
Depending on the kind of join point selected, different
artifacts are made available to work with within the advice.
For worksheets, we can use the variable worksheet, and then
one of the attributes: name or number. For ranges, depending
on its kind, the available variable can be: range, column, or
row; they have the attribute name. Moreover, since ranges are
sets of cells, indexation can be used, for instance, to select the
first row of a column, one can write column[0]. For cells,
we have the variable cell which has the attribute name (its
cell reference).</p>
      </sec>
      <sec id="sec-2-5">
        <title>B. Advice</title>
        <p>Advice are the actions to apply to the join points. They are
defined by the following grammar:
hadvicei ::= (hadvice namei‘:’)? hadvice positioni</p>
        <p>hjp namei ‘{’ hcodei ‘}’ hadvice conditioni
hadvice positioni ::= ‘left’</p>
        <p>j ‘below’ j ‘around’
hadvice conditioni ::= (‘when {’ hbExpri ‘}’)?
j
‘above’
j
‘right’
where hcodei is a cell or a list of cells and respective contents:
hcodei ::= hstringi j hcellListi
hcellListi ::= hcellRef i ‘=’ hstringi (‘;’hcellListi)?</p>
        <p>The contents of the cell hstringi can be defined using
interpolation of values made available in the context of the
advice (for instance, join point contents) using interpolation.</p>
        <p>For example, to add a row which evaluates the total of a
column (for instance, the join point is a column range) where
the join point is named myColumn:
below myColumn { =SUM(#{range.name}) }</p>
        <p>In the above example, interpolation is used to introduce a
value that is available in the join point, but is not accessible
from common spreadsheet formulas. If the column range is
C1:C20, then the formula would be =SUM(C1:C20).</p>
        <p>Note that the order by which the advice are applied is
important. They are applied according to their precedence
which is defined by the order they are defined. In the case
of before the ones defined first are the ones with more
precedence. Thus, the ones defined earlier are applied first.</p>
        <p>For the after it is the other way around, that is, although
the ones declared first are the ones with more priority, they
are executed last. This is the common behavior of aspects for
other programming languages.</p>
        <p>Advice can be applied conditionally, that is, when a
specified criterion is met. This is specified with a boolean
expression as defined by the following grammar:
hbExpri ::= ‘!’ hbExpri
j hbExpri (‘&amp;&amp;’ j ‘||’) hbExpri
j hexpri hbCompi hexpri
hexpressioni ::= hbExpri j hvari j hstringi j hnumberi
j hcellRef i j hrangeRef i</p>
        <p>However, some aspects require the execution of the
program, in our case, of the spreadsheet (formulas). This is the
case illustrate in Listing 1 where it is necessary to compute the
student grade to decide if the final grade is changed or not. In
that case we used the operator cell.result, which requires
to evaluate the formula of the underlying cell to obtain its
result. Thus, the weaver must be integrated with a spreadsheet
execution engine. Indeed we intend to build the weaver inside
Excel itself, so it can reuse its recalculation mechanism.</p>
        <p>In these cases, the spreadsheet is kept untouched, but since
now the spreadsheet is only complete when considered with
the aspects defined, the values it shows may change.</p>
        <p>If the user wants to see the original spreadsheet then, it is
only necessary to deactivate the aspects.</p>
        <p>Fig. 5 illustrates the integration of our weaver with a
spreadsheet system to create an aspect-oriented spreadsheet
system.</p>
        <p>Spreadsheet</p>
        <p>Aspects
Weaver</p>
        <p>Excel
Execution</p>
        <p>
          Engine
C. Aspect Aspect-oriented programming has been applied to several
programming languages, for instance, Java [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ], C++ [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], or
        </p>
        <p>
          An aspect is composed of the definition of the pointcuts MATLAB [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ], [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], targeting specific characteristics of each
and the advice to apply to them, as defined by the following language in order to improve them. Some of these applications
grammar: contributed to shape the use of aspects, and introduced new
haspecti ::= ‘aspect’ hstringi concepts to this paradigm.
        </p>
        <p>
          hjoin pointi+ hadvicei+ Java was one of the first languages to be exposed to aspects
‘end’ through a language dubbed AspectJ [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. This language is
similar to Java so it feels familiar to Java users. It provides a
dynamic join point model, where some advice are applied at
        </p>
        <p>V. A WEAVER FOR SPREADSHEETS compile time, but others are applied only during run time when
In this section we present our architectural model for aspect the complete information about the execution is available. The
spreadsheets. The aspects are defined using the language pre- nature of spreadsheets, where both data and computation are
sented in Section IV, and together with the spreadsheet, they at the same level, imposes a dynamic join point model in order
are interpreted by the weaver. In this context, the spreadsheet to have access to run-time values.
is only complete when considered together with the aspects. AOP was also used to support development of embedded</p>
        <p>
          Some aspects can be handled statically, that is, without systems. The LARA language [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] was purposely designed
executing the spreadsheet. For instance, the example shown with this goal, but has a wider range of applications. Since
is Listing 2 does not need to execute the spreadsheet to know it can target several languages, we inspired ourselves on it as
what to do. the basis for the specification of aspects for spreadsheets.
        </p>
        <p>
          In the context of spreasheets, there are several works
presenting techniques to transform spreadsheets by using
spreadsheet specific transformation languages [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ], [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ], and
querying languages [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ], [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. Moreover, such transformations
can be refactorings to remove spreadsheet smells [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ]–[
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]
and thus improve their usage and reduce possible error entry
points.
        </p>
        <p>
          BumbleBee [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] is a Microsoft Excel add-in mainly for
performing refactorings to remove smells, but can also perform
other kinds of transformations. It finds cells where it can
apply a previously defined set of transformations, lets the
user select the transformation to apply, and then applies the
transformation to a selected range, to the entire worksheet,
or to the entire file. A limitation is that BumbleBee only
supports intra-formula transformations. Our language uses the
BumbleBee’s transformation language to support cell value
transformations.
        </p>
        <p>
          RefBook [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ] is another tool to perform refactorings to
remove spreadsheet smells. It implements a set of seven
refactorings in a Microsoft Excel add-in allowing users to
perform refactorings when working with their spreadsheets.
        </p>
        <p>Our approach can also be used to perform these refactorings.</p>
        <p>
          More generic transformations for spreadsheets, introduced
by end-users’ needs, can be performed using program
synthesis. This technique added the ability to transform strings of
text [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ], or tables of data [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ] from user-supplied examples,
providing a familiar way to solve common tasks when dealing
with spreadsheets.
        </p>
        <p>
          Another kind of transformation, targeting spreadsheet
testing, is mutation [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ]. The goal is to perform mutations in the
spreadsheet, that is, small modifications, in order to analyze
a test set for the spreadsheet being tested. Using our aspect
system, mutation is also possible, by using the BumbleBee
transformation language to specify cell mutations.
        </p>
        <p>
          In [
          <xref ref-type="bibr" rid="ref25">25</xref>
          ], [
          <xref ref-type="bibr" rid="ref26">26</xref>
          ] we presented techniques to infer the business
logic of spreadsheet data. Such techniques restructure the
spreadsheet data into different (relational) tables. Such tables
can be viewed as aspects of the business logic/spreadsheet
data. Thus, this approach may be used to infer aspects in
spreadsheets and to evolve a legacy spreadsheet into an
aspectoriented one.
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>VII. CONCLUSION</title>
      <p>This paper proposes the use of aspect-oriented programming
for spreadsheets. We have designed an aspect language that
considers spreadsheet peculiarities, and a dynamic weaver that
is embedded in the evaluation mechanism of a spreadsheet
system.</p>
      <p>Although AOP provides a powerful modular approach that
is particularly suitable to be used in software that is shared
and being collaboratively developed, our work opens some
important questions that we intend to answer in future work
by conducting empirical studies, namely:</p>
      <p>Are end users able to understand the abstractions
provided by AOP and to use it in practice?
This is not only related to our proposed language as it is a
more general question. Nevertheless, we need to answer
it so we can understand how to better make our AOP
language available for user. This is specially important
when dealing with end users.</p>
      <p>Does AOP improves end-users’ productivity?
We have shown that some of the model-driven approaches
we introduced in the past can do that. We will conduct
similar studies to evaluate this new proposal.</p>
      <p>
        Is the textual definition of the AOP language adequate or
should we use a more spreadsheet-like one?
When dealing with more advanced users, it is not always
the case they prefer visual languages [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ]. However, for
end users this is probably the case. We will extend our
work with a visual language to allow end users to define
aspects in a more friendly way.
      </p>
    </sec>
    <sec id="sec-4">
      <title>ACKNOWLEDGMENT</title>
      <p>This work is financed by the FCT – Fundac¸a˜o para a
Cieˆncia e a Tecnologia (Portuguese Foundation for Science
and Technology) within project UID/EEA/50014/2013. This
work has also been partially funded by FLAD/NSF through a
project grant (ref. 233/2014). The last author is supported by</p>
      <sec id="sec-4-1">
        <title>CAPES through a Programa Professor Visitante do Exterior</title>
        <p>(PVE) grant (ref. 15075133).</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>B. A.</given-names>
            <surname>Nardi</surname>
          </string-name>
          ,
          <article-title>A Small Matter of Programming: Perspectives on End User Computing</article-title>
          , 1st ed. Cambridge, MA, USA: MIT Press,
          <year>1993</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>S.</given-names>
            <surname>Soares</surname>
          </string-name>
          , E. Laureano, and
          <string-name>
            <given-names>P.</given-names>
            <surname>Borba</surname>
          </string-name>
          , “
          <article-title>Implementing distribution and persistence aspects with AspectJ,”</article-title>
          <source>in Proceedings of the 17th ACM SIGPLAN Conference on Object-oriented Programming, Systems, Languages, and Applications</source>
          , ser.
          <source>OOPSLA '02</source>
          . New York, NY, USA: ACM,
          <year>2002</year>
          , pp.
          <fpage>174</fpage>
          -
          <lpage>190</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/582419.582437
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>M.</given-names>
            <surname>Lippert</surname>
          </string-name>
          and
          <string-name>
            <given-names>C. V.</given-names>
            <surname>Lopes</surname>
          </string-name>
          , “
          <article-title>A study on exception detection and handling using aspect-oriented programming</article-title>
          ,
          <source>” in Proceedings of the 22Nd International Conference on Software Engineering</source>
          , ser.
          <source>ICSE '00</source>
          . New York, NY, USA: ACM,
          <year>2000</year>
          , pp.
          <fpage>418</fpage>
          -
          <lpage>427</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/337180.337229
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>F.</given-names>
            <surname>Castor</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Cacho</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Figueiredo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Garcia</surname>
          </string-name>
          ,
          <string-name>
            <surname>C. M. F. Rubira</surname>
            , J. S. de Amorim, and
            <given-names>H. O. da Silva</given-names>
          </string-name>
          , “
          <article-title>On the modularization and reuse of exception handling with aspects,” Softw</article-title>
          . Pract. Exper., vol.
          <volume>39</volume>
          , no.
          <issue>17</issue>
          , pp.
          <fpage>1377</fpage>
          -
          <lpage>1417</lpage>
          , Dec.
          <year>2009</year>
          . [Online]. Available: http://dx.doi.org/10.1002/spe.v39:
          <fpage>17</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>J.</given-names>
            <surname>Hannemann</surname>
          </string-name>
          and G. Kiczales, “
          <article-title>Design pattern implementation in Java and AspectJ</article-title>
          ,”
          <source>in Proceedings of the 17th ACM SIGPLAN Conference on Object-oriented Programming, Systems, Languages, and Applications</source>
          , ser.
          <source>OOPSLA '02</source>
          . New York, NY, USA: ACM,
          <year>2002</year>
          , pp.
          <fpage>161</fpage>
          -
          <lpage>173</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/582419.582436
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>G.</given-names>
            <surname>Kiczales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Hilsdale</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hugunin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kersten</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Palm</surname>
          </string-name>
          , and W. Griswold, “
          <article-title>Getting started with AspectJ,” Commun</article-title>
          . ACM, vol.
          <volume>44</volume>
          , no.
          <issue>10</issue>
          , pp.
          <fpage>59</fpage>
          -
          <lpage>65</lpage>
          , Oct.
          <year>2001</year>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/383845.383858
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>H.</given-names>
            <surname>Rebeˆlo</surname>
          </string-name>
          , G. T. Leavens,
          <string-name>
            <given-names>M.</given-names>
            <surname>Bagherzadeh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Rajan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Lima</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. M.</given-names>
            <surname>Zimmerman</surname>
          </string-name>
          , M. Corne´lio, and T. Thu¨m, “
          <article-title>AspectJML: Modular specification and runtime checking for crosscutting contracts</article-title>
          ,”
          <source>in Proceedings of the 13th International Conference on Modularity, ser. MODULARITY '14</source>
          . New York, NY, USA: ACM,
          <year>2014</year>
          , pp.
          <fpage>157</fpage>
          -
          <lpage>168</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/2577080.2577084
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>H.</given-names>
            <surname>Rebeˆlo</surname>
          </string-name>
          , R. Lima, and G. T. Leavens, “
          <article-title>Modular contracts with procedures, annotations, pointcuts</article-title>
          and advice,”
          <source>in SBLP '11: Proceedings of the 2011 Brazilian Symposium on Programming Languages</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>G.</given-names>
            <surname>Kiczales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Hilsdale</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hugunin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kersten</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Palm</surname>
          </string-name>
          , and W. G. Griswold, “
          <article-title>An overview of AspectJ,” in ECOOP 2001-Object-Oriented Programming</article-title>
          . Springer,
          <year>2001</year>
          , pp.
          <fpage>327</fpage>
          -
          <lpage>354</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>O.</given-names>
            <surname>Spinczyk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Gal</surname>
          </string-name>
          , and W. Schro¨ der-Preikschat, “AspectC++:
          <article-title>An aspect-oriented extension to the C++ programming language,” in Proceedings of the Fortieth International Conference on Tools Pacific: Objects for Internet, Mobile and Embedded Applications, ser</article-title>
          .
          <source>CRPIT '02</source>
          .
          <string-name>
            <surname>Darlinghurst</surname>
          </string-name>
          , Australia, Australia: Australian Computer Society, Inc.,
          <year>2002</year>
          , pp.
          <fpage>53</fpage>
          -
          <lpage>60</lpage>
          . [Online]. Available: http://dl.acm.org/citation.cfm?id=
          <volume>564092</volume>
          .
          <fpage>564100</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>J. M. Cardoso</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Diniz</surname>
            ,
            <given-names>M. P.</given-names>
          </string-name>
          <string-name>
            <surname>Monteiro</surname>
            ,
            <given-names>J. M.</given-names>
          </string-name>
          <string-name>
            <surname>Fernandes</surname>
            , and
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Saraiva</surname>
          </string-name>
          , “
          <article-title>A domain-specific aspect language for transforming MATLAB programs,” in Domain-Specific Aspect Language Workshop</article-title>
          (DSAL'
          <year>2010</year>
          ),
          <source>part of AOSD</source>
          ,
          <year>2010</year>
          , pp.
          <fpage>15</fpage>
          -
          <lpage>19</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>T.</given-names>
            <surname>Aslam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Doherty</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Dubrau</surname>
          </string-name>
          , and L. Hendren, “
          <article-title>AspectMatlab: An aspect-oriented scientific programming language,”</article-title>
          <source>in Proceedings of the 9th International Conference on Aspect-Oriented Software Development, ser. AOSD '10</source>
          . New York, NY, USA: ACM,
          <year>2010</year>
          , pp.
          <fpage>181</fpage>
          -
          <lpage>192</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/1739230.1739252
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>J. M. Cardoso</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Carvalho</surname>
            ,
            <given-names>J. G.</given-names>
          </string-name>
          <string-name>
            <surname>Coutinho</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          <string-name>
            <surname>Luk</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Nobre</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Diniz</surname>
            , and
            <given-names>Z.</given-names>
          </string-name>
          <string-name>
            <surname>Petrov</surname>
          </string-name>
          , “
          <article-title>Lara: an aspect-oriented programming language for embedded systems</article-title>
          ,”
          <source>in Proceedings of the 11th annual international conference on Aspect-oriented Software Development. ACM</source>
          ,
          <year>2012</year>
          , pp.
          <fpage>179</fpage>
          -
          <lpage>190</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>F.</given-names>
            <surname>Hermans</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Dig</surname>
          </string-name>
          , “
          <article-title>BumbleBee: A refactoring environment for spreadsheet formulas</article-title>
          ,”
          <source>in Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering</source>
          , ser.
          <source>FSE</source>
          <year>2014</year>
          . New York, NY, USA: ACM,
          <year>2014</year>
          , pp.
          <fpage>747</fpage>
          -
          <lpage>750</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/2635868.2661673
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>S.</given-names>
            <surname>Badame</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Dig</surname>
          </string-name>
          , “
          <article-title>Refactoring meets spreadsheet formulas,” in Software Maintenance (ICSM</article-title>
          ),
          <year>2012</year>
          28th IEEE International Conference on,
          <source>Sept</source>
          <year>2012</year>
          , pp.
          <fpage>399</fpage>
          -
          <lpage>409</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>O.</given-names>
            <surname>Belo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Mendes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          , “
          <article-title>QuerySheet: A bidirectional query environment for modeldriven spreadsheets,” in Proceedings of the 2013 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC)</article-title>
          . IEEE,
          <year>2013</year>
          , pp.
          <fpage>199</fpage>
          -
          <lpage>200</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Mendes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          , “
          <article-title>Querying model-driven spreadsheets,” in Proceedings of the 2013 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC)</article-title>
          . IEEE,
          <year>2013</year>
          , pp.
          <fpage>83</fpage>
          -
          <lpage>86</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>F.</given-names>
            <surname>Hermans</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Pinzger</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <surname>A. van Deursen</surname>
          </string-name>
          , “
          <article-title>Detecting code smells in spreadsheet formulas,” in Software Maintenance (ICSM</article-title>
          ),
          <year>2012</year>
          28th IEEE International Conference on,
          <source>Sept</source>
          <year>2012</year>
          , pp.
          <fpage>409</fpage>
          -
          <lpage>418</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Ribeiro</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          , “
          <article-title>Towards a catalog of spreadsheet smells</article-title>
          ,”
          <source>in Proceedings of the 12th international conference on Computational Science and Its</source>
          Applications - Volume
          <string-name>
            <surname>Part</surname>
            <given-names>IV</given-names>
          </string-name>
          ,
          <article-title>ser</article-title>
          .
          <source>ICCSA'12</source>
          . Berlin, Heidelberg: Springer-Verlag,
          <year>2012</year>
          , pp.
          <fpage>202</fpage>
          -
          <lpage>216</lpage>
          . [Online]. Available: http://dx.doi.
          <source>org/10.1007/ 978-3-642-31128-4 15</source>
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Martins</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Mendes</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          , “
          <article-title>SmellSheet detective: A tool for detecting bad smells in spreadsheets</article-title>
          .” in VL/HCC, M. Erwig, G. Stapleton, and G. Costagliola, Eds. IEEE,
          <year>2012</year>
          , pp.
          <fpage>243</fpage>
          -
          <lpage>244</lpage>
          . [Online]. Available: http://dblp.uni-trier.de/db/conf/ vl/vlhcc2012.html#CunhaFMMS12
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Martins</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          , “
          <article-title>Refactoring meets model-driven spreadsheet evolution,”</article-title>
          <source>in 9th International Conference on the Quality of Information and Communications Technology (QUATIC)</source>
          ,
          <year>Sept 2014</year>
          , pp.
          <fpage>196</fpage>
          -
          <lpage>201</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>S.</given-names>
            <surname>Gulwani</surname>
          </string-name>
          , “
          <article-title>Automating string processing in spreadsheets using inputoutput examples,” in Proceedings of the 38th Annual ACM SIGPLANSIGACT Symposium on Principles of Programming Languages, ser</article-title>
          .
          <source>POPL '11</source>
          . New York, NY, USA: ACM,
          <year>2011</year>
          , pp.
          <fpage>317</fpage>
          -
          <lpage>330</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/1926385.1926423
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>W. R.</given-names>
            <surname>Harris</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Gulwani</surname>
          </string-name>
          , “
          <article-title>Spreadsheet table transformations from examples</article-title>
          ,”
          <source>in Proceedings of the 32Nd ACM SIGPLAN Conference on Programming Language Design and Implementation</source>
          , ser.
          <source>PLDI '11</source>
          . New York, NY, USA: ACM,
          <year>2011</year>
          , pp.
          <fpage>317</fpage>
          -
          <lpage>328</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/1993498.1993536
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>R.</given-names>
            <surname>Abraham</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Erwig</surname>
          </string-name>
          , “
          <article-title>Mutation operators for spreadsheets,” Software Engineering</article-title>
          , IEEE Transactions on, vol.
          <volume>35</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>94</fpage>
          -
          <lpage>108</lpage>
          ,
          <year>Jan 2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Erwig</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          , “
          <article-title>Automatically inferring ClassSheet models from spreadsheets,” in Proceedings of the 2010 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC)</article-title>
          .
          <source>IEEE CS</source>
          ,
          <year>2010</year>
          , pp.
          <fpage>93</fpage>
          -
          <lpage>100</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Erwig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Mendes</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          , “
          <article-title>Model inference for spreadsheets</article-title>
          ,”
          <source>Automated Software Engineering</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>32</lpage>
          ,
          <year>2014</year>
          . [Online]. Available: http://dx.doi.org/10.1007/s10515-014-0167-x
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          , “
          <article-title>Querying Spreadsheets: An Empirical Study</article-title>
          ,
          <string-name>
            <surname>” ArXiv</surname>
          </string-name>
          e-prints,
          <source>Feb</source>
          .
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>