15.1. Language Independent Metrics

Number of Artifacts

Description: Number of active architecture artifacts

Categories: Architecture

Number of Components in Deprecated Artifacts

Description: Number of components that are assigned to deprecated artifact

Categories: Architecture

Number of Components with Violations

Description: Number of components that contain architecture violations

Categories: Architecture

Number of Empty Artifacts

Description: Number of active architecture artifacts that are empty

Categories: Architecture

Number of Ignored Violations (Parser Dependencies)

Description: Number of parser dependencies in ignored architecture violations

Categories: Architecture

Number of Unassigned Components

Description: Number of internal components that are not assigned to any artifact

Categories: Architecture

Number of Violations (Component Dependencies)

Description: Number of architecture violating component dependencies

Categories: Architecture

Number of Violations (Parser Dependencies)

Description: Number of architecture violating parser dependencies

Categories: Architecture

Component Dependencies to Remove (Components)

Description: Number of component dependencies to remove to break up all non-ignored component cycles

Categories: Code Analysis, Cycle

Component Rank (Module)

Description: Component Rank is based on Google's page rank algorithm. The total componet rank over all components in the selected group adds up to 100. The higher the rank, the more 'important' a component is in a system. Having many incoming dependencies or being referenced by other important components increases rank.

Categories: Code Analysis

Component Rank (System)

Description: Component Rank is based on Google's page rank algorithm. The total componet rank over all components in the selected group adds up to 100. The higher the rank, the more 'important' a component is in a system. Having many incoming dependencies or being referenced by other important components increases rank.

Categories: Code Analysis

Number of Code Duplicates

Description: Number of duplicated code blocks.

Categories: Code Analysis

Number of Duplicated Code Lines

Description: Number of duplicated lines in non-ignored duplicated code blocks.

Categories: Code Analysis

Number of Ignored Code Duplicates

Description: Number of ignored duplicated code blocks.

Categories: Code Analysis

Number of Ignored Threshold Violations

Description: Number of ignored threshold violations.

Categories: Code Analysis

Number of Threshold Violations

Description: Number of non-ignored threshold violations.

Categories: Code Analysis

Parser Dependencies to Remove (Components)

Description: Number of code lines to change to break up all non-ignored component cycles.

Categories: Code Analysis, Cycle

Structural Debt Index (Components)

Description: Cummulative structural debt index of non-ignored component cycles.

Categories: Code Analysis

Biggest Component Cycle Group

Description: Number of components in biggest cycle.

Categories: Cycle

Cyclicity (Components)

Description: Cummulated cyclicity of component cycles.

Categories: Cycle

Number of Component Cycle Groups

Description: Number of component cycles.

Categories: Cycle

Number of Cyclic Components

Description: Number of components involved in cycles.

Categories: Cycle

Number of Ignored Cyclic Components

Description: Number of components involved in ignored cycles.

Categories: Cycle

Relative Cyclicity (Components)

Description: Relative component cyclicity in percent.

Categories: Cycle

LCOM4

Description: Determines the number of components in a class. A component is composed of fields, methods and types defined top level including all their nested programming elements. Constructors, destructors, empty, abstract and overridden methods of classes are not included in the calculation. The metric represents the unrelated portions of code in a class. A value of 1 indicates the highest cohesion possible - which is normally desirable. High values might indicate that a class is a candidate for a refactoring. Consider that utility classes by nature have high LCOM4 values.

Categories: Cohesion/Coupling

Logical cohesion (Module)

Description: Number of dependencies 'to' and 'from' other top-level logical programming elements in the same namespace on module level.

Categories: Cohesion/Coupling

Logical cohesion (System)

Description: Number of dependencies 'to' and 'from' other top-level logical programming elements in the same namespace on system level.

Categories: Cohesion/Coupling

Logical coupling (Module)

Description: Number of dependencies 'to' and 'from' other top-level logical programming elements in other namespaces on module level.

Categories: Cohesion/Coupling

Logical coupling (System)

Description: Number of dependencies 'to' and 'from' other top-level logical programming elements in other namespaces on system level.

Categories: Cohesion/Coupling

Physical cohesion

Description: Number of dependencies 'to' and 'from' other components in the same module.

Categories: Cohesion/Coupling

Physical coupling

Description: Number of dependencies 'to' and 'from' other components in other modules.

Categories: Cohesion/Coupling

Code Comment Lines

Description: Counts all comment lines excluding header comments.

Categories: Size

Comment Lines

Description: Counts all comment lines.

Categories: Size

Lines of Code

Description: Lines of code excluding blank and comment lines.

Categories: Size

Number of Components

Description: Number of components.

Categories: Size

Number of Methods

Description: Number of member functions.

Categories: Size

Number of Parameters

Description: Number of parameters.

Categories: Size

Number of Statements

Description: Counts all statements.

Categories: Size

Number of Types (Module)

Description: Number of types (classes, enums or similar) in container on module level.

Categories: Size

Number of Types (System)

Description: Number of types (classes, enums or similar) in container on system level.

Categories: Size

Source Element Count

Description: Number of programming elements (i.e. types, fields, methods, functions, ...) plus number of statements.

Categories: Size

Total Lines

Description: Counts all lines including empty and comment lines.

Categories: Size

ACD

Description: Average component dependency according to John Lakos. Average number of components a component depends on directly and indirectly. This metric can be used to characterize the overall average coupling of internal components.

Categories: John Lakos

CCD

Description: Cumulative component dependency according to John Lakos. Cumulated depends upon values.

Categories: John Lakos

Depends Upon (Module)

Description: Depends upon module level according to DependsOn by John Lakos. Total number of components that a component directly and indirectly depends upon in containing module.

Categories: John Lakos

Depends Upon (System)

Description: Depends upon system level according to DependsOn by John Lakos. Total number of components that a component directly and indirectly depends upon in system.

Categories: John Lakos

Highest ACD

Description: Highest ACD value among child elements.

Categories: John Lakos

NCCD

Description: Normalized cumulative component dependency according to John Lakos. The ratio between the cumulative component dependency and the cumulative component dependency of a balanced binary tree of the same size. A value greater than 1 indicates a more vertical design. A value less than 1 indicates a more horizontal design.

Categories: John Lakos

RACD

Description: Relative average component dependency. Average component dependency divided by the number of internal components multiplied by 100 (in percent).

Categories: John Lakos

Used From (Module)

Description: Number of all depending elements (direct and indirect) + 1 (including self) in containing module.

Categories: John Lakos

Used From (System)

Description: Number of all depending elements (direct and indirect) + 1 (including self) in system.

Categories: John Lakos

Abstractness (Module)

Description: Abstractness according to Robert C. Martin based on module level dependencies. Total number of abstract types divided by the total number of concrete types. The metric has a range of [0,1]. 0 means that the container contains no abstract types. 1 means that the container contains nothing but abstract types.

Categories: Robert C. Martin

Abstractness (System)

Description: Abstractness according to Robert C. Martin based on system level dependencies. Total number of abstract types divided by the total number of concrete types. The metric has a range of [0,1]. 0 means that the container contains no abstract types. 1 means that the container contains nothing but abstract types.

Categories: Robert C. Martin

Distance (Module)

Description: Distance according to Robert C. Martin based on module level dependencies. Abstractness + Instability - 1. The metric has a range of [-1,1]. This is a variation of the original metric definition. A negative sign means 'in the zone of pain' and a positive sign means 'in the zone of uselessness'. A 'good' value should be around 0.

Categories: Robert C. Martin

Distance (System)

Description: Distance according to Robert C. Martin based on system level dependencies. Abstractness + Instability - 1. The metric has a range of [-1,1]. This is a variation of the original metric definition. A negative sign means 'in the zone of pain' and a positive sign means 'in the zone of uselessness'. A 'good' value should be around 0.

Categories: Robert C. Martin

Instability (Module)

Description: Instability according to Robert C. Martin based on module level dependencies. The metric has a range of [0,1]. If there are no outgoing dependencies, then the Instability will be 0 and the measured element is stable. If there are no incoming dependencies, then the Instability will be 1 and the measured element is instable. Stable means that the element is not so easy to be changed. Instable means that it is easier to be changed.

Categories: Robert C. Martin

Instability (System)

Description: Instability according to Robert C. Martin based on system level dependencies. The metric has a range of [0,1]. If there are no outgoing dependencies, then I will be 0 and the measured element is stable. If there are no incoming dependencies, then I will be 1 and the measured element is instable. Stable means that the element is not so easy to be changed. Instable means that it is easier to be changed.

Categories: Robert C. Martin

Number of Incoming Dependencies (Module)

Description: Number of incoming dependencies on module level.

Categories: Robert C. Martin

Number of Incoming Dependencies (System)

Description: Number of incoming dependencies on system level.

Categories: Robert C. Martin

Number of Outgoing Dependencies (Module)

Description: Number of outgoing dependencies on module level.

Categories: Robert C. Martin

Number of Outgoing Dependencies (System)

Description: Number of outgoing dependencies on system level.

Categories: Robert C. Martin

Cyclomatic Complexity

Description: Cyclomatic complexity according to Thomas J. McCabe. Number of decision points in a method plus one for the method entry.

Categories: Thomas J. McCabe

Extended Cyclomatic Complexity

Description: As cyclomatic complexity adding the number of logical '&&' and '||' operations.

Categories: Thomas J. McCabe

Modified Cyclomatic Complexity

Description: As cyclomatic complexity but switch statements only add 1 independent from the number of cases.

Categories: Thomas J. McCabe

Modified Extended Cyclomatic Complexity

Description: As cyclomatic complexity but switch statements only add 1 independent from the number of cases and adding the number of logical '&&' and '||' operations.

Categories: Thomas J. McCabe