| 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 + Ca) such that I =
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.
author: Mike Clark author: Clarkware Consulting, Inc. |