- Software package metrics
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
*cite book
author =Robert Cecil Martin
year = 2002
title = Agile Software Development: Principles, Patterns and Practices
publisher = Pearson Education
id = ISBN 0-13-597444-5External links
* [http://www.parlezuml.com/metrics/OO%20Design%20Principles%20&%20Metrics.pdf OO Metrics] tutorial explains package metrics with examples
* [http://www.virtualmachinery.com/jhawkprod.htm JHawk] - Java Metrics tool, All the most important code metrics. Eclipse, stand alone and command line versions
* [http://www.ndepend.com/ NDepend] - .NET application that supports the package dependency metrics.
* [http://clarkware.com/software/JDepend.html JDepend] - Java application that supports the package dependency metrics.
* [http://www.stan4j.com/ STAN] - Structure Analysis for Java. Eclipse integrated and standalone visual dependency analysis, quality metrics and reporting.
* [http://www.campwoodsw.com/sourcemonitor.html SourceMonitor] - Something for C++, C, C#, VB.NET, Java, Delphi, Visual Basic (VB6)
Wikimedia Foundation. 2010.