This is an old revision of the document!
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:
| 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). |
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:
computeMetricsFromDirectorycomputeMetricsFromEclipsecomputeMetricsFromJARs
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.