jdepend.framework
Class JDepend
java.lang.Object
|
+--jdepend.framework.JDepend
public class JDepend
extends java.lang.Object
The
JDepend
class analyzes directories
of Java class files and generates the following
metrics for each Java package.
- Afferent Coupling (Ca)
The number of packages that depend upon the classes within
the analyzed package.
- Efferent Coupling (Ce)
The number of packages that the classes in the analyzed
package depend upon.
- Abstractness (A)
The ratio of the number of abstract classes (and interfaces)
in the analyzed package to the total number of classes in
the analyzed package.
The range for this metric is 0 to 1, with A=0 indicating a
completely concrete package and A=1 indicating a completely
abstract package.
- Instability (I)
The ratio of efferent coupling (Ce) to total coupling
(Ce / (Ce + Ca)).
The range for this metric is 0 to 1, with I=0 indicating
a completely stable package and I=1 indicating a completely
instable package.
- Distance from the Main Sequence (D)
The perpendicular distance of a package from the idealized
line A + I = 1. A package coincident with the main sequence
is optimally balanced with respect to its abstractness and
stability. Ideal packages are either completely abstract and
stable (x=0, y=1) or completely concrete and instable
(x=1, y=0).
The range for this metric is 0 to 1, with D=0 indicating
a package that is coincident with the main sequence and
D=1 indicating a package that is as far from the main sequence
as possible.
- Package Dependency Cycle
Package dependency cycles are reported along with the paths of
packages participating in package dependency cycles.
These metrics are hereafter referred to as the "Martin Metrics",
as they are credited to Robert Martin (Object Mentor Inc.) and
referenced in the book "Designing Object Oriented C++ Applications
using the Booch Method", by Robert C. Martin, Prentice Hall, 1995.
Example API use:
JDepend jdepend = new JDepend();
jdepend.addDirectory("/path/to/classes");
Collection packages = jdepend.analyze();
Iterator i = packages.iterator();
while (i.hasNext()) {
JavaPackage jPackage = (JavaPackage)i.next();
String name = jPackage.getName();
int Ca = jPackage.afferentCoupling();
int Ce = jPackage.efferentCoupling();
float A = jPackage.abstractness();
float I = jPackage.instability();
float D = jPackage.distance();
boolean b = jPackage.containsCycle()
This class is the data model used by the
jdepend.textui.JDepend
and
jdepend.swingui.JDepend
views.
- (mike@clarkware.com)
- Clarkware Consulting, Inc.
JDepend
public JDepend()
JDepend
public JDepend(PackageFilter filter)
- filter
addDirectory
public void addDirectory(java.lang.String name)
Adds the specified directory name to the collection
of directories to be analyzed.
- name - Directory name.
java.io.IOException
- If the directory is invalid.
addPackage
public JavaPackage addPackage(java.lang.String pkgName)
Adds the specified Java package name to the
collection of analyzed packages.
- pkgName - Java package name.
- Added Java package.
addPackage
public void addPackage(JavaPackage pkg)
Adds the specified Java package to the
collection of analyzed packages.
- pkg - Java package.
addPackages
public void addPackages(java.util.Collection packages)
Adds the specified collection of packages
to the collection of analyzed packages.
- packages - Collection of packages.
addParseListener
public void addParseListener(ParserListener listener)
Registers the specified parser listener.
- listener - Parser listener.
analyze
public Collection analyze()
Analyzes the registered directories and returns
the collection of analyzed packages.
- Collection of analyzed packages.
analyzeInnerClasses
public void analyzeInnerClasses(boolean b)
Determines whether inner classes are analyzed.
- b - true to analyze inner classes;
false otherwise.
containsCycles
public boolean containsCycles()
Indicates whether the packages contain
one or more dependency cycles.
- true if one or more dependency
cycles exist.
countClasses
public int countClasses()
Returns the number of registered Java classes
to be analyzed.
- Number of classes.
countPackages
public int countPackages()
Returns the number of analyzed Java packages.
- Number of Java packages.
dependencyMatch
public boolean dependencyMatch(DependencyConstraint constraint)
Indicates whether the analyzed packages match
the specified dependency constraint.
- constraint
- true if the packages
match the dependency constraint
getFilter
public PackageFilter getFilter()
Returns the package filter.
- PackageFilter
getPackage
public JavaPackage getPackage(java.lang.String name)
Returns the analyzed package of the specified name.
- name - Package name.
- Package, or null if the
package was not analyzed.
getPackages
public Collection getPackages()
Returns the collection of analyzed packages.
- Collection of analyzed packages.
setFilter
public void setFilter(PackageFilter filter)
Sets the package filter.
- filter - Package filter.
JDepend
class analyzes directories of Java class files and generates the following metrics for each Java package.- Afferent Coupling (Ca)
The number of packages that depend upon the classes within
the analyzed package.
- Efferent Coupling (Ce)
The number of packages that the classes in the analyzed
package depend upon.
- Abstractness (A)
The ratio of the number of abstract classes (and interfaces)
in the analyzed package to the total number of classes in
the analyzed package.
The range for this metric is 0 to 1, with A=0 indicating a
completely concrete package and A=1 indicating a completely
abstract package.
- Instability (I)
The ratio of efferent coupling (Ce) to total coupling
(Ce / (Ce + Ca)).
The range for this metric is 0 to 1, with I=0 indicating
a completely stable package and I=1 indicating a completely
instable package.
- Distance from the Main Sequence (D)
The perpendicular distance of a package from the idealized
line A + I = 1. A package coincident with the main sequence
is optimally balanced with respect to its abstractness and
stability. Ideal packages are either completely abstract and
stable (x=0, y=1) or completely concrete and instable
(x=1, y=0).
The range for this metric is 0 to 1, with D=0 indicating
a package that is coincident with the main sequence and
D=1 indicating a package that is as far from the main sequence
as possible.
- Package Dependency Cycle
Package dependency cycles are reported along with the paths of
packages participating in package dependency cycles.
These metrics are hereafter referred to as the "Martin Metrics", as they are credited to Robert Martin (Object Mentor Inc.) and referenced in the book "Designing Object Oriented C++ Applications using the Booch Method", by Robert C. Martin, Prentice Hall, 1995. Example API use: This class is the data model used by thejdepend.textui.JDepend
andjdepend.swingui.JDepend
views.