Jump to content

Software package metrics

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 217.11.197.10 (talk) at 07:26, 10 June 2008 (we dont need only java stuf...). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

This article describes various software package metrics. They have been mentioned by Robert Cecil Martin in his Agile Software Development: Principles, Patterns, and Practices book (2002).

The term software package, as it is used here, refers to a group of related classes (in the field of object-oriented programming).

  • Number of Classes and Interfaces: The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.
  • Afferent Couplings (Ca): The number of other packages that depend upon classes within the package is an indicator of the package's responsibility.
  • Efferent Couplings (Ce): The number of other packages that the classes in the package depend upon is an indicator of the package's independence.
  • 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). 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 from the Main Sequence (D): 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.
  • Package Dependency Cycles: Package dependency cycles are reported along with the hierarchical paths of packages participating in package dependency cycles.

See also

  • Inversion of Control – a method to reduce coupling, also known as the "Dependency Inversion Principle" (Martin 2002:127).

References

  • Robert Cecil Martin (2002). Agile Software Development: Principles, Patterns and Practices. Pearson Education. ISBN 0-13-597444-5.
  • OO Metrics tutorial explains package metrics with examples
  • JHawk - Java Metrics tool, All the most important code metrics. Eclipse, stand alone and command line versions
  • NDepend - .NET application that supports the package dependency metrics.
  • JDepend - Java application that supports the package dependency metrics.
  • STAN - Structure Analysis for Java. Eclipse integrated and standalone visual dependency analysis, quality metrics and reporting.
  • SourceMonitor - Something for C++, C, C#, VB.NET, Java, Delphi, Visual Basic (VB6)