<!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>Visualizing Code Variabilities for Supporting Reuse Decisions</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Anna Zamansky</string-name>
          <email>annazam@is.haifa.ac.il</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Iris Reinhartz-Berger</string-name>
          <email>iris@is.haifa.ac.il</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Information Systems, University of Haifa</institution>
          ,
          <country country="IL">Israel</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2017</year>
      </pub-date>
      <fpage>25</fpage>
      <lpage>34</lpage>
      <abstract>
        <p>Software reuse is the practice of using artifacts from existing systems to build new ones. It has been shown effective for improving quality and maintainability and for reducing cost and development time. Human factors have been identified as significant barriers to a wider adoption of reuse practices in industry. In this paper we consider a tool-supported approach for systematic reuse of object-oriented programs (written in Java) based on polymorphism-inspired mechanisms. The suggested tool gets as input implementations of multiple products, and produces a visual representation of the similarities and variabilities between their classes in terms of exhibits behaviors, as well as presents possible reuse options. We discuss the suitability of this approach for educational and training settings, and specifically for supporting reuse decisions of novice developers.</p>
      </abstract>
      <kwd-group>
        <kwd>Software reuse</kwd>
        <kwd>Education</kwd>
        <kwd>Decision Support</kwd>
        <kwd>Software Product Line Engineering</kwd>
        <kwd>Variability Analysis</kwd>
        <kwd>Variability Mechanisms</kwd>
        <kwd>Polymorphism</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Development has become increasingly complex while reducing time-to-market remains
a critical issue. Software reuse has been shown to be effective for reducing cost and
development time [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. However, there are significant barriers in the adoption of reuse
practices in industry. As pointed out in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], “initial research on software reuse has
focused on the technological issues (e.g., programming language support, creating and
retrieving reusable artifacts, repositories, etc.), and only later non-technical factors
(e.g., organization, processes, business drivers) were found to be important for the
success of a reuse strategy”.
      </p>
      <p>
        Recently more attention has been drawn to the human factors of reuse practices,
focusing mainly on decision making processes of developers [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. In particular,
empirical studies suggest reuse training is an important factor for improving reuse
practices [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Nevertheless, work on how to educate for reuse is scarce. Frakes and Kang
[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] stress the need for addressing reuse education: “Industry studies have shown that
education is a primary factor in better reuse, yet there had been little systematic study
of how best to do reuse education. Certainly, both academia and industry could improve
educational practices”.
      </p>
      <p>
        In this paper we propose a tool-supported approach for educating and training
novices and supporting reuse decisions. In [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] we presented a tool for comparing pairs of
software artifacts (object-oriented code) and representing their similarities and
variabilities. The tool, called VarMeR – a Variability Mechanisms Recommender, is based
on an ontological framework that compares software behaviors rather than concrete
implementations [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. This way software systems that have similar
intensions (i.e., exhibit similar behaviors) can be considered for reuse, even if their
implementations are different (e.g., contains different components).
      </p>
      <p>We particularly explore the suitability of VarMeR to assist novice developers in
reuse decisions. To this end, VarMeR was extended to compare an arbitrary number of
software artifacts (rather than pairs of artifacts). In other words, the input of VarMeR
is object-oriented code artifacts (in Java) that belong to multi software systems and the
output is a graph that captures the similarities and variabilities of the classes of those
systems in terms of their exhibited behavior. The tool further recommends how to
increase reuse by utilizing suitable polymorphism-inspired mechanisms.</p>
      <p>The rest of this paper is structured as follows. Section 2 provides an overview of our
proposed approach, while Section 3 presents the capabilities of the extended version of
the VarMeR tool (for supporting reuse when multi software products are available).
Section 4 describes the benefits of the tool and its possible use scenarios in educational
and training contexts, as well as some preliminary usability feedback. Finally, Section
5 summarizes and refers to future plans.
2</p>
    </sec>
    <sec id="sec-2">
      <title>The VarMeR Approach</title>
      <p>VarMeR analyzes the commonality and variability of products behaviors and presents
the analysis outcomes in the form of polymorphism-inspired mechanisms among
classes that behave similarly (even if their realizations are different). Specifically, the
approach is composed of three steps, shown in Figure 1: Extract Behaviors, Compare
Behaviors, and Analyze Variability.</p>
      <p>Products’
representations</p>
      <p>Similar elements
Extract
Behaviors</p>
      <p>Ontological
foundation</p>
      <p>Compare
Behaviors</p>
      <p>Similarity
measures</p>
      <p>Analyze
Variability</p>
      <p>Variability
mechanisms</p>
      <p>Reuse
Recommendations
.
.
.</p>
      <p>P1
Pn</p>
      <p>
        Based on ontological considerations [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], a software behavior can be represented as
a triplet of initial state – the status of the software before the behavior occurs, external
event – that triggers the behavior, and final state– the status of the software after the
behavior occurs. Those behavioral components are extracted from the public operations
of the different classes1. Each public class operation specifies some behavior of the
software product that is widely relevant within the product. We assume that the
operation name captures the essence of the behavior and thus can describe its trigger (the
external event), e.g., Borrow and Return of a Book Copy class in a library management
system (see Figure 2).
      </p>
      <sec id="sec-2-1">
        <title>Borrow:</title>
        <p>InitialState = {AvailabilityStatus:Boolean, BorrowingPeriod:int}
ExternalEvent = Borrow
FinalState = {AvailabilityStatus:Boolean, Borrow:void}</p>
        <p>For extracting initial and final states, we distinguish between two levels of operation
descriptor: shallow – which refers to the signature of the operation, and deep – which
takes into consideration the behavior in terms of attributes used and modified
throughout the operation (including those that are used and modified indirectly by operations
called from the analyzed operation). We consider only attributes and ignore local
variables, as the later can be defined for implementation and realization purposes and may
hinder the operation’s behavior essence. The initial state of the behavior is composed
of all the parameters passed to the operation (part of shallow) and all the class attributes
used (read) by the operation (part of deep). The final state consists of the operation
name and its returned type (part of shallow) and all the class attributes modified (set)
by the operation (part of deep). Figure 2 exemplifies the behavior extraction outcome
for the operation Borrow of the Book Copy class. Note that each attribute is presents
via its name and type which provide the basis for comparison.
2.2</p>
      </sec>
      <sec id="sec-2-2">
        <title>Compare Behaviors</title>
        <p>
          Different methods have been proposed for measuring the similarity of applications
or software systems. McMillan et al. [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ], for example, propose an approach called
CLAN that measures similarity of Java applications using the notion of semantic layers
that correspond to packages and class hierarchies. As opposed to that approach and
1 The assumption is that private and protected operations are introduced for implementation
purposes and thus hinder the exhibited behavior of the analyzed software product.
many other methods, which take into account structural implementation and realization
considerations, VarMeR measures the behavioral similarity of software systems.
        </p>
        <p>
          To this end, a similarity mapping between the behavior constituents (namely, initial
state, external event, and final state) is applied. This mapping can be based on existing
general-purpose or domain-specific similarity metrics or some combination of such
metrics. The metrics can be based on semantic nets or statistical techniques to measure
the distances among words and terms [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. Alternatively, they can use type or
schematic similarities, potentially ignoring the semantic roles or essence of the compared
elements [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. The similarity mapping associates to each operation’s constituent
(parameter, attribute used, or attribute modified) all of its similar counterparts in the other
operation (i.e., elements whose similarity with the given constituent exceeds some
predefined threshold).
        </p>
        <p>
          Returning to our example of Book Copy, assume a class named Car which has an
operation named Rent that changes the In Agency status of a car from true to false. It
further calculates the Back Date according to the Rental Period. Figure 3 exemplified
two potential similarity mappings: the first one (a) is based on a schematic type-based
similarity according to which two attributes are similar if and only if their types are
similar. The second mapping (b) is based on a semantic measure named Latent
Semantic Analysist (LSA) [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ].
        </p>
        <p>book copy
car
book copy
car
3.</p>
        <p>EXT (abbreviation for extension) – at least one constituent in operation 1 has no
counterpart in operation 2.</p>
        <p>Note that REF and EXT are not mutually exclusive; we refer to a combination of
both as REF-EXT (abbreviation for refined extension).</p>
        <p>Aggregating the above notions from the level of operations to the level of classes,
we take inspiration from the polymorphism mechanisms. Polymorphism is the
provision of a single interface to entities of different types. Therefore, the cases of
polymorphism are characterized by similar signatures of operations (namely, the USE category
in the shallow level of the operations). We further focus on three types of polymorphism
which are widely used in industry:
1. Subtyping (inclusion) polymorphism which includes refinement or extension of
behaviors (e.g., function pointers, inheritance).
2. Parametric polymorphism which includes name or type analogy (e.g., C++ templates).
3. Overloading which includes behavior change while maintaining the same signature.</p>
        <p>
          In order to make our approach accessible to developers (potentially novice ones and
students), we developed a tool named VarMeR – Variability Mechanisms
Recommender. While the first version of the tool, described in [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ], concentrated on analyzing
the commonality and variability between a pair of software products, the current
version extends the scope to a multi-product setting. This way the tool aims at supporting
reuse decisions and particularly the selection of the most suitable products (or product
parts) to reuse.
        </p>
        <p>
          The inputs of the tool, namely the software products, are provided as (paths to) jar
files. Those files are reverse engineered into class diagrams (in XMI format) and
Program Dependence Graphs (PDG)2 [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] (in JSON format). The shallow and deep levels
of the behaviors are extracted from those representations and the tool proceeds in the
2 PDG explicitly represents the data and control dependencies of a program.
three stages described in the previous section. The outcome is presented visually in
three levels of analysis, using graph-based representations:
• Product level with nodes representing the software products and edges representing
their degrees of similarity.
• Class level with nodes representing the classes of the analyzed software products and
edges representing recommendation on polymorphism-inspired mechanisms
(parametric, subtyping, and overloading).
• Operation level with nodes representing operations (of a certain sub-set of classes of
software products) and edges representing the mechanism characteristics listed in Table
1 (USE, REF, EXT, REF-EXT).
        </p>
        <p>In the product and class levels, the size of the nodes is proportional to the size of
objects they represent; the larger the node is, the more operations the class have or the
more classes the product has. The width of an edge, as well as its length, represents the
degree of evidence (e.g., the number of operations related with a certain type of
polymorphism); the thicker/longer the link is, the more evidence exist.</p>
        <p>An example of VarMeR output at the class level is depicted in Figure 4. The
comparison is done between three different software products, the classes of which are
represented using different colors. To support scalability, VarMer provides the user with
several possibilities for fine-tuning and information hiding, which are further discussed
in the next section.
4</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Potential Use of VarMeR in Education and Training Contexts</title>
      <p>
        Although lack of training has been identified as a major barrier to a wider adoption of
reuse practices in industry, no systematic way to address this problem has been
proposed [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. We suggest the VarMeR tool presented above as a starting point for
developing methods for education and decision support of novice developers and software
engineering students due to its intuitive abstractions, its visualization, and its support
for scalability. These features are discussed below, as well as some usability scenarios
and feedback we have collected regarding VarMeR.
      </p>
      <sec id="sec-3-1">
        <title>4.1 VarMeR in Education and Training Contexts</title>
        <p>
          Intuitive abstractions. Krueger [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] highlights the importance of choosing the right
abstraction in the context of reuse: “Why is software reuse difficult? Useful abstractions
for large, complex, reusable software artifacts will typically be complex. In order to use
these artifacts, software developers must either be familiar with the abstractions a priori
or must take time to study and understand the abstractions. The latter case can defeat
some or all of the gains in reusing an artifact.”
        </p>
        <p>
          VarMeR makes use of graph-based abstractions which are intuitive and easy to
understand: nodes to represent (different types of) elements, and edges to represent their
similarity relations. It also supports switching between different abstraction levels by
supporting multi-level analysis (product-, class- and operation-levels). Another kind of
abstraction made by the VarMeR approach is that comparison between software
elements is made in terms of intensions (i.e., exhibited behavior) rather than in terms of
realizations and implementations. Starting with understanding behavior may be much
easier than starting by understanding old code, especially for novices. As highlighted
by Agresti [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]: “It takes effort to understand old code. The developer is trying to
establish whether the old code will meet some or all of the new requirements so it can be
part of a new system. When that old code is written such that it makes it especially
difficult to understand, a developer can reasonably conclude that her effort is better
spent developing new code from scratch.”
        </p>
        <p>
          Visualization. While a large body of research on software visualization exists [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ],
to the best of our knowledge visualization for reuse has not yet been addressed. The
type of visualization offered by VarMeR can be classified as what is called in [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]
‘changing the perspective’, or “bringing large software engineering problems within
the scope of a single view,.., an attempt at complexity control, helping to keep a large
problem ‘in a single head’ by visualizing the overall structure and providing some
assistance for navigating or traversing that structure.” In VarMeR’s visualization we aim
to increase cognitive effectiveness by the use of simple and intuitive graph-based
elements (nodes and edges), employing also other visual variables such as color (to encode
different products), size (to encode the number of operations/classes in each
class/product) and edge thickness (to encode extent of similarity).
        </p>
        <p>Scalability: fine-tuning and information hiding. Reuse decisions might be easy
when considering two simple operations such as Borrow and Rent from Figure 3, but
dealing with large scale projects with hundreds of classes and thousands of behaviors
introduces an additional dimension of complexity when making reuse decisions. To
reduce the user cognitive load, VarMeR supports several ways of information hiding
and fine-tuning at the class level analysis (see Figure 4):
- Modifying thresholds for presenting recommendations for each type of
polymorphism (namely, the minimal percentages of “similar” operations to present
parametric, subtyping, and overloading edges can be set; the lower these thresholders
are, the more abstraction is needed to apply reuse for those classes).
- Hiding classes which have no similarity to other classes (Hide Classes button).
- Filtering the graph-based visualization according to different software packages of
the product (Filter Files button).</p>
      </sec>
      <sec id="sec-3-2">
        <title>4.2 Usability Scenarios and Feedback</title>
        <p>The above features provide a starting point for developing a method for supporting
novice developers and software engineering students in reuse decisions. Consider, e.g.,
a scenario in which a novice developer, or a student in a programming course, needs to
develop a software system. In an industrial setting, the company may have already
developed various similar systems and maintain a repository of software artifacts. In other
settings, some open-source applications may be available. Searching in such
repositories, e.g., using keywords or queries, our developer may discover several similar
systems, not all of which have informative descriptions, and each of which may have many
different versions. Let us assume that our developer finally decides to select five
systems, which according to their descriptions are quite similar to the system he/she needs
to develop. For making a decision which system (or system parts) to reuse, it is useful
to comprehend how the five systems differ.</p>
        <p>This is exactly the point where VarMeR enters the scene, providing assistance to
support such decisions. The developer can run the tool on the five selected systems3
and browse the similarity analysis and recommendations at different levels of
abstraction. The product-level analysis will show him/her which of the systems are most
similar. Zooming into class level, he/she can identify clusters of classes which can
potentially be reused for implementing different behaviors. Zooming again into the operation
level, we obtain information on the reuse relations among operations. At this stage the
developer can zoom into the implementation itself, by looking at the relevant segment
of code in an Eclipse-like environment and adapt the code to the task at hand.</p>
        <p>We are currently in the process of evaluating VarMeR’s usability. In a pilot setting,
we gave the tool to two pairs of students studying in the Information Systems
department at the University of Haifa. Each pair received two portions of similar Java projects
from SourceForge. They were requested to inspect VarMeR’s outcomes, and grade the
appropriateness of its recommendations. Our analysis of the open-text feedback,
provided by the students and classified by us according to VarMeR’s features, shows that
visualization was positively mentioned – and particularly the use of colors and size.
3 Note that theoretically the developer could run VarMeR on all the game applications. However,
the complexity of multi-object comparison dramatically increases as the number of objects
increases. Hence, some a-priori filtering is recommended.
The intuitive abstractions, and specifically the ability to zoom-in and zoom-out between
the product, class, and operation levels, was also considered very useful. The scalability
support was also mentioned as important, but the comprehensibility of three
independent bars (for parametric, subtyping, and overloading mechanisms) was questioned.
5</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Summary and Future Work</title>
      <p>The human factor is one of the most significant barriers in wider adoption of reuse
practices in industry. Yet aspects of reuse training and decision support have so far been
overlooked in the software engineering literature. We addressed this problem by
presenting a tool-supported approach aiming to support developers in making reuse
decisions, and discussed its applications in training settings. The VarMeR tool, supporting
our approach, has several features which make it attractive in the context of reuse
education. It applies intuitive abstractions of software artifacts, and allows for easy
switching between abstraction levels. Furthermore, it uses visualization which employs
intuitive visual constructs and variables, and aims to reduce cognitive load of developers
when dealing with large scale software projects by allowing for fine-tuning and
information hiding.</p>
      <p>In the future, we intend to explore several paths for further development of VarMeR
for educational purposes. First, we intend to develop a querying language on top of
VarMeR, in order to retrieve the most relevant artifacts to a given development task.
Second, we intend to systematically support reuse activities. After retrieving the
relevant (portions of) software artifacts, we need to explore how to guide the developer in
applying the reuse recommendations. Finally, we are in the process of adapting
VarMeR in an academic software engineering course. Empirical studies with the
students are planned to evaluate the benefits and limitations of the tool and further improve
the tool. Our long term vision is for VarMeR to be fully integrated in standard
development environments to promote reuse thinking as an integral part of development.
Acknowledgment. The authors thank Jonathan Liberman for his help in the
implementation of the VarMeR tool. We also thank Alex Kogan and Asaf Mor for their assistance
in the initial steps of the development. The first author was supported by the Israel
Science Foundation under grant agreement 817/15.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Agresti</surname>
            ,
            <given-names>W.W.</given-names>
          </string-name>
          (
          <year>2011</year>
          ).
          <article-title>Software reuse: developers' experiences and perceptions</article-title>
          .
          <source>Journal of Software Engineering and Applications</source>
          ,
          <volume>4</volume>
          (
          <issue>1</issue>
          ), pp.
          <fpage>48</fpage>
          -
          <lpage>58</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Anisa</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          (
          <year>2015</year>
          ).
          <article-title>Do Developers Make Unbiased Decisions? The Effect of Mindfulness and Not-Invented-Here Bias on the Adoption of Software Components</article-title>
          . ECIS'
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Diehl</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          (
          <year>2007</year>
          ).
          <article-title>Software visualization: visualizing the structure, behaviour, and evolution of software</article-title>
          . Springer Science &amp; Business
          <string-name>
            <surname>Media</surname>
          </string-name>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Favaro</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          (
          <year>1991</year>
          ).
          <article-title>What price reusability?: a case study</article-title>
          .
          <source>ACM SIGAda Ada Letters</source>
          ,
          <volume>11</volume>
          (
          <issue>3</issue>
          ), ACM, pp.
          <fpage>115</fpage>
          -
          <lpage>124</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Frakes</surname>
            ,
            <given-names>W.B.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Fox</surname>
            <given-names>C.J.</given-names>
          </string-name>
          (
          <year>1995</year>
          ).
          <article-title>Sixteen questions about software reuse</article-title>
          .
          <source>Communications of the ACM</source>
          ,
          <volume>38</volume>
          (
          <issue>6</issue>
          ):
          <fpage>75</fpage>
          -
          <lpage>ff</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Frakes</surname>
            ,
            <given-names>W.B.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Kang</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          (
          <year>2005</year>
          ).
          <article-title>Software reuse research: Status and future</article-title>
          .
          <source>IEEE transactions on Software Engineering</source>
          ,
          <volume>31</volume>
          (
          <issue>7</issue>
          ), pp.
          <fpage>529</fpage>
          -
          <lpage>536</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Kashyap</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Sheth</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , (
          <year>1996</year>
          ).
          <article-title>Semantic and schematic similarities between database objects: a context-based approach</article-title>
          .
          <source>VLDB Journal</source>
          ,
          <volume>5</volume>
          (
          <issue>4</issue>
          ), pp.
          <fpage>276</fpage>
          -
          <lpage>304</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Krinke</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          (
          <year>2001</year>
          ).
          <source>Identifying Similar Code with Program Dependence Graphs. 8th Working Conference on Reverse Engineering</source>
          , pp.
          <fpage>301</fpage>
          -
          <lpage>309</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Krueger</surname>
            ,
            <given-names>C. W.</given-names>
          </string-name>
          (
          <year>1992</year>
          ).
          <article-title>Software reuse</article-title>
          .
          <source>ACM Computing Surveys (CSUR) 24 (2)</source>
          ,
          <fpage>131</fpage>
          -
          <lpage>183</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Landauer</surname>
            ,
            <given-names>T. K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Foltz</surname>
            ,
            <given-names>P. W.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Laham</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          (
          <year>1998</year>
          ).
          <article-title>Introduction to Latent Semantic Analysis</article-title>
          .
          <source>Discourse Processes 25</source>
          , pp.
          <fpage>259</fpage>
          -
          <lpage>284</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>McMillan</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grechanik</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Poshyvanyk</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          (
          <year>2012</year>
          ).
          <article-title>Detecting similar software applications</article-title>
          .
          <source>34th International Conference on Software Engineering (ICSE'2012)</source>
          , pp.
          <fpage>364</fpage>
          -
          <lpage>374</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Mellarkod</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Appan</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jones</surname>
            ,
            <given-names>D. R.</given-names>
          </string-name>
          , &amp;
          <string-name>
            <surname>Sherif</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          (
          <year>2007</year>
          ).
          <article-title>A multi-level analysis of factors affecting software developers' intention to reuse software assets: An empirical investigation</article-title>
          .
          <source>Information &amp; Management</source>
          ,
          <volume>44</volume>
          (
          <issue>7</issue>
          ),
          <fpage>613</fpage>
          -
          <lpage>625</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Mihalcea</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Corley</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Strapparava</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          (
          <year>2006</year>
          ).
          <article-title>Corpus-based and knowledge-based measures of text semantic similarity</article-title>
          .
          <source>American Association for Artificial Intelligence (AAAI'06)</source>
          , pp.
          <fpage>775</fpage>
          -
          <lpage>780</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Mohagheghi</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Conradi</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          (
          <year>2007</year>
          ).
          <article-title>Quality, productivity and economic benefits of software reuse: a review of industrial studies</article-title>
          .
          <source>Empirical Software Engineering</source>
          <volume>12</volume>
          (
          <issue>5</issue>
          ),
          <fpage>471</fpage>
          -
          <lpage>516</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Petre</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>A. F.</given-names>
            <surname>Blackwell</surname>
          </string-name>
          , and
          <string-name>
            <surname>T. R. G. Green.</surname>
          </string-name>
          (
          <year>1998</year>
          )
          <article-title>Cognitive questions in software visualization</article-title>
          .
          <source>Software visualization: Programming as a multimedia experience</source>
          ,
          <volume>453</volume>
          -
          <fpage>480</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Reinhartz-Berger</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zamansky</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , &amp;
          <string-name>
            <surname>Wand</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          (
          <year>2016</year>
          ).
          <article-title>An Ontological Approach for Identifying Software Variants: Specialization and Template Instantiation</article-title>
          .
          <source>35th International Conference on Conceptual Modeling (ER'2016)</source>
          , pp.
          <fpage>98</fpage>
          -
          <lpage>112</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Reinhartz-Berger</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zamansky</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Kemelman</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          (
          <year>2015</year>
          ).
          <article-title>Analyzing Variability of Cloned Artifacts: Formal Framework and Its Application to Requirements. Enterprise, Business-Process and Information Systems Modeling</article-title>
          , EMMSAD'
          <year>2015</year>
          , pp.
          <fpage>311</fpage>
          -
          <lpage>325</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Reinhartz-Berger</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zamansky</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Wand</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          (
          <year>2015</year>
          ).
          <source>Taming Software Variability: Ontological Foundations of Variability Mechanisms. 34th International Conference on Conceptual Modeling (ER</source>
          '
          <year>2015</year>
          ),
          <source>LNCS 9381</source>
          , pp.
          <fpage>399</fpage>
          -
          <lpage>406</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Reinhartz-Berger</surname>
            ,
            <given-names>I. Zamansky</given-names>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          (
          <year>2017</year>
          ).
          <article-title>VarMeR - A Variability Mechanisms Recommender for Software Artifacts</article-title>
          .
          <source>CAiSE-Forum-DC2017</source>
          ,
          <fpage>57</fpage>
          -
          <lpage>64</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>Sojer</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Henkel</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          (
          <year>2010</year>
          ).
          <article-title>Code reuse in open source software development: Quantitative evidence, drivers, and impediments</article-title>
          .
          <source>Journal of the Association for Information Systems</source>
          ,
          <volume>11</volume>
          (
          <issue>12</issue>
          ),
          <fpage>868</fpage>
          -
          <lpage>901</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>