Metric Results

[ summary ] [ packages ] [ cycles ] [ explanations ]

The following document contains the results of a JDepend metric analysis. The various metrics are defined at the bottom of this document.

Summary

[ summary ] [ packages ] [ cycles ] [ explanations ]

Package TC CC AC Ca Ce A I D V
net.sf.jpkgmk 23 15 8 4 8 35.0% 67.0% 1.0% 1
net.sf.jpkgmk.ant 1 1 0 0 5 0.0% 100.0% 0.0% 1
net.sf.jpkgmk.pkgmap 26 22 4 2 7 15.000001% 78.0% 7.0% 1
net.sf.jpkgmk.prototype 50 43 7 3 8 14.0% 73.0% 13.0% 1
net.sf.jpkgmk.util 18 16 2 3 14 11.0% 82.0% 7.0% 1

Packages

[ summary ] [ packages ] [ cycles ] [ explanations ]

net.sf.jpkgmk

Afferent Couplings Efferent Couplings Abstractness Instability Distance
4 8 35.0% 67.0% 1.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
net.sf.jpkgmk.AbstractFileCreatorAdapter
net.sf.jpkgmk.AbstractLineProvider
net.sf.jpkgmk.AbstractParser
net.sf.jpkgmk.FileHandler
net.sf.jpkgmk.FileHandler$ContentWriter
net.sf.jpkgmk.LineProvider
net.sf.jpkgmk.PermissionProvider
net.sf.jpkgmk.RequestCreator$RequestEntry
net.sf.jpkgmk.DefaultFileHandler
net.sf.jpkgmk.DefaultPermissionProvider
net.sf.jpkgmk.DuplicateEntryException
net.sf.jpkgmk.PackageException
net.sf.jpkgmk.ParseException
net.sf.jpkgmk.PkgInfo
net.sf.jpkgmk.PkgInfoParser
net.sf.jpkgmk.PkgMk
net.sf.jpkgmk.PostinstallCreator
net.sf.jpkgmk.RequestCreator
net.sf.jpkgmk.RequestCreator$DefaultRequestEntry
net.sf.jpkgmk.RequestCreator$ListRequestEntry
net.sf.jpkgmk.RequestCreator$PasswordRequestEntry
net.sf.jpkgmk.RequestCreator$RequestEntryParser
net.sf.jpkgmk.RequestCreator$RequestEntryType
net.sf.jpkgmk.ant
net.sf.jpkgmk.pkgmap
net.sf.jpkgmk.prototype
net.sf.jpkgmk.util
java.io
java.lang
java.nio.charset
java.util
net.sf.jpkgmk.pkgmap
net.sf.jpkgmk.prototype
net.sf.jpkgmk.util
org.apache.commons.logging

net.sf.jpkgmk.ant

Afferent Couplings Efferent Couplings Abstractness Instability Distance
0 5 0.0% 100.0% 0.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
None net.sf.jpkgmk.ant.JPkgMkTask
None java.io
java.lang
net.sf.jpkgmk
org.apache.commons.logging
org.apache.tools.ant

net.sf.jpkgmk.pkgmap

Afferent Couplings Efferent Couplings Abstractness Instability Distance
2 7 15.000001% 78.0% 7.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
net.sf.jpkgmk.pkgmap.AbstractPkgMapEntry
net.sf.jpkgmk.pkgmap.AbstractPkgMapEntryParser
net.sf.jpkgmk.pkgmap.PkgMapEntry
net.sf.jpkgmk.pkgmap.PkgMapEntryParser
net.sf.jpkgmk.pkgmap.PkgMap
net.sf.jpkgmk.pkgmap.PkgMap$1
net.sf.jpkgmk.pkgmap.PkgMap$EntryCommentAssociation
net.sf.jpkgmk.pkgmap.PkgMap$PkgMapEntrySorter
net.sf.jpkgmk.pkgmap.PkgMapBuilder
net.sf.jpkgmk.pkgmap.PkgMapEntryComment
net.sf.jpkgmk.pkgmap.PkgMapEntryComment$PkgMapEntryCommentParser
net.sf.jpkgmk.pkgmap.PkgMapEntryDevice
net.sf.jpkgmk.pkgmap.PkgMapEntryDevice$PkgMapEntryDeviceParser
net.sf.jpkgmk.pkgmap.PkgMapEntryFile
net.sf.jpkgmk.pkgmap.PkgMapEntryFile$PkgMapEntryDirectoryParser
net.sf.jpkgmk.pkgmap.PkgMapEntryFile$PkgMapEntryFileParser
net.sf.jpkgmk.pkgmap.PkgMapEntryHeader
net.sf.jpkgmk.pkgmap.PkgMapEntryHeader$PkgMapEntryHeaderParser
net.sf.jpkgmk.pkgmap.PkgMapEntryInfo
net.sf.jpkgmk.pkgmap.PkgMapEntryInfo$PkgMapEntryInfoParser
net.sf.jpkgmk.pkgmap.PkgMapEntryLink
net.sf.jpkgmk.pkgmap.PkgMapEntryLink$PkgMapEntryLinkParser
net.sf.jpkgmk.pkgmap.PkgMapEntryPipe
net.sf.jpkgmk.pkgmap.PkgMapEntryType
net.sf.jpkgmk.pkgmap.PkgMapEntryType$1
net.sf.jpkgmk.pkgmap.PkgMapParser
net.sf.jpkgmk
net.sf.jpkgmk.prototype
java.io
java.lang
java.util
net.sf.jpkgmk
net.sf.jpkgmk.prototype
net.sf.jpkgmk.util
org.apache.commons.logging

net.sf.jpkgmk.prototype

Afferent Couplings Efferent Couplings Abstractness Instability Distance
3 8 14.0% 73.0% 13.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
net.sf.jpkgmk.prototype.AbstractPrototypeEntry
net.sf.jpkgmk.prototype.AbstractPrototypeEntryDevice$AbstractPrototypeEntryDeviceParser
net.sf.jpkgmk.prototype.AbstractPrototypeEntryParser
net.sf.jpkgmk.prototype.CommandType$CommandTypeParser
net.sf.jpkgmk.prototype.PrototypeEntry
net.sf.jpkgmk.prototype.PrototypeEntryCommand
net.sf.jpkgmk.prototype.PrototypeEntryParser
net.sf.jpkgmk.prototype.AbstractPrototypeEntryDevice
net.sf.jpkgmk.prototype.CommandType
net.sf.jpkgmk.prototype.CommandType$CommandTypeDefaultParser
net.sf.jpkgmk.prototype.CommandType$CommandTypeIncludeParser
net.sf.jpkgmk.prototype.CommandType$CommandTypeParamValueParser
net.sf.jpkgmk.prototype.CommandType$CommandTypeSearchParser
net.sf.jpkgmk.prototype.Prototype
net.sf.jpkgmk.prototype.Prototype$PrototypeEntryFileSorter
net.sf.jpkgmk.prototype.PrototypeBuilder
net.sf.jpkgmk.prototype.PrototypeBuilder$1
net.sf.jpkgmk.prototype.PrototypeEntryBlockDevice
net.sf.jpkgmk.prototype.PrototypeEntryBlockDevice$PrototypeEntryBlockDeviceParser
net.sf.jpkgmk.prototype.PrototypeEntryCharacterDevice
net.sf.jpkgmk.prototype.PrototypeEntryCharacterDevice$PrototypeEntryCharacterDeviceParser
net.sf.jpkgmk.prototype.PrototypeEntryCommand$PrototypeEntryCommandParser
net.sf.jpkgmk.prototype.PrototypeEntryCommandDefault
net.sf.jpkgmk.prototype.PrototypeEntryCommandInclude
net.sf.jpkgmk.prototype.PrototypeEntryCommandSearch
net.sf.jpkgmk.prototype.PrototypeEntryCommandVariable
net.sf.jpkgmk.prototype.PrototypeEntryComment
net.sf.jpkgmk.prototype.PrototypeEntryComment$PrototypeEntryCommentParser
net.sf.jpkgmk.prototype.PrototypeEntryDirectory
net.sf.jpkgmk.prototype.PrototypeEntryDirectory$PrototypeEntryDirectoryParser
net.sf.jpkgmk.prototype.PrototypeEntryDirectoryExclusive
net.sf.jpkgmk.prototype.PrototypeEntryDirectoryExclusive$PrototypeEntryDirectoryExclusiveParser
net.sf.jpkgmk.prototype.PrototypeEntryFile
net.sf.jpkgmk.prototype.PrototypeEntryFile$PrototypeEntryFileParser
net.sf.jpkgmk.prototype.PrototypeEntryFileEditable
net.sf.jpkgmk.prototype.PrototypeEntryFileEditable$PrototypeEntryFileEditableParser
net.sf.jpkgmk.prototype.PrototypeEntryFileVolatile
net.sf.jpkgmk.prototype.PrototypeEntryFileVolatile$PrototypeEntryFileVolatileParser
net.sf.jpkgmk.prototype.PrototypeEntryInfo
net.sf.jpkgmk.prototype.PrototypeEntryInfo$PrototypeEntryInfoParser
net.sf.jpkgmk.prototype.PrototypeEntryLink
net.sf.jpkgmk.prototype.PrototypeEntryLink$PrototypeEntryLinkParser
net.sf.jpkgmk.prototype.PrototypeEntryPipe
net.sf.jpkgmk.prototype.PrototypeEntryPipe$PrototypeEntryPipeParser
net.sf.jpkgmk.prototype.PrototypeEntrySymbolicLink
net.sf.jpkgmk.prototype.PrototypeEntrySymbolicLink$PrototypeEntrySymbolicLinkParser
net.sf.jpkgmk.prototype.PrototypeEntryType
net.sf.jpkgmk.prototype.PrototypeEntryType$1
net.sf.jpkgmk.prototype.PrototypeEntryType$2
net.sf.jpkgmk.prototype.PrototypeParser
net.sf.jpkgmk
net.sf.jpkgmk.pkgmap
net.sf.jpkgmk.util
java.io
java.lang
java.security
java.util
net.sf.jpkgmk
net.sf.jpkgmk.pkgmap
net.sf.jpkgmk.util
org.apache.commons.logging

net.sf.jpkgmk.util

Afferent Couplings Efferent Couplings Abstractness Instability Distance
3 14 11.0% 82.0% 7.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
net.sf.jpkgmk.util.FsTestCase
net.sf.jpkgmk.util.VariableResolver
net.sf.jpkgmk.util.ArrayUtil
net.sf.jpkgmk.util.ChecksumUtil
net.sf.jpkgmk.util.FileUtil
net.sf.jpkgmk.util.LineCountingReader
net.sf.jpkgmk.util.ObjectUtils
net.sf.jpkgmk.util.ResourceLoader
net.sf.jpkgmk.util.ResourceLoader$1
net.sf.jpkgmk.util.ResourceLoader$CallerResolver
net.sf.jpkgmk.util.StreamUtil
net.sf.jpkgmk.util.StringUtil
net.sf.jpkgmk.util.StringUtil$KeyValuePair
net.sf.jpkgmk.util.StringUtil$RemoveResult
net.sf.jpkgmk.util.StringUtil$TruncationMode
net.sf.jpkgmk.util.SvnDirectoryFilter
net.sf.jpkgmk.util.UnixChecksum
net.sf.jpkgmk.util.VariableMap
net.sf.jpkgmk
net.sf.jpkgmk.pkgmap
net.sf.jpkgmk.prototype
java.io
java.lang
java.net
java.nio.channels
java.nio.charset
java.security
java.util
java.util.regex
java.util.zip
junit.framework
net.sf.jpkgmk
net.sf.jpkgmk.prototype
org.apache.commons.logging
org.apache.tools.tar

Cycles

[ summary ] [ packages ] [ cycles ] [ explanations ]

Package Package Dependencies
net.sf.jpkgmk net.sf.jpkgmk.util
net.sf.jpkgmk
net.sf.jpkgmk.ant net.sf.jpkgmk
net.sf.jpkgmk.util
net.sf.jpkgmk
net.sf.jpkgmk.pkgmap net.sf.jpkgmk
net.sf.jpkgmk.util
net.sf.jpkgmk
net.sf.jpkgmk.prototype net.sf.jpkgmk
net.sf.jpkgmk.util
net.sf.jpkgmk
net.sf.jpkgmk.util net.sf.jpkgmk
net.sf.jpkgmk.util

Explanation

[ summary ] [ packages ] [ cycles ] [ explanations ]

The following explanations are for quick reference and are lifted directly from the original JDepend documentation.

Term Description
Number of Classes The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.
Afferent Couplings The number of other packages that depend upon classes within the package is an indicator of the package's responsibility.
Efferent Couplings The number of other packages that the classes in the package depend upon is an indicator of the package's independence.
Abstractness 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 The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. 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 The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. A package squarely on 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.
Cycles Packages participating in a package dependency cycle are in a deadly embrace with respect to reusability and their release cycle. Package dependency cycles can be easily identified by reviewing the textual reports of dependency cycles. Once these dependency cycles have been identified with JDepend, they can be broken by employing various object-oriented techniques.