<!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>
      <journal-title-group>
        <journal-title>Proceedings of the SQAMIA</journal-title>
      </journal-title-group>
      <issn pub-type="ppub">1613-0073</issn>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>The Case for Non-Cohesive Packages</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>NICOLAS ANQUETIL</string-name>
          <email>nicolas.anquetil@inria.fr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>MUHAMMAD USSMAN BHATTI</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>STE´ PHANE DUCASSE</string-name>
          <email>stephane.ducasse@inria.fr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>ANDRE HORA</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>and JANNIK LAVAL, Inria - Lille Nord Europe - Cristal - University of Lille - CNRS</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2017</year>
      </pub-date>
      <volume>6</volume>
      <fpage>11</fpage>
      <lpage>13</lpage>
      <abstract>
        <p>While the lack of cohesiveness of modules in procedural languages is a good way to identify modules with potential quality problems, we doubt that it is an adequate measure for packages in object-oriented systems. Indeed, mapping procedural metrics to object-oriented systems should take into account the building principles of object-oriented programming: inheritance and late binding. Inheritance o ers the possibility to create packages by just extending classes with the necessary increment of behavior. Late binding coupled to the \Hollywood Principle" are a key to build frameworks and let the users branch their extensions in the framework. Therefore, a package extending a framework does not have to be cohesive, since it inherits the framework logic, which is encapsulated in framework packages. In such a case, the correct modularization of an extender application may imply low cohesion for some of the packages. In this paper we con rm these conjectures on various real systems (JHotdraw, Eclipse, JEdit, JFace) using or extending OO frameworks. We carry out a dependency analysis of packages to measure their relation with their framework. The results show that framework dependencies form a considerable portion of the overall package dependencies. This means that non-cohesive packages should not be considered systematically as packages of low quality.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Categories and Subject Descriptors: D.2.8 [Software Engineering] Metrics; D.2.9 [Software Engineering] Software quality
assurance</p>
    </sec>
    <sec id="sec-2">
      <title>1. INTRODUCTION</title>
      <p>
        19:2
universally accepted metrics are available
        <xref ref-type="bibr" rid="ref15 ref2 ref20 ref26 ref27 ref28 ref3 ref9">(e.g. [Allen and Khoshgoftaar 2001; Bieman and Kang 1995;
Ponisio 2006])</xref>
        .
      </p>
      <p>The rest of the paper is structured as follows: Section 2 describes the building principles of OO
frameworks and Section 3 presents limitations of existing coupling and cohesion metrics. Section 4
describes our experimental settings. The results are presented in sections 5 and 6. Section 7 discusses
the experiment and the results of the paper and Section 8 presents the work related to this study.
Finally, Section 9 concludes the paper.</p>
    </sec>
    <sec id="sec-3">
      <title>2. LATE-BINDING AND FRAMEWORKS</title>
      <p>Late-binding is the fact that the receiver of a message is used to determine the method that will
be executed in response to this message. It is the cornerstone of object-oriented programming.
Latebinding is the key mechanism behind the Hook and Template Design Patterns [Gamma et al. 1995]
and the building of white box frameworks [Fayad et al. 1999; Pree 1995; Roberts and Johnson 1997].</p>
      <p>A framework is a set of interacting classes (possibly abstract) defining the context and the logic of
behavior. Frameworks are reusable designs of all or part of a software system described by a set of
abstract classes and the way instances of those classes collaborate [Roberts and Johnson 1997].</p>
      <p>Frameworks are often built around a core package with interfaces and abstract classes. Such core
classes interact among themselves to define the logic of the domain and they exhibit hook
methods that extender applications will be able to specialize (see Figure 1). These classes can be
subclassed/specialized in other framework packages but they are also extended by concrete extender
applications.</p>
      <p>The idea of cohesive modules is based on the notion of blackbox reuse (Figure 1, left). Inheritance is
a white box reuse mechanism, which means a module can be plugged into another module (from which
it inherits) without specifying its whole behavior [Fayad et al. 1999; Pree 1995; Roberts and Johnson
1997]. In particular OO frameworks are based on the Hollywood Principle (“don’t call us, we’ll call
you”), which supposes that the extender application can “inject” code into the underlying framework
through inheritance (Figure 1, right). In this case, the extender application (class D) may call a method
offered by an internal class (class C) but actually provided by a framework class (class A). Conversely,
the framework (class B) may send a message to an instance that ends up being implemented in the
extender application (an instance of class C). Bieman and Kang [Bieman and Kang 1995] recognize
two ways to reuse a class: by instantiation and by inheritance. Similarly, we consider that a framework
class can be used in these two ways. Defining what is a cohesive module in this case is more complex
than for black box reuse.</p>
      <p>We will distinguish two layers in the systems studied:
—Provider Framework: (abbreviated f/w) any software application that is extended to create another
software system. In this sense, the provider framework could be a complete software application.
—Extender Application: the application that is being analyzed, this is the subject of the experiment.</p>
      <p>We consider that the extender application is developed using framework classes.</p>
      <p>Working hypothesis. There exists in the common perception of package cohesion a rampant
misunderstanding: In an object-oriented language, a well designed package does not have to be necessarily
cohesive.</p>
      <p>Our claim is that in the presence of late-binding, weakly cohesive packages are not necessarily of
bad quality. Over this article we will refine this claim and show evidence of this fact.</p>
      <p>Client program
procedural
library</p>
      <p>Procedural</p>
      <p>Object-Oriented Framework
m</p>
      <p>A
m</p>
      <p>C
n</p>
      <p>B</p>
      <p>D
Framework Extenders / Users</p>
      <p>Object-Oriented
m</p>
      <p>E</p>
    </sec>
    <sec id="sec-4">
      <title>3. COHESION AND COUPLING OF PACKAGES</title>
      <p>Stevens et al. [Stevens et al. 1974], who first introduced coupling in the context of structured
development techniques, define coupling as “the measure of the strength of association established by a
connection from one module to another”. From then on, the mantra of good design has been that a
module (package, class, function) must exhibit high cohesion and low coupling. The importance of this
belief in the software engineering culture might be measured by the quantity of work on the topic of
measuring cohesion and coupling. In OOP (Object-Oriented Programming) for example, this is attested
by the study of Briand et al. [Briand et al. 1999].</p>
      <p>In this section, we review existing metrics at the package level and show that they are based on
dependencies between the classes of the packages. We will further show that many metrics at the class
level are also based on dependencies and those that are not, cannot be made to measure cohesion and
coupling at the package level. We will conclude that we are lead to use a metric based on dependencies.
We will further examine the existing package metrics and highlight some shortcomings that drove us
to dismiss them. These conclusions will serve as bases to choose cohesion/coupling metrics in Section
4.</p>
    </sec>
    <sec id="sec-5">
      <title>3.1 Cohesion and coupling at package level</title>
      <p>
        At the level of packages (or groups of classes) the following publications were found to propose
cohesion/coupling metrics:
—COF (Coupling
        <xref ref-type="bibr" rid="ref12">Factor) [Brito e Abreu et al. 1995</xref>
        ] is a metric defined at program scope, it is a
normalized ratio between the number of client relationships and the total number of possible client
relationships of the classes. A client relationship exists whenever a class references a method or
attribute of another class.
—Bunch [Mitchell and Mancoridis 2006] is a tool that remodularizes automatically software, based on
the metrics of module cohesion and coupling defined by the approach. Similarly to COF, cohesion
and coupling are defined as a normalized ratio between the existing dependencies of a package’s
classes and the maximum number of such dependencies, but Bunch considers incoming and outgoing
dependencies.
—Ponisio et al. [Ponisio and Nierstrasz 2006] propose a technique to measure package cohesion by
analyzing how client packages access the classes of a given provider package.
—A similar approach is presented in [Misˇic´ 2001] that calculates package cohesion based on the fan-in
of the contained objects.
—Abdeen [Abdeen 2009] presents a set of metrics to capture the quality of a package in the context of
an existing structure (set of packages).
—Bavota et al. propose to analyze the structural and semantic relationships between classes in a
package to define new packages with higher cohesion [Bavota et al. 2010].
—With Relational Cohesion [Martin 2002], Martin defines the cohesion of packages as the average
number of internal relationships per class, and efferent coupling looks at the number of classes
outside the package that classes inside depend upon (Afferent coupling is the number of classes
external to the package which depend upon classes in the package).
      </p>
      <p>We conclude that, at the package level, all metrics are based on connectivity between classes
inside the package with classes in the same package (cohesion) or in other packages (coupling). This
connectivity is computed from dependencies between the classes.</p>
    </sec>
    <sec id="sec-6">
      <title>3.2 Cohesion and coupling at class level</title>
      <p>There has been lot of work on cohesion/coupling at the class level too:
—With CBO (Coupling Between Object) [Chidamber and Kemerer 1994], two classes are coupled
together if one of them uses the other, i.e., one class calls a method or accesses an attribute of the
other.
—MPC (Message Passing Coupling) [Li and Henry 1993] is defined as the “number of send statements
defined in a class”. The authors further refine the definition by indicating that calls to the class’s
own methods are excluded from the count, and that only calls from local methods are considered,
excluding calls in inherited methods.
—The highly debated LCOM (Lack of cohesion of Method) and followers LCOM* [Briand et al. 1998;
Chidamber and Kemerer 1994] try to capture class cohesion by measuring how well methods access
the class state.
—TCC (Tight Class Cohesion) [Bieman and Kang 1995], is the normalized ratio between the number of
methods directly connected with other methods through an instance variable and the total number
of possible connections between methods.
—C3 (Conceptual Cohesion of Classes) captures the semantic information in code for cohesion
computation i.e., textual similarity amongst methods [Marcus et al. 2008].</p>
      <p>From this, we conclude that, again at the class level, cohesion/coupling metrics are based on some
count of dependencies, internal for cohesion, external for coupling: CBO: two classes are coupled if one
uses the other; MPC: number of send statements (i.e., method calls).</p>
      <p>
        Some diverging metrics, consider shared dependencies
        <xref ref-type="bibr" rid="ref5 ref6">(called sibling dependencies in [Anquetil and
Lethbridge 2003])</xref>
        instead of direct dependencies: TCC: number of methods connected with other
methods through an instance variable; and LCOM*: how well methods access the class state And a final one
is based on textual similarity amongst methods: C3.
      </p>
      <p>However, class metrics cannot easily be aggregated at the level of package: a package containing
highly cohesive classes could be non-cohesive if each classes deal with a specific topic. A package
containing highly coupled classes could be lowly coupled if its classes were all coupled together and not
with other packages.</p>
    </sec>
    <sec id="sec-7">
      <title>3.3 Cohesion and coupling from a higher point of view</title>
      <p>
        We showed that cohesion/coupling is typically measured from the dependencies that software
components have within themselves (cohesion) or with the outside (coupling). Even the research taking
a higher point of view on the problem and trying to understand what is meant by cohesion/coupling
or design quality
        <xref ref-type="bibr" rid="ref14 ref15 ref2 ref24 ref26 ref3 ref8">(e.g., [Abreu and Goula˜ o 2001; Bhatia and Singh 2006; Counsell et al. 2005;
TaubeSchock et al. 2011])</xref>
        fall back to the same basics: they measure the connectivity between members of
the packages.
—Brito e Abreu and Goul a˜o [Abreu and Goula˜ o 2001] and Bhatia and Singh [Bhatia and Singh 2006]
do criticize the hegemony of the “high cohesion, low coupling” mantra, but they still define module
cohesion as intra-modular class coupling and module coupling [. . . ] as inter-modular class coupling,
with 12 possible class coupling measures (direct inheritance, class parameter, attribute type,
message recipient, . . . ) that can all be summarized as: one member of a class needs to access another
class or another class’ member.
—Counsell et al. tried to correlate some software metrics with human perception of class cohesion (for
a small set of classes) [Counsell et al. 2005]. The metric that gave best result for expert software
engineers was NAS: number of associations. “This metric includes coupling due to inheritance and
[. . . ] aggregation, the return type of a method or the parameter of a method.”
—Finally, Taube-Schock et al. argue that high coupling cannot be avoided due to the power-law
distribution of the connectivity metric [Taube-Schock et al. 2011]. “Connections between source code
entities are modelled as links between nodes; these include parent/child relationships, method
invocations, superclass/subclass relationships, super-interfaces, type usage, variable usage, and
polymorphic relationships.” Again, they use some sort of dependency between classes to compute coupling at
a higher level.
      </p>
    </sec>
    <sec id="sec-8">
      <title>4. EXPERIMENT SETTING</title>
      <p>Having reviewed existing possibilities to compute cohesion and coupling of packages, we now plan the
details of our experiment according to the experimental setup suggested in [Wohlin et al. 2000].</p>
    </sec>
    <sec id="sec-9">
      <title>4.1 Experiment definition</title>
      <sec id="sec-9-1">
        <title>Analyze packages</title>
        <p>with the purpose of comparing
with respect to their internal and external dependencies
from the point of view of researchers
in the context of real world, framework based, OO applications.</p>
      </sec>
    </sec>
    <sec id="sec-10">
      <title>4.2 Context and subjects selection</title>
      <p>The context of the experiment will be packages from real, well-designed, OO systems, which are based
on a framework and for which the source code is available. The restriction to OO systems based on
framework is dictated by our hypothesis. We need real systems to ensure that our experiment is
meaningful.</p>
      <p>To avoid unexpected bias in the results, it is considered best if subjects are selected randomly inside
the entire population. It would be, however, difficult to identify exhaustively all systems that fit the
context of our experiment. We will, therefore, rely on convenience sampling.</p>
      <p>A difficulty of this research is to better define good and bad modularization. We cannot rely on
traditional design metrics (“high cohesion, low coupling”) because our goal is precisely to show that good
modularization may result in low cohesion. So, we will resort to qualitative analysis of the applications
and frameworks studied based on their developers opinion to consider they are well modularized
although they might exhibit low cohesion. We will then assume in our formal hypothesis that the quality
of the modularization is established, and we will explain how we establish it for each subject system.</p>
      <p>We selected the following systems that are known to be based on some framework and for which we
found some arguments as to their adequate architectural design: JHotDraw, Eclipse, and JEdit.</p>
      <p>JHotDraw1 is itself a framework for structured, two-dimensional, drawing editors. It is developed
in Java and is based on the Swing+AWT framework. We analyzed a recent version (i.e., 7.6;
201101-09). In the experiment, we will exclude the samples package because it consists of small example
applications developed to demonstrate the usage of the JHotDraw framework. As such they do not fit
the experiment context. This system is considered well structured for two reasons:
—From its first version, HotDraw (the Smalltalk version) was developed as a “design exercise”. For
example, it relies heavily on well-known design patterns. As a consequence, particular attention has
been paid on its good design.
—Several notes in the documentation2 explicitly mention restructurings of the application: v. 7.0.4
(2006-06-25) “Reorganized package structure”; v. 7.0.7 (2006-11-12) “Reorganized file structure”; v.
7.5 (2010-07-28) “Some changes in the package structure and renamings of classes have been made
in order to improve the clarity of the frameworks.”</p>
      <p>Eclipse3 is an open source platform that is mainly known as an IDE for various languages. We will
restrict ourselves to the user interface part (org.eclipse.ui) based on two toolkits: JFace and SWT. To
ensure that the application has a good design, we selected version 3.0 of Eclipse (June 2004). This
version was the first of the Eclipse Rich Client Platform and was the result of a large restructuring
effort 4.</p>
      <p>JEdit5 is a famous text editor for programmers. It is well known in research and served as a test
bed for many experiments. Again, we will concentrate only on two specific packages of JEdit that
compose the GUI part, org.gjt.sp.jedit.gui and org.gjt.sp.jedit.gui.statusbar. Because they
are only two packages with a clear goal (documentation for “gui” states: “Various GUI controls and
dialogue boxes”), we will suppose they are correctly designed in the sense that they don’t contain code
not related to GUI features.</p>
      <p>We give in Table I (page 10) some indication on the size of the three subject systems.</p>
    </sec>
    <sec id="sec-11">
      <title>4.3 Cohesion and coupling metric selection</title>
      <p>We want to study whether, under particular conditions, packages could be well designed although
exhibiting poor cohesiveness. But we must first understand that there is no absolute value of a high
or low cohesion. There is little meaning in a fully cohesive or fully non-cohesive package. All real,
well designed, OO packages will most probably present some level of internal cohesion as well as some
coupling with the rest of the system in order to achieve something of significance. How can we measure
poor cohesiveness in such situation?</p>
      <p>We can define no absolute threshold and there is no known per-system threshold either. We
propose to work at the package level, considering that a package does not exhibit “high cohesion and low</p>
    </sec>
    <sec id="sec-12">
      <title>1http://www.jhotdraw.org/</title>
    </sec>
    <sec id="sec-13">
      <title>2http://www.randelshofer.ch/oop/jhotdraw/Documentation/changes.html</title>
    </sec>
    <sec id="sec-14">
      <title>3http://www.eclipse.org/</title>
    </sec>
    <sec id="sec-15">
      <title>4http://eclipse.org/rcp/generic workbench structure.html</title>
    </sec>
    <sec id="sec-16">
      <title>5http://www.jedit.org/</title>
      <p>coupling” if its classes, collectively, are more coupled to the outside than to its own components.
Conceptually, it is debatable whether this requirement is meaningful at all. One can argue that the two
notions are independent. But we showed (Section 3) that the state of the practice usually bases the
two metrics on some measure of dependencies between the classes. This makes them very close and
even interdependent. One can argue that, given a constant amount of dependencies in a system, if
the cohesion of a module increases, its coupling must decrease. In this practical view of cohesion and
coupling, it makes sense to compare the two metrics, providing their definitions are based on the same
dependencies and they are expressed in the same unit.</p>
      <p>As for the metrics themselves, we already explained why existing cohesion/coupling metrics at the
class level could not be used at the level of package (Section 3.2). We will also have to reject most of
the existing metrics at the level of package:
—The metrics proposed by Ponisio et al. [Ponisio and Nierstrasz 2006] or Misˇic´ et al. [Misˇic´ 2001] are
cohesion metrics without an associated coupling metric. So they do not satisfy our requirement of
two comparable metrics.
—Martin’s afferent coupling, Abdeen metrics and Bunch metrics use incoming dependencies. This
would bias the results against coupling since extender application classes cannot have incoming
static dependencies from provider framework classes (see in Section 4.5 why we use static analysis).
—Bunch cohesion and coupling metrics were also found to depend too much on the size of the packages
[Anquetil and Laval 2011]. Because coupling normalizes the number of external dependencies found
by the maximum number of possible dependencies (ratio of number of external dependencies on
number of classes inside times number of classes outside the package), it is impacted by the size of
the system: the larger the system, the smaller the coupling.</p>
      <p>We are left we two candidates: Martin’s Relational cohesion and Efferent coupling. Unfortunately,
they are not expressed in the same unit, Efferent coupling counts the number of external dependencies,
while Relational cohesion is the average number of dependencies of the package’s classes. We propose
to use Efferent coupling as defined by Martin and Relational cohesion multiplied by the number of
classes of the package, i.e., raw number of dependencies between classes within the package. Because
we will be comparing between themselves cohesion and coupling of each package, we could as well
have used the other solution (pure Relational cohesion and averaged Efferent coupling), the result of
the comparison between the two metrics is independent of the package size in both cases. Note that
this is very different of the Bunch metrics for which the coupling also depends on the size of the entire
system, whereas the cohesion does not (reason why we rejected these two metrics).</p>
      <p>The class dependencies we will consider are: inheritance between classes, invocation between
methods, access to class attributes, or explicit references to classes (e.g., in the case of a “new”). We will
consider dependencies between classes as a boolean property, without considering the possible strength of
that dependency. That is to say, one class could inherit from another, call several of its method, access
its attributes, we would still count only one dependency.</p>
    </sec>
    <sec id="sec-17">
      <title>4.4 Variable selection and Hypothesis formulation</title>
      <p>We will use as dependent variable the raw number of dependencies from classes within the studied
packages.</p>
      <p>The independent variable will be the destination of the dependencies (see Figure 2):
—Local Dependency: The dependency targets a class that resides in the same package as the
referencing class. This corresponds to cohesion.
—Framework Dependency: The dependency targets a class that resides in the framework. This
corresponds to coupling with the provider framework.</p>
      <sec id="sec-17-1">
        <title>Framework layer</title>
        <p>framework</p>
      </sec>
      <sec id="sec-17-2">
        <title>Application layer</title>
        <p>local</p>
        <p>We already introduced informally the experiment hypothesis, saying that we want to test whether
package cohesion is inferior to package coupling. This is a strong hypothesis because one could assume
that even if the cohesion of a package were only a little superior to its coupling, it would not qualify
as “high cohesion, low coupling”. We will actually need to make it even stronger, because we are only
interested in the coupling with the provider framework.</p>
        <p>From this, we can now formalize the following null and alternative hypotheses:</p>
        <sec id="sec-17-2-1">
          <title>H0: package-local-dependencies</title>
          <p>package-framework-dependencies</p>
        </sec>
        <sec id="sec-17-2-2">
          <title>Ha: package-local-dependencies &lt; package-framework-dependencies</title>
        </sec>
      </sec>
    </sec>
    <sec id="sec-18">
      <title>4.5 Experiment design and instrumentation</title>
      <p>The test will compare one variable (number of dependencies) on two treatments (local or framework
dependencies). Both treatments apply to all the subjects (packages in the systems studied): for each
package, we will look at its local dependencies and dependencies to the framework. This is a paired
design.
—We will use static analysis to obtain the data related to the dependencies;
—We will use the Moose environment and its accompanying tools to gather the metrics for Java
programs [Ducasse et al. 2005];
—In the analysis of results, we will distinguish inheritance from the other dependencies.</p>
      <p>About static analysis, in Section 2, we introduced our working hypothesis in relation to late-binding
used in OO framework. It is the goal of late-binding to identify the called method only at execution time
according to the instance that receives the message. Therefore in the presence of late-binding, static
analysis can have problems to identify the exact method invoked. For Java, the class implementing an
invoked method is computed from the declared type of variables. This may give wrong results if the
variable actually contains an instance of a sub-class of its declared type.</p>
      <p>Yet we chose to use static analysis because the alternative (dynamic analysis) presented other
problems. Dynamic analysis requires to define:
—Realistic usage scenarios: In our experiment this was not always easy, for example, when considering
JHotDraw, which is not an application, but a framework itself and therefore cannot run on its own.
We also experimented with just a selection of packages of the systems. In such cases, it is difficult to
elaborate realistic scenarios that will use the framework and the part of the system we are interested
in.
—Usage scenarios covering the whole application: We need usage scenarios in sufficient number to
trigger all the features of the target application, so as to execute all the code and not miss any
dependency. With complex applications and/or frameworks as our subjects, it is difficult to ensure
that completeness.</p>
      <p>About the Moose environment, we chose it because it provides tools to extract code information
for different languages (including Java) and offers the needed infrastructure. Moose tools rely on the
Famix meta-model to represent source code. It includes packages, classes, attributes, methods and
their associated relationships [Demeyer et al. 2001]. We will therefore consider the following
dependencies: method invocation, field access, class reference (e.g. “Collections.sort(. . . )”), and inheritance.</p>
      <p>Finally, we distinguish inheritance from the other dependencies because inheritance is a strongly
structuring relationship in OOP. We will term these other relationships (field access, method
invocation, class references) “accesses”. For dependency counting, when inheritance between two classes
exists, we ignore the other dependencies (accesses) between the two classes. Therefore, the total
dependencies between two classes is not the sum of inheritance links and accesses.</p>
    </sec>
    <sec id="sec-19">
      <title>4.6 Validity evaluation</title>
      <p>We did not identify any conclusion validity threats. Validity of the results will be tested using the
appropriate statistical test. Because the data do not follow a Normal Distribution, we will test our
hypothesis using a one-tail Wilcoxon test.</p>
      <p>We identified the following construct validity threats: our definition of low cohesion (local
dependency is less than framework dependency) is a limited, syntactical, view on cohesion that does not fully
measure what people mean by “high cohesion”, however this simplification is an accepted trade-off in
architectural design measurement (see also Section 4.3).</p>
      <p>We did not identify any internal validity threats to the experiment.</p>
      <p>We identified the following external validity threats: We had to rely on convenience selection of
subjects. As such, all our subjects were identified as being Java systems and based on UI frameworks
(Swing, AWT, SWT). These two characteristics may be partly responsible for our results, for some
unknown reason. We, however, do not see any reason why this could be the case. Another problem
with our subject systems is that Eclipse represents about two thirds of the data point (see Section 5).
We tried to compensate for this possible bias by presenting individual experimental results for each
system studied.</p>
      <p>Another possible external validity threat is that we had to accept an informal, qualitative, definition
of “good architectural design” of the subject systems, based on their developers opinion. This was
necessary because our goal was precisely to show that good modularization may result in low measured
cohesion.</p>
    </sec>
    <sec id="sec-20">
      <title>5. EXPERIMENT RESULTS AND ANALYSIS</title>
      <p>Table I lists some size metric results for the three systems considered. One can observe a
dissimilarity in importance of each systems, with Eclipse weighting 65% of all the packages and 71% of
local+framework dependencies.
Mean
Median
Standard Deviation
Skewness
Minimum
Maximum</p>
      <p>Correlation
Total packages: 123</p>
      <p>Because data are not normally distributed, we use the Wilcoxon test to test our hypothesis. As this
test is known to be resistant to outliers, we will not take any special precaution for them and include all
data in the test. The result of the test (W = 3109:5, p = 1:3E 10) allow us to reject the null hypothesis
with high confidence. We may therefore accept the alternative hypothesis that packages have more
dependencies to the underlying framework than within themselves.</p>
      <p>This experiment confirms that, for these systems, that are well designed, packages are not cohesive
according to a definition of cohesiveness that is compatible with the ones used in literature.</p>
    </sec>
    <sec id="sec-21">
      <title>6. DETAILED EXPERIMENTS</title>
      <p>In this section, we present the results of additional experiments. One goal of these more detailed
experiments is to evaluate the influence of Eclipse in the results of the previous section (as described
in the threats to validity). We will therefore study each system independently and even parts of them.
For each experiment, we define the “extender application” considered and its provider framework.</p>
      <p>These experiments will also serve to gain a more in-depth understanding. For this we consider two
additional dependent variables (inheritance relationships, and access dependencies = attribute access
+ method invocations + direct class references). The dependent variable used in the main experiment
will be re-termed “total dependencies”.
6.1 JHotDraw (f/w=Swing+AWT)
Table III presents the results of the experiment. Note that Total dependencies is not the result of
Inheritance+Access because we count multiple dependencies from one class to another as just one (see
Section 4.5).</p>
      <p>For JHotDraw, total number of local dependencies (700) is inferior to the dependencies to the
framework (2,252) and the Wilcoxon test (W = 58:5, p = 2E 06) allows us to reject the null hypothesis.
We conclude that results for the main experiment were not solely caused by the preponderance of the
Eclipse system since JHotDraw exhibits the same property.</p>
      <p>Because JHotDraw is well organized, we will single out some of its main parts. Figure 4 illustrates
the individual dependencies of the JHotDraw packages. Most of the packages can be combined into
four groups based on their name as shown in the figure: app, GUI, draw and utils. Informally, one can
see that in all the four groups, the total count of framework dependencies (gray) outnumber the count
of local dependencies (black).</p>
      <p>We now study more in depth the org.jhotdraw.gui package and its sub-packages to better illustrate
how packages that are well designed may end up depending a lot on an underlying framework. For the
GUI group of packages, the description of the main package org.jhotdraw.gui says: “provides general
purpose graphical user interface classes leveraging the javax.swing package”. It seems only natural
that it depends more on the framework (Swing+AWT).</p>
      <p>Table IV presents the results of the experiment restricted to this set of packages. There are 8
pacakges in this experiment. Again, the number of local dependencies (148) is largely inferior to the
dependencies to the framework (641) and the Wilcoxon test (W = 2, p = 0:047) allows us to reject the
null hypothesis.</p>
      <p>Looking deeper into this group of packages (again Figure 4), we see org.jhotdraw.gui.plaf.palette
standing out as very dependent on the framework. We show the inheritance hierarchy of the classes
for this package in Figure 5. In the figure, black nodes represent framework classes and grey nodes
represent local classes; white nodes represent classes in the other packages of JHotDraw. The class at
the top is java.lang.Object and is included for illustration purposes. It should not be counted as a
framework class. This figure illustrates well our working hypothesis by showing that many classes, local to
this package (in grey), inherit from a black class (in the framework). Considering only inheritance
dependencies, 19 local classes inherit directly from framework ones, 2 others inherit from application
classes (in white) that themselves inherit from framework classes, and only six do not have framework
classes in their ancestors.</p>
    </sec>
    <sec id="sec-22">
      <title>6.2 JHotDraw Samples (f/w: JHotDraw +Swing+AWT)</title>
      <p>JHotDraw is itself developed as a framework so that applications can be developed by extending
its classes and interfaces. For this purpose, some samples have been developed to demonstrate its
usage. We analyze here these samples (grouped in the org.jhotdraw.samples package), where
JHotDraw+Swing+AWT serve as provider framework. We hypothesize that the quality of these samples is
equal or superior to that of JHotDraw because the samples are smaller and receive much less
maintenance (these are not actual applications used by someone).</p>
      <p>Table V summarizes the results of this analysis. Again, the total number of local dependencies (323)
is largely inferior to the dependencies to the framework (2076) which supports our formal hypothesis.
The Wilcoxon test gives a p-value=0.047 (under the 5% acceptance level) confirming the statistical
validity of this result.</p>
      <p>As expected, org.jhotdraw.samples demonstrates strong dependency relationship with the provider
framework.</p>
    </sec>
    <sec id="sec-23">
      <title>6.3 JEdit (f/w: Swing+AWT)</title>
      <p>Table VI presents the results of the experiment with JEdit. Total number of local dependencies
(1149) is well below the dependencies to the framework (2708), yet the Wilcoxon test gives a p-value=0.432
which does not allow us to reject the null hypothesis that the actual average number of local
dependencies is more than the average number of framework dependencies.</p>
      <p>Considering the large difference in numbers this seems surprising, but looking closer to the results,
we see that two packages: org.gjt.sp.jedit.gui and org.gjt.sp.jedit.gui.statusbar cumulate 1095
dependencies to the framework, more than 45% of all the framework dependencies. If we look at these two
packages, we obtain a total of 276 local dependencies and four times as much (1095) framework
dependencies. Because they are only two packages, with a clear goal (documentation for “gui” states: “Various
GUI controls and dialogue boxes”), we will suppose they are correctly designed in the sense that they
don’t contain code not related to GUI features. We claim these two packages support our working
hypothesis. Because there are only two packages, it would be meaningless to test the statistical validity
of this conclusion.</p>
    </sec>
    <sec id="sec-24">
      <title>6.4 Eclipse-UI (f/w: JFace+SWT)</title>
      <p>Table VII presents the results of the experiment conducted on Eclipse-UI. Total number of local
dependencies (3024) is well below the dependencies to the framework (7602), and the Wilcoxon test confirms
the statistical significance of this result (p-value=4E-06), showing that Eclipse-UI supports our
hypothesis.
6.5 JFace (f/w: SWT)
As part of the Eclipse experiment, we also analyzed JFace with regard to its underlying framework:
SWT. The JFace UI toolkit is an extension of SWT as implicitly indicated by the documentation6: “the
only prerequisites for JFace [were] reduced to SWT”.</p>
      <p>Table VIII presents the results of the experiment. Total number of local dependencies (914) is below
the dependencies to the framework (1539), and the Wilcoxon test confirms the statistical significance
of this result (p-value=0.017).
6.6 Swing (f/w: AWT)
Swing7 is the GUI toolkit of java. Java has another, prior, GUI toolkit: AWT. Swing inherits and use
several of the classes of AWT, however AWT may not be seen as an underlying framework for Swing8.
For example, AWT uses the native, operating system-supplied, widgets (menus, windows, buttons, ...)
whereas Swing elements are entirely written in Java with no native code. We thought it would be
interesting to do this experiment to see whether the good-design/low-cohesion property also holds in
more general cases. We have no indication of the design quality of Swing, but this is not an issue in
this case (see below).</p>
      <p>The results of the analysis are presented in Table IX. Local dependencies (3492) are superior to
framework dependencies (1815). There is no need to test the significance of this result since it does not
support our formal hypothesis.</p>
    </sec>
    <sec id="sec-25">
      <title>6http://wiki.eclipse.org/index.php/JFace</title>
    </sec>
    <sec id="sec-26">
      <title>7http://java.sun.com/javase/technologies/desktop/</title>
    </sec>
    <sec id="sec-27">
      <title>8http://en.wikipedia.org/wiki/Swing (Java)#Relationship to AWT</title>
    </sec>
    <sec id="sec-28">
      <title>7. HYPOTHESIS TESTING AND DISCUSSION</title>
      <p>We now summarize the results of all our experiments with regard to the initial working hypothesis.</p>
      <p>In the systems studied, which are based on an OO framework, experimental data support our
hypothesis that a well designed system (based on an OO framework) may have higher coupling than
cohesion. This translated to packages having more dependencies towards classes in their underlying
framework than their own classes.</p>
      <p>When the numbers do not agree with our hypothesis as in the case of JEdit, we can argue that:
—We do not pretend that all well-designed packages will have this property, only that it is a possibility
that one must take into account. In this case, JEdit has some packages, possibly well-designed, that
do not depend on Swing. This should not be a surprise.
—We did find that the two GUI packages of JEdit have lower internal cohesion than coupling toward
the underlying Swing framework. Again, this seems only natural, and concur with our hypothesis.</p>
      <p>For Swing and AWT, again cohesion was higher than coupling towards the external library. We
performed this experiment because AWT is not a framework on which Swing is based. This might
be an indication that the scope of our good-design/low-cohesion rule is restricted to the case where a
framework is used.</p>
      <p>As already mentioned, our experiments targeted GUI related frameworks (Swing, SWT) which can
be a bias of the study. GUI framework are among the more widely used and known because so many
applications need to use one of them. It would be interesting to perform the same experiment with
frameworks in more restricted domains: web application frameworks (e.g. Struts); ORB frameworks
(providing implementation of Corba or RMI), etc. These examples are still generic and may apply to
any business domain, other application domain frameworks may also be studied. Some systems use
annotations to inject dependencies and the impact of the annotation dependencies needs to be studied
through further experimentation.</p>
    </sec>
    <sec id="sec-29">
      <title>8. RELATED WORK</title>
      <p>Related work to the paper in the domain of program metrics is already presented in Section 3.</p>
      <p>Dong and Godfrey [Dong and Godfrey 2007] propose a visualization approach to understand the
usage dependencies between aggregated components formed through static object descriptions. The
study does not take into account library (framework) classes and primarily serves as an approach for
program understanding. Package blueprint takes the focus of a package and shows how such packages
use and are used by other packages [Ducasse et al. 2007].</p>
      <p>Abreu and Goula˜ o demonstrate that the criteria used by practitioners to modularize object-oriented
systems falls short to achieve the objective of minimal coupling and maximal cohesion [Abreu and
Goula˜ o 2001]. Anquetil and Laval present a study that shows that package cohesion and coupling
metrics do not demonstrate the inverse correlation for successive restructured versions of eclipse
platform [Anquetil and Laval 2011]. Furthermore, they describe that cohesion and coupling degrades with
restructuring that aim to improve system structure. Recently Taube-Schock et al. conclude that high
coupling is not avoidable and some high coupling is necessary for good design [Taube-Schock et al.
2011].</p>
    </sec>
    <sec id="sec-30">
      <title>9. CONCLUSION</title>
      <p>Cohesion and coupling is described for modules in the procedural paradigm to gauge the design quality
of modules. A program is deemed to have a good design if it exhibits low (external) coupling and high
(internal) cohesion. These concepts are then ported to the object-oriented paradigm. However, the
notion of cohesion and coupling in object-oriented programs is not similar to procedural programs because
of the hollywood principle and late binding, which allow to leverage the benefits of the object-oriented
paradigm. Object-oriented programs are developed on top of frameworks and this relationship results
in tight coupling between an extender application and its underlying framework. In this paper, we
present a study of package dependencies in object-oriented programs, which serves as a quantitative
evidence that application is coupled to its underlying framework. Strong dependency of the extender
application on its framework is perfectly acceptable. We believe that while calculating the package
metrics for cohesion and coupling, these factors should be taken into account. Moreover, while
deducing the results of these metrics, high coupling and low cohesion should not be considered harmful so
that the measures reflect the reality of the object-oriented paradigm. We plan to continue investigating
this phenomenon further so that adequate measure for object-oriented application can be developed to
ascertain their design quality appropriately.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <string-name>
            <given-names>Hani</given-names>
            <surname>Abdeen</surname>
          </string-name>
          .
          <year>2009</year>
          .
          <article-title>Visualizing, Assessing and Re-Modularizing Object-Oriented Architectural Elements</article-title>
          .
          <source>Ph.D. Dissertation</source>
          . Universite´ de Lille. http://rmod.lille.inria.fr/archives/phd/PhD-2009-Abdeen.pdf
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <given-names>Fernando</given-names>
            <surname>Brito</surname>
          </string-name>
          Abreu and Miguel Goula˜ o.
          <year>2001</year>
          .
          <article-title>Coupling and Cohesion as Modularization Drivers: Are We Being OverPersuaded?</article-title>
          .
          <source>In CSMR '01. IEEE Computer Society</source>
          ,
          <fpage>47</fpage>
          -
          <lpage>57</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <string-name>
            <given-names>E.</given-names>
            <surname>Allen</surname>
          </string-name>
          and
          <string-name>
            <given-names>T.</given-names>
            <surname>Khoshgoftaar</surname>
          </string-name>
          .
          <year>2001</year>
          .
          <article-title>Measuring Coupling and Cohesion of Software Modules: An Information Theory Approach</article-title>
          . In Seventh International Software Metrics Symposium.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <string-name>
            <given-names>Nicolas</given-names>
            <surname>Anquetil</surname>
          </string-name>
          and
          <string-name>
            <given-names>Jannik</given-names>
            <surname>Laval</surname>
          </string-name>
          .
          <year>2011</year>
          .
          <article-title>Legacy Software Restructuring: Analyzing a Concrete Case</article-title>
          .
          <source>In CSMR 2011</source>
          . Oldenburg, Germany. http://rmod.lille.inria.fr/archives/phd/Anqu11a-CSMR2011-Coupling.pdf
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <string-name>
            <given-names>Nicolas</given-names>
            <surname>Anquetil</surname>
          </string-name>
          and
          <string-name>
            <given-names>Timothy</given-names>
            <surname>Lethbridge</surname>
          </string-name>
          .
          <year>2003</year>
          .
          <article-title>stract representations for software remodularization</article-title>
          . DOI:http://dx.doi.org/10.1049/ip-sen:
          <fpage>20030581</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <article-title>Comparative study of clustering algorithms</article-title>
          and
          <source>abIEE Proceedings - Software 150</source>
          ,
          <issue>3</issue>
          (
          <year>2003</year>
          ),
          <fpage>185</fpage>
          -
          <lpage>201</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <string-name>
            <given-names>Gabriele</given-names>
            <surname>Bavota</surname>
          </string-name>
          , Andrea De Lucia, Andrian Marcus, and
          <string-name>
            <given-names>Rocco</given-names>
            <surname>Oliveto</surname>
          </string-name>
          .
          <year>2010</year>
          .
          <article-title>Software Re-Modularization Based on Structural and Semantic Metrics</article-title>
          . In Reverse Engineering, Working Conference on.
          <fpage>195</fpage>
          -
          <lpage>204</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <string-name>
            <given-names>Pradeep</given-names>
            <surname>Bhatia</surname>
          </string-name>
          and
          <string-name>
            <given-names>Yogesh</given-names>
            <surname>Singh</surname>
          </string-name>
          .
          <year>2006</year>
          .
          <article-title>Quantification Criteria for Optimization of Modules in OO Design</article-title>
          .
          <source>In Proceedings of the International Conference on Software Engineering Research and Practice &amp; Conference on Programming Languages and Compilers, SERP 2006</source>
          , Vol.
          <volume>2</volume>
          . CSREA Press,
          <fpage>972</fpage>
          -
          <lpage>979</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <string-name>
            <given-names>J.M.</given-names>
            <surname>Bieman</surname>
          </string-name>
          and
          <string-name>
            <given-names>B.K.</given-names>
            <surname>Kang</surname>
          </string-name>
          .
          <year>1995</year>
          .
          <article-title>Cohesion and Reuse in an Object-Oriented System</article-title>
          .
          <source>In Proceedings ACM Symposium on Software Reusability.</source>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <string-name>
            <given-names>Lionel C.</given-names>
            <surname>Briand</surname>
          </string-name>
          , John W. Daly, and Ju¨ rgen K. Wu¨ st.
          <year>1998</year>
          .
          <article-title>A Unified Framework for Cohesion Measurement in Object-Oriented Systems</article-title>
          .
          <source>Empirical Software Engineering: An International Journal 3</source>
          ,
          <issue>1</issue>
          (
          <year>1998</year>
          ),
          <fpage>65</fpage>
          -
          <lpage>117</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          <string-name>
            <given-names>Lionel C.</given-names>
            <surname>Briand</surname>
          </string-name>
          , John W. Daly, and Ju¨ rgen K. Wu¨ st.
          <year>1999</year>
          .
          <article-title>A Unified Framework for Coupling Measurement in Object-Oriented Systems</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>25</volume>
          ,
          <issue>1</issue>
          (
          <year>1999</year>
          ),
          <fpage>91</fpage>
          -
          <lpage>121</lpage>
          . DOI:http://dx.doi.org/10.1109/32.748920
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          <string-name>
            <given-names>F.</given-names>
            <surname>Brito e Abreu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Goulao</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Esteves</surname>
          </string-name>
          .
          <year>1995</year>
          .
          <article-title>Toward the design quality evaluation of object-oriented software systems</article-title>
          .
          <source>In Proc. 5th Int'l Conf. Software Quality</source>
          .
          <fpage>44</fpage>
          -
          <lpage>57</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          <string-name>
            <given-names>Shyam R.</given-names>
            <surname>Chidamber</surname>
          </string-name>
          and
          <string-name>
            <given-names>Chris F.</given-names>
            <surname>Kemerer</surname>
          </string-name>
          .
          <year>1994</year>
          .
          <article-title>A Metrics Suite for Object Oriented Design</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>20</volume>
          ,
          <issue>6</issue>
          (
          <year>June 1994</year>
          ),
          <fpage>476</fpage>
          -
          <lpage>493</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          <string-name>
            <given-names>Steve</given-names>
            <surname>Counsell</surname>
          </string-name>
          , Stephen Swift, and
          <string-name>
            <given-names>Allan</given-names>
            <surname>Tucker</surname>
          </string-name>
          .
          <year>2005</year>
          .
          <article-title>Object-oriented cohesion as a surrogate of software comprehension: an empirical study</article-title>
          ,
          <source>In Proceedings of the Fifth IEEE International Workshop on Source Code Analysis and Manipulation. Proceedings of the Fifth IEEE International Workshop on Source Code Analysis and Manipulation</source>
          (
          <year>2005</year>
          ),
          <fpage>161</fpage>
          -
          <lpage>172</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          <string-name>
            <given-names>Serge</given-names>
            <surname>Demeyer</surname>
          </string-name>
          , Sander Tichelaar, and Ste´phane Ducasse.
          <year>2001</year>
          .
          <article-title>FAMIX 2.1 - The FAMOOS Information Exchange Model</article-title>
          .
          <source>Technical Report</source>
          . University of Bern.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          <string-name>
            <given-names>Xinyi</given-names>
            <surname>Dong</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.W.</given-names>
            <surname>Godfrey</surname>
          </string-name>
          .
          <year>2007</year>
          .
          <article-title>System-level Usage Dependency Analysis of Object-Oriented Systems</article-title>
          .
          <source>In ICSM 2007. IEEE Comp. Society</source>
          . DOI:http://dx.doi.org/10.1109/ICSM.
          <year>2007</year>
          .4362650
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          <article-title>Ste´phane Ducasse, Tudor Gˆırba, and</article-title>
          <string-name>
            <given-names>Oscar</given-names>
            <surname>Nierstrasz</surname>
          </string-name>
          .
          <year>2005</year>
          .
          <article-title>Moose: an Agile Reengineering Environment</article-title>
          .
          <source>In Proceedings of ESEC/FSE</source>
          <year>2005</year>
          .
          <volume>99</volume>
          -
          <fpage>102</fpage>
          . DOI:http://dx.doi.org/10.1145/1081706.1081723 Tool demo.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          <article-title>Ste´phane Ducasse, Damien Pollet</article-title>
          , Mathieu Suen, Hani Abdeen, and
          <string-name>
            <given-names>Ilham</given-names>
            <surname>Alloui</surname>
          </string-name>
          .
          <year>2007</year>
          .
          <article-title>Package Surface Blueprints: Visually Supporting the Understanding of Package Relationships</article-title>
          . In ICSM '
          <volume>07</volume>
          .
          <fpage>94</fpage>
          -
          <lpage>103</lpage>
          . http://scg.unibe.ch/archive/papers/ Duca07cPackageBlueprintICSM2007.pdf
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          <string-name>
            <given-names>Mohamed</given-names>
            <surname>Fayad</surname>
          </string-name>
          , Douglas Schmidt, and Ralph Johnson.
          <year>1999</year>
          .
          <article-title>Building Application Frameworks: Object Oriented Foundations of Framework Design</article-title>
          . Wiley and Sons.
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          <string-name>
            <surname>Erich</surname>
            <given-names>Gamma</given-names>
          </string-name>
          , Richard Helm, Ralph Johnson, and John Vlissides.
          <year>1995</year>
          .
          <article-title>Design Patterns: Elements of Reusable Object-Oriented Software</article-title>
          .
          <string-name>
            <surname>Addison-Wesley Professional</surname>
          </string-name>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          <string-name>
            <given-names>W.</given-names>
            <surname>Li</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Henry</surname>
          </string-name>
          .
          <year>1993</year>
          .
          <article-title>Object Oriented Metrics that predict maintainability</article-title>
          .
          <source>Journal of System Software</source>
          <volume>23</volume>
          ,
          <issue>2</issue>
          (
          <year>1993</year>
          ),
          <fpage>111</fpage>
          -
          <lpage>122</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          <string-name>
            <given-names>Andrian</given-names>
            <surname>Marcus</surname>
          </string-name>
          , Denys Poshyvanyk, and
          <string-name>
            <given-names>Rudolf</given-names>
            <surname>Ferenc</surname>
          </string-name>
          .
          <year>2008</year>
          .
          <article-title>Using the Conceptual Cohesion of Classes for Fault Prediction in Object-Oriented Systems</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>34</volume>
          ,
          <issue>2</issue>
          (
          <year>2008</year>
          ),
          <fpage>287</fpage>
          -
          <lpage>300</lpage>
          . DOI:http://dx.doi.org/10.1109/TSE.
          <year>2007</year>
          .70768
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          <string-name>
            <given-names>Robert</given-names>
            <surname>Cecil Martin</surname>
          </string-name>
          .
          <year>2002</year>
          .
          <article-title>Agile Software Development</article-title>
          . Principles, Patterns, and
          <string-name>
            <surname>Practices</surname>
          </string-name>
          . Prentice-Hall.
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          <string-name>
            <given-names>Brian S.</given-names>
            <surname>Mitchell</surname>
          </string-name>
          and
          <string-name>
            <given-names>Spiros</given-names>
            <surname>Mancoridis</surname>
          </string-name>
          .
          <year>2006</year>
          .
          <article-title>On the Automatic Modularization of Software Systems Using the Bunch Tool</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>32</volume>
          ,
          <issue>3</issue>
          (
          <year>2006</year>
          ),
          <fpage>193</fpage>
          -
          <lpage>208</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          <string-name>
            <surname>Vojislav B. Misˇic</surname>
          </string-name>
          ´.
          <year>2001</year>
          .
          <article-title>Cohesion is Structural, Coherence is Functional: Different Views, Different Measures</article-title>
          .
          <source>In Proceedings of the Seventh International Software Metrics Symposium (METRICS-01)</source>
          . IEEE.
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          <string-name>
            <given-names>Laura</given-names>
            <surname>Ponisio</surname>
          </string-name>
          and
          <string-name>
            <given-names>Oscar</given-names>
            <surname>Nierstrasz</surname>
          </string-name>
          .
          <year>2006</year>
          .
          <article-title>Using Contextual Information to Assess Package Cohesion</article-title>
          .
          <source>Technical Report IAM06-002</source>
          . University of Bern, Institute of Applied Mathematics and Computer Sciences. http://scg.unibe.ch/archive/papers/ Poni06bAlchemistPackageCohesion.pdf
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          <source>Mar´ıa Laura Ponisio</source>
          .
          <year>2006</year>
          .
          <article-title>Exploiting Client Usage to Manage Program Modularity</article-title>
          .
          <source>Ph.D. Dissertation</source>
          . University of Bern, Bern. http://scg.unibe.ch/archive/phd/ponisio-phd.pdf
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          <string-name>
            <given-names>Wolfgang</given-names>
            <surname>Pree</surname>
          </string-name>
          .
          <year>1995</year>
          .
          <article-title>Framework Development and Reuse Support</article-title>
          . In Visual
          <string-name>
            <surname>Object-Oriented</surname>
            <given-names>Programming</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Margaret M. Burnett</surname>
          </string-name>
          , Adele Goldberg, and Ted G. Lewis (Eds.). Manning Publishing Co.,
          <fpage>253</fpage>
          -
          <lpage>268</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          <string-name>
            <given-names>Don</given-names>
            <surname>Roberts</surname>
          </string-name>
          and
          <string-name>
            <given-names>Ralph E.</given-names>
            <surname>Johnson</surname>
          </string-name>
          .
          <year>1997</year>
          .
          <article-title>Evolving Frameworks: A Pattern Language for Developing Object-Oriented Frameworks</article-title>
          .
          <source>In Pattern Languages of Program Design</source>
          <volume>3</volume>
          .
          <string-name>
            <given-names>Addison</given-names>
            <surname>Wesley</surname>
          </string-name>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          <string-name>
            <given-names>W. P.</given-names>
            <surname>Stevens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G. J.</given-names>
            <surname>Myers</surname>
          </string-name>
          , and
          <string-name>
            <given-names>L. L.</given-names>
            <surname>Constantine</surname>
          </string-name>
          .
          <year>1974</year>
          .
          <article-title>Structured Design</article-title>
          .
          <source>IBM Systems Journal</source>
          <volume>13</volume>
          ,
          <issue>2</issue>
          (
          <year>1974</year>
          ),
          <fpage>115</fpage>
          -
          <lpage>139</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          <string-name>
            <given-names>Craig</given-names>
            <surname>Taube-Schock</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Robert J.</given-names>
            <surname>Walker</surname>
          </string-name>
          , and
          <string-name>
            <surname>Ian H Witten</surname>
          </string-name>
          .
          <year>2011</year>
          .
          <article-title>Can we avoid high coupling?</article-title>
          .
          <source>In Proceedings of ECOOP</source>
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          <string-name>
            <given-names>Claes</given-names>
            <surname>Wohlin</surname>
          </string-name>
          , Per Runeson, Martin Ho¨st, Magnus C. Ohlsson, Bjo¨orn Regnell, and Anders Wessle´n.
          <year>2000</year>
          .
          <article-title>Experimentation in software engineering: an introduction</article-title>
          . Kluwer Academic Publishers, Norwell, MA, USA.
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          <string-name>
            <given-names>E.</given-names>
            <surname>Yourdon</surname>
          </string-name>
          and
          <string-name>
            <given-names>L.</given-names>
            <surname>Constantine</surname>
          </string-name>
          .
          <year>1979</year>
          .
          <article-title>Structured Design: Fundamentals of a Discipline of Computer Programs and System Design</article-title>
          . Yourdon Press/Prentice Hall.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>