Table of Contents

POM

POM stands for Primitives, Operations, Metrics and is a framework built to compute software metrics on PADL models. A paper introducing POM has been published by Zaidi, Guéhéneuc, and Sahraoui and can be used as reference. Metrics can be a several kinds:

Metrics Definition

Names Definitions
ACAIC Ancestor Class-Attribute Import Coupling
ACMIC Ancestors Class-Method Import Coupling
AID Average Inheritance Depth of an entity
ANA Average number of entities from which an entity inherits informations wrt. to the total number of entities in a model
CAM Relatedness among methods of an entity based on the parameter list of its methods
CBO Coupling Between Objects of one entity
CBOingoing Coupling Between Objects of one entity (in-going coupling only, towards the entity)
CBOoutgoing Coupling Between Objects of one entity (out-going coupling only, from the entity)
CIS Number of public methods in a class
CLD Class to Leaf Depth of an entity
cohesionAttributes Percentage of fields (declared and inherited) used by the declared methods of one entity wrt. all its fields
connectivity Number of couples of methods that use each other
CP Number of packages that depend on the package containing the entity
DAM Ratio of the number of private (and protected) fields wrt. the total number of fields declared in an entity
DCAEC Descendants Class-Attribute Export Coupling of one entity
DCCdesign Number of classes that a class is directly related to (by attribute and parameter declarations)
DCCimplementation Number of classes that a class is directly related to (by attribute declarations and message passing)
DCMEC Descendants Class-Method Export Coupling of one entity
DIT Depth of Inheritance Tree of an entity
DSC Number of top-level entities in a model
EIC Number of inheritance relationships in which super-entities are in external packages
EIP Number of inheritance relationships where the super-entity is in the package containing the entity and the sub-entites is in another package
FanOut Number of methods and fields used by one entity
ICHClass Complexity of an entity as the sum of the complexities of its declared and inherited methods
IR Number of calls from the methods of an entity to the methods and fields declared in its super-entities
LCOM1 Lack of COhesion in Methods of an entity
LCOM2 Lack of COhesion in Methods of an entity
LCOM5 Lack of COhesion in Methods of an entity
LOC Sum of the numbers of lines of code in the methods of an entity
McCabe Sum of the cyclomatic complexities of the operations of an entity
MFA Ratio of the number of methods inherited by an entity wrt. the number of methods accessible by member methods of the entity
MLOCsum Sum of the numbers of lines of code in the methods of an entity. Same as LOC
MOA Number of data declarations whose types are user-defined entities
NAD Number of Attributes Declared by an entity
NADextended Number of Attributes Declared by an entity and in its member entities
NCM Number of Changed Methods of an entity wrt. its hierarchy
NCP Number of Classes Package containing an entity, i.e., the “depth” of the package containment
NMA Number of Methods Added by an entity wrt. its hierarchy
NMD Number of Methods Declared by an entity
NMDextended Number of Methods Declared by an entity and its member entities
NMI Number of Methods Inherited by an entity. Constructors or not considered as method, they are not counted in the result of the metric
NMO Number of Methods Overridden by an entity
NOA Number Of Ancestors of an entity
NOC Number Of Children of an entity
NOD Number of descendents of an entity
NOF Number Of Fields declared by an entity
NOH Number Of Hierarchies in a model
NOM Number Of Methods declared by an entity
NOP Number Of Parents of an entity
NOParam Number of parameters of the methods of an entity
NOPM Number Of Polymorphic Methods in an entity wrt. its hierarchy
NOTC Number of invocations of JUnit assert methods that occur in the code of a test case
NOTI Number Of Transitive Invocation among methods of a class. See the Law of Demeter for a definition
NPrM Number protected members of an entity
oneWayCoupling Coupling Between Objects of one entity (out-going coupling only, from the entity). Same as CBOoutgoing
PIIR Number of inheritance relationships existing between entities in the package containing an entity
PP Number of provider packages of the package containing an entity
REIP EIP divided by the sum of PIIR and EIP
RFC Response for class: number of methods of an entity and of methods of other entities that are invoked by the methods of the entity
RFCextended Response for class: number of methods of an entity and of methods of other entities that are invoked by the methods of the entity plus number of methods declared by that entity
RFP Number of references from entities belonging to other packages to entities belonging to the package containing an entity
RPII PIIR divided by the sum of PIIR and EIP
RRFP RFP divided by the sum of RFP and the number of internal class references
RRTP RTP divided by the sum of RTP and the number of internal class references
RTP Number of references from entities in the package containing an entity to entities in other packages
SIX Specialisation IndeX of an entity
TestCaseLOC Number of lines of code of all the methods of a test case
TLOC Number of lines of code of all the methods of an entity. Same as LOC
VGSum Sum of the cyclomatic complexities of the operations of an entity. Same as McCabe
WMC1 Weight of an entity considering the complexity of each of its method as being 1. (Default constructors are considered even if not explicitely declared)
WMCinvocations Weight of an entity considering the complexity of each of its method as being the numbers of invocations that they perform. (Default constructors are considered even if not explicitely declared).
WMCmccabe Weight of an entity considering the complexity of each of its method as being their McCabe cyclomatic complexity. (Default constructors are considered even if not explicitely declared).

Metrics Computation

Computing POM metrics using PADL is made easy by the helper class pom.helper.MetricsGenerator. After having installed CPL, PADL, and POM, just go into the POM Tests project and have a look at this class. It provides a main method with snippets of code to call one of the three methods:

which can be used to compute automatically metrics from various input sources. Also have a look at the constant array listing the metrics that must be computed or avoided: METRICS_TO_AVOID and METRICS_TO_COMPUTE. As other repositories, POM makes it easy to access the different kinds of metrics.