Skip to content

Latest commit

 

History

History
236 lines (228 loc) · 9.62 KB

README.md

File metadata and controls

236 lines (228 loc) · 9.62 KB

Ocaml metrics

Run tool:

ocaml_metrics <DIR> [-met-list <M1>,<M2>,<M3>] [-sec-list <L1>,<L2>,<L3>] [-v-list <V1>,<V2>,<V3>]

<DIR> - directory with dune-based project

-met-list <M1>,<M2>,<M3> - metrics to show (metrics is shown if it contains a substring from this list)

-sec-list <L1>,<L2>,<L3> - dune libraries and executables from project to analyze

-v-list <V1>,<V2>,<V3> - print verbose output of metrics groups from this list

Metrics names are printed in the following format: [metrics group id]_[metrics id].

Metrics group id Description Metrics id Description
cohesion Class cohesion metrics
Alternative to class is a module.
Alternative to both attributes and methods are functions.
"Methods share attributes" -> "Functions call the same function or one of them calls the other"
LCOM1 Original definition: Number of pairs of methods that do not share attributes
LCOM2 Original definition:
P = Number of pairs of methods that do not share attributes
Q = Number of pairs of methods that share attributes
LCOM2 = max(P - Q, 0)
LCOM34 LCOM3 = Number of disjoint components in the graph that represents each method as a node and the sharing of at least one attribute as an edge
LCOM4 = Similar to LCOM3 and additional edges are used to represent method invocations
In our interpretation LCOM3 and LCOM4 give the same values.
LCOM5 Original definition: , where is the number of attributes, is the number of methods, and is the summation of the number of distinct attributes accessed by each method in a class
Our interpretation: Instead of we use maximum possible number of edges in graph where nodes are functions and edges are used to represent one function calling another.
When denominator is >= 0, LCOM5 is -1.
COH Original definition: , where , , and have the same definitions as above
Our interpretation: Like in LCOM5.
coupling Coupling metrics
Note: Fan-in, Fan-out and APIU are calculated only for public modules;
EXT is calculated for both modules and functions.
Fan-in Number of modules that depend on given module
Fan-out Numbers of modules that the given module depends on
APIU API Function Usage Index.
Suppose that module has public functions, in project other modules call one or more function from .
or 0 if
EXT External method calls.
Number of external functions called by a function or a module (only functions defined in the project are considered).
AC Association-Induced Coupling Metrics.
M = modules in project;
Mod_ext(m) = modules that have functions that use functions from m;
F = functions in project;
F(m) = functions in module m;
Func_ext(m) = functions that use functions from m;
Func_int(m) = functions in m that use functions from other modules in M;



CC-based McCabe's cyclomatic complexity based
Read more about CC: https://en.wikipedia.org/wiki/Cyclomatic_complexity
ord Traditional cyclomatic complexity
rec CC-ord + [Number of recursive calls]
mod Modified cyclomatic complexity.
Like CC-ord but count
match E0 with | P1 -> E1 ... | PN -> EN
as 1 decision point instead of (N - 1) (but still count guards).
mod-ord-max Maximum of CC-based_ord in module
mod-ord-avg Average of CC-based_ord in module
Halstead Halstead complexity measures
n1 = the number of distinct operators
n2 = the number of distinct operands
N1 = the total number of operators
N2 = the total number of operands
n Program vocabulary: n1 + n2
N Program length: N1 + N2
V Volume: N * log2(n)
D Difficulty: (n1 / 2) * (N2 / n2)
E Effort: V * D
LOC-based Lines of code
all Number of lines in function
code Exclude comment and blank lines