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.json 13 10 3 5 20 23.0% 80.0% 3.0% 1
net.sf.json.filters 7 6 1 0 3 14.0% 100.0% 14.0% 1
net.sf.json.groovy 16 16 0 0 8 0.0% 100.0% 0.0% 1
net.sf.json.processors 20 12 8 1 6 40.0% 86.0% 26.0% 1
net.sf.json.regexp 4 3 1 2 4 25.0% 67.0% 8.0% 1
net.sf.json.test 1 1 0 0 7 0.0% 100.0% 0.0% 1
net.sf.json.util 33 25 8 5 11 24.0% 69.0% 7.0% 1
net.sf.json.xml 4 3 1 0 8 25.0% 100.0% 25.0% 1

Packages

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

net.sf.json

Afferent Couplings Efferent Couplings Abstractness Instability Distance
5 20 23.0% 80.0% 3.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
net.sf.json.AbstractJSON
net.sf.json.JSON
net.sf.json.JSONString
net.sf.json.AbstractJSON$1
net.sf.json.AbstractJSON$CycleSet
net.sf.json.JSONArray
net.sf.json.JSONArray$JSONArrayListIterator
net.sf.json.JSONException
net.sf.json.JSONFunction
net.sf.json.JSONNull
net.sf.json.JSONObject
net.sf.json.JSONSerializer
net.sf.json.JsonConfig
net.sf.json.groovy
net.sf.json.processors
net.sf.json.test
net.sf.json.util
net.sf.json.xml
java.beans
java.io
java.lang
java.lang.annotation
java.lang.ref
java.lang.reflect
java.util
net.sf.ezmorph
net.sf.ezmorph.array
net.sf.ezmorph.bean
net.sf.ezmorph.object
net.sf.json.processors
net.sf.json.regexp
net.sf.json.util
org.apache.commons.beanutils
org.apache.commons.collections.map
org.apache.commons.lang
org.apache.commons.lang.builder
org.apache.commons.lang.exception
org.apache.commons.logging

net.sf.json.filters

Afferent Couplings Efferent Couplings Abstractness Instability Distance
0 3 14.0% 100.0% 14.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
net.sf.json.filters.MappingPropertyFilter
net.sf.json.filters.AndPropertyFilter
net.sf.json.filters.CompositePropertyFilter
net.sf.json.filters.FalsePropertyFilter
net.sf.json.filters.NotPropertyFilter
net.sf.json.filters.OrPropertyFilter
net.sf.json.filters.TruePropertyFilter
None java.lang
java.util
net.sf.json.util

net.sf.json.groovy

Afferent Couplings Efferent Couplings Abstractness Instability Distance
0 8 0.0% 100.0% 0.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
None net.sf.json.groovy.GJson
net.sf.json.groovy.GJson$_enhanceCollection_closure4
net.sf.json.groovy.GJson$_enhanceCollection_closure5
net.sf.json.groovy.GJson$_enhanceCollection_closure6
net.sf.json.groovy.GJson$_enhanceJSONObject_closure10
net.sf.json.groovy.GJson$_enhanceJSONObject_closure11
net.sf.json.groovy.GJson$_enhanceJSONObject_closure12
net.sf.json.groovy.GJson$_enhanceJSONObject_closure13
net.sf.json.groovy.GJson$_enhanceMap_closure7
net.sf.json.groovy.GJson$_enhanceMap_closure8
net.sf.json.groovy.GJson$_enhanceMap_closure9
net.sf.json.groovy.GJson$_enhanceString_closure1
net.sf.json.groovy.GJson$_enhanceString_closure2
net.sf.json.groovy.GJson$_enhanceString_closure3
net.sf.json.groovy.JsonGroovyBuilder
net.sf.json.groovy.JsonSlurper
None groovy.lang
java.io
java.lang
java.net
java.util
net.sf.json
org.codehaus.groovy.runtime
org.codehaus.groovy.runtime.typehandling

net.sf.json.processors

Afferent Couplings Efferent Couplings Abstractness Instability Distance
1 6 40.0% 86.0% 26.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
net.sf.json.processors.DefaultValueProcessor
net.sf.json.processors.DefaultValueProcessorMatcher
net.sf.json.processors.JsonBeanProcessor
net.sf.json.processors.JsonBeanProcessorMatcher
net.sf.json.processors.JsonValueProcessor
net.sf.json.processors.JsonValueProcessorMatcher
net.sf.json.processors.PropertyNameProcessor
net.sf.json.processors.PropertyNameProcessorMatcher
net.sf.json.processors.DefaultDefaultValueProcessor
net.sf.json.processors.DefaultValueProcessorMatcher$1
net.sf.json.processors.DefaultValueProcessorMatcher$DefaultDefaultValueProcessorMatcher
net.sf.json.processors.JsDateJsonBeanProcessor
net.sf.json.processors.JsDateJsonValueProcessor
net.sf.json.processors.JsonBeanProcessorMatcher$1
net.sf.json.processors.JsonBeanProcessorMatcher$DefaultJsonBeanProcessorMatcher
net.sf.json.processors.JsonValueProcessorMatcher$1
net.sf.json.processors.JsonValueProcessorMatcher$DefaultJsonValueProcessorMatcher
net.sf.json.processors.JsonVerifier
net.sf.json.processors.PropertyNameProcessorMatcher$1
net.sf.json.processors.PropertyNameProcessorMatcher$DefaultPropertyNameProcessorMatcher
net.sf.json
java.lang
java.math
java.sql
java.util
net.sf.json
net.sf.json.util

net.sf.json.regexp

Afferent Couplings Efferent Couplings Abstractness Instability Distance
2 4 25.0% 67.0% 8.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
net.sf.json.regexp.RegexpMatcher
net.sf.json.regexp.JdkRegexpMatcher
net.sf.json.regexp.Perl5RegexpMatcher
net.sf.json.regexp.RegexpUtils
net.sf.json
net.sf.json.util
java.lang
java.util.regex
org.apache.commons.lang.exception
org.apache.oro.text.regex

net.sf.json.test

Afferent Couplings Efferent Couplings Abstractness Instability Distance
0 7 0.0% 100.0% 0.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
None net.sf.json.test.JSONAssert
None java.lang
java.util
junit.framework
net.sf.ezmorph
net.sf.ezmorph.object
net.sf.json
net.sf.json.util

net.sf.json.util

Afferent Couplings Efferent Couplings Abstractness Instability Distance
5 11 24.0% 69.0% 7.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
net.sf.json.util.CycleDetectionStrategy
net.sf.json.util.JavaIdentifierTransformer
net.sf.json.util.JsonEventListener
net.sf.json.util.NewBeanInstanceStrategy
net.sf.json.util.PropertyExclusionClassMatcher
net.sf.json.util.PropertyFilter
net.sf.json.util.PropertySetStrategy
net.sf.json.util.WebHijackPreventionStrategy
net.sf.json.util.CycleDetectionStrategy$1
net.sf.json.util.CycleDetectionStrategy$LenientCycleDetectionStrategy
net.sf.json.util.CycleDetectionStrategy$LenientNoRefCycleDetectionStrategy
net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy
net.sf.json.util.EnumMorpher
net.sf.json.util.JSONBuilder
net.sf.json.util.JSONStringer
net.sf.json.util.JSONTokener
net.sf.json.util.JSONUtils
net.sf.json.util.JavaIdentifierTransformer$1
net.sf.json.util.JavaIdentifierTransformer$CamelCaseJavaIdentifierTransformer
net.sf.json.util.JavaIdentifierTransformer$NoopJavaIdentifierTransformer
net.sf.json.util.JavaIdentifierTransformer$StrictJavaIdentifierTransformer
net.sf.json.util.JavaIdentifierTransformer$UnderscoreJavaIdentifierTransformer
net.sf.json.util.JavaIdentifierTransformer$WhiteSpaceJavaIdentifierTransformer
net.sf.json.util.NewBeanInstanceStrategy$1
net.sf.json.util.NewBeanInstanceStrategy$DefaultNewBeanInstanceStrategy
net.sf.json.util.PropertyExclusionClassMatcher$1
net.sf.json.util.PropertyExclusionClassMatcher$DefaultPropertyExclusionClassMatcher
net.sf.json.util.PropertySetStrategy$1
net.sf.json.util.PropertySetStrategy$DefaultPropertySetStrategy
net.sf.json.util.WebHijackPreventionStrategy$1
net.sf.json.util.WebHijackPreventionStrategy$CommentWebHijackPreventionStrategy
net.sf.json.util.WebHijackPreventionStrategy$InfiniteLoopWebHijackPreventionStrategy
net.sf.json.util.WebUtils
net.sf.json
net.sf.json.filters
net.sf.json.processors
net.sf.json.test
net.sf.json.xml
java.io
java.lang
java.lang.reflect
java.math
java.util
net.sf.ezmorph
net.sf.ezmorph.bean
net.sf.json
net.sf.json.regexp
org.apache.commons.beanutils
org.apache.commons.lang

net.sf.json.xml

Afferent Couplings Efferent Couplings Abstractness Instability Distance
0 8 25.0% 100.0% 25.0%
Abstract Classes Concrete Classes Used by Packages Uses Packages
net.sf.json.xml.JSONTypes
net.sf.json.xml.XMLSerializer
net.sf.json.xml.XMLSerializer$CustomElement
net.sf.json.xml.XMLSerializer$XomSerializer
None java.io
java.lang
java.util
net.sf.json
net.sf.json.util
nu.xom
org.apache.commons.lang
org.apache.commons.logging

Cycles

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

Package Package Dependencies
net.sf.json net.sf.json.processors
net.sf.json
net.sf.json.filters net.sf.json.util
net.sf.json
net.sf.json.processors
net.sf.json
net.sf.json.groovy net.sf.json
net.sf.json.processors
net.sf.json
net.sf.json.processors net.sf.json
net.sf.json.processors
net.sf.json.test net.sf.json.util
net.sf.json
net.sf.json.processors
net.sf.json
net.sf.json.util net.sf.json
net.sf.json.processors
net.sf.json
net.sf.json.xml net.sf.json.util
net.sf.json
net.sf.json.processors
net.sf.json

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.