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 |
---|---|---|---|---|---|---|---|---|---|
de.schlichtherle.truezip.crypto | 7 | 4 | 3 | 2 | 7 | 43.0% | 78.0% | 21.0% | 1 |
de.schlichtherle.truezip.crypto.param | 3 | 1 | 2 | 5 | 2 | 67.0% | 29.0% | 5.0% | 1 |
de.schlichtherle.truezip.fs.archive.zip | 32 | 29 | 3 | 0 | 26 | 9.0% | 100.0% | 9.0% | 1 |
de.schlichtherle.truezip.key | 26 | 14 | 12 | 6 | 6 | 46.0% | 50.0% | 4.0% | 1 |
de.schlichtherle.truezip.key.pbe | 4 | 1 | 3 | 3 | 4 | 75.0% | 57.0% | 32.0% | 1 |
de.schlichtherle.truezip.key.pbe.console | 5 | 3 | 2 | 1 | 7 | 40.0% | 88.0% | 27.000002% | 1 |
de.schlichtherle.truezip.key.pbe.swing | 34 | 28 | 6 | 1 | 21 | 18.0% | 95.0% | 13.0% | 1 |
de.schlichtherle.truezip.key.sl | 4 | 3 | 1 | 1 | 7 | 25.0% | 88.0% | 12.0% | 1 |
de.schlichtherle.truezip.key.spi | 2 | 0 | 2 | 2 | 4 | 100.0% | 67.0% | 67.0% | 1 |
de.schlichtherle.truezip.nio.charset | 6 | 4 | 2 | 0 | 6 | 33.0% | 100.0% | 33.0% | 1 |
de.schlichtherle.truezip.zip | 76 | 59 | 17 | 1 | 20 | 22.0% | 95.0% | 18.0% | 1 |
Packages
[ summary ] [ packages ] [ cycles ] [ explanations ]de.schlichtherle.truezip.crypto
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
2 | 7 | 43.0% | 78.0% | 21.0% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.crypto.CipherReadOnlyFile de.schlichtherle.truezip.crypto.SeekableBlockCipher de.schlichtherle.truezip.crypto.package-info |
de.schlichtherle.truezip.crypto.BufferedPartialBlockCipher de.schlichtherle.truezip.crypto.CipherOutputStream de.schlichtherle.truezip.crypto.SICSeekableBlockCipher de.schlichtherle.truezip.crypto.SuspensionPenalty |
de.schlichtherle.truezip.key de.schlichtherle.truezip.zip |
de.schlichtherle.truezip.io de.schlichtherle.truezip.rof de.schlichtherle.truezip.util java.io java.lang org.bouncycastle.crypto org.bouncycastle.crypto.params |
de.schlichtherle.truezip.crypto.param
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
5 | 2 | 67.0% | 29.0% | 5.0% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.crypto.param.KeyStrength de.schlichtherle.truezip.crypto.param.package-info |
de.schlichtherle.truezip.crypto.param.AesKeyStrength |
de.schlichtherle.truezip.fs.archive.zip de.schlichtherle.truezip.key.pbe de.schlichtherle.truezip.key.pbe.console de.schlichtherle.truezip.key.pbe.swing de.schlichtherle.truezip.zip |
java.lang java.util |
de.schlichtherle.truezip.fs.archive.zip
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
0 | 26 | 9.0% | 100.0% | 9.0% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.fs.archive.zip.KeyController de.schlichtherle.truezip.fs.archive.zip.KeyProviderSyncStrategy de.schlichtherle.truezip.fs.archive.zip.package-info |
de.schlichtherle.truezip.fs.archive.zip.CheckedJarDriver de.schlichtherle.truezip.fs.archive.zip.CheckedOdfDriver de.schlichtherle.truezip.fs.archive.zip.CheckedReadOnlySfxDriver de.schlichtherle.truezip.fs.archive.zip.CheckedZipDriver de.schlichtherle.truezip.fs.archive.zip.JarDriver de.schlichtherle.truezip.fs.archive.zip.JarDriverEntry de.schlichtherle.truezip.fs.archive.zip.KeyManagerZipCryptoParameters de.schlichtherle.truezip.fs.archive.zip.KeyManagerZipCryptoParameters$1 de.schlichtherle.truezip.fs.archive.zip.KeyManagerZipCryptoParameters$WinZipAes de.schlichtherle.truezip.fs.archive.zip.KeyProviderSyncStrategy$1 de.schlichtherle.truezip.fs.archive.zip.KeyProviderSyncStrategy$2 de.schlichtherle.truezip.fs.archive.zip.OdfDriver de.schlichtherle.truezip.fs.archive.zip.OdfOutputShop de.schlichtherle.truezip.fs.archive.zip.OdfOutputShop$1Output de.schlichtherle.truezip.fs.archive.zip.OptionOutputSocket de.schlichtherle.truezip.fs.archive.zip.PromptingKeyManagerService de.schlichtherle.truezip.fs.archive.zip.ReadOnlySfxDriver de.schlichtherle.truezip.fs.archive.zip.ZipDriver de.schlichtherle.truezip.fs.archive.zip.ZipDriverEntry de.schlichtherle.truezip.fs.archive.zip.ZipDriverEntry$1 de.schlichtherle.truezip.fs.archive.zip.ZipDriverService de.schlichtherle.truezip.fs.archive.zip.ZipInputShop de.schlichtherle.truezip.fs.archive.zip.ZipInputShop$1Input de.schlichtherle.truezip.fs.archive.zip.ZipKeyController de.schlichtherle.truezip.fs.archive.zip.ZipOutputShop de.schlichtherle.truezip.fs.archive.zip.ZipOutputShop$1Output de.schlichtherle.truezip.fs.archive.zip.ZipOutputShop$BufferedEntryOutputStream de.schlichtherle.truezip.fs.archive.zip.ZipOutputShop$DirectoryTemplate de.schlichtherle.truezip.fs.archive.zip.ZipOutputShop$EntryOutputStream |
None | de.schlichtherle.truezip.crypto.param de.schlichtherle.truezip.entry de.schlichtherle.truezip.fs de.schlichtherle.truezip.fs.spi de.schlichtherle.truezip.io de.schlichtherle.truezip.key de.schlichtherle.truezip.key.pbe de.schlichtherle.truezip.key.pbe.console de.schlichtherle.truezip.key.pbe.swing de.schlichtherle.truezip.key.sl de.schlichtherle.truezip.key.spi de.schlichtherle.truezip.rof de.schlichtherle.truezip.socket de.schlichtherle.truezip.socket.sl de.schlichtherle.truezip.util de.schlichtherle.truezip.zip java.awt java.io java.lang java.net java.nio.channels java.nio.charset java.util java.util.logging java.util.zip org.bouncycastle.crypto |
de.schlichtherle.truezip.key
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
6 | 6 | 46.0% | 50.0% | 4.0% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.key.AbstractKeyManagerProvider de.schlichtherle.truezip.key.KeyManager de.schlichtherle.truezip.key.KeyManagerProvider de.schlichtherle.truezip.key.KeyProvider de.schlichtherle.truezip.key.PromptingKeyProvider$BaseController de.schlichtherle.truezip.key.PromptingKeyProvider$Controller de.schlichtherle.truezip.key.PromptingKeyProvider$State de.schlichtherle.truezip.key.PromptingKeyProvider$View de.schlichtherle.truezip.key.SafeKey de.schlichtherle.truezip.key.SafeKeyManager de.schlichtherle.truezip.key.SafeKeyProvider de.schlichtherle.truezip.key.package-info |
de.schlichtherle.truezip.key.CacheableUnknownKeyException de.schlichtherle.truezip.key.KeyPromptingCancelledException de.schlichtherle.truezip.key.KeyPromptingDisabledException de.schlichtherle.truezip.key.KeyPromptingInterruptedException de.schlichtherle.truezip.key.KeyPromptingTimeoutException de.schlichtherle.truezip.key.PromptingKeyManager de.schlichtherle.truezip.key.PromptingKeyProvider de.schlichtherle.truezip.key.PromptingKeyProvider$1 de.schlichtherle.truezip.key.PromptingKeyProvider$ReadController de.schlichtherle.truezip.key.PromptingKeyProvider$State$1 de.schlichtherle.truezip.key.PromptingKeyProvider$State$2 de.schlichtherle.truezip.key.PromptingKeyProvider$State$3 de.schlichtherle.truezip.key.PromptingKeyProvider$WriteController de.schlichtherle.truezip.key.UnknownKeyException |
de.schlichtherle.truezip.fs.archive.zip de.schlichtherle.truezip.key.pbe de.schlichtherle.truezip.key.pbe.console de.schlichtherle.truezip.key.pbe.swing de.schlichtherle.truezip.key.sl de.schlichtherle.truezip.key.spi |
de.schlichtherle.truezip.crypto java.io java.lang java.net java.security java.util |
de.schlichtherle.truezip.key.pbe
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
3 | 4 | 75.0% | 57.0% | 32.0% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.key.pbe.SafePbeParameters de.schlichtherle.truezip.key.pbe.SafePbeParametersView de.schlichtherle.truezip.key.pbe.package-info |
de.schlichtherle.truezip.key.pbe.AesPbeParameters |
de.schlichtherle.truezip.fs.archive.zip de.schlichtherle.truezip.key.pbe.console de.schlichtherle.truezip.key.pbe.swing |
de.schlichtherle.truezip.crypto.param de.schlichtherle.truezip.key java.lang java.util |
de.schlichtherle.truezip.key.pbe.console
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
1 | 7 | 40.0% | 88.0% | 27.000002% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.key.pbe.console.ConsoleSafePbeParametersView de.schlichtherle.truezip.key.pbe.console.package-info |
de.schlichtherle.truezip.key.pbe.console.ConsoleAesPbeParametersView de.schlichtherle.truezip.key.pbe.console.ConsoleSafePbeParametersView$1 de.schlichtherle.truezip.key.pbe.console.ConsoleSafePbeParametersView$PromptingLock |
de.schlichtherle.truezip.fs.archive.zip |
de.schlichtherle.truezip.crypto.param de.schlichtherle.truezip.key de.schlichtherle.truezip.key.pbe java.io java.lang java.net java.util |
de.schlichtherle.truezip.key.pbe.swing
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
1 | 21 | 18.0% | 95.0% | 13.0% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.key.pbe.swing.Feedback de.schlichtherle.truezip.key.pbe.swing.InvalidKeyFeedback de.schlichtherle.truezip.key.pbe.swing.KeyPanel de.schlichtherle.truezip.key.pbe.swing.SwingSafePbeParametersView de.schlichtherle.truezip.key.pbe.swing.UnknownKeyFeedback de.schlichtherle.truezip.key.pbe.swing.package-info |
de.schlichtherle.truezip.key.pbe.swing.AuthenticationPanel de.schlichtherle.truezip.key.pbe.swing.AuthenticationPanel$1 de.schlichtherle.truezip.key.pbe.swing.AuthenticationPanel$2 de.schlichtherle.truezip.key.pbe.swing.AuthenticationPanel$3 de.schlichtherle.truezip.key.pbe.swing.AuthenticationPanel$3$1 de.schlichtherle.truezip.key.pbe.swing.BasicFeedback de.schlichtherle.truezip.key.pbe.swing.BasicInvalidKeyFeedback de.schlichtherle.truezip.key.pbe.swing.BasicInvalidKeyFeedback$1 de.schlichtherle.truezip.key.pbe.swing.BasicUnknownKeyFeedback de.schlichtherle.truezip.key.pbe.swing.HurlingWindowFeedback de.schlichtherle.truezip.key.pbe.swing.HurlingWindowFeedback$1 de.schlichtherle.truezip.key.pbe.swing.KeyPanel$1 de.schlichtherle.truezip.key.pbe.swing.KeyPanel$KeyPanelListener de.schlichtherle.truezip.key.pbe.swing.KeyStrengthPanel de.schlichtherle.truezip.key.pbe.swing.ReadKeyPanel de.schlichtherle.truezip.key.pbe.swing.ReadKeyPanel$1 de.schlichtherle.truezip.key.pbe.swing.ReadKeyPanel$2 de.schlichtherle.truezip.key.pbe.swing.ReadKeyPanel$3 de.schlichtherle.truezip.key.pbe.swing.ReadKeyPanel$3$1 de.schlichtherle.truezip.key.pbe.swing.SwingAesPbeParametersView de.schlichtherle.truezip.key.pbe.swing.SwingSafePbeParametersView$1PromptReadKey de.schlichtherle.truezip.key.pbe.swing.SwingSafePbeParametersView$1PromptWriteKey de.schlichtherle.truezip.key.pbe.swing.WeakKeyException de.schlichtherle.truezip.key.pbe.swing.WriteKeyPanel de.schlichtherle.truezip.key.pbe.swing.WriteKeyPanel$1 de.schlichtherle.truezip.key.pbe.swing.WriteKeyPanel$2 de.schlichtherle.truezip.key.pbe.swing.WriteKeyPanel$3 de.schlichtherle.truezip.key.pbe.swing.WriteKeyPanel$3$1 |
de.schlichtherle.truezip.fs.archive.zip |
de.schlichtherle.truezip.awt de.schlichtherle.truezip.crypto.param de.schlichtherle.truezip.io.swing de.schlichtherle.truezip.key de.schlichtherle.truezip.key.pbe de.schlichtherle.truezip.swing de.schlichtherle.truezip.util java.awt java.awt.event java.io java.lang java.lang.reflect java.net java.security java.text java.util java.util.zip javax.swing javax.swing.event javax.swing.filechooser javax.swing.text |
de.schlichtherle.truezip.key.sl
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
1 | 7 | 25.0% | 88.0% | 12.0% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.key.sl.package-info |
de.schlichtherle.truezip.key.sl.KeyManagerLocator de.schlichtherle.truezip.key.sl.KeyManagerLocator$Boot de.schlichtherle.truezip.key.sl.KeyManagerLocator$ClassComparator |
de.schlichtherle.truezip.fs.archive.zip |
de.schlichtherle.truezip.fs.spi de.schlichtherle.truezip.key de.schlichtherle.truezip.key.spi de.schlichtherle.truezip.util java.lang java.util java.util.logging |
de.schlichtherle.truezip.key.spi
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
2 | 4 | 100.0% | 67.0% | 67.0% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.key.spi.KeyManagerService de.schlichtherle.truezip.key.spi.package-info |
None | de.schlichtherle.truezip.fs.archive.zip de.schlichtherle.truezip.key.sl |
de.schlichtherle.truezip.key de.schlichtherle.truezip.util java.lang java.util |
de.schlichtherle.truezip.nio.charset
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
0 | 6 | 33.0% | 100.0% | 33.0% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.nio.charset.OctetCharset de.schlichtherle.truezip.nio.charset.package-info |
de.schlichtherle.truezip.nio.charset.Ibm437Charset de.schlichtherle.truezip.nio.charset.OctetCharset$Decoder de.schlichtherle.truezip.nio.charset.OctetCharset$Encoder de.schlichtherle.truezip.nio.charset.ZipCharsetProvider |
None | java.lang java.nio java.nio.charset java.nio.charset.spi java.util java.util.logging |
de.schlichtherle.truezip.zip
Afferent Couplings | Efferent Couplings | Abstractness | Instability | Distance |
---|---|---|---|---|
1 | 20 | 22.0% | 95.0% | 18.0% |
Abstract Classes | Concrete Classes | Used by Packages | Uses Packages |
---|---|---|---|
de.schlichtherle.truezip.zip.DateTimeConverter de.schlichtherle.truezip.zip.DecoratingOutputMethod de.schlichtherle.truezip.zip.ExtraField de.schlichtherle.truezip.zip.OutputMethod de.schlichtherle.truezip.zip.RawZipFile de.schlichtherle.truezip.zip.RawZipOutputStream de.schlichtherle.truezip.zip.RawZipOutputStream$Crc32OutputMethod de.schlichtherle.truezip.zip.RawZipOutputStream$EncryptedOutputMethod de.schlichtherle.truezip.zip.WinZipAesParameters de.schlichtherle.truezip.zip.ZipCharsetParameters de.schlichtherle.truezip.zip.ZipCryptoParameters de.schlichtherle.truezip.zip.ZipEntryFactory de.schlichtherle.truezip.zip.ZipFileParameters de.schlichtherle.truezip.zip.ZipOutputStreamParameters de.schlichtherle.truezip.zip.ZipParameters de.schlichtherle.truezip.zip.ZipParametersProvider de.schlichtherle.truezip.zip.package-info |
de.schlichtherle.truezip.zip.CRC32Exception de.schlichtherle.truezip.zip.Constants de.schlichtherle.truezip.zip.CountingInputStream de.schlichtherle.truezip.zip.Crc32InputStream de.schlichtherle.truezip.zip.Crc32OutputStream de.schlichtherle.truezip.zip.DateTimeConverter$1 de.schlichtherle.truezip.zip.DateTimeConverter$2 de.schlichtherle.truezip.zip.DefaultExtraField de.schlichtherle.truezip.zip.DefaultZipCharsetParameters de.schlichtherle.truezip.zip.DefaultZipFileParameters de.schlichtherle.truezip.zip.DefaultZipOutputStreamParameters de.schlichtherle.truezip.zip.DummyByteInputStream de.schlichtherle.truezip.zip.ExtraFields de.schlichtherle.truezip.zip.Jdk6Deflater de.schlichtherle.truezip.zip.Jdk6Inflater de.schlichtherle.truezip.zip.LittleEndian de.schlichtherle.truezip.zip.OffsetPositionMapper de.schlichtherle.truezip.zip.PositionMapper de.schlichtherle.truezip.zip.RawZipFile$EntryReadOnlyFile de.schlichtherle.truezip.zip.RawZipFile$SafeBufferedReadOnlyFile de.schlichtherle.truezip.zip.RawZipOutputStream$AppendingLEDataOutputStream de.schlichtherle.truezip.zip.RawZipOutputStream$BZip2OutputMethod de.schlichtherle.truezip.zip.RawZipOutputStream$Crc32CheckingOutputMethod de.schlichtherle.truezip.zip.RawZipOutputStream$Crc32UpdatingOutputMethod de.schlichtherle.truezip.zip.RawZipOutputStream$DeflaterOutputMethod de.schlichtherle.truezip.zip.RawZipOutputStream$RawOutputMethod de.schlichtherle.truezip.zip.RawZipOutputStream$WinZipAesOutputMethod de.schlichtherle.truezip.zip.SingleReadOnlyFilePool de.schlichtherle.truezip.zip.UByte de.schlichtherle.truezip.zip.UInt de.schlichtherle.truezip.zip.ULong de.schlichtherle.truezip.zip.UShort de.schlichtherle.truezip.zip.WinZipAesCipher de.schlichtherle.truezip.zip.WinZipAesEntryExtraField de.schlichtherle.truezip.zip.WinZipAesEntryOutputStream de.schlichtherle.truezip.zip.WinZipAesEntryParameters de.schlichtherle.truezip.zip.WinZipAesEntryReadOnlyFile de.schlichtherle.truezip.zip.WinZipAesUtils de.schlichtherle.truezip.zip.ZipAuthenticationException de.schlichtherle.truezip.zip.ZipCryptoException de.schlichtherle.truezip.zip.ZipDeflaterOutputStream de.schlichtherle.truezip.zip.ZipDeflaterOutputStream$1 de.schlichtherle.truezip.zip.ZipDeflaterOutputStream$DeflaterFactory de.schlichtherle.truezip.zip.ZipDeflaterOutputStream$Jdk6DeflaterFactory de.schlichtherle.truezip.zip.ZipEntry de.schlichtherle.truezip.zip.ZipFile de.schlichtherle.truezip.zip.ZipFile$1CloneEnumeration de.schlichtherle.truezip.zip.ZipFile$1EntryIterator de.schlichtherle.truezip.zip.ZipFile$DefaultReadOnlyFilePool de.schlichtherle.truezip.zip.ZipInflaterInputStream de.schlichtherle.truezip.zip.ZipInflaterInputStream$1 de.schlichtherle.truezip.zip.ZipInflaterInputStream$InflaterFactory de.schlichtherle.truezip.zip.ZipInflaterInputStream$Jdk6InflaterFactory de.schlichtherle.truezip.zip.ZipKeyException de.schlichtherle.truezip.zip.ZipOutputStream de.schlichtherle.truezip.zip.ZipOutputStream$1CloneEnumeration de.schlichtherle.truezip.zip.ZipOutputStream$1EntryIterator de.schlichtherle.truezip.zip.ZipParametersException de.schlichtherle.truezip.zip.ZipParametersUtils |
de.schlichtherle.truezip.fs.archive.zip |
de.schlichtherle.truezip.crypto de.schlichtherle.truezip.crypto.param de.schlichtherle.truezip.io de.schlichtherle.truezip.rof de.schlichtherle.truezip.util java.io java.lang java.nio.charset java.security java.util java.util.zip org.apache.commons.compress.compressors.bzip2 org.bouncycastle.crypto org.bouncycastle.crypto.digests org.bouncycastle.crypto.engines org.bouncycastle.crypto.generators org.bouncycastle.crypto.io org.bouncycastle.crypto.macs org.bouncycastle.crypto.params org.bouncycastle.util.io |
Cycles
[ summary ] [ packages ] [ cycles ] [ explanations ]There are no cyclic dependencies.
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. |