<!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>Explora: Infrastructure for Scaling Up Software Visualisation to Corpora</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Software Composition Group</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>University of Bern</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Switzerland http://scg.unibe.ch/</string-name>
        </contrib>
      </contrib-group>
      <abstract>
        <p>Visualisation provides good support for software analysis. It copes with the intangible nature of software by providing concrete representations of it. By reducing the complexity of software, visualisations are especially useful when dealing with large amounts of code. One domain that usually deals with large amounts of source code data is empirical analysis. Although there are many tools for analysis and visualisation, they do not cope well software corpora. In this paper we present Explora, an infrastructure that is speci cally targeted at visualising corpora. We report on early results when conducting a sample analysis on Smalltalk and Java corpora.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        A software corpus is a curated catalogue of software systems intended to be
used for empirical studies of code artefacts. The advantage of doing research on
corpora is that it encourages repeatable analyses. Corpus analysis is especially
used in the context of empirical software engineering, where results should be
repeatable [
        <xref ref-type="bibr" rid="ref15 ref16 ref9">9, 15, 16</xref>
        ]. Visualisation is especially useful for dealing with large
amounts of source code, since it provides software a concrete representation
making complex data easier to understand. However, most visualisation tools
are not designed for corpora.
      </p>
      <p>Imagine Edgar, an empirical software engineering researcher, who wants to
assess the prevalence of reuse of software in di erent languages. To begin, he
chooses to study reuse through inheritance and invocation in one of the oldest
object-oriented languages, Smalltalk and one of the most popular, Java. To gain
an initial insight into the data, he must carry out explorative data analysis,
including visualisation.</p>
      <p>To set up the environment for the analysis, he needs to overcome several
problems: 1) visualising one system at a time (as most visualisation systems allow)
prevents patterns from being recognized at the corpus level; 2) the lack of means
for real-time data manipulation (such as sorting, ltering, searching, inspecting)
discourages experimentation; and 3) two technical issues, memory consumption
and performance, complicate fetching and manipulating corpus data.</p>
      <p>In this paper we introduce our approach, Explora, which copes with these
issues.</p>
    </sec>
    <sec id="sec-2">
      <title>Analysis Example</title>
      <p>Edgar wants to target Smalltalk and Java corpora. He has a fair experience
implementing and maintaining systems in both languages. He realises that in
his experience Smalltalk systems have deeper hierarchies than Java ones, so he
wants to explore whether increased specialisation in Smalltalk systems correlates
with less reuse of their classes. Thus, he wants to answer the following research
question:</p>
      <p>RQ: \How di erent is reuse by inheritance and invocation in Smalltalk and
Java systems? "</p>
      <p>
        He believes that metrics are a suitable way for tackling this research question.
He chooses four metrics from a catalogue of metrics proposed by Lanza and
Marinescu to characterise two types of reuse: reuse via inheritance and reuse via
invocation [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
1) Average Hierarchy Height (AHH): the average depth of the inheritance trees
of a system is one of the two metrics that characterise inheritance.
2) Depth of Inheritance Tree (DIT): the maximum length of the path of each
class to the root class in a hierarchy; a measure of the system can be obtained
by aggregating this metric for each of the classes.
3) Fan-In: this quanti es the dependent classes (access and invocation
relationships) of a class.
4) Fan-Out: the outgoing coupling, which characterises communication.
      </p>
      <p>
        Edgar decides to start his analysis by visualising these metrics on all the
systems in both corpora. He decides to use Explora for his analysis. He downloads
the models of the systems in the two corpora following the installation
instructions of Pangea1 locally and places them in a dedicated folder called the model
workspace. To query corpora, Explora uses a so-called interactive Playground
implemented on top of the Moldable Inspector infrastructure [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] of Moose [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
Step 1: Computing the Metrics Figure 1 shows a screenshot of the
Playground in which:
1) As the user modi es the query in the Mapper pane, the right pane is updated.
      </p>
      <p>The Mapper pane shows a query written in plain Smalltalk for collecting AHH
(line 3), and the aggregated maximum value of DIT (line 7), Fan-In (line 9)
and Fan-Out (line 11) from every system in the two studied corpora. The
query de nes an inline array of associations, where each association is linked
to a di erent metric. The query uses the bound variable eachModel to refer
to the FAMIX meta-model of each system. The model enables code such as
\eachModel allModelClasses" and \c superclassHierarchy".</p>
      <sec id="sec-2-1">
        <title>1 http://scg.unibe.ch/research/pangea</title>
        <p>The user can evaluate metrics de ned in the system model, as is the case of
AHH, Fan-In and Fan-Out, or compute custom ones such as the one speci ed
for DIT. The query is sent to all the models of the systems in the model
workspace
2) The right pane shows the result of the query, which is always a collection of
objects retrieved from the queried system models by executing the query in
the Mapper pane. The objects in this collection can be further manipulated
(i.e. sorted, ltered, further queried, visualised).</p>
        <p>Each pane of the Playground is linked to an object. By using the bound
variable self the user can manipulate the object. The Playground supports
navigation using the Miller column technique2 on which the evaluation of a script
in a pane adds a new pane to the right that is linked with the returned object.
The Mapper is a special pane (since it is the rst) that uses a di erent bound
variable (eachModel) for referencing speci cally system models.
Step 2: Generating an Initial Visualisation A special type of
manipulation supported in right pane of the Playground uses the result object (i.e. the
collection of dictionaries) as input for a visualisation. To use this feature, Edgar
switches from the list view of the result to the Raw tab, which allows him to
write a visualisation script. For instance, Figure 2 shows in the left pane an
implementation of a lightweight visualisation using the Mondrian DSL. The result
object is referred to in this script as \self" (see lines 4, 5, 11 and 12).</p>
        <p>The right pane shows the generated visualisation. Each box represents a
system, Smalltalk ones being grouped at the bottom while Java systems are
at the top. The width of each box is mapped to AHH and the height to DIT.
Edgar mapped the metrics in this way so that boxes with a larger area will
indicate systems with many deep hierarchies. Furthermore, the darker the green</p>
      </sec>
      <sec id="sec-2-2">
        <title>2 http://en.wikipedia.org/wiki/Miller_columns</title>
        <p>of the box the higher the value of Fan-In. At a rst glance, the analysis of the
visualisation seems to reveal a pattern. Smalltalk systems are landscape oriented
in lighter colour and Java ones have a portrait orientation with a darker colour.
Since he took the maximum values of Fan-In and DIT, Edgar realises that in
general the Java corpus contains the most invoked class (highest Fan-In), and
the deepest hierarchy (highest AHH and DIT). This suggests that Java systems
exhibit more reuse than Smalltalk ones. This can be a misleading result due to
the decision of aggregating DIT and Fan-In using maximum values, since they
do not provide Edgar insight into a general tendency.</p>
        <p>Step 3: Exploring alternative Visualisations In consequence, Edgar
decides to nd out if this pattern still prevails when values are aggregated using
the median. He modi es the implementation accordingly, by aggregating the
values of DIT and Fan-In using the median. Without leaving the environment,
he goes to the left pane shown in Figure 1 and changes lines 9 and 11
accordingly (collecting median instead of maximum values). The Playground recallsl
the implementation of the previous visualisation generating a new one
automatically (Figure 3). Edgar notes the di erence between system Chronos in Figure
2 and in Figure 3. The analysis shows that even though it has neither the most
invoked class in the two corpora (light green in Figure 2), nor the deepest
hierarchy (lower height in Figure 2), in general its classes are the most invoked and
have deep hierarchies (large and dark box in Figure 3). Figure 3 shows that most
systems of the Smalltalk corpus exhibit more reuse by having larger, deeper and
more invoked hierarchies.</p>
        <p>Diving Into an Individual System Figure 4 shows a detailed visualisation
of Chronos which is a library for manipulating dates and times.3 Classes are
represented by circles. The darker the circle, the more invoked the class (higher
Fan-In). The size of the circle is mapped to Fan-Out allowing the user to
compare classes that behave as clients and providers in invocation relationships. Blue
edges between classes show inheritance relationships and grey edges represent
invocations. For a better analysis, only invocations of highly invoked classes are
shown (Fan-In greater than 90). From the visualisation Edgar can distinguish
main provider classes that are highly invoked (dark circles), even though some of
them are clients as well (darker and larger circles). Most notably, there is a
hierarchy in Figure 4-A that includes many highly invoked classes (ChronosObject ).
3 http://smalltalkhub.com/#!/~Chronos/Chronos
Besides, there are two classes in Figure 4-B
TimeZoneAnnualTransitionPolicyFactory and DateSpec that without being part of a hierarchy attract many
invocations. Finally in Figure 4-C Edgar notes a small hierarchy of chained
invocations.</p>
        <p>The top-down exploration starting from the visualisation at the corpora level
enabled Edgar to decide what systems to focus on. It gave him an overall
assessment of reuse between the two corpora as well as a detailed vision of the reuse
in a system, when he drilled down into Chronos. He learned that the greater
specialisation of Smalltalk systems seems not to a ect reuse. Indeed he found
deep hierarchies in the Chronos system but he also found that those hierarchies
are heavily reused.
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Technical Infrastructure</title>
      <p>
        When designing Explora we combined several tools for accomplishing the analysis
task. Explora is inspired by Pangea [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], and uses the Moose [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] platform for
analysing FAMIX [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] models of software systems. It reuses Object Model
Snapshots (OMS) from Pangea's data model. An OMS is a custom Moose image
containing a single FAMIX model of a system. The model currently includes
OMSs of two corpora: 1) Qualitas Corpus [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and 2) SqueakSource-100 [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>
        Explora is written in Pharo, an open-source Smalltalk dialect. The Pharo
live programming environment allows users to explore and navigate data in a
dynamic fashion. Explora uses a Playground built on top of the Moldable
inspector [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] of Pharo for querying the model, and manipulating results. The Roassal
visualisation engine [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] provides a comprehensive API for visualising data in
an agile fashion. Roassal provides several Domain-Speci c Languages including
Mondrian and Grapher.
      </p>
      <p>
        Work ow
1) The user de nes and triggers a query for collecting data from the corpora.
2) A main process looks for OMSs available in a local folder called the source
workspace, and evaluates the query in each of them (there are sequential and
parallel modes). An OMS is used as a cache holding a live version of the
system model that can be awakened, queried, and put back to sleep again.
3) The independent result returned by each OMS is serialised using Fuel [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
4) These partial results are aggregated to be returned to the user.
5) The user decides whether to go back to 1) or continue with the following step.
6) The user can manipulate the results by ltering, sorting, inspecting or using
them as input for a visualisation.
      </p>
      <p>Although the architecture scales up by adding more OMSs horizontally, it
is still constrained to the memory available in the Pharo 32 bit environment
for materialising objects. A workaround for this issue is to collect less data by
including into each OMS only essential information.</p>
      <p>Example's Benchmark Table 1 shows a benchmark with the performance
results and memory consumption at each step when we run the example analysis.
The data were collected by: 1) calling the garbage collector; 2) measuring the
memory used (average among 10000 times); 3) executing the step; 4) measuring
the memory used (average among 10000 times); and 5) calculating the di erence
between 4) and 2).</p>
      <p>Note that during the execution of the step 1 (Computing the Metrics) new
processes are created (in parallel or sequentially) using more memory, however
this is released after the execution.</p>
    </sec>
    <sec id="sec-4">
      <title>Future Work</title>
      <p>Automatic Visualisation Although Roassal provides a number of expressive
DSLs for di erent tasks, it requires expertise to generate useful visualisations.
We envision an approach that exploits expertise of proven well-designed
visualisations automatically visualise results. Users without expertise should be able
to pro t from such visualisations. Lately we are studying how experts visualise
software. We have been classifying their visualisations into several dimensions
such as goal, domain, granularity. We are working to develop an approach that
makes use of this classi cation to provide automatic visualisation.</p>
      <sec id="sec-4-1">
        <title>Automatic Visualisation Assessment Knowledgeable users who can imple</title>
        <p>ment data visualisations would bene t from Automatic Visualisation Assessment
AVA. While users are implementing visualisations, AVA would give them
feedback about visual design guidelines that are violated, and suggest how to resolve
them. Our idea is to develop a model of visual design constraints covering the
main pitfalls that developers encounter when visualising data, such as visual
cluttering, layout selection, and colour con ict.</p>
        <p>Expanding the Corpora There are a few systems in Qualitas Corpus that do
not t into an OMS. This will be solved with a 64-bit version of Pharo. We also
realise that SqueakSource-100 should be expanded to more systems to provide
more interesting results. Finally, we think that adding more corpora from other
languages would be an advantage for experimental analysis.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Related Work</title>
      <p>Explora expands related work by scaling up software visualisation to corpora.
Explora's design is based on three pillars: 1) liveness of the Pharo environment
which enables interactive exploration; 2) ready-to-use software corpora models
which encourage repeatable analyses; and 3) agile visualisation to provide
support for data analysis. Figure 5 shows how related work and Explora cover these
concepts.
5.1</p>
      <sec id="sec-5-1">
        <title>Visualisation Tools</title>
        <p>To the best of our knowledge there is no visualisation tool that provides support
for software corpora. Some of them allow users to load into memory several
models of systems, but they cannot visualise systems together. Only one of these
systems o ers liveness.</p>
        <p>
          CodeCrawler [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] is a visualisation tool based on Moose and FAMIX models.
It includes many built-in views covering several common software analysis tasks.
Views can be partially customised by assigning a speci c mapping between the
built-in metrics with the visual properties of the representation. CodeCrawler
was superseded by Mondrian [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ], a high-level DSL for specifying visualisations.
Both of them are meant for analysis of single model systems.
        </p>
        <p>
          SHriMP [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] visualises software using nested graph views for structural
entities such as packages, classes and methods. Edges between artefacts represent
dependencies such as inheritance, composition and association relationships. The
tool is meant to explore software structure and to navigate source code.
Hyperlinks are used ease navigation through source code. SHriMP targets developers
analysing their own code or legacy one but always coping with single systems.
        </p>
        <p>
          jGrasp [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] is a lightweight development environment implemented in Java.
Traditional data structures, such as stacks, queues and linked lists, can be easily
identi ed in the visualisation. It is intended to support Java teaching through
program visualisation. It only allows the user to visualise an isolated project.
        </p>
        <p>
          JIVE [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] stands for Java Interactive Visualisation Environment and is mainly
used for debugging, maintenance and learning. It provides interactive
visualisations of the runtime state and call history of a program. It is integrated in the
Eclipse IDE, allowing users to visualise a single project.
        </p>
        <p>
          Softwarenaut [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] is an analysis tool written in Smalltalk and which pro ts
from its liveness. It visualises software using hierarchical views. It includes three
complementary perspectives which allow the user to explore and navigate data.
The tool includes pre-packaged metrics that can be mapped to visual properties.
Although Softwarenaut allows users to load several model systems into memory,
it can only visualise one at a time.
5.2
        </p>
      </sec>
      <sec id="sec-5-2">
        <title>Data Analysis Tools</title>
        <p>
          Rascal [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] is a Domain Speci c Language for source code analysis and
manipulation. It is implemented as a plug-in for Eclipse, and consequently bene ts from
other tools installed in the environment, and exploits Eclipse to obtain software
models cheaply. It can only visualise the systems currently loaded in the Eclipse
workspace.
        </p>
        <p>
          Bauhaus [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] is a tool suite written in Ada that supports multi-language
program understanding and reverse engineering for maintenance and evolution.
It provides tools to extract, analyse, query and visualise software artefacts. It
provides support for analysis and visualisation of single systems.
        </p>
        <p>
          Pangea [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] is an environment for static analysis of multi-language software
corpora. Based on Moose it provides an expressive scripting language. However,
since it is implemented as a bash script, it o ers neither liveness, nor
visualisation. Pangea's output is normally a text le while in Explora it is a live object.
Large-Scale Data Analysis MapReduce [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] is a programming model and
implementation for processing large datasets. The model is based on the
disaggregation of a large dataset into smaller pieces that can be handled by di erent
servers in parallel. The query sent by a client is computed independently by each
server. Afterwards, the result of the computation of a server is aggregated.
Explora is inspired by MapReduce. In Explora, the corpora are disaggregated into
system models which compute queries independently. Explora is not distributed
over a network but runs locally.
6
        </p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>In conclusion, although there are many tools for software analysis and
visualisation most of them do not scale to software corpora. Data analysis tools that
do scale to corpora are not live. On the other hand, visualisation tools that do
o er liveness do not scale to corpora. In this paper we presented Explora, an
infrastructure for scaling up software visualisation to corpora. We presented an
example of analysis stressing its strengths, showing how visualisation can help
one to explore and understand software. However, we acknowledge that useful
visualisations are di cult to achieve. In consequence, in the future we want
to tackle this issue by automatically visualising software by mapping queries
to suitable, proven visualisations. We also think that users with the knowledge
for visualising software can pro t from automatic visualisation assessment, a
dynamic evaluation of the visualisation that provides feedback concerning
violations of visual design rules and guidelines.</p>
      <sec id="sec-6-1">
        <title>Acknowledgements</title>
        <p>We gratefully acknowledge the nancial support of the Swiss National Science
Foundation for the project \Agile Software Assessment" (SNSF project No.
200020-144126/1, Jan 1, 2013 - Dec. 30, 2015). This work has been partially
funded by CONICYT BCH/Doctorado Extranjero 72140330.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Vanessa</given-names>
            <surname>Pen</surname>
          </string-name>
          <article-title>~a Araya, Alexandre Bergel</article-title>
          , Damien Cassou, Stephane Ducasse, and
          <string-name>
            <given-names>Jannik</given-names>
            <surname>Laval</surname>
          </string-name>
          .
          <article-title>Agile visualization with Roassal</article-title>
          .
          <source>In Deep Into Pharo</source>
          , pages
          <volume>209</volume>
          {
          <fpage>239</fpage>
          . Square Bracket Associates,
          <year>September 2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Andrea</given-names>
            <surname>Caracciolo</surname>
          </string-name>
          , Andrei Chis, Boris Spasojevic, and
          <string-name>
            <given-names>Mircea</given-names>
            <surname>Lungu</surname>
          </string-name>
          .
          <article-title>Pangea: A workbench for statically analyzing multi-language software corpora</article-title>
          .
          <source>In Source Code Analysis and Manipulation (SCAM)</source>
          ,
          <year>2014</year>
          IEEE 14th International Working Conference on, pages
          <volume>71</volume>
          {
          <fpage>76</fpage>
          . IEEE,
          <year>September 2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>Andrei</given-names>
            <surname>Chis</surname>
          </string-name>
          , Oscar Nierstrasz, and Tudor G^
          <article-title>rba. The Moldable Inspector: a framework for domain-speci c object inspection</article-title>
          .
          <source>In Proceedings of International Workshop on Smalltalk Technologies (IWST</source>
          <year>2014</year>
          ),
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>James H Cross</surname>
          </string-name>
          ,
          <article-title>Dean Hendrix, and David A Umphress. jGRASP: an integrated development environment with visualizations for teaching java in cs1, cs2, and beyond</article-title>
          . In Frontiers in Education,
          <year>2004</year>
          .
          <source>FIE 2004. 34th Annual</source>
          , pages
          <volume>1466</volume>
          {
          <fpage>1467</fpage>
          . IEEE,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <article-title>Je rey Dean and Sanjay Ghemawat</article-title>
          .
          <source>MapReduce: simpli ed data processing on large clusters. Commun. ACM</source>
          ,
          <volume>51</volume>
          (
          <issue>1</issue>
          ):
          <volume>107</volume>
          {
          <fpage>113</fpage>
          ,
          <year>January 2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>Serge</given-names>
            <surname>Demeyer</surname>
          </string-name>
          , Stephane Ducasse, and
          <string-name>
            <given-names>Michele</given-names>
            <surname>Lanza</surname>
          </string-name>
          .
          <article-title>A hybrid reverse engineering platform combining metrics and program visualization</article-title>
          . In Francoise Balmas, Mike Blaha, and Spencer Rugaber, editors,
          <source>Proceedings of 6th Working Conference on Reverse Engineering (WCRE '99)</source>
          . IEEE Computer Society,
          <year>October 1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Mart</surname>
            n Dias, Mariano Martinez Peck, Stephane Ducasse, and
            <given-names>Gabriela</given-names>
          </string-name>
          <string-name>
            <surname>Arevalo</surname>
          </string-name>
          .
          <article-title>Fuel: a fast general purpose object graph serializer</article-title>
          .
          <source>Software: Practice and Experience</source>
          ,
          <volume>44</volume>
          (
          <issue>4</issue>
          ):
          <volume>433</volume>
          {
          <fpage>453</fpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>Stephane</given-names>
            <surname>Ducasse</surname>
          </string-name>
          , Tudor G^rba, and Oscar Nierstrasz.
          <article-title>Moose: an agile reengineering environment</article-title>
          .
          <source>In Proceedings of ESEC/FSE</source>
          <year>2005</year>
          , pages
          <fpage>99</fpage>
          {
          <fpage>102</fpage>
          ,
          <year>September 2005</year>
          .
          <article-title>Tool demo</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Jean-Marie</surname>
            <given-names>Favre</given-names>
          </string-name>
          , Dragan Gasevic, Ralf Lammel, and Ekaterina Pek.
          <article-title>Empirical language analysis in software linguistics</article-title>
          .
          <source>In Software Language Engineering</source>
          , pages
          <volume>316</volume>
          {
          <fpage>326</fpage>
          . Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10. Paul V Gestwicki and
          <string-name>
            <given-names>Bharat</given-names>
            <surname>Jayaraman</surname>
          </string-name>
          . Jive:
          <article-title>Java interactive visualization environment. In Companion to the 19th annual ACM SIGPLAN conference on Objectoriented programming systems, languages, and applications</article-title>
          , pages
          <volume>226</volume>
          {
          <fpage>228</fpage>
          . ACM,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11. Paul Klint, Tijs van der Storm, and
          <string-name>
            <given-names>Jurgen</given-names>
            <surname>Vinju</surname>
          </string-name>
          .
          <article-title>RASCAL: A domain speci c language for source code analysis and manipulation</article-title>
          .
          <source>In Source Code Analysis and Manipulation</source>
          ,
          <year>2009</year>
          . SCAM '
          <volume>09</volume>
          . Ninth IEEE International Working Conference on, pages
          <volume>168</volume>
          {
          <fpage>177</fpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>Michele</given-names>
            <surname>Lanza</surname>
          </string-name>
          and
          <string-name>
            <given-names>Radu</given-names>
            <surname>Marinescu</surname>
          </string-name>
          .
          <article-title>Object-Oriented Metrics in Practice</article-title>
          .
          <source>SpringerVerlag</source>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Mircea</surname>
            <given-names>Lungu</given-names>
          </string-name>
          , Adrian Kuhn, Tudor G^rba, and Michele Lanza.
          <article-title>Interactive exploration of semantic clusters</article-title>
          .
          <source>In 3rd International Workshop on Visualizing Software for Understanding and Analysis (VISSOFT</source>
          <year>2005</year>
          ), pages
          <fpage>95</fpage>
          {
          <fpage>100</fpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14. Michael Meyer, Tudor G^rba, and Mircea Lungu.
          <article-title>Mondrian: An agile visualization framework</article-title>
          .
          <source>In ACM Symposium on Software Visualization (SoftVis'06)</source>
          , pages
          <fpage>135</fpage>
          {
          <fpage>144</fpage>
          , New York, NY, USA,
          <year>2006</year>
          . ACM Press.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Paloma</surname>
            <given-names>Oliveira</given-names>
          </string-name>
          , Marco Tulio Valente, and Fernando Paim Lima.
          <article-title>Extracting relative thresholds for source code metrics</article-title>
          .
          <source>In Software Maintenance, Reengineering and Reverse Engineering (CSMR-WCRE)</source>
          ,
          <source>2014 Software Evolution Week-IEEE Conference on</source>
          , pages
          <volume>254</volume>
          {
          <fpage>263</fpage>
          . IEEE,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>Ekaterina</given-names>
            <surname>Pek</surname>
          </string-name>
          .
          <article-title>Corpus-based empirical research in software engineering</article-title>
          .
          <source>PhD thesis</source>
          , Universitaet Koblenz-Landau,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Aoun</surname>
            <given-names>Raza</given-names>
          </string-name>
          , Gunther Vogel, and
          <article-title>Erhard Plodereder. Bauhaus | a tool suite for program analysis and reverse engineering</article-title>
          .
          <source>In Reliable Software Technologies - AdaEurope</source>
          <year>2006</year>
          , pages
          <fpage>71</fpage>
          {
          <fpage>82</fpage>
          .
          <string-name>
            <surname>LNCS</surname>
          </string-name>
          (
          <volume>4006</volume>
          ),
          <year>June 2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Margaret-Anne</surname>
            <given-names>Storey</given-names>
          </string-name>
          , Casey Best, and
          <string-name>
            <given-names>Je</given-names>
            <surname>Michaud. SHriMP Views</surname>
          </string-name>
          :
          <article-title>An interactive and customizable environment for software exploration</article-title>
          .
          <source>In Proceedings of International Workshop on Program Comprehension (IWPC '2001)</source>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19. E. Tempero,
          <string-name>
            <given-names>C.</given-names>
            <surname>Anslow</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Dietrich</surname>
          </string-name>
          , T. Han,
          <string-name>
            <given-names>Jing</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Lumpe</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Melton</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Noble</surname>
          </string-name>
          .
          <article-title>The Qualitas Corpus: A curated collection of Java code for empirical studies</article-title>
          .
          <source>In Software Engineering Conference (APSEC)</source>
          ,
          <year>2010</year>
          17th Asia Paci c, pages
          <volume>336</volume>
          {
          <fpage>345</fpage>
          ,
          <year>December 2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <given-names>Sander</given-names>
            <surname>Tichelaar</surname>
          </string-name>
          .
          <article-title>Modeling Object-Oriented Software for Reverse Engineering and Refactoring</article-title>
          .
          <source>PhD thesis</source>
          , University of Bern,
          <year>December 2001</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>