.. index:: coupling_metric
.. _coupling_metric/0:

.. rst-class:: right

**object**

``coupling_metric``
===================

Computes entity efferent coupling, afferent coupling, and instability.

| **Author:** Ebrahim Azarisooreh and Paulo Moura
| **Version:** 0.12
| **Date:** 2018/7/17

| **Compilation flags:**
|    ``static, context_switching_calls``


| **Imports:**
|    ``public`` :ref:`code_metrics_utilities <code_metrics_utilities/0>`
|    ``public`` :ref:`code_metric <code_metric/0>`
| **Uses:**
|    :ref:`list <list/0>`

| **Remarks:**


   - *Efferent coupling (Ce):* Number of entities that an entity depends on.

   - *Afferent coupling (Ca):* Number of entities that depend on an entity.

   - *Instability (I):* Computed as ``Ce / (Ce + Ca)``. Measures the entity resilience to change. Ranging from 0 to 1, with 0 indicating a maximally stable entity and 1 indicating a maximally unstable entity. Ideally, an entity is either maximally stable or maximally unstable.

   - *Abstractness (A):* Computed as the ratio between the number of static predicates with scope directives without a local definition and the number of static predicates with scope directives. Measures the rigidity of an entity. Ranging from 0 to 1, with 0 indicating a fully concrete entity and 1 indicating a fully abstract entity.

   - *Entity score:* Represented as the compound term ``ce_ca_i_a(Ce,Ca,I,A)``.

   - *Dependencies count:* Includes direct entity relations plus calls or dynamic updates to predicates in external objects or categories.

.. contents::
   :local:
   :backlinks: top

Public predicates
-----------------

(see entity ancestors)

Protected predicates
--------------------

(see entity ancestors)

Private predicates
------------------

(see entity ancestors)

Operators
---------

(none)

