This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
pom [2014/01/10 05:56] yann |
pom [2025/01/15 21:40] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== POM ====== | ====== 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 [[http://www.ptidej.net/publications/Author/ZAIDI-F.php|Zaidi, Guéhéneuc, and Sahraoui]] and can be used as reference. Metrics can be a several kinds: | ||
+ | * Unary or binary, depending on whether they take as input one or two [[padl|IFirstClassEntity(ies)]]; | ||
+ | * Context dependent or independent, depending on whether they can be computed by considering given [[padl|IFirstClassEntity(ies)]] independently of the rest of the model. | ||
- | ===== Metrics definitions ===== | + | ===== Metrics Definition ===== |
^ Names ^ Definitions ^ | ^ Names ^ Definitions ^ | ||
- | | ACAIC | Ancestor Class-Attribute Import Coupling | | | + | | ACAIC | Ancestor Class-Attribute Import Coupling | |
| ACMIC | Ancestors Class-Method Import Coupling | | | ACMIC | Ancestors Class-Method Import Coupling | | ||
| AID | Average Inheritance Depth of an entity | | | AID | Average Inheritance Depth of an entity | | ||
- | | ANA | Count the average number of classes from which a class inherits informations | | + | | ANA | Average number of entities from which an entity inherits informations wrt. to the total number of entities in a model | |
- | | CAM | Computes the relatedness among methods of the class based upon the parameter list of the methods | | + | | CAM | Relatedness among methods of an entity based on the parameter list of its methods | |
| CBO | Coupling Between Objects of one entity | | | CBO | Coupling Between Objects of one entity | | ||
| CBOingoing | Coupling Between Objects of one entity (in-going coupling only, towards the 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) | | | CBOoutgoing | Coupling Between Objects of one entity (out-going coupling only, from the entity) | | ||
- | | CIS | Counts the number of public methods in a class | | + | | CIS | Number of public methods in a class | |
- | | CLD | Class to Leaf Depth of an entity. | | + | | CLD | Class to Leaf Depth of an entity | |
- | | cohesionAttributes | Percentage of fields (declared and inherited) used by the declared methods of one 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 | | | connectivity | Number of couples of methods that use each other | | ||
- | | CP | Number of packages that depend on the package containing entity | | + | | CP | Number of packages that depend on the package containing the entity | |
- | | DAM | Returns the ratio of the number of private(protected) Attributes to the total number of Attributes declared in a class | | + | | DAM | Ratio of the number of private (and protected) fields wrt. the total number of fields declared in an entity | |
- | | DCAEC | Returns the DCAEC (Descendants Class-Attribute Export Coupling) of one 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) | | | 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) | | | DCCimplementation | Number of classes that a class is directly related to (by attribute declarations and message passing) | | ||
- | | DCMEC | Returns the DCMEC (Descendants Class-Method Export Coupling) of one entity | | + | | DCMEC | Descendants Class-Method Export Coupling of one entity | |
- | | DIT | Returns the DIT (Depth of inheritance tree) of an entity. | | + | | DIT | Depth of Inheritance Tree of an entity | |
- | | DSC | Total number of classes in a model | | + | | DSC | Number of top-level entities in a model | |
- | | EIC | Number of inheritance relationships in which superclasses are in external packages | | + | | EIC | Number of inheritance relationships in which super-entities are in external packages | |
- | | EIP | Number of inheritance relationships where the superclass is in the package containing entity and the subclass is in another package | | + | | 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 | | | FanOut | Number of methods and fields used by one entity | | ||
- | | ICHClass | Compute the complexity of an entity as the sum of the complexities of its declared and inherited methods | | + | | 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 | | | IR | Number of calls from the methods of an entity to the methods and fields declared in its super-entities | | ||
- | | LCOM1 | Returns the LCOM (Lack of COhesion in Methods) of an entity | | + | | LCOM1 | Lack of COhesion in Methods of an entity | |
- | | LCOM2 | Returns the LCOM (Lack of COhesion in Methods) of an entity | | + | | LCOM2 | Lack of COhesion in Methods of an entity | |
- | | LCOM5 | Returns the LCOM (Lack of COhesion in Methods) of an entity | | + | | LCOM5 | Lack of COhesion in Methods of an entity | |
- | | LOC | Returns the numbre of line of code in the methods of an entity | | + | | LOC | Sum of the numbers of lines of code in the methods of an entity | |
- | | McCabe | Returns the sum of the cyclomatic complexities of the operations of an entity | | + | | McCabe | Sum of the cyclomatic complexities of the operations of an entity | |
- | | MFA | Ratio of the number of methods inherited by a class to the number of methods accessible by member methods of the class | | + | | MFA | Ratio of the number of methods inherited by an entity wrt. the number of methods accessible by member methods of the entity | |
- | | MLOCsum | Returns the numbre of line of code in the methods of an entity. Same as LOC | | + | | MLOCsum | Sum of the numbers of lines of code in the methods of an entity. Same as LOC | |
- | | MOA | Count the number of data declarations whose types are user defined classes | | + | | MOA | Number of data declarations whose types are user-defined entities | |
- | | NAD | number of attributes declared | | + | | NAD | Number of Attributes Declared by an entity | |
- | | NADextended | Number of attributes declared in a class and in its member classes | | + | | NADextended | Number of Attributes Declared by an entity and in its member entities | |
- | | NCM | Returns the NCM (Number of Changed Methods) of an entity. | | + | | NCM | Number of Changed Methods of an entity wrt. its hierarchy | |
- | | NCP | the number of classes package containing entity | | + | | NCP | Number of Classes Package containing an entity, i.e., the "depth" of the package containment | |
- | | NMA | Returns the NMA (Number of New Methods) of an entity | | + | | NMA | Number of Methods Added by an entity wrt. its hierarchy | |
- | | NMD | number of methods declared | | + | | NMD | Number of Methods Declared by an entity | |
- | | NMDextended | Number of methods declared in the class and in its member classes | | + | | NMDextended | Number of Methods Declared by an entity and its member entities | |
- | | NMI | Number of methods inherited by an entity | | + | | 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 | | + | | NMO | Number of Methods Overridden by an entity | |
- | | NOA | Number of ancestors of an entity | | + | | NOA | Number Of Ancestors of an entity | |
- | | NOC | Number of children of an entity | | + | | NOC | Number Of Children of an entity | |
| NOD | Number of descendents of an entity | | | NOD | Number of descendents of an entity | | ||
- | | NOF | Number of fields declared by an entity | + | | NOF | Number Of Fields declared by an entity | |
- | | NOH | Number of class hierarchies in a model | | + | | NOH | Number Of Hierarchies in a model | |
- | | NOM | Numer of all methods defined in an entity | | + | | NOM | Number Of Methods declared by an entity | |
- | | NOP | Number of parents of an entity | | + | | NOP | Number Of Parents of an entity | |
| NOParam | Number of parameters of the methods of an entity | | | NOParam | Number of parameters of the methods of an entity | | ||
- | | NOPM | Count of the Methods that can exhibit polymorphic behavior | | + | | 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 | | | 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 | | + | | 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 | | | NPrM | Number protected members of an entity | | ||
- | | oneWayCoupling | Coupling between objects of an entity (outgoing only). Same as CBOoutgoing | | + | | oneWayCoupling | Coupling Between Objects of one entity (out-going coupling only, from the entity). Same as CBOoutgoing | |
- | | PIIR | The number of inheritance relationships existing between classes in the package containing entity | | + | | PIIR | Number of inheritance relationships existing between entities in the package containing an entity | |
- | | PP | The number of provider packages of the package containing entity | | + | | PP | Number of provider packages of the package containing an entity | |
| REIP | EIP divided by the sum of PIIR and EIP | | | REIP | EIP divided by the sum of PIIR and EIP | | ||
- | | RFP | the number of class references from classes belonging to other packages to classes belonging to the package containing entity | | + | | 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 | |
- | | RPII | PIIR divided by the sum of PIIR and EIP. | | + | | 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 | | | 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 | | | RRTP | RTP divided by the sum of RTP and the number of internal class references | | ||
- | | RTP | The number of class references from classes in the package containing entity to classes in other packages | | + | | RTP | Number of references from entities in the package containing an entity to entities in other packages | |
- | | SIX | Returns the SIX (Specialisation IndeX) of an entity | | + | | SIX | Specialisation IndeX of an entity | |
- | | WMC1 | Computes the weight of an entity considering the complexity of a method to be unity | | + | | TestCaseLOC | Number of lines of code of all the methods of a test case | |
- | | McCabe | McCabe Complexity: Number of points of decision + 1 | | + | | TLOC | Number of lines of code of all the methods of an entity. Same as LOC | |
- | | CBO | Coupling Between Objects of one entity | | + | | VGSum | Sum of the cyclomatic complexities of the operations of an entity. Same as McCabe | |
- | | LCOM5 | Returns the LCOM (Lack of COhesion in Methods) of an entity | | + | | 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) | |
- | | WMC | Computes the weight of an entity by computing the number of method invocations in each method| | + | | 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 Metrics ===== | + | ===== 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: | 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: | ||
Line 81: | Line 87: | ||
* ''computeMetricsFromEclipse'' | * ''computeMetricsFromEclipse'' | ||
* ''computeMetricsFromJARs'' | * ''computeMetricsFromJARs'' | ||
- | 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''. | + | 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 [[repositories|to access the different kinds of metrics]]. |