The Metric superclass is subclassed by ActualMetric and
DerivedMetric. In this model, an ActualMetric holds any metrics
data, whereas a DerivedMetric acts as a proxy to another metric so that
metrics data does not have to be duplicated.
Five different range methods are provided under the abstract Range
superclass. IntegerRange describes the most simple case, a range between
two integer values. RealRange provides the same functionality; however,
real numbers are an acceptable input. The other three types of range all use maps
to store the ranges, they have a common superclass MappedRange.
OrderedNominalRange is the simplest of these implementations, this range
simply consists of a set of Integer to String pairings.
CompositeIntegerRange and CompositeRealRange allow ranges,
IntegerRange and RealRange respectively, to be mapped
to String values. This allows a specific range of values to be specified in a certain
manner. (E.g. LOC in a method, Good 1-15, Ok 16-20, Bad 21-1000 - using
CompositeIntegerRange)